v1.1.0
First stable release. Ships the day the MCP 2026-07-28 revision went final.
Added
2026-07-28is now a recognized protocol version (MCPProtocolVersion.v2026_07_28,
andMCPProtocolVersion.Latestnow points at it).
Changed
-
Pinned to the MCP Python SDK
2.0.0stable (from2.0.0rc1), published
2026-07-28 alongside the spec revision it implements. The SDK's own notes
report no API changes between rc1 and stable — the breaking changes all
landed earlier in the pre-release cycle, and the two we had already absorbed
(OAuthClientProvider(timeout=…)removal,httpx2) are unaffected.Verified: the full gate passes, and DeepWiki scores 82/90 on both pins with
byte-identical per-rule results (all 32 main rules plus all 12 readiness
rules compared individually, not just the total). The auth-gated path was
re-checked too — Linear still returns a 25/25 partial audit with all 8
auth-posture rules scored. -
The 2026-07-28 revision went final on 2026-07-28 and the spec registry
flipped with it:2026-07-28DRAFT → CURRENT,2025-11-25CURRENT →
SUPERSEDED. Two consequences:- Fixes a CRITICAL false positive.
allowed_versions()deliberately
excludes draft revisions, so while2026-07-28was a draft, a server
correctly speaking the new revision failedprotocol_version_allowed
(CRITICAL, −5). Our own modern-lifecycle fixture was failing it. protocol_version_latest(MEDIUM) now expects2026-07-28, so servers
still negotiating2025-11-25are marked as behind — accurate, and the
point of the rule, but it moves every legacy server's score by 2.
- Fixes a CRITICAL false positive.
-
All spec facts re-verified against the dated final URLs on publication
day: changelog and SEP attributions, the Streamable HTTP request-header
table (MCP-Protocol-Versionon every POST;Mcp-Methodon all requests;
Mcp-Nameontools/call/resources/read/prompts/get), the error-code
allocation policy (-32020/-32021/-32022) and the deprecated-features
registry (Roots, Sampling, Logging, DCR,includeContext, HTTP+SSE). No
fact changed from the release candidate — the RC-era entry was correct. -
The capability-presence rules now check declared-vs-served consistency
instead of demanding every capability.capability_tools_present,
capability_prompts_presentandcapability_resources_presentcited "servers
that support X MUST declare the X capability" while failing servers that
simply do not offer X — penalizing a tools-only server (the median MCP
server) 10 CRITICAL points for a legitimate design choice. They now compare
the declaration against what the listing actually returns:declared served verdict yes yes (incl. empty) ✅ pass no no ✅ pass — the capability is only required of servers that support the feature no yes ❌ fail — the real spec MUST yes listing did not answer ❌ fail — clients will call it and fail Severity stays CRITICAL, because what remains is a genuine MUST violation.
These rules only judge a listing the auditor actually attempted.
tools,
resourcesandpromptsbeingNoneis ambiguous — the session path lists a
feature only when the server declares it, andaudit_modern_onlycollects
tools alone from the stateless probe. A rule whose listing never ran now
skips asinsufficient-data(seeAuditData.listings_attempted) instead of
reading silence as a failed listing, which had cost a modern server declaring
resources and prompts 10 CRITICAL points (verified on a fixture: 103/123
before, 103/113 after). On the modern path the attempt is recorded on the
server's answer, not on a usable one — a server that declares tools and
then failstools/listfails the rule rather than skipping it, while an
unobservable probe (network error) still skips. The trade-off is stated in
the rule docstring: serving a feature without declaring it is only caught
when the listing ran for another reason. -
listChangedrules downgraded from HIGH to LOW and relabelled as
advisory. 2025-11-25 §Capabilities: "BothsubscribeandlistChangedare
optional — servers can support neither, either, or both." The signal is
worth keeping (an agent silently works from a stale list without it) but it
is an mcpscore recommendation, and thebasisnow says so rather than citing
a spec section that says the opposite.Net effect on live servers: DeepWiki 90/101 → 84/90 (89.1% → 93.3%),
Context7 88/101 → 86/90 (87.1% → 95.6%), mcp-docs 84/101 → 85/90
(83.2% → 94.4%). Rule count is unchanged at 52;max_scorefalls because
optional features no longer carry required-level weight.
Changed
- Coverage floor raised to 97%, and Codecov now has an explicit config.
fail_underinpyproject.tomland both Codecov statuses (project and
patch) are pinned to the same 97%, so the local gate and the PR checks fail
together. Codecov previously used its "auto" target — the base commit's
coverage — which failed a PR at 98.71% patch against a 98.84% base while the
project sat above 99%.
Removed
-
Retired
capability_resources_subscribe(HIGH) and
capability_logging_present(MEDIUM). Both scored the absence of a
capability the spec section they cited calls optional — "Bothsubscribe
andlistChangedare optional: servers can support neither, either, or
both" (2025-11-25 Resources §Capabilities) — and the 2026-07-28 revision
goes further: SEP-2575 removesresources/subscribein favour of
subscriptions/listen, and SEP-2577 deprecates Logging.capability_logging_presentalso contradictedreadiness_2026_deprecated_features,
which fails a server for declaringlogging. With readiness promoted into
the main score for modern and dual-era servers, no server could pass both:
every server in the acceptance corpus failed one or the other.Scores are unaffected for servers that already passed these rules; every other
server gains up to 5 points asmax_scoredrops by the same amount. The
audit now has 52 rules (40 main + 12 readiness). Bothrule_ids are
retired permanently and will never be reused.
Fixed
- Corrected two swapped SEP citations.
server/discoveris introduced by
SEP-2575, not SEP-2567 ("Sessionless MCP via Explicit State
Handles", which explicitly does not introduce it); the removal of
protocol-level sessions andMcp-Session-Idis SEP-2567, not
SEP-2575. Thereadiness_2026_server_discoverand
readiness_2026_no_session_idrules reported each other's SEP in their
message anddetails.sep. readiness_2026_no_session_idno longer overstates the requirement. The
spec's backward-compatibility section is SHOULD-level ("ignore it, and do not
mint or echo session IDs"); the message said "must".