Claude Info
Dev-инструменты

Go SDK для MCP

modelcontextprotocol/go-sdk

Официальный Go SDK для Model Context Protocol, разработанный совместно с Google. Позволяет создавать MCP-серверы и клиенты на Go с поддержкой инструментов, OAuth, транспортов stdio и HTTP. Поддерживает все актуальные версии спецификации MCP.

Подключение

terminal
bash
git clone https://github.com/modelcontextprotocol/go-sdk.git

README

MCP Go SDK

Open in GitHub Codespaces

PkgGoDev OpenSSF Scorecard

Данный репозиторий содержит реализацию официального Go SDK для Model Context Protocol (MCP).

Документация по пакетам и возможностям

SDK состоит из нескольких импортируемых пакетов:

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.12025-11-25**2025-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

* OAuth на стороне клиента имеет экспериментальную поддержку.

** Частичная поддержка спецификации 2025-11-25 (OAuth на стороне клиента и Sampling с инструментами недоступны).

Новые релизы SDK ориентированы только на поддерживаемые версии Go. Подробнее: https://go.dev/doc/devel/release#policy.

Начало работы

Чтобы создать MCP-сервер, создайте экземпляр mcp.Server, добавьте в него возможности и запустите через mcp.Transport. Например, следующий сервер добавляет один простой инструмент и подключает клиентов через stdin/stdout:

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() {
	// 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:

go
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.

Похожие MCP-серверы