Go SDK
Официальный Go SDK для MCP - выпуск v1.8.0, установка, редакции протокола, поведение клиента по умолчанию и условие, при котором HTTP-сервер принимает 2026-07-28.
сверено с выпуском v1.8.0 4 октября 2026
Что это
Заголовок раздела «Что это»Это SDK из репозитория modelcontextprotocol/go-sdk. README выпуска называет его реализацией официального Go SDK для MCP, а список официальных SDK относит его к первому уровню (Tier 1).
У SDK одна ветка, 1.x. Модуль состоит из нескольких пакетов:
| Пакет | Для чего |
|---|---|
mcp | основной программный интерфейс клиентов и серверов |
jsonrpc | для тех, кто пишет собственный транспорт |
auth | базовые средства для OAuth |
oauthex | дополнения к OAuth, например метаданные защищённого ресурса |
У выпуска v1.8.0 две даты, и обе первичные: метка поставлена на изменение от 4 сентября 2026 (это время показывает прокси модулей Go), а выпуск на GitHub опубликован 14 сентября 2026.
Установка и среда
Заголовок раздела «Установка и среда»В README выпуска команды установки нет. Она есть в кратком руководстве:
go get github.com/modelcontextprotocol/go-sdk/mcpВ go.mod выпуска записано go 1.25.0. По README, новые выпуски SDK рассчитаны только на поддерживаемые версии Go.
Какие редакции понимает выпуск
Заголовок раздела «Какие редакции понимает выпуск»Список версий в mcp/shared.go: 2026-07-28, 2025-11-25, 2025-06-18, 2025-03-26, 2024-11-05. Таблица совместимости в README говорит то же и уточняет: редакция 2026-07-28 поддерживается начиная с v1.7.0, а OAuth на стороне клиента имеет опытную поддержку.
Для вас это значит: по документу о протоколе, SDK поддерживает обе модели жизненного цикла и выбирает одну по согласованной версии, а программный интерфейс при этом один и тот же. Чем эпохи различаются, описано на странице о версиях протокола.
Что отправляет клиент по умолчанию
Заголовок раздела «Что отправляет клиент по умолчанию»По документу о протоколе, Client.Connect сначала вызывает server/discover и по ответу выбирает общую версию. Если запрос не удался или сервер не поддерживает самую новую версию, клиент переходит на старое рукопожатие initialize. В mcp/client.go видно, что откат идёт с версией 2025-11-25.
Версию задаёт поле ClientSessionOptions.ProtocolVersion. По комментарию в коде, это версия, которую клиент отправляет в запросе initialize или server/discover; если поле пустое, берётся самая новая поддерживаемая. По тому же коду, server/discover отправляется только тогда, когда запрошена версия не старше 2026-07-28. Значит, если указать в этом поле версию старой эпохи, клиент сразу начнёт с initialize.
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) }}Пример взят из документации выпуска v1.8.0 и здесь не запускался.
Третий аргумент Connect в примере равен nil. Это и есть поведение по умолчанию: сначала server/discover, потом при необходимости initialize.
Что принимает сервер
Заголовок раздела «Что принимает сервер»По документу о протоколе, Server.Connect сам регистрирует обработчик server/discover. Сервер объявляет и согласует все версии, которые поддерживает SDK. Сузить набор можно полем ServerOptions.SupportedProtocolVersions, например чтобы перестать обслуживать редакцию, от которой вы отказались.
В старой модели запросы к серверу отклоняются, пока клиент не завершит рукопожатие. В новой модели рукопожатия нет: сервер обрабатывает первый же запрос и проверяет поля _meta в нём.
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) }}Пример взят из документации выпуска v1.8.0 и здесь не запускался.
Как совместить обе эпохи на одном адресе, разобрано на странице о сервере двух эпох.
Расширения
Заголовок раздела «Расширения»Tasks. В выпуске v1.8.0 расширение не реализовано. В плане развития есть только пункт об опытной реализации задач по более раннему предложению SEP-1686. Строк tasks/get, io.modelcontextprotocol/tasks и SEP-2663 в исходниках и документации выпуска нет.
MCP Apps. Неизвестно. Поиск по исходникам и документации выпуска не нашёл ни упоминаний MCP Apps, ни идентификатора io.modelcontextprotocol/ui, ни ресурсов ui://. Заявления проекта о поддержке или об отказе от неё тоже нет.
Что такое расширения и как о них договариваются стороны - на странице о расширениях.
Устаревшее, что выпуск ещё содержит
Заголовок раздела «Устаревшее, что выпуск ещё содержит»- Roots, Sampling, Logging. По README, эти возможности устарели с редакции 2026-07-28, а SDK продолжает их поддерживать в течение срока устаревания - не меньше двенадцати месяцев.
- HTTP+SSE. Старый транспорт из двух адресов по-прежнему реализован:
SSEHandlerи парные ему типы. Документ о протоколе советует для новых развёртываний Streamable HTTP. - Сеансы и
initialize. Сохранены для версий старой эпохи. Возобновление потока черезEventStoreиLast-Event-IDтоже оставлено только для 2025-11-25 и более ранних версий. - Динамическая регистрация клиента. Перечислена среди поддерживаемых способов регистрации. Помечена ли она в выпуске как устаревшая, неизвестно.
Общий список - на странице об устаревших возможностях.
Выпуск и ветка main
Заголовок раздела «Выпуск и ветка main»На 4 октября 2026 ветка main опережает метку v1.8.0 на 41 изменение. Список версий протокола тот же, но среди невыпущенных изменений много правок поведения в сети: определение версии запроса, отказ в вызове на старом сеансе до initialize, запись согласованной версии, разбор заголовков Mcp-Name и Mcp-Param-*. В выпуске v1.8.0 этих правок нет. Пробных выпусков новее v1.8.0 нет.
Что неизвестно
Заголовок раздела «Что неизвестно»- Реализовано ли расширение MCP Apps: в выпуске нет ни кода, ни заявления.
- Есть ли у клиента настройка, которая запрещает откат на
initialize: в документации выпуска она не описана. - Помечена ли динамическая регистрация клиента как устаревшая в коде выпуска.
- Содержимое архива модуля отдельно не проверялось: сверялись исходники по метке выпуска и данные прокси модулей.