[go-fan] Go Module Review: modelcontextprotocol/go-sdk
Maintainer antworten meist innerhalb von 1 Tag
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 2/5
- Geschätzter Aufwand
- 1-3 Stunden
- Anfängerfreundlichkeit
- 68/100
Rechercherichtung
Beginne in pkg/cli/mcp_inspect_mcp.go und prüfe, wie CommandTransport und StreamableClientTransport konfiguriert werden. Lege Eingabegrenzen mit den Optionen MaxLineLength und MaxEventSize des SDK fest und prüfe anschließend die relevanten Transporttests oder führe die Inspector-Tests aus. Als abgeschlossen gilt die Aufgabe, wenn beide Pfade begrenzt sind, sodass übergroße Servereingaben den Speicher des Inspectors nicht unbegrenzt anwachsen lassen können.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
🐹 Go Fan Report: modelcontextprotocol/go-sdk
Module overview: go-sdk is the official Go SDK for the Model Context Protocol — server primitives (mcp.NewServer, mcp.AddTool), client primitives (mcp.NewClient), and transports (stdio, command, in-memory, streamable HTTP). It is the backbone of gh-aws gh aw mcp server and the mcp inspect subcommand.
Selection: picked via round-robin with priority for recent activity — pushed_at 2026-10-29 was the most recent among eligible direct dependencies, and this module last reviewed 2026-10-22 (8 days ago, outside the 7-day cooldown).
Current usage in gh-aw
- Files: 17 non-test
.gofiles (plus matching_test.gofiles), all underpkg/cli/andpkg/parser/mcp.go - Subpackages imported:
mcp,jsonrpconly — noauth/oauthex(the server has no OAuth surface) - Key APIs used:
mcp.NewServer/mcp.NewClient,mcp.AddTool,ServerOptions.SupportedProtocolVersions,ServerOptions.SetCacheable,mcp.StdioTransport,mcp.NewStreamableHTTPHandler,mcp.CommandTransport,mcp.StreamableClientTransport,AddReceivingMiddleware,mcp.ToolAnnotations
go.mod is pinned to v1.8.0, the current latest release (was v1.7.0 at the last review on 2026-08-18).
Research findings
Recent updates (v1.8.0, 2026-09-14)
No new protocol revision — it is a hardening/fix release on top of v1.7.0:
- JSON decoding now rejects >1000 levels of nesting before parsing
- New
MaxEventSizeonSSEClientTransport/StreamableClientTransport, andMaxLineLengthonStdioTransport, to bound buffered input - OAuth dynamic-client-registration responses capped at 1 MB
ServerOptions.SupportedProtocolVersions— lets a server narrow (never widen) its advertised protocol setServerOptions.SetCacheable— per-request hook forttlMs/cacheScopeon list and discover results- Session-leak, deadlock, and teardown-hang fixes for
ServerSession/Client.Connect - Two new
MCPGODEBUGescape hatches (plaintextstatefulrejection,blockingcancelnotify), both slated for removal in v1.9.0 — not needed by gh-aw
Best practices (from maintainers / release notes)
- Bare
boolforReadOnlyHint/IdempotentHintis now always serialized by default (the oldomitemptybehavior needs an explicithintomitempty=1opt-out) — gh-aw already does this correctly everywhere annotations are set. - Stay stateful if session affinity across calls is required;
Stateless = trueopts into the2026-07-28revision but drops that affinity.
Best practices already observed in gh-aw (click to expand)
mcp_server.godocuments that schema caching is automatic since go-sdk v1.3.0.mcp_server_http.gohas an explicit comment on whyStatelessis leftfalse: the long-runninglogs/audittools rely on session affinity for progress notifications, and staying stateful still lets the SDK negotiate down to2025-11-25.mcp_server_http.gobinds to loopback only as defense in depth alongside the SDKs own Host-header check, noting the SDK dropped default cross-origin protection in v1.6.0.mcp_inspect_mcp.gosetsDisableStandaloneSSE: trueon the inspectorsStreamableClientTransportsince it only queries capabilities once.- gh-aw already adopts v1.8.0s
SetCacheable(60s private TTL onListToolsRequest/discover responses) and v1.7.0sSupportedProtocolVersions— ahead of the curve rather than lagging.
Improvement opportunities
🏃 Quick wins
- Bound the
mcp inspectclient transports against hostile/misbehaving servers.mcp inspect(pkg/cli/mcp_inspect_mcp.go) connects to arbitrary user-configured MCP servers over bothCommandTransport(stdio) andStreamableClientTransport(HTTP) — exactly the scenario v1.8.0s newMaxLineLength/MaxEventSizecaps were built for. Neither is set today, so an inspected server that emits one giant unterminated line or a huge SSE event can grow the inspector processs memory unbounded. Setting conservative caps (e.g. a few MB) on both transport structs is a small, targeted change.
✨ Feature opportunities
- Stateless HTTP mode (
StreamableHTTPOptions.Stateless = true) would opt into the2026-07-28revision, but the 2-hourSessionTimeoutexists specifically for session affinity on long-runninglogs/auditcalls — staying stateful remains the right call for now; just worth re-checking as more MCP clients default to the new revision. - Extending
SetCacheablebeyond tool lists —resources/readand the other list methods also carryttlMs/cacheScopehooks as of v1.8.0, but gh-aw does not register any resources today, so this is a non-issue until it does. x-mcp-headerpassthrough (SEP-2243) forlogs/audittool params — only relevant if the HTTP server is ever placed behind a reverse proxy; it is loopback-only today.
📏 Best practice alignment
- Tool annotations already use the v1.8.0-aligned bare-
boolconvention. - Deliberate avoidance of premature schema defaults (documented in-code for the
timeoutparam). - In-code comments tracking SDK version-specific behavior — a pattern worth continuing as the SDK keeps shipping
MCPGODEBUG-guarded behavior changes.
🔧 General improvements
- No redundant or legacy-pattern usage found; no
MCPGODEBUGopt-outs are needed anywhere in the codebase.
Recommendations
- Add
MaxLineLengthto themcp inspectstdio path andMaxEventSizeto itsStreamableClientTransport— the one place gh-aw talks to untrusted/arbitrary MCP servers. - No other action needed this cycle — the module is pinned to the latest release and usage already adopts opt-in hardening/caching features rather than lagging behind.
- Keep the
StatelessHTTP mode decision on the radar as stateless-client adoption grows in the MCP ecosystem.
Next steps
- Consider a small follow-up PR adding
MaxLineLength/MaxEventSizebounds tomcp inspects client transports - Re-review after v1.9.0 ships (removes the two new
MCPGODEBUGescape hatches)
Generated by Go Fan — run §41023228742
Module summary saved to: scratchpad/mods/go-sdk.md
Generated by 🐹 Go Fan · claude · agent · ~125 AIC · ⌖ ~1 AIC · ⊞ 4.4K · ◷
- expires on Oct 31, 2026, 12:08 AM UTC-08:00
- Vorherrschende Sprache
- Go
- Sterne
- 5.5k
- Forks
- 606
- Ø Merge
- 4 Std. 36 Min.
- Gemergte PRs (30 T.)
- 799
Entwicklungsumgebung
Startet den Dev-Container des Projekts im Browser, mit Ihrem eigenen GitHub-Konto.
- Enthält ein Dockerfile oder eine Docker-Compose-Datei
- Keine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus github/gh-aw
-
agent-research
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 67/100
Maintainer antworten meist innerhalb von 1 Tag
-
automated-analysis code-quality cookie refactoring
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
Maintainer antworten meist innerhalb von 1 Tag
-
automation reliability testing
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
Maintainer antworten meist innerhalb von 1 Tag
-
automation doc-healer documentation
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 65/100
Maintainer antworten meist innerhalb von 1 Tag
-
agentic-workflows automation aw-essential cookie
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 75/100
Maintainer antworten meist innerhalb von 1 Tag
Ähnliche Issues
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 66/100
Maintainer antworten meist innerhalb von 1 Tag
-
[Request]: pigOffenpackage-request
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 62/100
ScoopInstaller/Extras#19203 ·
Maintainer antworten meist innerhalb von 1 Tag
-
terminal: with OptionAsAlt, ⌥E types ´ after ESC e on macOSEvtl. vergeben @egoist hat das heute übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 70/100
Maintainer antworten meist innerhalb von 1 Tag
-
security
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 62/100
Waschndolos/open-clubmanager#185 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
router-for-me/CLIProxyAPI#7161 ·
Maintainer antworten meist innerhalb von 1 Tag