modelcontextprotocol/go-sdk
GitHub: modelcontextprotocol/go-sdk
Model Context Protocol的官方Go语言SDK,用于构建AI助手与外部工具、数据源之间的标准化交互服务器和客户端。
Stars: 3979 | Forks: 366
# MCP Go SDK
[](https://codespaces.new/modelcontextprotocol/go-sdk)
[](https://pkg.go.dev/github.com/modelcontextprotocol/go-sdk)
[](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绕过, 软件库