使用说明
OpenAPI MCP服务器
一个MCP(模型上下文协议)服务器,它导入OpenAPI YAML规范并将端点转换为MCP工具使用。这允许AI助手与OpenAPI规范描述的REST API进行交互。
特性
- OpenAPI 导入:从本地文件或URL加载OpenAPI规范
- 自动生成刀具:将API端点转换为MCP工具
- 请求/响应处理:完全支持HTTP方法、参数和请求体
- Docker支持:使用Docker容器轻松部署
- 灵活的配置:环境变量和命令行参数
快速开始
使用Docker(推荐)
-
创建环境配置:
cp .env.example .env # Edit .env with your API keys and configuration -
使用docker compose构建并运行: 这是最简单的开始方式。它使用中的设置
docker-compose.yml和.env.docker-compose up --build要使用其他规范文件,请编辑
volumes部分在docker-compose.yml. -
或者手动构建并运行:
# Build the Docker image using the Dockerfile in src/ docker build -t openapi-mcp-server -f src/Dockerfile . # Run with environment file, mounting the template spec docker run --rm -it --env-file .env -v ./template_openapi.yaml:/app/openapi.yaml openapi-mcp-server
地方发展
-
安装依赖项:
pip install -r src/requirements.txt -
创建环境配置:
cp .env.example .env # Edit .env with your API keys and configuration -
运行服务器: 服务器将使用
OPENAPI_SPEC_PATH或OPENAPI_SPEC_URL从你的.env文件。python -m src.openapi_mcp_server
配置
可以使用以下方式配置服务器:
环境变量
创建一个 .env 项目根目录中的文件(复制自 .env.example):
# OpenAPI specification source (use path or URL)
OPENAPI_SPEC_PATH=./template_openapi.yaml
# OPENAPI_SPEC_URL=https://petstore.swagger.io/v2/swagger.yaml
# Dynamic server configuration (replaces placeholders in OpenAPI spec)
SERVER_URL=https://petstore.swagger.io/v2
SERVER_DESCRIPTION=Pet Store Server
# API Authentication
API_KEY=your-api-key-here
PETSTORE_AUTH=Bearer your-auth-token-here
# Server configuration
LOG_LEVEL=INFO
DEBUG=false
OpenAPI规范占位符
您可以在OpenAPI规范中使用环境变量占位符:
servers:
- url: ${SERVER_URL}
description: ${SERVER_DESCRIPTION}
这些占位符将自动替换为您的 .env 服务器加载规范时的文件。
身份验证支持
服务器会自动包含来自环境变量的身份验证标头:
API_KEY:添加为api_key头球PETSTORE_AUTH:添加为Authorization头球
在OpenAPI规范中定义身份验证:
components:
securitySchemes:
api_key:
type: apiKey
name: api_key
in: header
petstore_auth:
type: apiKey
name: Authorization
in: header
security:
- api_key: []
- petstore_auth: []
OpenAPI支持
服务器支持OpenAPI 3.0规范,具有以下功能:
支持的操作
- GET、POST、PUT、DELETE、PATCH方法
- 路径参数(例如。,
/pet/{petId}) - 查询参数
- 标头参数
- 请求正文(JSON)
工具生成
每个API端点都成为一个MCP工具,具有:
- 名字:基于
operationId或由方法和路径自动生成 - 描述:来自
summary或description字段 - 输入架构:根据参数和请求体模式生成
工具生成示例
给定此OpenAPI端点:
/pet/{petId}:
get:
summary: Find pet by ID
operationId: getPetById
parameters:
- name: petId
in: path
required: true
schema:
type: integer
服务器生成MCP工具:
- 名字:
getpetbyid - 描述:“通过ID查找宠物”
- 输入:
{"petId": 123}
OpenAPI文件示例
该存储库包括一个有用的OpenAPI规范示例:
template_openapi.yaml:简单的宠物店API用于基本测试
Docker使用
编译选项
# Build using the Dockerfile in the src directory
docker build -t openapi-mcp-server -f src/Dockerfile .
# Build with custom tag
docker build -t my-org/openapi-mcp-server:v1.0 -f src/Dockerfile .
运行时选项
# Mount a local OpenAPI file
# The container expects the file at /app/openapi.yaml
docker run --rm -it --env-file .env -v ./template_openapi.yaml:/app/openapi.yaml openapi-mcp-server
# Use environment variables to fetch a remote spec
docker run --rm -it -e OPENAPI_SPEC_URL=https://api.example.com/openapi.yaml openapi-mcp-server
发展
项目结构
openapi-mcp/
├── src/
│ ├── openapi_mcp_server/
│ │ ├── __init__.py
│ │ ├── __main__.py
│ │ └── server.py # Main server implementation
│ ├── Dockerfile
│ └── requirements.txt
├── template_openapi.yaml # Simple pet store example
├── docker-compose.yml
├── .env.example
├── LICENSE
└── README.md
关键组件
-
server.py:主MCP服务器实现- OpenAPI规范加载
- 从API端点生成工具
- HTTP请求执行
- 响应格式
-
__main__.py:作为模块运行的入口点
添加功能
要扩展服务器,请执行以下操作:
- 自定义身份验证:修改
_execute_api_call添加身份验证标头 - 响应格式:加强响应处理
_execute_api_call - 参数验证:在中添加验证
_generate_input_schema - 错误处理:改进错误消息和恢复
故障排除
常见问题
-
未找到OpenAPI文件
- 确保文件路径正确
- 检查文件权限
- 验证Docker卷装载
-
网络错误
- 检查远程URL的互联网连接
- 验证API服务器的可用性
- 检查防火墙设置
-
OpenAPI规范无效
- 使用在线验证器验证您的OpenAPI文件
- 确保它遵循OpenAPI 3.0格式
- 检查YAML中的语法错误
-
身份验证问题
- 验证在.env文件中是否设置了API密钥
- 检查是否加载了环境变量
- 确保API密钥名称与OpenAPI安全方案匹配
- 使用身份验证手动测试API端点
日志记录
服务器提供详细的日志记录。要增加详细程度,请设置 LOG_LEVEL=DEBUG 在你的 .env 文件。
贡献
- 分叉存储库
- 创建要素分支
- 进行更改
- 如果适用,添加测试
- 提交拉取请求
许可证
本项目遵循知识共享署名-非商业4.0国际许可协议(CC BY-NC 4.0)。
版权所有(c)2025 Steffen Hebestreit
您可以自由地:
- 分享 --以任何媒介或格式复制和重新分发材料
- 适应 --仅出于非商业目的对材料进行混音、转换和构建
根据以下条款:
- 归因 --您必须给予适当的信用,提供许可证的链接,并注明是否进行了更改
- 非商业用途 --您不得将该材料用于商业目的
请参阅 许可证 文件以获取完整详细信息或访问 https://creativecommons.org/licenses/by-nc/4.0/
