Go SDK для MCP
modelcontextprotocol/go-sdkОфициальный Go SDK для Model Context Protocol, разработанный совместно с Google. Позволяет создавать MCP-серверы и клиенты на Go с поддержкой инструментов, OAuth, транспортов stdio и HTTP. Поддерживает все актуальные версии спецификации MCP.
Подключение
git clone https://github.com/modelcontextprotocol/go-sdk.gitREADME
MCP Go SDK
Данный репозиторий содержит реализацию официального Go SDK для Model Context Protocol (MCP).
Документация по пакетам и возможностям
SDK состоит из нескольких импортируемых пакетов:
- Пакет
github.com/modelcontextprotocol/go-sdk/mcpопределяет основные API для создания и использования MCP-клиентов и серверов. - Пакет
github.com/modelcontextprotocol/go-sdk/jsonrpcпредназначен для пользователей, реализующих собственные транспорты. - Пакет
github.com/modelcontextprotocol/go-sdk/authпредоставляет примитивы для поддержки OAuth. - Пакет
github.com/modelcontextprotocol/go-sdk/oauthexпредоставляет расширения протокола OAuth, напримерProtectedResourceMetadata.
SDK стремится реализовать полную спецификацию MCP. Директория 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 на стороне клиента и Sampling с инструментами недоступны).
Новые релизы SDK ориентированы только на поддерживаемые версии Go. Подробнее: https://go.dev/doc/devel/release#policy.
Начало работы
Чтобы создать MCP-сервер, создайте экземпляр mcp.Server, добавьте в него возможности и запустите через mcp.Transport. Например, следующий сервер добавляет один простой инструмент и подключает клиентов через stdin/stdout:
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)
}
}Чтобы взаимодействовать с этим сервером, создайте mcp.Client и подключите его к серверу, запустив команду сервера и общаясь через его 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/ содержит дополнительные примеры клиентов и серверов.
Участие в разработке
Мы приветствуем вклад в развитие SDK! Подробности о том, как внести свой вклад, см. в CONTRIBUTING.md.
Благодарности и альтернативы
Несколько сторонних Go MCP SDK вдохновили разработку и дизайн этого официального SDK и по-прежнему остаются жизнеспособными альтернативами — в частности, mcp-go, первоначально созданный Эдом Зиндой. Мы благодарны Эду, а также другим контрибьюторам mcp-go и авторам таких SDK, как mcp-golang и go-mcp. Благодаря их работе сложилась развитая экосистема Go MCP-клиентов и серверов.
Лицензия
Новые вклады в проект лицензируются по Apache 2.0, существующий код — по MIT. Подробности см. в файле LICENSE.