OpenAPI到MCP Symfony
将Symfony API OpenAPI规范转换为工作的MCP(模型上下文协议)服务器。
为什么是这个工具?
如果您有Symfony API(使用API平台、NelmioApiDocBundle或自定义OpenAPI文档),此工具会自动生成一个可运行的MCP服务器,将您的API端点公开为MCP工具。不再需要为每个端点手写每个工具。
特性
- 多个输入源:从本地文件或远程URL加载规格
- Symfony集成:专为API平台和NelmioApiDocBundle规范构建
- 认证:支持Bearer令牌、头中的API密钥、查询中的API密钥
- 分页:自动检测和规范常见的分页模式
- 安全:写入操作(POST、PUT、PATCH、DELETE)需要明确的选择加入
- 可读生成代码:生成的MCP服务器是干净、可编辑的TypeScript
支持的输入
- OpenAPI 3.0.x/3.1.x
- Swagger 2.0(带转换)
支持的身份验证模式
- 无
- 持有者令牌
- 标头中的API键
- 查询参数中的API键
支持分页
- 页数+每页/限制
- 偏移+限制
- 光标+限制
- Hydra分页(API平台)
快速入门
# Install
npm install -g openapi-to-mcp-symfony
# Validate a spec
openapi-to-mcp-symfony validate --input ./openapi.json
# Inspect operations
openapi-to-mcp-symfony inspect --input ./openapi.json
# Generate an MCP server
openapi-to-mcp-symfony generate \
--input ./openapi.json \
--output ./my-mcp-server \
--server-name my-api \
--auth bearerCLI命令
验证
检查生成器是否可以使用规范:
openapi-to-mcp-symfony validate --input ./openapi.json检查
生成前预览操作:
openapi-to-mcp-symfony inspect --input ./openapi.json生成
生成MCP服务器:
openapi-to-mcp-symfony generate \
--input ./openapi.json \
--output ./mcp-server \
--server-name my-api \
--auth bearer \
--base-url https://api.example.com选项:
-i, --input:OpenAPI规范文件或URL(必填)-o, --output:输出目录(必填)-s, --server-name:服务器名称-n, --namespace:工具命名空间前缀--auth:身份验证类型:无、承载、api密钥头、api密钥查询--base-url:API的基本URL--include-tags:要包含的逗号分隔标签--exclude-tags:要排除的逗号分隔标签--dangerous-writes:包括写入操作(POST、PUT、PATCH、DELETE)
初始化
创建配置文件:
openapi-to-mcp-symfony init --name my-project生成的服务器
运行后 generate,您将拥有一个完整的MCP服务器,其中包括:
src/index.ts-主服务器入口点src/api-client.ts-带有身份验证注入的HTTP客户端src/tools.ts-工具定义.env.example-环境模板package.json-依赖关系README.md-文件
运行生成的服务器
cd my-mcp-server
npm install
cp .env.example .env
# Edit .env with your API credentials
npm run build
npm start配置文件
您还可以使用配置文件而不是CLI标志:
// openapi-to-mcp.config.ts
import { defineConfig } from 'openapi-to-mcp-symfony'
export default defineConfig({
input: './openapi.json',
outputDir: './mcp-server',
serverName: 'my-api',
auth: 'bearer',
includeTags: ['users', 'posts'],
dangerousWrites: false,
})局限性
- 不支持回调和Webhook
- OAuth2流必须在外部处理(通过env提供令牌)
- 复杂的多部分上传可能不起作用
- v1不支持Cookie身份验证
路线图
看 todo.md 查看完整功能列表。
发展
# Build
npm run build
# Test
npm test
# Lint
npm run lint
# Format
npm run format许可证
麻省理工学院
