go-sdk
The official Go SDK for Model Context Protocol servers and clients. Maintained in collaboration with Google.
GitHubスター
1,921
ユーザー評価
未評価
お気に入り
0
閲覧数
5
フォーク
155
イシュー
42
MCP Go SDK v0.3.0
BREAKING CHANGES
This version contains breaking changes.
See the release notes for details.
This repository contains an unreleased implementation of the official Go
software development kit (SDK) for the Model Context Protocol (MCP).
[!WARNING]
The SDK is not yet at v1.0.0 and may still be subject to incompatible API
changes. We aim to tag v1.0.0 in September, 2025. See
https://github.com/modelcontextprotocol/go-sdk/issues/328 for details.
Design
The design doc for this SDK is at design.md, which was
initially reviewed at
modelcontextprotocol/discussions/364.
Further design discussion should occur in
issues (for concrete
proposals) or
discussions for
open-ended discussion. See CONTRIBUTING.md for details.
Package documentation
The SDK consists of two importable packages:
- The
github.com/modelcontextprotocol/go-sdk/mcp
package defines the primary APIs for constructing and using MCP clients and
servers. - The
github.com/modelcontextprotocol/go-sdk/jsonrpc
package is for users implementing
their own transports.
Example
In this example, an MCP client communicates with an MCP server running in a
sidecar process:
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)
}
}
Here's an example of the corresponding server component, which communicates
with its client over stdin/stdout:
package main
import (
"context"
"log"
"github.com/modelcontextprotocol/go-sdk/mcp"
)
type HiParams struct {
Name string `json:"name" jsonschema:"the name of the person to greet"`
}
func SayHi(ctx context.Context, req *mcp.CallToolRequest, args HiParams) (*mcp.CallToolResult, any, error) {
return &mcp.CallToolResult{
Content: []mcp.Content{&mcp.TextContent{Text: "Hi " + args.Name}},
}, nil, 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)
}
}
The examples/
directory contains more example clients and servers.
Acknowledgements
Several existing Go MCP SDKs inspired the development and design of this
official SDK, notably mcp-go, authored
by Ed Zynda. We are grateful to Ed as well as the other contributors to mcp-go,
and to authors and contributors of other SDKs such as
mcp-golang and
go-mcp. Thanks to their work, there
is a thriving ecosystem of Go MCP clients and servers.
License
This project is licensed under the MIT License - see the LICENSE
file for details.
0
フォロワー
0
リポジトリ
0
Gist
0
貢献数