z-go-mcp-server
Go MCP server
Build MCP servers with the official SDK by default. Treat every tool as a workflow contract for the calling model, not a REST mirror.
SDK choice
Use modelcontextprotocol/go-sdk for new servers unless an existing SDK or a required capability determines the choice. Preserve working mark3labs/mcp-go integrations. Check each selected release's Go floor, protocol support and compatibility policy; SDK maturity does not establish support for every new protocol revision.
Before changing a server, record the pinned SDK version, supported protocol revisions, client versions and transports. Verify that matrix with client/server tests. Examples below use the official SDK's session API and require a compatible pinned release; they are not proof of 2026-07-28 support.
Transport choice
| Transport | Use when | Avoid when |
|---|---|---|
stdio (mcp.StdioTransport) |
Local subprocess launched by one client — CLI tools, editor/agent integrations. verify the client supports the selected revision | Multiple concurrent clients, or the server runs remotely |
Streamable HTTP (mcp.NewStreamableHTTPHandler) |
Remote server, multiple concurrent sessions, runs behind a load balancer or in Kubernetes | A single local subprocess covers the need — HTTP adds authentication and origin-validation requirements |
| SSE-only (the 2024-11-05 transport) | Never for a new server | Always — superseded by streamable HTTP in spec 2025-03-26; keep it only to serve clients stuck on the old transport |
As checked on 2026-10-13, the current protocol is 2026-07-28. Its core is stateless: requests carry protocol-version metadata and servers support discovery. Earlier revisions use initialize and may use Mcp-Session-Id; preserve that lifecycle only for the revisions your SDK/client pair supports. Do not infer SDK support from the protocol publication date.