OpenAPI到MCP转换器

自动将OpenAPI规范转换为模型上下文协议(MCP)工具,实现AI代理与现有REST API的无缝集成。

  • by Cronos402
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 Cronos402/openapi-mcp

使用说明

Cronos402 OpenAPI MCP转换器

自动将OpenAPI规范转换为模型上下文协议(MCP)工具。

生产URL:https://openapi.cronos402.dev

概述

OpenAPI MCP服务弥合了传统REST API和模型上下文协议之间的差距。它读取OpenAPI/Swagger规范并动态生成MCP工具,允许AI代理通过标准化的MCP接口与任何REST API交互。这使得AI代理能够与现有API进行即时集成,而无需手动开发包装器。

建筑

  • 框架:使用TypeScript的Express.js
  • 解析器:OpenAPI 3.x规范解析器
  • 发电机:动态MCP工具生成
  • 验证:请求/响应的JSON模式验证
  • 缓存:性能规格缓存
  • 协议:模型上下文协议(MCP)HTTP传输

特性

  • OpenAPI到MCP工具的自动转换
  • 支持OpenAPI 3.x规范
  • 从API端点生成动态工具
  • 请求/响应验证
  • 身份验证标头转发
  • 参数类型映射
  • 错误处理和转换
  • 规范缓存
  • 与所有MCP客户端兼容

快速开始

发展

pnpm install
pnpm dev

服务器在上运行 http://localhost:3001

构建

pnpm build
pnpm start

环境变量

PORT=3001
CACHE_ENABLED=true
CACHE_TTL=3600

用法示例

将OpenAPI规范转换为MCP

提供OpenAPI规范URL:

curl -X POST https://openapi.cronos402.dev/convert \
  -H "Content-Type: application/json" \
  -d '{
    "openApiUrl": "https://api.example.com/openapi.json"
  }'

该服务在以下位置生成MCP端点:

https://openapi.cronos402.dev/mcp/{spec-id}

使用CLI连接

npx cronos402 connect --urls https://openapi.cronos402.dev/mcp/your-spec-id

Claude桌面配置

{
  "mcpServers": {
    "My REST API": {
      "command": "npx",
      "args": [
        "cronos402",
        "connect",
        "--urls",
        "https://openapi.cronos402.dev/mcp/spec-id",
        "--api-key",
        "your_api_key"
      ]
    }
  }
}

编程访问

import { Client } from '@modelcontextprotocol/sdk/client/index.js';
import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';

const transport = new StreamableHTTPClientTransport(
  new URL('https://openapi.cronos402.dev/mcp/spec-id')
);

const client = new Client(
  { name: 'my-app', version: '1.0.0' },
  { capabilities: {} }
);

await client.connect(transport);

// List all tools generated from OpenAPI spec
const tools = await client.listTools();

// Call REST API endpoint as MCP tool
const result = await client.callTool({
  name: 'get_users',
  arguments: { page: 1, limit: 10 }
});

API终点

POST/转换

将OpenAPI规范转换为MCP。

请求:

{
  "openApiUrl": "https://api.example.com/openapi.json",
  "name": "My API",
  "authentication": {
    "type": "bearer",
    "token": "optional_token"
  }
}

答复:

{
  "specId": "abc123",
  "mcpUrl": "https://openapi.cronos402.dev/mcp/abc123",
  "toolCount": 15
}

GET/mcp/:规范

转换规范的MCP端点。

GET/规格/:规格ID

检索规范元数据。

删除/规格/:规格ID

删除缓存的规范。

运作原理

转换过程

  1. 解析:阅读OpenAPI规范
  2. 验证:确保规范是有效的OpenAPI 3.x
  3. 生成:为每个端点创建MCP工具
    • 工具名称来自 operationId
    • 来自路径/查询/正文参数的参数
    • 来自请求/响应定义的架构
  4. 缓存:存储规范和工具
  5. 服务:为工具调用提供MCP端点

工具映射

OpenAPI端点映射到MCP工具:

# OpenAPI
paths:
  /users/{id}:
    get:
      operationId: getUser
      parameters:
        - name: id
          in: path
          schema:
            type: string

成为MCP工具:

{
  "name": "getUser",
  "description": "Get user by ID",
  "inputSchema": {
    "type": "object",
    "properties": {
      "id": { "type": "string" }
    },
    "required": ["id"]
  }
}

请求流

MCP Client → OpenAPI-MCP → REST API
              ↓
         Convert tool call to HTTP request
              ↓
         Execute REST call
              ↓
         Convert response to MCP format

认证

转换器支持身份验证转发:

{
  "openApiUrl": "https://api.example.com/openapi.json",
  "authentication": {
    "type": "bearer",
    "token": "your_token"
  }
}

令牌转发到 Authorization 头到API。

测试

# Run all tests
pnpm test

# Watch mode
pnpm test:watch

# Coverage
pnpm test:coverage

部署

生产建设

pnpm build
NODE_ENV=production pnpm start

码头工人

FROM node:20-alpine
WORKDIR /app
COPY package.json pnpm-lock.yaml ./
RUN npm install -g pnpm && pnpm install --frozen-lockfile
COPY . .
RUN pnpm build
EXPOSE 3001
CMD ["pnpm", "start"]

环境要求

  • Node.js 20+
  • 缓存Redis(可选)
  • 生产环境中的HTTPS端点

监控

  • GET /health -服务健康检查
  • GET /metrics -普罗米修斯指标
  • GET /specs -列出所有缓存的规范

局限性

  • 仅限OpenAPI 3.x(不支持2.0)
  • 大规格可能会影响性能
  • 仅限于承载/API密钥的身份验证类型
  • 不完全支持文件上传端点

资源

许可证

麻省理工学院