Skip to content

Bump MCP dependencies across templates - #19

Merged
Larry-Osakwe merged 1 commit into
mainfrom
larry/mcp-currency-bump
Jul 31, 2026
Merged

Bump MCP dependencies across templates#19
Larry-Osakwe merged 1 commit into
mainfrom
larry/mcp-currency-bump

Conversation

@Larry-Osakwe

Copy link
Copy Markdown
Contributor

Currency pass across all six templates that depend on a Keycard SDK. Ready to merge — not a draft.

Prompted by wanting a live-test surface for the MCP v2 work, but two of these turned out to be broken today, which is the part worth reviewing first.

The Python templates are broken on a fresh resolve

keycardai-mcp 0.26.0 declares an unbounded mcp>=1.13.1. Since mcp 2.0.0 published on 2026-07-28, a fresh resolve pulls it — and 2.0 deleted mcp.server.fastmcp, so keycardai-mcp fails to import outright:

ModuleNotFoundError: No module named 'mcp.server.fastmcp'

The committed lockfiles pinned mcp 1.27.1 and hid this, so it only bites someone running uv lock --upgrade or starting from scratch — which is exactly what a template is for. Reproduced in both mcp-server-python-mcp and mcp-brokered-credentials-python.

Pinned mcp<2.0 in both and refreshed the locks. They now resolve keycardai-mcp 0.26.0 + mcp 1.29.0, and the entrypoint imports cleanly. The pin comes out once a keycardai-mcp targeting mcp 2.0 ships (keycardai/python-sdk#218).

Go templates were on the pre-rename module path

Both imported github.com/keycardai/credentials-go at v0.13.0. Moved to github.com/keycardai/go-sdk v0.18.1 across go.mod, main.go, README and SPEC, and bumped modelcontextprotocol/go-sdk v1.6.1 → v1.7.0.

v1.7.0 carries protocol revision 2026-07-28, but worth stating plainly: sessions still negotiate 2025-11-25. Upstream caps the initialize path there because initialize is itself deprecated as of the new revision. A bare v1.7.0 server with no Keycard code behaves the same way.

A stale SPEC entry that pointed at a non-existent cause

mcp-server-go's troubleshooting section said /.well-known/oauth-protected-resource omits authorization_servers unless the client sends MCP-Protocol-Version: 2025-03-26, called it an SDK limitation, and promised a fix "lands SDK-side."

That branch is gone. authorization_servers now comes from the issuer passed to AuthMetadataHandler and is omitted only when no issuer is configured — the SDK regression-tests exactly that. Rewrote the entry, since as written it sent people chasing a cause that can't occur.

TypeScript templates were eight minors behind

Three templates sat on @keycardai/mcp ^0.4.0^0.12.1. Among other things that picks up the JWKS-error mapping that returns 401/503 instead of 500.

They stay on @modelcontextprotocol/sdk ^1.0.0 deliberately. MCP v2 is a package split rather than a version bump — the client moved to @modelcontextprotocol/client — and the @keycardai/mcp release targeting it is not published yet (keycardai/typescript-sdk#139).

Verification

Template Check
mcp-server-go go build + go vet clean
mcp-delegated-access-go go build + go vet clean
mcp-server-typescript-express tsc --noEmit + npm run build clean
mcp-brokered-credentials-typescript tsc --noEmit clean
autonomous-agent-snowflake-wif tsc --noEmit clean
mcp-server-python-mcp imports clean, safe lock pair
mcp-brokered-credentials-python imports clean, safe lock pair

No credentials-go references remain anywhere outside go.sum.

What this does not do

It does not get any template onto MCP v2. That needs the two SDK PRs above to merge and publish first; this PR clears the stale pins and the live Python break so that follow-up is a clean one-line bump per template. Running the eval harness against a real zone is the actual v2 live test, and it needs credentials this change can't supply.

🤖 Generated with Claude Code

Two Python templates are broken on a fresh resolve today. keycardai-mcp
0.26.0 declares an unbounded "mcp>=1.13.1", so `uv lock --upgrade` pulls
mcp 2.0.0, which deleted mcp.server.fastmcp and makes keycardai-mcp fail
to import outright. The committed lockfiles pinned mcp 1.27.1 and hid
it, so only someone regenerating a lock or starting fresh hits it.
Pinned mcp<2.0 in mcp-server-python-mcp and
mcp-brokered-credentials-python and refreshed both locks; they now
resolve keycardai-mcp 0.26.0 with mcp 1.29.0, and the entrypoint imports
cleanly. Drop the pin once a keycardai-mcp targeting mcp 2.0 ships.

Both Go templates still imported github.com/keycardai/credentials-go,
the pre-rename module path, at v0.13.0. Moved to
github.com/keycardai/go-sdk v0.18.1 across go.mod, main.go, README and
SPEC, and bumped modelcontextprotocol/go-sdk v1.6.1 -> v1.7.0, which
carries protocol revision 2026-07-28. Note that sessions still negotiate
2025-11-25: upstream caps the initialize path there because initialize
is itself deprecated as of the new revision.

mcp-server-go's SPEC troubleshooting entry described
/.well-known/oauth-protected-resource omitting authorization_servers
unless the client sent MCP-Protocol-Version: 2025-03-26. That branch no
longer exists; the field now comes from the issuer passed to
AuthMetadataHandler and is omitted only when no issuer is configured.
Rewrote it, since as written it pointed at a cause that cannot occur and
promised a fix that already shipped.

Three TypeScript templates sat on @keycardai/mcp ^0.4.0, eight minors
behind, missing among other things the JWKS-error mapping that returns
401/503 instead of 500. Bumped to ^0.12.1. They stay on
@modelcontextprotocol/sdk ^1.0.0: MCP v2 is a package split rather than
a version bump, and the @keycardai/mcp release targeting it is not
published yet.

Verified: both Go templates build and vet clean, all three TypeScript
templates typecheck, and both Python templates import.
@socket-security

Copy link
Copy Markdown

@Larry-Osakwe
Larry-Osakwe merged commit 0b002b9 into main Jul 31, 2026
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant