API MCP服务器

一个基于OpenAPI v3规范的通用API交互MCP服务器,可将API端点动态转换为AI助手可使用的工具。

  • by ryddle
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 ryddle/any-api-mcp

使用说明

任何API MCP服务器

一种MCP(模型上下文协议)服务器,设计用于与公开OpenAPI v3规范的任何API交互。服务器动态解析OpenAPI规范,并将API端点公开为人工智能助手可用的工具。

特性

  • 与任何API兼容:只需提供API的OpenAPI规范文件。
  • 多种身份验证方法:支持最常见的身份验证系统。
  • 灵活配置:通过JSON文件或环境变量。
  • 动态工具生成:自动将端点转换为MCP工具。

建筑

该项目使用以下技术和模式构建:

  • Node.js和TypeScript:运行时环境和基础语言。
  • 模型上下文协议(MCP)SDK:用途 @modelcontextprotocol/sdk 通过以下方式实现MCP服务器 stdio.
  • 模块化身份验证系统:支持多种身份验证类型的基于适配器的架构。
  • 动态工具生成:读取OpenAPI文件并将每个操作转换为MCP工具。

先决条件

  • Node.js(v16或更高版本)
  • 要公开的API必须可以通过网络访问。
  • API的OpenAPI规范文件(JSON或YAML)。

安装和建造

  1. 安装依赖项:

    npm install
    
  2. 编译TypeScript代码:

    npm run build
    

配置

配置可以通过两种方式完成:

选项1:配置文件(推荐)

创建一个 config.json 项目根目录中的文件:

{
  "apiUrl": "https://api.example.com",
  "openApiSpecPath": "./open-api.json",
  "serverName": "my-api-mcp",
  "serverVersion": "1.0.0",
  "auth": {
    "type": "bearer-endpoint",
    "endpoint": "/auth/token",
    "method": "POST",
    "body": {
      "key": "${API_KEY}",
      "secret": "${API_SECRET}"
    },
    "tokenPath": "token"
  }
}

看 config.example.json 更多配置示例。

选项2:环境变量

创建一个 .env 项目根目录中的文件:

API_URL=http://localhost:8080/api
AUTH_TYPE=bearer-endpoint
AUTH_ENDPOINT=/auth/token
AUTH_TOKEN_PATH=token
API_KEY=your_api_key
API_SECRET=your_api_secret

支持的身份验证类型

1.无身份验证(none)

{
  "auth": {
    "type": "none"
  }
}

2.HTTP基本认证(basic)

{
  "auth": {
    "type": "basic",
    "username": "myuser",
    "password": "mypassword"
  }
}

3.API密钥(api-key)

支持通过标头、查询参数或cookie发送:

{
  "auth": {
    "type": "api-key",
    "keyName": "X-API-Key",
    "keyValue": "your-api-key",
    "location": "header",
    "prefix": ""
  }
}

4.静态承载令牌(bearer-token)

对于未过期或由外部管理的令牌:

{
  "auth": {
    "type": "bearer-token",
    "token": "your-static-bearer-token"
  }
}

5.来自端点的承载令牌(bearer-endpoint)

从身份验证终结点获取令牌:

{
  "auth": {
    "type": "bearer-endpoint",
    "endpoint": "/auth/token",
    "method": "POST",
    "body": {
      "key": "${API_KEY}",
      "secret": "${API_SECRET}"
    },
    "tokenPath": "token",
    "expiresIn": 3600
  }
}

注:使用 ${VAR_NAME} 参考体内的环境变量。

6.OAuth2客户端凭据(oauth2-client-credentials)

{
  "auth": {
    "type": "oauth2-client-credentials",
    "tokenUrl": "https://auth.example.com/oauth/token",
    "clientId": "your-client-id",
    "clientSecret": "your-client-secret",
    "scopes": ["read", "write"],
    "credentialsInBody": false
  }
}

环境变量

变量 描述
CONFIG_PATH 配置文件的路径
API_URL API基本URL
OPENAPI_SPEC_PATH OpenAPI规范文件的路径
SERVER_NAME MCP服务器名称
AUTH_TYPE 身份验证类型
API_KEY API密钥(用于承载器端点)
API_SECRET API机密(用于承载器端点)

MCP客户端中的使用

要在支持MCP的Claude Desktop或VS Code扩展等工具中使用此服务器:

{
  "mcpServers": {
    "any-api": {
      "command": "node",
      "args": ["/absolute/path/to/any-api-mcp/build/index.js"]
    }
  }
}

确保更换 /absolute/path/to/any-api-mcp/ 使用克隆此存储库的实际路径。

扩展身份验证系统

要添加新的身份验证类型,请执行以下操作:

  1. 在中创建新适配器 src/auth/adapters/ 延伸 BaseAuthAdapter
  2. 将新类型添加到 AuthType 在 src/auth/types.ts
  3. 创建相应的配置界面
  4. 在中注册适配器 AuthFactory.createAdapter() 在 src/auth/factory.ts

发展

要更改服务器,请执行以下操作:

  1. 修改中的代码 src/.
  2. 重新编译 npm run build.
  3. 重新启动MCP客户端以重新加载更改。