You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
1.5 KiB
70 lines
1.5 KiB
package main
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"github.com/mark3labs/mcp-go/mcp"
|
|
"github.com/mark3labs/mcp-go/server"
|
|
)
|
|
|
|
func main() {
|
|
fmt.Printf("开始启动...\n")
|
|
// 创建新的 MCP 服务器
|
|
s := server.NewMCPServer(
|
|
"计算小样",
|
|
"1.0.0",
|
|
server.WithResourceCapabilities(true, true),
|
|
server.WithLogging(),
|
|
server.WithRecovery(),
|
|
)
|
|
|
|
// 添加计算器工具
|
|
calculatorTool := mcp.NewTool("计算",
|
|
mcp.WithDescription("执行基本算术运算"),
|
|
mcp.WithString("运行",
|
|
mcp.Required(),
|
|
mcp.Description("要执行的作(加、减、乘、除)"),
|
|
mcp.Enum("加", "减", "乘", "除"),
|
|
),
|
|
mcp.WithNumber("x",
|
|
mcp.Required(),
|
|
mcp.Description("第一个数字"),
|
|
),
|
|
mcp.WithNumber("y",
|
|
mcp.Required(),
|
|
mcp.Description("第二个数字"),
|
|
),
|
|
)
|
|
|
|
// 添加计算器处理程序
|
|
s.AddTool(calculatorTool, func(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) {
|
|
op := request.Params.Arguments["运算"].(string)
|
|
x := request.Params.Arguments["x"].(float64)
|
|
y := request.Params.Arguments["y"].(float64)
|
|
|
|
var result float64
|
|
switch op {
|
|
case "加":
|
|
result = x + y
|
|
case "减":
|
|
result = x - y
|
|
case "乘":
|
|
result = x * y
|
|
case "除":
|
|
if y == 0 {
|
|
return mcp.NewToolResultError("不能被零除"), nil
|
|
}
|
|
result = x / y
|
|
}
|
|
|
|
return mcp.NewToolResultText(fmt.Sprintf("%.2f", result)), nil
|
|
})
|
|
|
|
// 启动服务器
|
|
if err := server.ServeStdio(s); err != nil {
|
|
fmt.Printf("服务器错误: %v\n", err)
|
|
} else {
|
|
fmt.Printf("服务器停止!\n")
|
|
}
|
|
}
|
|
|