本项目分别运用 Go 和 Python 实现了一个极为简单的 MCP 服务器,同时搭配一个 MCP 客户端进行调用。该项目不依赖任何外部 API,能让你轻松理解简单的 MCP 工作流。
书架编号为 A、B、C、D,共 4 个架子存放着书籍。我们需要借助大模型查找对应编号的书架中的书籍。
type BookShelfParams struct {
BookShelfId string `json:"book_shelf_id" jsonschema:"required,description=The ID of the book shelf"`
}
func bookSearchHandler(ctx context.Context, args BookShelfParams) (*mcp.CallToolResult, error) {
// 逻辑实现,可以替换成任何外部 API 调用
return mcp.NewToolResultText("返回结果:xxxx"), nil
}
var BookSearchTool = InoriMCP.MustTool(
"book-search",
"图书搜索工具",
bookSearchHandler,
)
func AddBookSearchTools(mcp *server.MCPServer) {
BookSearchTool.Register(mcp)
}
在 main.go 中加入这个工具:
tools.AddBookSearchTools(s)
go build -o inori-mcp.exe ./cmd/inori-mcp
mcp.exe
需要注意的是,Go 和 Python 的 MCP 客户端启动方式有所不同。
安装 Node 环境,使用 inspector 工具,先连接到 MCP 服务器,然后输入 A、B、C、D 查看是否返回书架中的书籍信息。
npx -y @modelcontextprotocol/inspector .\inori-mcp.exe
修改 MCPClient.py 中第 51 行的 connect_to_server 函数的启动脚本:
server_params = StdioServerParameters(
command= 的路径,
args=[],
env=None
)
需要从 .env.sample 中创建 .env 文件,填入 OpenAI 兼容的大模型的基础 URL,并建议使用 QWQ-32B 模型(不推荐 DeepSeek 系列)。模型需要触发 ToolCall 并总结结果,最终返回书架中的书籍信息。