# Results — 2026-10-13 **A real, unmodified official Python MCP server reproduced the `list_tools` startup error, and both pip and uv tool repairs completed an actual harmless tool call.** This is one controlled local experiment, not an external user's report or evidence of community adoption. ## Observed outcomes Server package: `mcp-server-git==2026.7.10` throughout. Host: Darwin 25.5.0 arm64, Python 3.14.3, uv 0.11.14, pip 26.0 (venv), Git 2.48.1. Capture began at 2026-10-13 06:49 UTC. | Installation/check | Actual MCP | Initialize | tools/list | tools/call `git_status` | Exit | | --- | --- | --- | --- | --- | --- | | Natural fresh pip resolution of the old server | 2.3.0 | Startup failure | Not reached | Not reached | 1 | | Explicitly frozen broken pip environment | 2.0.0 | Startup failure | Not reached | Not reached | 1 | | Separate pip environment before repair | 2.0.0 | Startup failure | Not reached | Not reached | 1 | | Same pip environment after `mcp<2` | 1.30.0 | Passed | 12 tools | Passed | 0 | | Separate uv tool environment before repair | 2.0.0 | Startup failure | Not reached | Not reached | 1 | | Same uv tool environment after `--force --with mcp<2` | 1.30.0 | Passed | 12 tools | Passed | 0 | | Repaired uv-installed console entrypoint | 1.30.0 | Passed | 12 tools | Passed | 0 | Every failed row produced the same real exception at the server's own `server.py:321`, before an initialize response: ```text @server.list_tools() AttributeError: 'Server' object has no attribute 'list_tools' ``` Every successful row returned protocol version `2025-06-18`, response IDs `[1, 2, 3]`, and an actual `git_status` result with `isError: false` and the text: ```text Repository status: On branch main No commits yet nothing to commit (create/copy files and use "git add" to track) ``` The temporary repository had no commits, remotes, or user files. No mutating Git tool was called. `pip check` and `uv pip check` both exited 0 after the repairs. pip retained some now-unused v2 dependencies, as normal for a downgrade; the recorded full package snapshots show this, and dependency checking still passed. ## What this adds The existing knowledge card's local uv tool example used a synthetic server and stopped at tools/list; pip syntax was still inferred. This run establishes the pip/venv repair and uv tool repair on a distributed official server, through a real tools/call. It also independently preserves the original broken venv for a later diagnostic-agent experiment. This is the Git reference server variant described by [upstream issue #4580](https://github.com/modelcontextprotocol/servers/issues/4580). The package's [PyPI metadata](https://pypi.org/pypi/mcp-server-git/2026.7.10/json) declares `mcp>=1.0.0` without an upper bound. The [SDK migration guide](https://py.sdk.modelcontextprotocol.io/migration/) provides the corresponding v1-to-v2 API context. The selected server and observed decorator location agree with those sources. `mcp-server-time` was not substituted silently: existing upstream evidence indicates that its old release fails earlier on `McpError` import. No time server was executed here, and this experiment makes no new empirical claim about that distinct ImportError. ## Provenance Downloaded official PyPI wheel checksums: | Distribution | SHA-256 | | --- | --- | | `mcp_server_git-2026.7.10-py3-none-any.whl` | `6eb8bb2cca00f39e7bf9752472268c2a037579d59d1373b2fb89cc606060fad5` | | `mcp-2.0.0-py3-none-any.whl` | `1cb4c75d2d2c7b8c1d756355e5d82a39f2822cc7f13e22a2051d7ca3592349d6` | | `mcp-1.30.0-py3-none-any.whl` (pip report) | `666edb5009503e1047c9d60346a756f94b261f05cc2625f23d41c728ffc484d0` | Installed `mcp_server_git/server.py` SHA-256 in all six environment snapshots: `52325521ec8ec00297248fa03eaee6802b9cad3ec1e5bebee25971e1b897d56e`. It matches the official wheel. No server source was edited to create or fix the failure. Versions come from installed distribution metadata, not the initialize response's `serverInfo.version`, which reports `1.30.0` even though the server package remains 2026.7.10. ## Boundaries - Natural resolution means installing the **old pinned server** today with no SDK constraint; it selected 2.3.0. This does not claim today's latest server release naturally breaks. - MCP 2.0.0 is deliberately frozen to preserve the historical compatibility failure. Other packages resolved at the experiment date; full exact snapshots and distribution hashes are retained for replay. - Only this server, platform, Python version, stdio transport, and read-only Git tool were tested. Other servers, Windows/Linux, arbitrary real repositories, GUI clients, OpenHands, and environments that also require MCP 2.x were not tested. - There was no new run of the upgraded reference-server release and no v2 source migration. These results specifically validate an operator-side SDK pin in an isolated server environment. - A later `mcp<2` resolution can change. Exact observed MCP 1.30.0 and dependency snapshots are preserved; this is not a promise about all future 1.x releases. - No production cards, shared diagnostics, CLAUDE.md, global package installations, external messages, or project dependencies were modified. The parent task owns any reviewed knowledge revision or separate independent-agent experiment.