go-sdk

module
v0.6.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 19, 2025 License: MIT

README

MCP Go SDK v0.6.0

Open in GitHub Codespaces

BREAKING CHANGES

This version contains minor breaking changes. See the release notes for details.

PkgGoDev

This repository contains an implementation of the official Go software development kit (SDK) for the Model Context Protocol (MCP).

[!IMPORTANT] The SDK is in release-candidate state, and is going to be tagged v1.0.0 soon (see https://github.com/modelcontextprotocol/go-sdk/issues/328). We do not anticipate significant API changes or instability. Please use it and file issues.

Package / Feature documentation

The SDK consists of several importable packages:

The SDK endeavors to implement the full MCP spec. The docs/ directory contains feature documentation, mapping the MCP spec to the packages above.

Getting started

To get started creating an MCP server, create an mcp.Server instance, add features to it, and then run it over an mcp.Transport. For example, this server adds a single simple tool, and then connects it to clients over 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)
	}
}

To communicate with that server, create an mcp.Client and connect it to the corresponding server, by running the server command and communicating over its 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)
	}
}

The examples/ directory contains more example clients and servers.

Contributing

We welcome contributions to the SDK! Please see See CONTRIBUTING.md for details of how to contribute.

Acknowledgements / Alternatives

Several third party Go MCP SDKs inspired the development and design of this official SDK, and continue to be viable alternatives, notably mcp-go, originally 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.

Directories

Path Synopsis
examples
client/listfeatures command
The listfeatures command lists all features of a stdio MCP server.
The listfeatures command lists all features of a stdio MCP server.
client/loadtest command
The load command load tests a streamable MCP server
The load command load tests a streamable MCP server
http command
server/basic command
server/distributed command
The distributed command is an example of a distributed MCP server.
The distributed command is an example of a distributed MCP server.
server/everything command
The everything server implements all supported features of an MCP server.
The everything server implements all supported features of an MCP server.
server/hello command
The hello server contains a single tool that says hi to the user.
The hello server contains a single tool that says hi to the user.
server/memory command
server/sse command
server/toolschemas command
The toolschemas example demonstrates how to create tools using both the low-level [ToolHandler] and high level [ToolHandlerFor], as well as how to customize schemas in both cases.
The toolschemas example demonstrates how to create tools using both the low-level [ToolHandler] and high level [ToolHandlerFor], as well as how to customize schemas in both cases.
rate-limiting module
internal
docs
The doc package generates the documentation at /doc, via go:generate.
The doc package generates the documentation at /doc, via go:generate.
jsonrpc2
Package jsonrpc2 is a minimal implementation of the JSON RPC 2 spec.
Package jsonrpc2 is a minimal implementation of the JSON RPC 2 spec.
oauthex
Package oauthex implements extensions to OAuth2.
Package oauthex implements extensions to OAuth2.
readme
The readme package is used to generate README.md at the top-level of this repo.
The readme package is used to generate README.md at the top-level of this repo.
readme/client command
!+
!+
readme/server command
!+
!+
xcontext
Package xcontext is a package to offer the extra functionality we need from contexts that is not available from the standard context package.
Package xcontext is a package to offer the extra functionality we need from contexts that is not available from the standard context package.
Package jsonrpc exposes part of a JSON-RPC v2 implementation for use by mcp transport authors.
Package jsonrpc exposes part of a JSON-RPC v2 implementation for use by mcp transport authors.
The mcp package provides an SDK for writing model context protocol clients and servers.
The mcp package provides an SDK for writing model context protocol clients and servers.
Package oauthex implements extensions to OAuth2.
Package oauthex implements extensions to OAuth2.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL