Fetching from the wire…
Public story · 2026-09-07 · high
A single string check treated a slash-terminated issuer as pathless, so the SDK probed dead endpoints.
Why now: The fix merged September 7, closing a gap that RFC 8414 already specified.
A single check broke MCP Go SDK OAuth discovery for issuer URLs ending in a slash, per modelcontextprotocol/go-sdk#1245. Any client pointed at a slash-terminated issuer loses modern discovery and falls back to guessed legacy endpoints, with nothing in the failure path flagging why.
authorizationServerMetadataURLs in auth/shared.go decided whether an issuer had a path component with one test, baseURL.Path == "". Write an issuer without a trailing slash and that check passes. Add the slash and Path becomes / instead of empty, so the same check fails.
Getting that check wrong sends the code down the path-insertion branch, probing /.well-known/oauth-authorization-server/, /.well-known/openid-configuration/, and //.well-known/openid-configuration. None of those match what a conformant authorization server serves, so discovery finds nothing. The SDK then falls back to endpoints guessed by appending paths onto the same slash-terminated issuer string. Those guessed endpoints follow the legacy 2025-03-26 protocol shape, not live discovery.
The fix strips the trailing slash before building probe URLs, matching what RFC 8414 section 3.1 already specifies. It merged September 7.
Elsewhere in MCP tooling, Codex consolidated elicitation and tool-approval flows into one decision API, letting model policy override the legacy review flag. Graphify shipped fixes addressing phantom code-graph edges fabricated from symbols that own no node.
Each link below shares sources, entities, or timing with this story.
authorizationServerMetadataURLs decided an issuer had a path component by testing baseURL.Path == "" (go-sdk #1245). An issuer written as has Path == "/", so it took the path-insertion branch and probed /.well-known/oauth-authorization-server/ and //.well-known/openid-configur...
Send Host: localhost and 9router hands over proxy access to its owner's paid OpenAI and Anthropic credentials, no token required.
The mismatch let a faked tool name slip past every human approval, allow-list, and audit log built to stop it.
The nightly enforces OAuth issuer checks, isolates the sandbox, and strips a hardcoded Google API key from chrome-devtools-mcp.
The GitHub advisory says the checker inspects the executable name only, ignoring every argument passed alongside it.
Grep and Glob had the same gap, and the release also blocks project settings from logging raw API request bodies.
MindPattern daily
One email a day at 7 AM. Sources and a take on every story. Unsubscribe anytime.