项目简介

MCP-OpenAPI Server 是一个桥梁,它允许 AI 智能体通过 模型上下文协议 (MCP) 发现和交互您现有的 OpenAPI 定义的 API 接口。通过将 OpenAPI 服务作为 MCP 工具暴露,并提供适当的类型、身份验证和选择性的端点暴露,它简化了云端 AI 智能体与外部服务的集成,无需开发自定义工具。

主要功能点

  • SSE 传输: 使用 SSE 传输协议实现 MCP,适用于多租户服务器端架构。每个 OpenAPI 服务在单独的路由 '<host>/<namespace>/sse' 下可用。
  • 选择性路由暴露: 使用正则表达式选择仅暴露您希望 AI 智能体感知的路由/工具。
  • 身份验证转发: 通过转发适当的授权标头和/或查询参数,在多个用户之间共享相同的 MCP 工具。
  • 类型安全: 基于 OpenAPI schema 生成具有类型化参数的工具,支持嵌套对象和复杂 schema。

安装步骤

本地运行 (推荐使用 uv):

  1. 确保已安装 uv
  2. 克隆仓库到本地。
  3. 在仓库根目录下,使用 uv 安装依赖:
    uv pip install .

Docker 运行:

  1. 确保已安装 Docker。
  2. 克隆仓库到本地。
  3. 在仓库根目录下,构建 Docker 镜像:
    docker build -t mcp-openapi .

服务器配置

服务器配置通过 'servers.yaml' 文件进行,以下是一个示例配置:

servers:
  - namespace: stripe # 命名空间,用于客户端识别
    name: Stripe API # 工具名称,展示给 LLM
    url: https://raw.githubusercontent.com/stripe/openapi/refs/heads/master/openapi/spec3.yaml # OpenAPI 规范 URL
    base_url: https://api.stripe.com # 基础 URL,用于请求转发
    forward_headers: # 需要转发的请求头
      - Authorization
    paths: # 需要暴露的 API 路径,使用正则表达式
      - /v1/customers$

  - namespace: zendesk
    name: Zendesk API
    url: https://developer.zendesk.com/zendesk/oas.yaml
    base_url: https://{subdomain}.zendesk.com
    forward_headers:
      - Authorization
    paths:
      - /api/v2/tickets$

  - namespace: weather
    name: Open Weather API
    url: https://gist.githubusercontent.com/mor10/6fb15f2270f8ac1d8b99aa66f9b63410/raw/0e2c4ed43eb4c126ec2284bc7c069de488b53d99/openweatherAPI.json
    base_url: https://api.openweathermap.org
    paths:
      - /data/2.5/weather
    forward_query_params: # 将请求头转发为查询参数
      - x-open-weather-app-id: appid
    timeout: 0.5

MCP 客户端配置示例 (JSON 格式):

假设您配置了 Stripe API,以下是 MCP 客户端 (例如 LangChain MCP Client) 的配置示例,用于连接到 MCP-OpenAPI Server:

{
  "server_name": "stripe_server",
  "command": "uv",
  "args": ["run", "main.py"],
  "namespace_configs": {
    "stripe": {
      "url": "http://localhost:8000/stripe/sse",
      "transport": "sse",
      "headers": {
        "Authorization": "Bearer YOUR_STRIPE_API_KEY"  // 请替换为您的 Stripe API 密钥
      }
    }
  }
}

参数注释:

  • 'server_name': MCP 服务器的名称,客户端内部标识符。
  • 'command': 启动 MCP-OpenAPI Server 的命令,例如 'uv' 或 'python'。
  • 'args': 启动命令的参数,例如 'run main.py'。
  • 'namespace_configs': 针对不同 namespace 的配置,例如 'stripe'。
    • 'stripe': 命名空间名称,与 'servers.yaml' 中配置的 namespace 一致。
      • 'url': MCP-OpenAPI Server 中 Stripe API 的 SSE 端点 URL。
      • 'transport': 传输协议,这里使用 'sse' (Server-Sent Events)。
      • 'headers': 可选的请求头,例如用于身份验证的 'Authorization' 头。

请注意: 您需要根据实际情况修改 'YOUR_STRIPE_API_KEY' 为您自己的 Stripe API 密钥,并确保 MCP-OpenAPI Server 运行在 'localhost:8000' 或您配置的地址和端口上。

基本使用方法

  1. 启动 MCP-OpenAPI Server: 根据您的选择 (本地或 Docker) 启动服务器。
  2. 配置 MCP 客户端: 根据您使用的 MCP 客户端 (例如 LangChain MCP Client),配置连接信息,包括服务器地址、端口、命名空间和必要的身份验证信息。
  3. 使用 AI 智能体: 在您的 AI 智能体应用中,通过 MCP 客户端调用 MCP 工具。工具名称将基于 OpenAPI 规范中的路径和操作 ID 生成。例如,Stripe API 的 'GET /v1/customers' 路径可能会生成名为 'get_customers' 的工具。

请参考仓库中的 'client-examples' 目录下的示例代码,了解如何使用低级别客户端和 LangChain 集成来与 MCP-OpenAPI Server 进行交互。

信息

分类

网页与API