fix(deps): cap mcp<2 so fresh installs of the MCP server work (#2277, #2279, #2291)

mcp 2.0.0 dropped mcp.types.AnyUrl and the Server decorator-registration
API graphify/serve.py relies on, so an unpinned resolve broke graphify-mcp
on every fresh graphifyy[mcp]/[all] install. Cap mcp>=1,<2 (resolves 1.29.0)
and starlette>=1.3.1,<2 in both extras; re-lock. Bump to 0.9.30. Porting to
the mcp 2.x API is a tracked follow-up.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
safishamsi
2026-07-29 16:59:16 +01:00
co-authored by Claude Opus 4.8
parent 0b2bd938c4
commit 6d81a8290f
3 changed files with 19 additions and 11 deletions
+4
View File
@@ -2,6 +2,10 @@
Full release notes with details on each version: [GitHub Releases](https://github.com/safishamsi/graphify/releases)
## 0.9.30 (unreleased)
- Fix: pin `mcp` below 2.0 so a fresh `graphifyy[mcp]` / `graphifyy[all]` install works again (#2277, #2279, #2291). The `mcp` 2.0.0 major dropped the `mcp.types.AnyUrl` re-export and the `Server` decorator-registration API that `graphify/serve.py` uses, so an unpinned resolve broke `graphify-mcp` on every new install with an `ImportError`. The `mcp` and `all` extras now require `mcp>=1,<2` (resolving to 1.29.0) and `starlette>=1.3.1,<2`. Adapting to the mcp 2.x API is tracked as a follow-up.
## 0.9.29 (2026-07-28)
- Fix: absolute-path / machine-slug node ids no longer leak into edge endpoints (#2231, #2243). Module-top-level `indirect_call` sources, bash `source`/script-invocation targets, and other producers that minted an id from an absolute path are now canonicalized to the root-relative node id by a general backstop, so `graph.json` link endpoints are portable across machines and clones.
+7 -3
View File
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
[project]
name = "graphifyy"
version = "0.9.29"
version = "0.9.30"
description = "AI coding assistant skill (Claude Code, CodeBuddy, Codex, OpenCode, Kilo Code, Cursor, Gemini CLI, Aider, OpenClaw, Factory Droid, Trae, Hermes, Kiro, Pi, Devin CLI, Google Antigravity) - turn any folder of code, docs, papers, images, or videos into a queryable knowledge graph"
readme = "README.md"
license = "Apache-2.0"
@@ -52,7 +52,11 @@ Issues = "https://github.com/Graphify-Labs/graphify/issues"
# starlette is pulled in transitively by mcp, but graphify/serve.py imports it
# directly for the HTTP transport, so declare it here and floor it above the
# CVE-2026-48818 / CVE-2026-54283 fixes (both resolved by 1.3.1) (#1391, #1396).
mcp = ["mcp", "starlette>=1.3.1"]
# mcp is capped below 2.0: the 2.0.0 major dropped the mcp.types.AnyUrl
# re-export and the Server decorator-registration API graphify/serve.py uses,
# so an unpinned resolve broke every fresh graphifyy[mcp] install (#2277/#2279/
# #2291). starlette is capped below its next major for the same reason.
mcp = ["mcp>=1,<2", "starlette>=1.3.1,<2"]
neo4j = ["neo4j"]
falkordb = ["falkordb"]
pdf = ["pypdf>=6.12.0", "markdownify"]
@@ -81,7 +85,7 @@ pascal = ["tree-sitter-pascal"]
# avoids breaking the default `uv tool install graphifyy` for everyone (#1104).
dm = ["tree-sitter-dm"]
terraform = ["tree-sitter-hcl"]
all = ["mcp", "starlette>=1.3.1", "neo4j", "falkordb", "pypdf>=6.12.0", "markdownify", "watchdog", "graspologic; python_version < '3.13'", "python-docx", "openpyxl", "faster-whisper; python_version >= '3.11'", "yt-dlp>=2026.6.9", "matplotlib", "numpy>=2.0; python_version >= '3.13'", "openai", "tiktoken", "boto3", "anthropic", "tree-sitter-sql", "jieba", "tree-sitter-dm", "tree-sitter-hcl", "tree-sitter-pascal"]
all = ["mcp>=1,<2", "starlette>=1.3.1,<2", "neo4j", "falkordb", "pypdf>=6.12.0", "markdownify", "watchdog", "graspologic; python_version < '3.13'", "python-docx", "openpyxl", "faster-whisper; python_version >= '3.11'", "yt-dlp>=2026.6.9", "matplotlib", "numpy>=2.0; python_version >= '3.13'", "openai", "tiktoken", "boto3", "anthropic", "tree-sitter-sql", "jieba", "tree-sitter-dm", "tree-sitter-hcl", "tree-sitter-pascal"]
[project.scripts]
graphify = "graphify.__main__:main"
Generated
+8 -8
View File
@@ -1090,7 +1090,7 @@ wheels = [
[[package]]
name = "graphifyy"
version = "0.9.29"
version = "0.9.30"
source = { editable = "." }
dependencies = [
{ name = "networkx", version = "3.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" },
@@ -1264,8 +1264,8 @@ requires-dist = [
{ name = "markdownify", marker = "extra == 'pdf'" },
{ name = "matplotlib", marker = "extra == 'all'" },
{ name = "matplotlib", marker = "extra == 'svg'" },
{ name = "mcp", marker = "extra == 'all'" },
{ name = "mcp", marker = "extra == 'mcp'" },
{ name = "mcp", marker = "extra == 'all'", specifier = ">=1,<2" },
{ name = "mcp", marker = "extra == 'mcp'", specifier = ">=1,<2" },
{ name = "neo4j", marker = "extra == 'all'" },
{ name = "neo4j", marker = "extra == 'neo4j'" },
{ name = "networkx", specifier = ">=3.4" },
@@ -1286,8 +1286,8 @@ requires-dist = [
{ name = "python-docx", marker = "extra == 'all'" },
{ name = "python-docx", marker = "extra == 'office'" },
{ name = "rapidfuzz", specifier = ">=3.0" },
{ name = "starlette", marker = "extra == 'all'", specifier = ">=1.3.1" },
{ name = "starlette", marker = "extra == 'mcp'", specifier = ">=1.3.1" },
{ name = "starlette", marker = "extra == 'all'", specifier = ">=1.3.1,<2" },
{ name = "starlette", marker = "extra == 'mcp'", specifier = ">=1.3.1,<2" },
{ name = "tiktoken", marker = "extra == 'all'" },
{ name = "tiktoken", marker = "extra == 'gemini'" },
{ name = "tiktoken", marker = "extra == 'kimi'" },
@@ -2110,7 +2110,7 @@ wheels = [
[[package]]
name = "mcp"
version = "1.27.1"
version = "1.29.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "anyio" },
@@ -2128,9 +2128,9 @@ dependencies = [
{ name = "typing-inspection" },
{ name = "uvicorn", marker = "sys_platform != 'emscripten'" },
]
sdist = { url = "https://files.pythonhosted.org/packages/38/83/d1efe7c2980d8a3afa476f4e3d42d53dd54c0ab94c27bee5d755b45c8b73/mcp-1.27.1.tar.gz", hash = "sha256:0f47e1820f8f8f941466b39749eb1d1839a04caddca2bc60e9d46e8a99914924", size = 608458, upload-time = "2026-05-08T16:50:12.601Z" }
sdist = { url = "https://files.pythonhosted.org/packages/30/d3/f9acc21dfc886e4f78e2add1a47db46ce16884346afde53f8a064c02c891/mcp-1.29.0.tar.gz", hash = "sha256:52d01f334de1868cc3bb2d6604931126a67631f99a6c5d3b82ba47290315ec36", size = 643148, upload-time = "2026-07-28T13:41:41.939Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/fd/73/42d9596facebdb533b7f0b86c1b0364ef350d1f8ba78b1052e8a58b48b65/mcp-1.27.1-py3-none-any.whl", hash = "sha256:1af3c4203b329430fde7a87b4fcb6392a041f5cb851fd68fc674016ab4e7c06f", size = 216260, upload-time = "2026-05-08T16:50:10.547Z" },
{ url = "https://files.pythonhosted.org/packages/01/c8/248b201f6d753d69fd5d6506011abbb35a946d9142b2ae311a948fd0be3d/mcp-1.29.0-py3-none-any.whl", hash = "sha256:f5a075bb611f23d6f4d080c6a1699fa62772eebc562ba9e66b306ddde1c755f7", size = 223436, upload-time = "2026-07-28T13:41:40.337Z" },
]
[[package]]