mcp-cli
使用说明
-
项目简介
- 本仓库实现了一个完整的 MCP 后端框架,包含用于托管资源、注册与执行工具、渲染并提供 Prompt 模板的服务端组件,以及用于与客户端通过 JSON-RPC 进行通信的 IPC 层。框架还实现了多传输通道(标准输入/输出、SSE、HTTP、WebSocket)以及会话管理、工具缓存和热重载等能力,旨在为 LLM 客户端提供安全、可扩展的上下文服务。
-
主要功能点
- Resources/Resources 数据访问与管理:后端可暴露并管理可被 LLM 客户端读取的资源与数据。
- Tools/工具注册与执行:支持将工具注册到 MCP 服务器端,LLM 客户端可以调用工具并获取结构化的响应。
- Prompts/提示模板:提供和渲染用于 LLM 交互的 Prompt 模板,便于定制化交互模式。
- 多传输协议支持:stdio、SSE、HTTP 等传输,服务器端实现统一的 JSON-RPC 协议处理。
- 会话管理与能力声明:对会话进行管理,记录工具调用、成本、令牌等元数据,并可按服务器状态、工具缓存进行统计。
- 动态热Reload:通过配置热加载实现服务器的增删改(如增加/移除服务器)。
- 资源与工具缓存:在 SQLite 数据库中缓存工具元数据,提升后续调用性能与离线可用性。
-
安装步骤
- 依赖与构建
- 需要 Bun 环境,执行 bun install 安装依赖。
- 运行构建:bun run build,将产出 dist 目录下的可执行二进制文件(mcx、mcpd、mcpctl)以及相关前端资源。
- 本地运行前需要准备配置和环境
- 创建独立的工作目录用于测试与隔离,配置 MCP 服务端的连接信息和服务器清单。
- 服务器配置文件通常位于 ~/.mcp-cli/servers.json,形如: { "mcpServers": { "echo": { "command": "bun", "args": ["test/echo-server.ts"] } } }
- 流程概览:mcx 调用服务器工具时,后台会通过 mcpd 守护进程进行连接管理,首次调用时若未启动则自动启动守护进程并建立服务器池连接。
- 依赖与构建
-
服务器配置(注:MCP 客户端需要的配置信息请以 JSON 格式提供给服务器,示例仅供参考)
- 服务器名称: echo
- 启动命令: bun
- 参数: test/echo-server.ts
- 说明: 该服务器使用 stdio 传输方式,后端通过一个本地脚本模拟一个“回声”工具,便于集成测试与演示。 备注:下述配置信息仅用于 MCP 客户端进行连接,实际 MCP 客户端并不需要直接修改该仓库中的配置文件;该信息用于理解与对接 MCP 服务端的工作方式。
- 配置示例(JSON)说明
- server: "echo"
- command: "bun"
- args: ["test/echo-server.ts"]
- transport: "stdio"(本实现支持多传输,示例以 stdio 为主)
- 说明:该配置用于演示如何把一个服务器暴露给 MCP 客户端,客户端通过 MCP 端点调用工具。若要在实际环境中使用多个传输,请结合服务端实现的传输适配器进行配置。
-
基本使用方法
- 启动与连接
- 启动 mcpd 守护进程后,守护进程会负责启动和管理 MCP 服务器、工具缓存、以及会话管理。
- MCP 客户端(如 mcx CLI)通过 Unix 域套接字与 mcpd 进行通信,发起 JSON-RPC 请求,例如读取工具、调用工具等。
- 调用工具
- 使用 mcx 调用某服务器的工具,例如 mcx <server> <tool> '{ "arg": "value" }',后台将返回 JSON-RPC 响应内容。
- 热更新
- 修改服务器配置后,守护进程会在 debounce 时间后自动重新加载,新增服务器、删除服务器、修改服务器配置都会在状态中体现。
- 查看与调试
- mcx ls 可以列出当前配置的服务器及其工具数量。
- mcx status 可以查看守护进程状态、正在运行的服务器和数据库状态。
- 启动与连接
-
重要说明
- MCP 客户端需要的核心能力包括:注册服务器、获取工具信息、执行工具调用、获取工具输出、以及配置与会话相关的信息。仓库中实现的服务端包含 IpcServer、ServerPool、AliasServer、ClaudeServer 等组件,覆盖上述能力并提供多传输层的实现。
- 具体服务器实现和工具定义在 test 目录和 core/daemon 相关模块中,具备完整的服务器行为、工具执行流程和会话状态管理。