字节笔记本

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/jsonrpcJSON-RPC 传输层实现
github.com/modelcontextprotocol/go-sdk/authOAuth 认证原语
github.com/modelcontextprotocol/go-sdk/oauthexOAuth 协议扩展(如 ProtectedResourceMetadata)

版本兼容性

SDK 版本最新 MCP 规范支持的 MCP 规范版本
v1.2.0+2025-06-182025-11-25, 2025-06-18, 2025-03-26, 2024-11-05
v1.0.0 - v1.1.02025-06-182025-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)
    }
}

更多资源

相关项目

MCP Go SDK 的设计受到以下第三方 SDK 的启发:

许可证

本项目采用 Apache 2.0 许可证(新贡献)和 MIT 许可证(现有代码)双许可。

分享: