Goke MCP 服务器适配器
使用说明
- 项目概览
- 该仓库包含一个专门用于将 Goke CLI 能力暴露为 MCP 服务端能力的实现库。核心功能包括把 CLI 命令注册为 MCP 工具、处理工具列出与调用、将命令输入转换为 MCP 需要的输入模式、以及对需要的 OAuth 授权提供完整的流程支持。
- 还提供一个将现有 CLI 转换为 MCP 服务端的实用工具,支持在本地通过 stdio 进行 MCP 服务器与客户端之间的通信,并具备对工具的自动发现、缓存、会话复用和错误处理等特性。
- 主要功能点
- 将 CLI 命令挂载为 MCP 工具:从现有命令中筛选可暴露为工具的命令,生成 MCP 需要的工具描述与输入 Schema。
- 注册和执行工具:实现 tools/list 与 tools/call 的请求处理,能够返回工具元数据、执行工具并返回结果(包括文本、JSON、以及嵌套对象)。
- JSON Schema 与强类型推断:将命令参数和选项通过 JSON Schema/Standard Schema 进行类型推断与强类型传递,支持布尔、字符串、数字、对象、数组等多种类型。
- 方案与错误处理:对无效工具、未发现工具、参数校验失败等情况给出 MCP 级错误并返回清晰信息。
- OAuth 授权支持(可选):在需要鉴权的 MCP 场景中,内置本地回调服务器和浏览器打开流程,完成授权后重试请求。
- 本地回调服务器:实现一个本地回调服务器,用于 OAuth 回调并提供友好提示界面。
- 多传输协议支持:在实现中通过 MCP SDK 提供的传输层实现对 stdio 的支持,便于在不同宿主环境中使用。
- 安装与集成步骤
- 将本库作为依赖引入到你的 Node.js 服务端应用中。
- 使用工具一览:
- createMcpAction:将某个 CLI 动作转化为一个 MCP 服务器启动动作,通常在某个命令执行时启动并暴露当前 CLI 的工具集为 MCP 工具。
- addCliToolsToMcp:将现有 CLI 的命令自动暴露为 MCP 工具,支持命令过滤与自定义工具名命名。
- 配置 MCP 服务器的启动方式(以 StdIO 为例):
- 在你的应用中定义一个启动点,当需要启动 MCP 服务时,通过提供的 API 启动一个 MCP 服务器实例,并通过 stdio 传输与 MCP 客户端连接。
- 若需要自定义传输,库提供了可替换传输工厂的选项,以便与不同运行环境对接。
- 服务器配置(JSON,供 MCP 客户端连接时参考) 为帮助 MCP 客户端配置连接参数,示例配置包含服务器名称、启动命令及参数说明,便于在不同环境中进行对接(注:具体命令路径请根据实际部署调整)。 { "serverName": "notion-mcp-cli", "command": "notion-mcp-cli", "args": ["mcp"], "description": "MCP 服务器,用于暴露 Notion 集成的 CLI 命令为 MCP 工具", "notes": "服务器默认名称若未提供将使用 CLI 名称(如 notion-mcp-cli)。该启动方式通常在子进程中通过 stdio 建立与 MCP 客户端的通信信道。请确保目标环境已安装并可执行 notion-mcp-cli。" }
- 基本使用方法
- 快速上手:
- 在一个已有的 CLI 应用中,使用库提供的接口,将需要暴露为 MCP 的命令通过 addCliToolsToMcp 进行注册。
- 使用 createMcpAction 将某个命令配置为在执行时启动一个 MCP 服务器,通过标准输入/输出与 MCP 客户端通信。
- 客户端连接后即可通过 MCP 调用工具、访问工具输入结构以及获取工具输出。
- 使用要点:
- MCP 客户端通过工具名称获取工具清单、调用工具并传递参数。工具的输入结构由命令签名及其选项推导而来,支持复杂的对象、数组及嵌套结构。
- 若使用 OAuth:当服务端请求需要鉴权时,库会启动本地回调服务器、打开浏览器完成鉴权、并在成功后自动重试失败请求。
- 支持多种传输场景:stdio、HTTP、WebSocket 等,按需要选择传输实现。
- 注意事项:
- 服务端与客户端之间的通信均基于 JSON-RPC 封装的工具列出与调用,错误信息会以 MCP 错误码返回并尽量提供可读的描述。
- 服务器端需要妥善管理会话、工具缓存以及权限控制,避免未授权调用导致的安全问题。
- 额外说明
- 本实现包含若干测试用例,覆盖工具自动发现、跨命名空间的多单词命令、错误处理、以及端到端的 MCP 客户端与服务器交互等场景,帮助确保在实际生产环境中具备稳定性与可维护性。