Crash on install: unpinned mcp>=1.0.0 resolves to mcp 2.0.0 which removed @server.list_tools()

Author: bartalorCreated Aug 3, 2026Updated Aug 13, 2026

Fresh install of pal-mcp-server v9.8.2 crashes at import:

File ".../site-packages/server.py", line 630, in <module>
    @server.list_tools()
AttributeError: 'Server' object has no attribute 'list_tools'

Root cause

pyproject.toml declares mcp>=1.0.0 with no upper bound. mcp SDK v2.0.0 (released 2026-07-28) removed the @server.list_tools() decorator on mcp.server.lowlevel.Server in favor of constructor callbacks. Fresh installs now resolve mcp to 2.0.0 and break.

The v2.0.0 release notes:

If your project is not ready to migrate, keep a <2 upper bound on your requirement (for example mcp>=1.28,<2).

https://github.com/modelcontextprotocol/python-sdk/releases/tag/v2.0.0

Reproduction

uvx --from git+https://github.com/BeehiveInnovations/pal-mcp-server.git pal-mcp-server

Fix

Migrate server.py:630 (and any other decorator-based handlers) from @server.list_tools() to the constructor on_list_tools=... callback pattern. See the "Lowlevel Server: decorator-based handlers replaced with constructor on_* params" section of the migration guide:

https://py.sdk.modelcontextprotocol.io/migration-guide/

Ecosystem context

Several other MCP servers with unpinned mcp>=1.0.0 hit the same crash after mcp 2.0.0 shipped. Examples with identical traceback and root cause:

  • MarkusPfundstein/mcp-obsidian#156
  • tumf/mcp-shell-server#47
  • smn2gnt/MCP-Salesforce#25

Source: BeehiveInnovations/pal-mcp-server