modelcontextprotocol/go-sdk

GitHub: modelcontextprotocol/go-sdk

Model Context Protocol的官方Go语言SDK,用于构建AI助手与外部工具、数据源之间的标准化交互服务器和客户端。

Stars: 3979 | Forks: 366

# MCP Go SDK [![在 GitHub Codespaces 中打开](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/a49569588f135353.svg)](https://codespaces.new/modelcontextprotocol/go-sdk) [![PkgGoDev](https://pkg.go.dev/badge/github.com/modelcontextprotocol/go-sdk)](https://pkg.go.dev/github.com/modelcontextprotocol/go-sdk) [![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/modelcontextprotocol/go-sdk/badge)](https://scorecard.dev/viewer/?uri=github.com/modelcontextprotocol/go-sdk) 本代码仓库包含 Model Context Protocol (MCP) 官方 Go 软件开发工具包 (SDK) 的实现。 ## 包 / 功能文档 SDK 由几个可导入的包组成: - [`github.com/modelcontextprotocol/go-sdk/mcp`](https://pkg.go.dev/github.com/modelcontextprotocol/go-sdk/mcp) 包定义了用于构建和使用 MCP 客户端及服务器的主要 API。 - [`github.com/modelcontextprotocol/go-sdk/jsonrpc`](https://pkg.go.dev/github.com/modelcontextprotocol/go-sdk/jsonrpc) 包适用于实现自定义 transport 的用户。 - [`github.com/modelcontextprotocol/go-sdk/auth`](https://pkg.go.dev/github.com/modelcontextprotocol/go-sdk/auth) 包提供了一些支持 OAuth 的原语。 - [`github.com/modelcontextprotocol/go-sdk/oauthex`](https://pkg.go.dev/github.com/modelcontextprotocol/go-sdk/oauthex) 包提供了 OAuth 协议的扩展,例如 ProtectedResourceMetadata。 SDK 致力于实现完整的 MCP 规范。[`docs/`](/docs/) 目录包含功能文档,将 MCP 规范映射到上述包中。 ## 版本兼容性 下表显示了哪些版本的 Go SDK 支持哪些版本的 MCP 规范: | SDK 版本 | 最新 MCP 规范 | 所有支持的 MCP 规范 | |-----------------|-------------------|----------------------------------------------------| | v1.4.0+ | 2025-11-25\* | 2025-11-25\*, 2025-06-18, 2025-03-26, 2024-11-05 | | v1.2.0 - v1.3.1 | 2025-11-25\*\* | 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 | \* 客户端 OAuth 处于实验性支持阶段。 \*\* 对 2025-11-25 的部分支持(客户端 OAuth 和带有 tools 的 Sampling 不可用)。 SDK 的新版本仅目标支持受支持的 Go 版本。有关更多信息,请参阅 https://go.dev/doc/devel/release#policy。 ## 快速开始 要开始创建 MCP server,请创建一个 `mcp.Server` 实例,向其添加功能,然后通过 `mcp.Transport` 运行它。例如,此 server 添加了一个简单的 tool,并通过 stdin/stdout 将其连接到 client: ``` 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() { // Create a server with a single tool. server := mcp.NewServer(&mcp.Implementation{Name: "greeter", Version: "v1.0.0"}, nil) mcp.AddTool(server, &mcp.Tool{Name: "greet", Description: "say hi"}, SayHi) // Run the server over stdin/stdout, until the client disconnects. if err := server.Run(context.Background(), &mcp.StdioTransport{}); err != nil { log.Fatal(err) } } ``` 要与该 server 通信,请创建一个 `mcp.Client` 并将其连接到相应的 server,方法是运行 server 命令并通过其 stdin/stdout 进行通信: ``` package main import ( "context" "log" "os/exec" "github.com/modelcontextprotocol/go-sdk/mcp" ) func main() { ctx := context.Background() // Create a new client, with no features. client := mcp.NewClient(&mcp.Implementation{Name: "mcp-client", Version: "v1.0.0"}, nil) // Connect to a server over stdin/stdout. transport := &mcp.CommandTransport{Command: exec.Command("myserver")} session, err := client.Connect(ctx, transport, nil) if err != nil { log.Fatal(err) } defer session.Close() // Call a tool on the server. 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) } } ``` [`examples/`](/examples/) 目录包含更多 client 和 server 示例。 ## 贡献 我们欢迎对 SDK 的贡献!有关如何贡献的详细信息,请参阅 [CONTRIBUTING.md](/CONTRIBUTING.md)。 ## 致谢 / 替代方案 几个第三方 Go MCP SDK 启发了此官方 SDK 的开发和设计,并且仍然是可行的替代方案,特别是由 Ed Zynda 最初编写的 [mcp-go](https://github.com/mark3labs/mcp-go)。 我们感谢 Ed 以及 mcp-go 的其他贡献者,也感谢其他 SDK(如 [mcp-golang](https://github.com/metoro-io/mcp-golang) 和 [go-mcp](https://github.com/ThinkInAIXYZ/go-mcp))的作者和贡献者。多亏了他们的工作,才拥有了一个繁荣的 Go MCP client 和 server 生态系统。 ## 许可证 本项目采用 Apache 2.0 许可证接受新贡献,现有代码采用 MIT 许可证 - 有关详细信息,请参阅 [LICENSE](./LICENSE) 文件。
标签:AI Integration, API 客户端, Context Management, DLL 劫持, EVTX分析, EVTX分析, Golang, Google, Go SDK, JSON-RPC, LLM, MCP, Model Context Protocol, Nuclei, OAuth, Unmanaged PE, 人工智能, 大语言模型, 安全编程, 开发工具包, 开源, 日志审计, 服务器, 用户模式Hook绕过, 软件库