使用说明
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),享受构建更复杂工作流程的乐趣!
