MCP-Go SDK
About
MCP Server SDK in Go and some servers I'm using myself
Details
- Author
- dentaku7
- GitHub stars
- 3
- Downloads
- 228
- Categories
- Developer Tools
Jump to
- Implements the Model Communication Protocol (MCP) for Go
- Defines a clear Tool interface with required methods
- Provides a flexible Transport interface with built‑in stdio support
- Enforces a standard MCP response format (content + optional metadata)
- Includes an example server to get started quickly
Create a Go module, implement the mcp.Tool interface (methods Name(), Description(), Schema(), Execute()), then instantiate a server with the default stdio transport, register the tool, and call Start(). A complete working example is provided in servers/example. To use the tool with Cursor IDE, create a .cursor/mcp.json file in your project root with the command and arguments.
MCP-Go SDK
A Go SDK for building Model Communication Protocol (MCP) tools and servers. This SDK provides the building blocks for implementing MCP-compliant tools that can be used with AI applications like Cursor IDE.
Quick Start
Check out the example server in servers/example to see a minimal implementation of an MCP tool that echoes back messages:
package main
import (
"encoding/json"
"mcp-go/server"
"mcp-go/transport"
)
// EchoTool implements a simple echo tool
type EchoTool struct{}
func (t EchoTool) Name() string {
return "echo"
}
func (t EchoTool) Description() string {
return "A simple echo tool that returns the input message"
}
func (t EchoTool) Schema() json.RawMessage {
return json.RawMessage({
"type": "object",
"properties": {
"message": {
"type": "string",
"description": "The message to echo back"
}
},
"required": ["message"]
})
}
func (t EchoTool) Execute(params json.RawMessage) (interface{}, error) {
var input struct {
Message string json:"message"
}
if err := json.Unmarshal(params, &input); err != nil {
return nil, err
}
return map[string]interface{}{
"content": []map[string]interface{}{
{
"type": "text",
"text": input.Message,
},
},
"metadata": map[string]interface{}{
"length": len(input.Message),
},
}, nil
}
func main() {
// Create a new server with stdin/stdout transport
srv := server.NewServer(transport.NewStdioTransport())
// Register your tool
if err := srv.RegisterTool(&EchoTool{}); err != nil {
panic(err)
}
// Start the server
if err := srv.Start(); err != nil {
panic(err)
}
}
Core Concepts
1. Tools
A Tool in MCP is a service that can be called by AI applications. Each tool must implement the mcp.Tool interface:
gotype Tool interface {
// Name returns the unique identifier for this tool
Name() string
// Description returns a human-readable description
Description() string
// Schema returns the JSON schema for the tool's parameters
Schema() json.RawMessage
// Execute runs the tool with the given parameters
Execute(params json.RawMessage) (interface{}, error)
}
2. Response Format
Tools should return responses in the MCP format:
go{
"content": [
{
"type": "text",
"text": "Your response text"
}
],
"metadata": {
// Optional metadata about the response
}
}
3. Transport Layer
The SDK provides a flexible transport layer through the Transport interface:
gotype Transport interface {
Send(data interface{}) error
Receive() ([]byte, error)
Close() error
}
By default, the SDK includes a stdio transport (transport.NewStdioTransport()) for command-line tools.
4. Configuration
To use your MCP tool with Cursor IDE, create a .cursor/mcp.json in your project root:
json{
"mcpServers": {
"mytool": {
"command": "mytool",
"args": [],
"env": {}
}
}
}
```
Contributing
1. Fork the repository
2. Create a feature branch
3. Add tests for new functionality
4. Submit a pull request
Please ensure your code:
- Follows Go best practices
- Includes appropriate documentation
- Has test coverage
- Handles errors appropriately
Sign in to leave a review
Use Google, GitHub, or an email account so ratings stay tied to real people.
No reviews posted yet.





