inori-mcp

inori-mcp

0

This project is a simple implementation of a Model Context Protocol (MCP) Server using both Go and Python. It helps users understand basic MCP workflows without external API dependencies, primarily supporting book search functionalities using specified input parameters.

A very simple MCP Server

本项目分别使用Go和Python实现了一个最简单的MCP Server, 并使用一个mcp client去调用。本项目不依赖任何外部API, 你可以很方便的理解一个简单的MCP工作流。

情景假设: 书架编号A,B,C,D有4架子书, 我需要大模型帮我查对应编号的书
  • MCP 工具的Go实现,
  • MCP工具的python实现
  • python工作流

编写方法:

规定MCP的入参, json参数名字起的尽量容易被大模型理解。

type BookShelfParams struct {
	BookShelfId string `json:"book_shelf_id" jsonschema:"required,description=The ID of the book shelf"`
}

工具核心逻辑, 这里可以替换成任意外部API, 最后Stdio需要返回一个字符串。

func bookSearchHandler(ctx context.Context, args BookShelfParams) (*mcp.CallToolResult, error) {
    // 逻辑
    return mcp.NewToolResultText("返回结果:xxxx"), nil
}

编写该MCP的名称和说明, 尽量容易人类理解的语言

var BookSearchTool = InoriMCP.MustTool(
	"book-search",
	"图书搜索工具",
	bookSearchHandler,
)

最后写入口函数

func AddBookSearchTools(mcp *server.MCPServer) {
	BookSearchTool.Register(mcp)
}

在main.go中, 加入这个工具

tools.AddBookSearchTools(s)

build:  go build -o inori-mcp.exe ./cmd/inori-mcp

mcp的启动方式: mcp.exe

python-mcp和go-mcp只差启动方式。

调试

安装node环境, 使用inspector, 先Connect然后就可以输入A,B,C,D看看是否返回书架里的书

  • npx -y @modelcontextprotocol/inspector .\inori-mcp.exe

启动Client与MCP联动

  • python client/client.py

只需要更改中51行的connect_to_server的启动脚本即可。

        server_params = StdioServerParameters(
            command=<mcp.exe>的路径,
            args=[],
            env=None
        )

需要从.env.sample中创建.env, 填入OpenAI Compatible大模型的base_url, 模型建议使用QWQ-32B(不建议DeepSeek系列)

模型需要触发ToolCall并总结, 最后返回书架的书。