字
字节笔记本
2026年2月22日
MCP Go SDK:Model Context Protocol 官方 Go SDK
本文介绍 MCP Go SDK,这是 Model Context Protocol 的官方 Go 语言 SDK,由 Google 与 MCP 团队共同维护。该 SDK 提供了构建 MCP 服务器和客户端的完整工具链,支持 Tools、Resources、Prompts、Sampling 等全部 MCP 协议特性。
项目简介
MCP Go SDK 是 Model Context Protocol 的官方 Go 实现,为开发者提供了构建 MCP 服务器和客户端的完整工具集。该项目在 GitHub 上已获得 3.9k+ stars,采用 Go 语言(99.5%)开发,是目前最权威的 Go 语言 MCP 开发工具。
该 SDK 由 modelcontextprotocol 组织维护,并与 Google 合作开发,确保了代码质量和长期维护的可靠性。
核心特性
- 完整协议支持:实现完整的 MCP 规范,支持所有协议版本
- 多包架构:模块化设计,按需导入所需功能
- 类型安全:充分利用 Go 的类型系统,提供编译时安全保障
- 传输层抽象:支持 stdio、SSE 等多种传输方式
- OAuth 支持:内置 OAuth 认证原语和扩展
- 丰富示例:提供完整的客户端和服务器示例代码
包结构
SDK 采用多包设计,开发者可根据需求选择导入:
| 包路径 | 用途 |
|---|---|
github.com/modelcontextprotocol/go-sdk/mcp | 核心 API,用于构建 MCP 客户端和服务器 |
github.com/modelcontextprotocol/go-sdk/jsonrpc | JSON-RPC 传输层实现 |
github.com/modelcontextprotocol/go-sdk/auth | OAuth 认证原语 |
github.com/modelcontextprotocol/go-sdk/oauthex | OAuth 协议扩展(如 ProtectedResourceMetadata) |
版本兼容性
| SDK 版本 | 最新 MCP 规范 | 支持的 MCP 规范版本 |
|---|---|---|
| v1.2.0+ | 2025-06-18 | 2025-11-25, 2025-06-18, 2025-03-26, 2024-11-05 |
| v1.0.0 - v1.1.0 | 2025-06-18 | 2025-06-18, 2025-03-26, 2024-11-05 |
安装指南
bash
go get github.com/modelcontextprotocol/go-sdk/mcp快速开始
创建 MCP 服务器
以下示例创建一个简单的问候工具服务器:
go
package main
import (
"context"
"log"
"github.com/modelcontextprotocol/go-sdk/mcp"
)
type Input struct {
Name string `json:"name" jsonschema:"the name of the person to greet"`
}
type Output struct {
Greeting string `json:"greeting" jsonschema:"the greeting to tell to the user"`
}
func SayHi(ctx context.Context, req *mcp.CallToolRequest, input Input) (
*mcp.CallToolResult,
Output,
error,
) {
return nil, Output{Greeting: "Hi " + input.Name}, nil
}
func main() {
// 创建服务器实例
server := mcp.NewServer(&mcp.Implementation{
Name: "greeter",
Version: "v1.0.0",
}, nil)
// 添加工具
mcp.AddTool(server, &mcp.Tool{
Name: "greet",
Description: "say hi",
}, SayHi)
// 通过 stdin/stdout 运行服务器
if err := server.Run(context.Background(), &mcp.StdioTransport{}); err != nil {
log.Fatal(err)
}
}创建 MCP 客户端
以下示例展示如何连接到上述服务器并调用工具:
go
package main
import (
"context"
"log"
"os/exec"
"github.com/modelcontextprotocol/go-sdk/mcp"
)
func main() {
ctx := context.Background()
// 创建客户端
client := mcp.NewClient(&mcp.Implementation{
Name: "mcp-client",
Version: "v1.0.0",
}, nil)
// 连接到服务器(通过命令启动)
transport := &mcp.CommandTransport{
Command: exec.Command("myserver"),
}
session, err := client.Connect(ctx, transport, nil)
if err != nil {
log.Fatal(err)
}
defer session.Close()
// 调用服务器上的工具
params := &mcp.CallToolParams{
Name: "greet",
Arguments: map[string]any{"name": "you"},
}
res, err := session.CallTool(ctx, params)
if err != nil {
log.Fatalf("CallTool failed: %v", err)
}
if res.IsError {
log.Fatal("tool failed")
}
// 输出结果
for _, c := range res.Content {
log.Print(c.(*mcp.TextContent).Text)
}
}更多资源
- GitHub 仓库:https://github.com/modelcontextprotocol/go-sdk
- Go 文档:https://pkg.go.dev/github.com/modelcontextprotocol/go-sdk
- 示例代码:https://github.com/modelcontextprotocol/go-sdk/tree/main/examples
- 功能文档:https://github.com/modelcontextprotocol/go-sdk/tree/main/docs
- 贡献指南:https://github.com/modelcontextprotocol/go-sdk/blob/main/CONTRIBUTING.md
相关项目
MCP Go SDK 的设计受到以下第三方 SDK 的启发:
- mcp-go - 由 Ed Zynda 原创
- mcp-golang
- go-mcp
许可证
本项目采用 Apache 2.0 许可证(新贡献)和 MIT 许可证(现有代码)双许可。
分享: