aa850ac1e1
CI & Build / Python lint (push) Successful in 3s
CI & Build / integration (push) Successful in 14s
CI & Build / TypeScript typecheck (push) Successful in 35s
CI & Build / Python tests (push) Successful in 54s
CI & Build / Build & push image (push) Successful in 1m10s
`main` went red on the PR #79 merge (run 2999) with `ModuleNotFoundError: No module named 'mcp.server.fastmcp'` across every MCP test module. Not the merged code: the identical tree passed on `dev` an hour earlier (run 2997). mcp 2.0.0 was published between the two runs. `src/scribe/mcp/server.py` imports `mcp.server.fastmcp.FastMCP` to build the entire tool surface, so 2.x is a genuine incompatibility, not a precaution. Capped at `<2`; lift it in the same change that ports server.py. Note what this exposes: `uv.lock` already pinned mcp 1.27.2 and CI installed 2.0.0 anyway, because the workflow uses `uv pip install -e ".[dev]"`, which resolves from pyproject and ignores the lockfile. Every dependency is therefore floating in CI regardless of what the lock says — this cap fixes today's break, not that. Filed separately.
61 lines
1.7 KiB
TOML
61 lines
1.7 KiB
TOML
[build-system]
|
|
requires = ["setuptools>=68.0", "setuptools-scm>=8.0"]
|
|
build-backend = "setuptools.build_meta"
|
|
|
|
[project]
|
|
name = "scribe"
|
|
version = "0.1.0"
|
|
description = "Self-hosted note-taking, project-management, and calendar app exposed to Claude via MCP"
|
|
requires-python = ">=3.14"
|
|
dependencies = [
|
|
"quart>=0.19",
|
|
"sqlalchemy[asyncio]>=2.0",
|
|
"asyncpg>=0.29",
|
|
"alembic>=1.13",
|
|
"httpx>=0.27",
|
|
"hypercorn>=0.17",
|
|
"bcrypt>=4.0",
|
|
"aiosmtplib>=3.0",
|
|
"caldav>=1.3",
|
|
"icalendar>=5.0",
|
|
"APScheduler>=3.10,<4.0",
|
|
# Capped below 2.0: that release removed `mcp.server.fastmcp`, which
|
|
# src/scribe/mcp/server.py imports to build the whole tool surface. The
|
|
# ceiling is a real incompatibility, not caution — lift it in the same
|
|
# change that ports server.py to the 2.x API.
|
|
"mcp[cli]>=1.0,<2",
|
|
"fastembed>=0.4",
|
|
"pgvector>=0.3",
|
|
]
|
|
|
|
[project.optional-dependencies]
|
|
dev = [
|
|
"pytest>=8.0",
|
|
"pytest-asyncio>=0.23",
|
|
"ruff>=0.6",
|
|
]
|
|
|
|
[tool.setuptools.packages.find]
|
|
where = ["src"]
|
|
|
|
[tool.pytest.ini_options]
|
|
asyncio_mode = "auto"
|
|
testpaths = ["tests"]
|
|
markers = [
|
|
"integration: requires a real Postgres database (runs only in the CI integration lane)",
|
|
]
|
|
|
|
[tool.ruff]
|
|
line-length = 120
|
|
target-version = "py312"
|
|
|
|
[tool.ruff.lint]
|
|
# E = pycodestyle errors, F = pyflakes (catches unused imports, undefined names)
|
|
# Start conservative — add more rules as the codebase gains coverage.
|
|
select = ["E", "F"]
|
|
ignore = [
|
|
"E501", # line too long — long lines are acceptable in this codebase
|
|
"E402", # module-level import not at top — common in Quart app factories
|
|
"F401", # imported but unused — some re-exports are intentional
|
|
]
|