A Go framework for building Model Context Protocol (MCP) servers that enable Large Language Models (LLMs) to securely access tools and data sources.
概览
A Go framework for building Model Context Protocol (MCP) servers that enable Large Language Models (LLMs) to securely access tools and data sources. Here's a minimal example of creating an MCP server: The framework supports three types of handlers: For implementing tools that LLMs can execute: Here's a more complete example showing all handler types: To use your MCP server with Claude Desktop, add it to claude_desktop_config.json: Location of config file: - MacOS: ~/Library/Application Support/Claude/claude_desktop_config.json - Windows: %APPDATA%\Claude\claude_desktop_config.json The framework includes utilities for testing your MCP servers. Here's an example:
README
以下为原文 README 节选,完整内容请查看原文。
Go MCP Framework
A Go framework for building Model Context Protocol (MCP) servers that enable Large Language Models (LLMs) to securely access tools and data sources.
Installation
go get github.com/gomcpgo/mcp
Quick Start
Here’s a minimal example of creating an MCP server:
package main
import (
"context"
"log"
"github.com/gomcpgo/mcp/pkg/handler"
"github.com/gomcpgo/mcp/pkg/server"
"github.com/gomcpgo/mcp/pkg/protocol"
)
func main() {
// Create handler registry
registry := handler.NewHandlerRegistry()
// Register your tool handler
registry.RegisterToolHandler(&MyToolHandler{})
// Create and start server
srv := server.New(server.Options{
Name: "my-server",
Version: "1.0.0",
Registry: registry,
})
if err := srv.Run(); err != nil {
log.Fatal(err)
}
}
// MyToolHandler implements the ToolHandler interface
type MyToolHandler struct{}
func (h *MyToolHandler) ListTools(ctx context.Context) (*protocol.ListToolsResponse, error) {
return &protocol.ListToolsResponse{
Tools: []protocol.Tool{
{
Name: "my-tool",
Description: "Description of my tool",
InputSchema: json.RawMessage(`{
"type": "object",
"properties": {
"param1": {
"type": "string",
"description": "Description of param1"
}
},
"required": ["param1"]
}`),
},
},
}, nil
}
func (h *MyToolHandler) CallTool(ctx context.Context, req *protocol.CallToolRequest) (*protocol.CallToolResponse, error) {
// Handle tool execution
result := "Tool execution result"
return &protocol.CallToolResponse{
Content: []protocol.ToolContent{
{
Type: "text",
Text: result,
},
},
}, nil
}
Handler Types
The framework supports three types of handlers:
1. Tool Handler
For implementing tools that LLMs can execute:
type ToolHandler interface {
ListTools(ctx context.Context) (*ListToolsResponse, error)
CallTool(ctx context.Context, req *CallToolRequest) (*CallToolResponse, error)
}
2. Resource Handler
For exposing data that LLMs can read:
type ResourceHandler interface {
ListResources(ctx context.Context) (*ListResourcesResponse, error)
ReadResource(ctx context.Context, req *ReadResourceRequest) (*ReadResourceResponse, error)
}
3. Prompt Handler
For providing prompt templates:
type PromptHandler interface {
ListPrompts(ctx context.Context) (*ListPromptsResponse, error)
GetPrompt(ctx context.Context, req *GetPromptRequest) (*GetPromptResponse, error)
}
Complete Example
Here’s a more complete example showing all handler types:
安装
This server does not publish a one-line install command.
Open the repository installation guide 新手?先看 mcpskill.org 教程 →配置
{
"mcpServers": {
"my-server": {
"command": "path/to/your/server",
"args": ["arg1", "arg2"]
}
}
}