kap MCP 服务器实现
使用说明
- 项目简介
- 该项目实现了一个 MCP 服务器端组件,能够接收来自 MCP 客户端的 JSON-RPC 请求,处理初始化与工具列表等方法,将请求转发给上游 MCP 服务器(如需要)并返回结果,同时提供对工具的访问控制、凭证管理和日志记录等能力。
- 主要功能点
- MCP 请求处理与路由:支持初始化、工具列表(tools/list)、工具调用(tools/call)等核心 MCP 方法,按服务器名称区分不同的上下文。
- 上游转发与凭证管理:能够向配置的上游 MCP 服务器转发请求,支持带令牌的认证和自定义头部,自动维护会话状态(如 session-id)。
- 权限控制与格式化输出:对工具调用进行基于允许/拒绝清单的过滤,记录访问日志,并返回符合 MCP 规范的 JSON-RPC 响应。
- 多服务器支持:通过配置文件(如 kap.toml)中的 MCP 服务器条目,注册并分离不同服务器的权限和行为。
- 安全与合规性:与容器侧车代理协作实现凭证管理、请求隔离和 deny 优先级等安全特性,确保外部请求无法绕过策略。
- 测试覆盖:包含针对 MCP 行为、工具过滤、远程转发及错误处理的单元测试,提升稳定性。
- 安装步骤
- 需要 Rust 工具链,项目通过 cargo 构建。典型步骤:
- 安装依赖与编译: cargo build --release
- 运行测试: cargo test
- 在实际场景中,MCP 服务器逻辑作为 kap 的侧车代理组件运行的一部分,与 devcontainers/容器网络代理配合工作。
- 需要 Rust 工具链,项目通过 cargo 构建。典型步骤:
- 服务器配置
- MCP 服务器的核心配置来自 kap.toml 的 [mcp.servers] 区段。每个服务器包含:
- name: 服务器名称,用于在配置、注册和日志中标识该 MCP 服务。
- headers: 上传至上游 MCP 服务器的静态头部键值对(可选)。
- allow: 允许调用的工具列表(如 "get_", "list_" 等模式)。
- deny: 拒绝调用的工具模式;拒绝优先级高于允许。
- 说明:MCP 客户端的认证信息不是直接写在该服务器条目中,而是在宿主机的 ~/.kap/auth 目录下的对应文件中管理。注册 MCP 服务器时通常通过 kap mcp add <name> <upstream> 完成,并由后端系统处理令牌与证书等细节,确保凭证仅在 sidecar/代理中传递。
- 服务器可通过 JSON 形式描述如下(注:以下非代码块,仅为示例结构,真实使用以 kap.toml 配置为准): { "name": "github", "headers": { "X-Api-Key": "${GITHUB_API_KEY}" }, "allow": ["get_", "list_", "search_"], "deny": ["delete_"] }
- 说明:MCP 客户端无需直接配置启动命令和参数;客户端通过 kap mcp add 注册上游 MCP 服务器地址,并以后续与 MCP 服务器的交互通过该服务器实现。
- MCP 服务器的核心配置来自 kap.toml 的 [mcp.servers] 区段。每个服务器包含:
- 基本使用方法
- 启动与注册
- 通过 kap mcp add 注册一个 MCP 服务器,按向导提供上游地址和可选头部信息(如需要 API Key)。
- 在项目的 kap.toml 中添加对应的 [mcp.servers] 条目,配置允许/拒绝的工具集合。
- 客户端交互
- MCP 客户端(LLM/代理)通过 MCP 协议的 JSON-RPC 进行初始化、获取工具列表、调用工具等操作,Kap 的 MCP 服务器会执行权限校验并转发到上游 MCP 服务器(如需)。
- 运行与维护
- 将 Kap 的 MCP 服务器配置正确后,确保网络环境允许与上游 MCP 的通信,并在需要时通过日志查看 denied 的请求。
- 启动与注册
- 注意事项
- MCP 的鉴权信息和授权策略在宿主机侧进行管理,服务端配置仅控制对工具的调用权限。
- 本实现提供了工具级别的过滤和 deny 优先级策略,确保安全性与灵活性。