I maintain a GitLab MCP server built on this SDK: about 865 tools on its individual surface, three tool surfaces, stdio and streamable HTTP, resource subscriptions and OAuth. I audited it against the MCP specification and against the SDK, and recorded every finding that belongs upstream rather than in my own code. Nine of them concern this SDK and have no fix yet: each was reproduced against a real deployment or against the compiled binary driven over its own transport, each names the specification clause, documentation page or semantic convention it fails, and each is pinned by a test I can hand you.
I am filing them as separate issues so that each can be triaged, labelled and closed on its own. This one is the index, so you can see the set at once and see that it comes from one audit rather than from nine unrelated reports. I checked every finding against current main before filing; the individual issues give the version I first observed it on.
Specification conformance, with a fix offered
Each of these four is a conformance defect and each has a pull request open against it: a minimal change in the SDK's own style, a test that fails before it and passes after, and go test ./... green.
Found during review of the pull requests above
Two defects that the review of #1266 turned up rather than the original audit, each filed with a pull request in the same shape as the four above.
Already filed
API the SDK does not expose, proposal only
These four cannot be closed without new exported API, so they go out as proposals rather than as pull requests: each body states the requirement, cites the SDK code that stands in the way, and offers a concrete Go signature together with the alternatives I considered. Each of them is waiting on your decision about the shape, and I will write the pull request once you say which one you want.
Every finding above is now filed, and each issue links back here.
I maintain a GitLab MCP server built on this SDK: about 865 tools on its individual surface, three tool surfaces, stdio and streamable HTTP, resource subscriptions and OAuth. I audited it against the MCP specification and against the SDK, and recorded every finding that belongs upstream rather than in my own code. Nine of them concern this SDK and have no fix yet: each was reproduced against a real deployment or against the compiled binary driven over its own transport, each names the specification clause, documentation page or semantic convention it fails, and each is pinned by a test I can hand you.
I am filing them as separate issues so that each can be triaged, labelled and closed on its own. This one is the index, so you can see the set at once and see that it comes from one audit rather than from nine unrelated reports. I checked every finding against current main before filing; the individual issues give the version I first observed it on.
Specification conformance, with a fix offered
Each of these four is a conformance defect and each has a pull request open against it: a minimal change in the SDK's own style, a test that fails before it and passes after, and
go test ./...green._metais not answered with UnsupportedProtocolVersionError #1260 mcp: an unknown protocol version in per-request_metais not answered withUnsupportedProtocolVersionError. An unrecognised version is misclassified instead of being refused with the error the versioning page requires. The pull request is mcp: classify the per-request protocol version by membership #1268.Found during review of the pull requests above
Two defects that the review of #1266 turned up rather than the original audit, each filed with a pull request in the same shape as the four above.
logging/setLevel,resources/subscribeandresources/unsubscribeskip it; subscribe is the one that reaches state. The pull request is mcp: refuse a call on a legacy session before initialize #1273.Already filed
API the SDK does not expose, proposal only
These four cannot be closed without new exported API, so they go out as proposals rather than as pull requests: each body states the requirement, cites the SDK code that stands in the way, and offers a concrete Go signature together with the alternatives I considered. Each of them is waiting on your decision about the shape, and I will write the pull request once you say which one you want.
http.Server.WriteTimeoutarmed, so a long-lived stream dies before its first notification. A stream that stays idle is cut by the server's own write deadline before it ever sends anything.notifications/cancelledthat 2026-07-28 requires when it tears down asubscriptions/listenstream. The protocol asks for that notification on teardown and application code has no way to send it.Every finding above is now filed, and each issue links back here.