OpenAPI to MCP это врапер между API и MCP
На этих выходных уже в который раз пришлось пилить MCP обёртку над API, чтобы подключить его к агенту.
Надоело повторяться, решил сделать standalone-сервер, который в формате nocode генерит MCP-сервер по документации из OpenAPI/Swagger, а потом ещё и проксирует запросы из тулов на этот API в соответствии со спеками.
Допустим в документации API есть такие эндпоинты:
- GET /messages
- POST /messages
- GET /status
- GET /users
Прокси конвертирует их в тулы вот с такими именами:
- get_messages
- post_messages
- status
- users
Вызов же тула через MCP превращается в HTTP-запрос к API, ответ API через MCP возвращается обратно пользователю.
Запуск одним контейнером, вот к примеру демка OpenAPI:
docker run --rm -p 3100:3100 \
-e MCP_OPENAPI_SPEC=https://raw.githubusercontent.com/readmeio/oas-examples/refs/heads/main/3.1/json/petstore-simple.json \
-e MCP_API_BASE_URL=http://localhost:8080/v1 \
evilfreelancer/openapi-to-mcp:latest
Полный docker-compose,yaml тут.
Дальше можно подключить этот MCP куда угодно, например в Cursor вот так:
{
"mcpServers": {
"demo": {
"url": "http://localhost:3100/mcp"
}
}
}
После чего Cursor подтянет тулы и покажет их список, само собой можно подключить этот MCP сервер не только в курсор, а куда угодно.
Исходники: https://github.com/EvilFreelancer/openapi-to-mcp
Docker-образ: https://hub.docker.com/r/evilfreelancer/openapi-to-mcp
На этих выходных уже в который раз пришлось пилить MCP обёртку над API, чтобы подключить его к агенту.
Надоело повторяться, решил сделать standalone-сервер, который в формате nocode генерит MCP-сервер по документации из OpenAPI/Swagger, а потом ещё и проксирует запросы из тулов на этот API в соответствии со спеками.
Допустим в документации API есть такие эндпоинты:
- GET /messages
- POST /messages
- GET /status
- GET /users
Прокси конвертирует их в тулы вот с такими именами:
- get_messages
- post_messages
- status
- users
Вызов же тула через MCP превращается в HTTP-запрос к API, ответ API через MCP возвращается обратно пользователю.
Запуск одним контейнером, вот к примеру демка OpenAPI:
docker run --rm -p 3100:3100 \
-e MCP_OPENAPI_SPEC=https://raw.githubusercontent.com/readmeio/oas-examples/refs/heads/main/3.1/json/petstore-simple.json \
-e MCP_API_BASE_URL=http://localhost:8080/v1 \
evilfreelancer/openapi-to-mcp:latest
Полный docker-compose,yaml тут.
Дальше можно подключить этот MCP куда угодно, например в Cursor вот так:
{
"mcpServers": {
"demo": {
"url": "http://localhost:3100/mcp"
}
}
}
После чего Cursor подтянет тулы и покажет их список, само собой можно подключить этот MCP сервер не только в курсор, а куда угодно.
Исходники: https://github.com/EvilFreelancer/openapi-to-mcp
Docker-образ: https://hub.docker.com/r/evilfreelancer/openapi-to-mcp