MCP spec conformance: 10 requirement(s) violated (via @hasmcp/mcp-spec-test)
This server crashes at startup on every launch — before any MCP handshake can occur — with a Python AttributeError: 'Server' object has no attribute 'list_tools' raised from server.py line 630 (@server.list_tools()), which strongly suggests an incompatibility between the code and the version of the mcp (Model Context Protocol Python SDK) package it resolves against via uvx. Because the process dies immediately on import, @hasmcp/mcp-spec-test cannot complete a handshake and reports the server as not conformant. I re-ran the suite against both spec revisions it reasons about; the underlying cause is identical (the same startup crash) in both cases — the newer revision (2026-07-28) simply exercises more test cases (including server/discover), so it surfaces more individual failures (10 vs. 5) for the same root crash.
Raw stderr from the launch, confirming the crash (captured with --verbose):
Traceback (most recent call last):
File "/root/.cache/uv/archive-v0/.../bin/pal-mcp-server", line 6, in <module>
from server import run
File "/root/.cache/uv/archive-v0/.../lib/python3.11/site-packages/server.py", line 630, in <module>
@server.list_tools()
^^^^^^^^^^^^^^^^^
AttributeError: 'Server' object has no attribute 'list_tools'Conformance report (spec 2026-07-28)
MCP 2026-07-28 conformance report
Verdict: not conformant — 10 requirements violated.
| Target | uvx --from git+https://github.com/BeehiveInnovations/pal-mcp-server.git pal-mcp-server |
| Transport | stdio |
| Revision tested | 2026-07-28 |
| Revisions supported | 2026-07-28, 2025-11-25 |
| Passed | 4 |
| Failed | 10 |
| Not verified | 22 |
| Cases applied | 36 |
| Duration | 24553ms |
| Tool | @hasmcp/mcp-spec-test 0.1.1 |
Failed (10)
the server deviates from the spec here
server/discover
- server/discover is answered without a session or handshake expected 200, got 0: {"_raw":"no response within 10000ms"} 0 !== 200
- server/discover advertises the versions the server can serve Cannot read properties of undefined (reading 'supportedVersions')
- server/discover is a CacheableResult with usable cache hints Cannot read properties of undefined (reading 'ttlMs')
- server/discover reports server identity and capabilities Cannot read properties of undefined (reading 'capabilities')
- server/discover is stable across calls within its own TTL Cannot read properties of undefined (reading 'supportedVersions')
- server/discover advertises a revision this suite supports Cannot read properties of undefined (reading 'supportedVersions')
Version negotiation
- a request with no version at all is served on the default a version-less request must be served, got 0: {"_raw":"server exited"} 0 !== 200
Official SDK interop
- a stock official-SDK client completes the handshake MCP error -32000: Connection closed
- the handshake settles on a revision inside the supported window initialize must return a protocolVersion, got undefined
- a stock official-SDK client can list tools MCP error -32000: Connection closed
Not verified (22)
skipped; a skip is not a pass — all 22 cases were skipped because server/discover returned no result (status 0), a downstream consequence of the same crash.
Passed (4)
checked and conformant
- server/discover: the suite is reading a schema that matches the features it selected
- Result envelope: schema sanity: the envelope fields match the features selected
- Official SDK interop: the official SDK does not yet implement the newest revision
- subscriptions/listen: schema sanity: SubscriptionsListenResult requires _meta and resultType
Conformance report (spec 2025-11-25, same root cause)
MCP 2025-11-25 conformance report
Verdict: not conformant — 5 requirements violated.
| Target | uvx --from git+https://github.com/BeehiveInnovations/pal-mcp-server.git pal-mcp-server |
| Transport | stdio |
| Revision tested | 2025-11-25 |
| Revisions supported | 2026-07-28, 2025-11-25 |
| Passed | 2 |
| Failed | 5 |
| Not verified | 13 |
| Cases applied | 20 |
| Tool | @hasmcp/mcp-spec-test 0.1.1 |
Failed (5)
- Version negotiation: a request with no version at all is served on the default — a version-less request must be served, got 0: {"_raw":"server exited"} 0 !== 200
- Version negotiation: an unsupported version offered at the handshake is refused or downgraded, not echoed — expected either an error or a protocolVersion, got {"_raw":"server exited"}
- Official SDK interop: a stock official-SDK client completes the handshake — MCP error -32000: Connection closed
- Official SDK interop: the handshake settles on a revision inside the supported window — initialize must return a protocolVersion, got undefined
- Official SDK interop: a stock official-SDK client can list tools — MCP error -32000: Connection closed
(This spec revision doesn't exercise server/discover, so fewer cases apply overall — but the failures are driven by the same startup crash shown above, not a different negotiation behavior.)
How to reproduce
With Docker:
docker pull hasmcp/mcp-spec-test:latest
docker run --rm hasmcp/mcp-spec-test -c "uvx --from git+https://github.com/BeehiveInnovations/pal-mcp-server.git pal-mcp-server"(or, if that image lacks a manifest for your platform: git clone https://github.com/hasmcp/mcp-spec-test && cd mcp-spec-test && docker build -t mcp-spec-test . && docker run --rm mcp-spec-test -c "uvx --from git+https://github.com/BeehiveInnovations/pal-mcp-server.git pal-mcp-server")
Without Docker (npx):
npx @hasmcp/mcp-spec-test@latest -c "uvx --from git+https://github.com/BeehiveInnovations/pal-mcp-server.git pal-mcp-server"You can also see the crash directly without the test harness:
uvx --from git+https://github.com/BeehiveInnovations/pal-mcp-server.git pal-mcp-serverThis issue was generated by an automated conformance sweep across public MCP server repos. The maintainer is welcome to close this if it turns out to be an environment-specific false positive (e.g. a pinned dependency resolving differently through uvx than in your own dev environment) — but the AttributeError above reproduced consistently across multiple runs in a clean container, which suggests it's a real, currently-broken startup path rather than a test artifact.
Source: BeehiveInnovations/pal-mcp-server