Form.io Universal Agent Gateway (UAG) - MCP 服务器实现

使用说明(简明可操作的要点,帮助开发者快速理解、部署与使用):

  • 项目简介

    • 该仓库实现了一个 MCP 服务器,用于在 AI 代理场景中向语言模型客户端提供企业级表单数据、工具调用与动态上下文模板渲染等能力。核心通过 MCP Server 对象注册工具、渲染 Prompt 模板、并通过一个 Express 服务器暴露 MCP 路径,支持 JSON-RPC 形式的请求/响应。
  • 主要功能点

    • MCP 接口与传输
      • 使用 Model Context Protocol 的 MCP 服务器实现,支持通过 JSON-RPC 向客户端提供上下文信息和功能。
      • 使用基于流/HTTP 的传输实现(StreamableHTTPServerTransport),并在路由中提供 /mcp 路径供 MCP 客户端连接。
    • 资源与表单管理
      • 将 Form.io 的 Form、Resources 等作为 MCP 中的 Resources/Forms 暴露给 AI 客户端,支持按 uag 标签筛选与描述。
    • 内置与可扩展工具
      • 提供一组内置工具(如获取表单、获取表单字段、提交表单、查询提交、数据收集等),并支持通过配置覆盖(toolOverrides)来自定义工具名称、描述、输入模式和实现逻辑。
      • 支持自定义 Module,以扩展工具、资源、身份认证等能力。
    • Prompt 模板与渲染
      • 通过 UAGTemplate 对象渲染响应文本,具备模板缓存、错误提示、以及对 Nested/复杂数据结构的支持。
    • 会话与认证
      • MCP 交互遵循可配置的 PKCE 授权流程,路由中实现了基于 PKCE 的授权校验和 401 处理,确保在未认证情况下阻断访问。
    • 多种启动方式
      • 以 Node.js Express 应用形式直接启动,亦可通过 Docker 部署(仓库提供了示例 Docker Compose 配置)。
  • 安装与运行

    • 本地运行
      • 安装依赖后,直接运行 Node 应用(如 node index.js),需配置环境变量以连接 Open Source Form.io 服务或 Enterprise 服务(例如 PROJECT、BASE_URL、JWT_SECRET 等)。
    • Docker 部署
      • 仓库提供了 Docker Compose 的示例,支持在同一实例中同时部署 OSS 服务与 UAG,端口分配如 3000(OSS)与 3200(UAG)。
    • MCP 客户端配置要点
      • MCP 客户端(LLM 代理端)需要配置一个连接到 MCP 服务器的命令与参数,以建立与 MCP 服务器的 JSON-RPC 通道。通常配置包括服务器名称、启动命令与参数等,客户端不需要实现服务器端逻辑,仅通过指定的启动指令连接到 MCP 服务器即可。
  • 服务器配置(面向 MCP 客户端的配置说明,示例以便理解,非代码)

    • serverName: formio-uag
    • command: node
    • args: ["index.js"]
    • 备注: 以上配置用于在一个独立进程中启动 MCP 服务器,MCP 客户端应通过以下端点连接:HTTP 请求到 /mcp(默认端口 3200,实际端口可通过环境变量 PORT 调整)。在生产环境中,建议使用带证书的域名并按需设置反向代理与防火墙策略。
    • 说明:该配置属于 MCP 客户端需要的连接信息范畴,描述了服务器的启动命令与启动参数,客户端据此启动并连接到 MCP 服务器进行后续交互。
  • 基本使用方法

    • 部署阶段
      • 按需选择本地运行或 Docker 部署方式,确保 OSS Form.io、Enterprise 服务和 UAG 之间的网络连通性,以及必要的安全配置(OIDC/PKCE、JWT 秘钥等)。
    • 使用阶段
      • 启动 MCP 服务器进程后,MCP 客户端通过 /mcp 端点建立连接并开始 JSON-RPC 通信,LLM 客户端可通过 MCP 提供的工具集与表单/资源进行交互、获取动态上下文、执行提示模板等。
    • 常见工作流
      • 通过 get_forms、get_form_fields、collect_field_data 等工具,实现从表单列举到字段信息再到数据收集的闭环;通过 prompts 渲染模板,向 AI 代理提供可执行的上下文信息。
    • 运行时配置与调试
      • 使用 NODE/ENV 变量控制端口、JWT 秘密、BASE_URL、PROJECT 指向的 Form.io 服务等;在需要时可通过修改 module 配置覆盖工具描述与行为。

服务器信息