Explicit 是一个 Ruby on Rails 库,旨在帮助开发者自动生成 REST API 文档、在运行时强制验证请求参数和响应格式,并能将这些文档化的 API 接口自动转化为 Model Context Protocol (MCP) 工具,供大型语言模型 (LLM) 客户端使用。

主要功能点

  • REST API 接口定义与文档生成: 使用简洁的 Ruby DSL 定义 API 接口的路由、参数、请求头、响应和示例,自动生成美观的 HTML 文档页面和 Swagger/OpenAPI 规范。
  • 运行时数据验证: 基于定义的接口规范,在控制器层面对请求参数进行严格的格式和类型验证,确保数据质量和安全性。
  • MCP 服务器功能: 将已定义的 API 接口暴露为 LLM 可调用的工具 (Tools)。服务器负责解析 LLM 客户端通过 JSON-RPC 发送的工具调用请求,将其路由到相应的 API 控制器执行,并将结果封装回传。
  • 工具能力声明: 自动根据 API 定义生成 MCP 工具清单 ('tools/list'),包含工具名称、描述、输入参数 schema 等信息,方便 LLM 客户端理解和调用。
  • 安全性: 提供 'authorize' 方法用于验证 MCP 请求来源,支持自定义授权逻辑,并可代理认证信息到后端的 REST API 调用。

安装步骤

  1. 在 Rails 项目的 'Gemfile' 中添加以下行:
    gem "explicit", "~> 0.2"
  2. 运行 'bundle install' 安装依赖。
  3. 根据需要配置 API 定义和 MCP 服务器(详见基本使用方法)。

服务器配置 (供 MCP 客户端参考)

该 MCP 服务器实现是作为一个 Rails Engine 运行在标准的 Rails HTTP 服务器内的。LLM 客户端需要连接到运行中的 Rails 应用的特定 HTTP 端点。

MCP 客户端的连接配置通常需要以下信息(实际配置格式取决于客户端):

  • 'protocol': 通常是 '"http"' 或 '"https"'
  • 'host': 运行 Rails 应用的服务器地址
  • 'port': Rails 应用监听的端口
  • 'path': MCP 服务器 Engine 挂载的 URL 路径 (例如,如果在 Rails 'routes.rb' 中 mount 在 '/api/v1/mcp',则 path 为 '/api/v1/mcp')
  • 'server name': 服务器在 MCP 协议中声明的名称 (例如,'"My app"',在构建 'Explicit::MCPServer' 时定义)
  • 'protocolVersion': 服务器支持的 MCP 协议版本 (例如,'"2024-11-05"')

注意:MCP 客户端配置中的 'command' 和 'args' 参数通常用于启动独立的 MCP 服务器进程(如 Stdio 模式)。对于这种基于 HTTP 的实现,您需要确保承载 'Explicit::MCPServer' 的 Rails 应用正在运行(例如,通过运行 'bundle exec rails server'),MCP 客户端通过 HTTP 连接到对应的 URL 端点进行通信。

基本使用方法

  1. 定义 API 请求: 在 Rails 控制器或单独的文件中,使用 'Explicit::Request.new' 定义接口规范(包括路由、参数、响应等)。
  2. 暴露为 MCP 工具: 使用 'Explicit::MCPServer.new' 创建一个 MCP 服务器实例,并通过 'add' 方法将定义好的 'Explicit::Request' 对象添加到服务器中,即可将其作为工具暴露给 LLM。
  3. 挂载服务器: 在 Rails 应用的 'config/routes.rb' 文件中,使用 'mount' 方法将 'Explicit::MCPServer' 实例挂载到一个 URL 路径,例如:
    # config/routes.rb
    Rails.application.routes.draw do
      mount MyApp::API::V1::MCPServer => "/api/v1/mcp"
    end
  4. 实现授权 (可选但推荐): 在 'Explicit::MCPServer' 实例中实现 'authorize' 方法来验证传入的 MCP 请求,确保只有授权的客户端才能调用工具。

信息

分类

开发者工具