Mirror of https://github.com/modelcontextprotocol/go-sdk — The official Go SDK for Model Context Protocol servers and clients. Maintained in collaboration with Google.
  • Go 99.7%
  • Shell 0.3%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Robert Findley 204b59483b
mcp,design: revert 'content' back to an interface type (#29)
After some experience with the flattened version of Content, we see that
it can easily lead to incorrect usage and is a harder API to read.
Therefore, this CL changes back to a design similar to what we had prior
to https://go.dev/cl/672415, though opting to promote content
unmarshalling to the protocol types that use it, which leads to an
overall simpler api.
2025-06-25 13:09:05 -04:00
.github/workflows all: add test github action 2025-06-23 14:51:04 -04:00
design mcp,design: revert 'content' back to an interface type (#29) 2025-06-25 13:09:05 -04:00
examples mcp,design: revert 'content' back to an interface type (#29) 2025-06-25 13:09:05 -04:00
internal mcp,design: revert 'content' back to an interface type (#29) 2025-06-25 13:09:05 -04:00
jsonschema internal/mcp/internal/util: add Wrapf 2025-06-09 08:52:39 -07:00
mcp mcp,design: revert 'content' back to an interface type (#29) 2025-06-25 13:09:05 -04:00
CONTRIBUTING.md CONTRIBUTING.md: s/steering commitee/working group (#9) 2025-06-25 09:52:14 -04:00
go.mod all: add go.mod and go.sum file 2025-06-23 17:17:41 +00:00
go.sum all: add go.mod and go.sum file 2025-06-23 17:17:41 +00:00
LICENSE Initial commit: add LICENSE 2025-06-23 17:17:37 +00:00
README.md mcp: move to 2025-06-18 schema (#8) 2025-06-25 09:48:33 -04:00

MCP Go SDK

PkgGoDev

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

WARNING: The SDK is currently unstable and subject to breaking changes. Please test it out and file bug reports or API proposals. The TODO section below outlines outstanding release blockers. We aim to release a stable version of the SDK in August, 2025.

Package documentation

The SDK consists of two 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-client", "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.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"`
}

func SayHi(ctx context.Context, cc *mcp.ServerSession, params *mcp.CallToolParamsFor[HiParams]) (*mcp.CallToolResultFor[any], error) {
	return &mcp.CallToolResultFor[any]{
		Content: []*mcp.ContentBlock{mcp.NewTextContent("Hi " + params.Name)},
	}, nil
}

func main() {
	// Create a server with a single tool.
	server := mcp.NewServer("greeter", "v1.0.0", nil)
	server.AddTools(mcp.NewServerTool("greet", "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.

TODO

The following TODOs block the release of this SDK:

  • Better support for resumability in the Streamable HTTP transport: a server-side event store and client-side retry configuration.
  • OAuth support (or examples of implementing OAuth using middleware).
  • Support for the changes in the 2025-06-18 version of the MCP spec.
  • More examples and documentation.

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 GitHub issues. See CONTRIBUTING.md for details.

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.