APTL 基于 Model Context Protocol 的 MCP 服务端

使用说明

  • 项目简介
    • 该仓库实现了一个面向 MCP 客户端的服务器端框架,核心职责包括:托管和管理资源(Resources)、注册与执行 Tools、以及提供面向 LLM 客户端的 API 能力。服务器通过 JSON-RPC 与客户端通信,支持多种传输通道并具备会话管理与能力声明能力,适用于以 MCP 为基础的上下文服务场景。
  • 主要功能点
    • MCP 协议核心能力:实现对 MCP 客户端的初始化握手、工具/资源查询、工具调用等请求的处理,以及对返回结果的标准化封装。
    • 资源与工具管理:提供资源、工具的注册、查询、执行能力;包含 API、SSH 等多种执行上下文。
    • 会话与能力声明:支持会话状态管理、能力清单暴露,便于客户端了解服务端具备的能力。
    • 多传输协议扩展:设计上可扩展至 Stdio、SSE、WebSocket 等传输,并在实现中提供可替代的传输能力。
    • 拓展点清晰:包含工具定义生成、工具处理器、API 工具、以及对外部系统的集成入口(HTTP 客户端、SSH 管理等)。
  • 安装与运行
    • 构建 MCP 服务:进入 mcp 目录,构建各个服务器实现(如 mcp-red、mcp-wazuh、mcp-indexer 等),可通过仓库提供的脚本进行批量构建。
    • 启动服务:每个 MCP 服务器在构建后提供一个入口(二进制或脚本),通过该服务器的入口启动后,服务器端将对外暴露 MCP 对外接口,供 MCP 客户端连接。
    • 客户端连接:MCP 客户端需要配置服务器的启动命令(command)及参数(args),以建立与 MCP 服务器的连接(JSON-RPC 请求/响应)。
  • 服务器配置(JSON 配置示例说明)
    • 服务器配置为一个 JSON 对象,包含以下关键字段(非代码文本描述):
      • server:服务器级信息,例如名称、版本、描述、工具前缀、目标容器名称、配置键等,用以确定对接的容器与环境。
      • lab:实验场景的元信息,如实验名称与网络子网等,便于服务器在上下文中理解网络与资源分布。
      • containers:一个映射,定义需要托管/启用的容器标识及其网络、SSH 连接信息、是否启用等属性。客户端在连接时会用到这些信息来构造对目标容器的访问上下文。
      • api(可选):若 MCP 服务器需要对外提供 HTTP/API 能力,则包含 baseUrl、认证信息、超时等设置。
      • queries(可选):可选的预定义查询列表,用于 API 相关工具的模板化调用。
    • 注释性说明:上述配置仅用于 MCP 服务器在启动时自我了解运行环境,MCP 客户端不需要、也不应依赖这些内部配置的细节,客户端只需要知道服务器启动命令及参数来建立连接。
  • 基本使用方法
    • 构建与启动:
      • 构建所有 MCP 服务器:执行仓库提供的构建脚本,逐个编译或打包 mcp-*/build/index.js。
      • 启动单个 MCP 服务器:运行对应服务器的可执行入口,服务器将通过 MCP 协议对外提供服务。
    • 客户端接入与交互:
      • 客户端(如 Claude/Cursor/CLINE 等)按 MCP 的标准读取服务器入口、通过 JSON-RPC 发送初始化、工具列表、工具调用等请求,并接收结构化的 JSON-RPC 响应。
    • 调试与扩展:
      • 如需扩展传输协议,可在现有实现框架上新增传输层适配器(如 SSE、WebSocket 等)的支持。
  • 维护与验证
    • 本仓库包含完整的 MCP 服务器实现及相关工具/ API 定义、处理器、 tracing、SSH/HTTP 集成等模块,具备清晰的模块边界和单元测试覆盖,便于在本地/CI 中进行验证。

服务器信息