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/容器网络代理配合工作。
  • 服务器配置
    • 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 服务器的交互通过该服务器实现。
  • 基本使用方法
    • 启动与注册
      • 通过 kap mcp add 注册一个 MCP 服务器,按向导提供上游地址和可选头部信息(如需要 API Key)。
      • 在项目的 kap.toml 中添加对应的 [mcp.servers] 条目,配置允许/拒绝的工具集合。
    • 客户端交互
      • MCP 客户端(LLM/代理)通过 MCP 协议的 JSON-RPC 进行初始化、获取工具列表、调用工具等操作,Kap 的 MCP 服务器会执行权限校验并转发到上游 MCP 服务器(如需)。
    • 运行与维护
      • 将 Kap 的 MCP 服务器配置正确后,确保网络环境允许与上游 MCP 的通信,并在需要时通过日志查看 denied 的请求。
  • 注意事项
    • MCP 的鉴权信息和授权策略在宿主机侧进行管理,服务端配置仅控制对工具的调用权限。
    • 本实现提供了工具级别的过滤和 deny 优先级策略,确保安全性与灵活性。

服务器信息