article
README
🚀 go-mcp 介绍
go-mcp 是一个用于构建 MCP(模型上下文协议)服务器的 Go 语言 SDK,强调类型安全和直观易用的接口,能帮助开发者高效构建 MCP 服务器。
✨ 主要特性
- 类型安全:通过代码生成确保工具和提示参数静态类型化,可在编译时捕获错误。
- 简单直观的 API:提供自然、符合 Go 风格的接口,有效降低学习曲线。
- 开发者友好:注重 API 的易用性,让开发者使用起来更加顺手。
🚀 快速开始
目录结构示例
项目目录结构如下:
your-project/
cmd/temperature/
main.go
handler.go
cmd/mcpgen/
main.go
示例代码
步骤一:定义 MCP 服务器
运行 mcpgen 工具生成代码:
go run ./cmd/mcpgen
步骤二:实现 MCP 服务器逻辑
在 handler.go 中实现逻辑,例如温度转换工具:
package main
import (
"context"
"fmt"
"math"
)
type toolHandler struct{}
func NewHandler(h *toolHandler) mcp.Handler {
return mcp.HandlerFunc(func(ctx context.Context, req *mcp.Request) (*mcp.Response, error) {
if req.IsPing() {
return &mcp.Response{Id: req.Id}, nil
}
if req.IsCallTool() {
content := req.GetCallTool().Content
tool := content[0].GetTool()
switch tool.ID {
case "temperature-converter":
fromUnit := string(tool.Params["from_unit"])
toUnit := string(tool.Params["to_unit"])
temp, err := tool.Params["temperature"].(float64)
if err != nil {
return nil, fmt.Errorf("invalid temperature value")
}
result := convertTemperature(temp, fromUnit, toUnit)
return &mcp.Response{
Id: req.Id,
Data: mcp.NewData(map[string]interface{}{
"result": result,
}),
}, nil
default:
return nil, fmt.Errorf("tool not found")
}
}
return nil, nil
})
}
func convertTemperature(value float64, fromUnit string, toUnit string) float64 {
switch fromUnit {
case "celsius":
switch toUnit {
case "fahrenheit":
return (value * 9.0 / 5.0) + 32
default:
return value
}
case "fahrenheit":
switch toUnit {
case "celsius":
return (value - 32) * 5.0 / 9.0
default:
return value
}
default:
return value
}
}
func main() {
handler := NewHandler(new(toolHandler))
server := mcp.NewServer(":8080", handler)
if err := server.Start(); err != nil {
fmt.Printf("Failed to start server: %v\n", err)
}
}
在终端运行以下命令启动服务器:
go run ./cmd/temperature/main.go
💻 使用示例
基础用法
发送 Ping 请求
使用 curl 命令发送 Ping 请求:
curl -X POST http://localhost:8080/ping
调用温度转换工具
调用预定义的 "temperature-converter" 工具:
curl -X POST http://localhost:8080/call_tool \
--data '{"tool_id":"temperature-converter","params":{"from_unit":"celsius","to_unit":"fahrenheit","temperature":32}}'
查看工具列表
列出所有注册的工具:
curl -X GET http://localhost:8080/tools
📚 详细文档
已支持功能
- Ping:验证服务器连通性。
- Tools:管理工具注册与调用。
- Prompts:处理用户提示请求。
更多功能请参考项目文档。
📄 许可证
本项目使用 MIT 许可证,详情请见 LICENSE 文件。
Scan to contact