Hello World-Go中的MCP服务器
引言
此示例演示了如何在Go中使用 mcp-go SDK.MCP是一种基于JSON-RPC的轻量级协议,允许语言模型客户端以结构化的方式发现和调用外部工具。
只需几行Go代码,您就可以:
- 使用人类可读的名称和版本定义MCP服务器。
- 使用键入的参数和描述声明一个或多个工具(命令)。
- 注册在客户端调用工具时执行自定义逻辑的处理程序函数。
- 通过标准I/O(stdin/stdout)公开服务器,以便任何与MCP兼容的客户端(如Cursor、Claude Desktop或其他IDE扩展)都可以启动并与之通信,而无需额外设置。
运作原理
- 服务器初始化
mcpServer := server.NewMCPServer(
"Hello World MCP Server",
"1.0.0",
server.WithToolCapabilities(false),
)- 创建一个名为“Hello World MCP server”的MCP服务器,版本为1.0.0。 - 禁用自动工具功能公告(因此仅显示您的显式工具)。
- 工具定义
helloWorldTool := mcp.NewTool("hello_world",
mcp.WithDescription("Greet someone"),
mcp.WithString("name",
mcp.Required(),
mcp.Description("Person’s name"),
),
)- 定义一个 hello_world 接受单个必需字符串参数的工具 name. - 描述有助于客户端显示使用信息并生成提示。
- 处理程序注册
mcpServer.AddTool(helloWorldTool, func(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
name, ok := req.Params.Arguments["name"].(string)
if !ok {
return nil, errors.New("name must be a string")
}
return mcp.NewToolResultText(fmt.Sprintf("Hello, %s!", name)), nil
})- 合伙人 hello_world 带有Go功能的工具。 - 提取 name 参数,验证它,并返回问候语。 - 错误以JSON-RPC错误的形式显示回客户端。
- 服务于Stdio
if err := server.ServeStdio(mcpServer); err != nil {
fmt.Printf("Server error: %v\n", err)
}- 启动一个事件循环,从stdin读取JSON-RPC请求并将响应写入stdout。 - 允许任何MCP客户端直接启动二进制文件,并通过管道传输MCP。
入门指南
- 再进行
go mod tidy- 构建服务器
go build -o hello-mcp ./src/main.go- 从MCP客户端连接
- 在客户端的配置中,指向 hello-mcp 可执行。 - 客户端将自动发现 hello_world 工具模式,并允许您调用它。
例子:
{
"mcpServers": {
"demo-go-mcp": {
"command": "path-to-server/hello-mcp"
}
}
}或者,使用 我的MCP客户端是用Go编写的
根据需要添加其他工具、参数和传输(例如HTTP/SSE),享受构建更复杂工作流程的乐趣!
