Files
FabledScribe/pyproject.toml
T
bvandeusen 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
fix(deps): cap mcp below 2.0 — it removed mcp.server.fastmcp
`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.
2026-07-28 10:15:46 -04:00

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
]