go-sdk

module
v0.2.0 Latest Latest
Warning

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

Go to latest
Published: Jul 11, 2025 License: MIT

README

MCP Go SDK v0.2.0

BREAKING CHANGES

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

PkgGoDev

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

WARNING: The SDK should be considered unreleased, and is currently unstable and subject to breaking changes. Please test it out and file bug reports or API proposals, but don't use it in real projects. See the issue tracker for known issues and missing features. We aim to release a stable version of the SDK in August, 2025.

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 three importable packages:

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.NewCommandTransport(exec.Command("myserver"))
	session, err := client.Connect(ctx, transport)
	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", mcp:"the name of the person to greet"`
}

func SayHi(ctx context.Context, cc *mcp.ServerSession, params *mcp.CallToolParamsFor[HiParams]) (*mcp.CallToolResultFor[any], error) {
	return &mcp.CallToolResultFor[any]{
		Content: []mcp.Content{&mcp.TextContent{Text: "Hi " + params.Arguments.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.NewStdioTransport()); 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.

Directories

Path Synopsis
examples
sse
rate-limiting Module
internal
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.
!+
!+
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.
Package jsonschema is an implementation of the [JSON Schema specification], a JSON-based format for describing the structure of JSON data.
Package jsonschema is an implementation of the [JSON Schema specification], a JSON-based format for describing the structure of JSON data.
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.

Jump to

Keyboard shortcuts

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