使用说明
MCP Go SDK
此SDK提供了模型上下文协议(MCP)的Go实现,实现了客户端和服务器之间的双向通信,用于工具执行、资源访问和提示处理。
特性
-
传输层
- 多种传输选项(stdio、SSE、WebSocket)
- 双向通信
- 可配置的端点和设置
-
服务器实现
- 工具注册和执行
- 资源模式匹配和访问
- 提示模板渲染
- 会话管理
- 基于反射的处理程序调用
-
核心协议类型
- JSON-RPC消息处理
- MCP特定类型(工具、资源、提示)
- 功能和初始化
安装
go get github.com/SetiabudiResearch/mcp-go-sdk
快速开始
下面是一个创建MCP服务器的简单示例:
package main
import (
"context"
"log"
"github.com/SetiabudiResearch/mcp-go-sdk/pkg/mcp/server"
"github.com/SetiabudiResearch/mcp-go-sdk/pkg/mcp/transport"
)
func main() {
// Create a new server
srv := server.NewServer("Example Server")
// Add a tool
srv.AddTool("greet", func(name string) string {
return "Hello, " + name + "!"
}, "Greet a person")
// Create a session
session := server.NewSession(context.Background(), srv)
// Create and start a transport
t := transport.NewStdioTransport(session)
if err := t.Start(); err != nil {
log.Fatal(err)
}
}
使用指南
创建服务器
// Create a new server with a name
srv := server.NewServer("My Server")
// Optionally configure server capabilities
srv.WithCapabilities(protocol.ServerCapabilities{
SupportsAsync: true,
})
添加工具
// Add a synchronous tool
srv.AddTool("myTool", func(arg1 string, arg2 int) (string, error) {
return fmt.Sprintf("Processed %s with %d", arg1, arg2), nil
}, "Tool description")
// Add an asynchronous tool
srv.AddAsyncTool("longRunningTool", func(params string) error {
// Long-running operation
return nil
}, "Async tool description")
添加资源
// Add a resource with pattern matching
srv.AddResource("files/{path}", func(path string) ([]byte, error) {
return ioutil.ReadFile(path)
}, "Access files")
// Resource patterns support multiple parameters
srv.AddResource("api/{version}/{endpoint}", func(version, endpoint string) (interface{}, error) {
return callAPI(version, endpoint)
}, "API access")
添加提示
// Add a simple text prompt
srv.AddPrompt("confirm", func(action string) string {
return fmt.Sprintf("Are you sure you want to %s?", action)
}, "Confirmation prompt")
// Add a multi-message prompt
srv.AddPrompt("chat", func(context string) []protocol.PromptMessage {
return []protocol.PromptMessage{
{
Role: protocol.RoleAssistant,
Content: protocol.TextContent{
Type: "text",
Text: "How can I help you with " + context + "?",
},
},
}
}, "Chat prompt")
传输配置
// Create a session
session := server.NewSession(context.Background(), srv)
// Stdio transport (for CLI applications)
t := transport.NewStdioTransport(session)
// WebSocket transport (for web applications)
t := transport.NewWebSocketTransport(session, transport.WithAddress(":8080"))
// Server-Sent Events transport (for web browsers)
t := transport.NewSSETransport(session, transport.WithAddress(":8080"))
// Start the transport
if err := t.Start(); err != nil {
log.Fatal(err)
}
示例应用程序
请参阅 示例 完整示例应用程序的目录:
贡献
欢迎投稿!请随时提交拉取请求。
许可证
此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。