openapi-to-mcp
Expone endpoints de API como herramientas fuertemente tipadas desde una especificación OpenAPI. Soporta OpenAPI 2.0/3.0 en formato JSON o YAML, desde archivos locales o remotos.
Documentación
openapi-to-mcp
Usa tu especificación OpenAPI para exponer los endpoints de tu API como herramientas fuertemente tipadas.
Ejemplo básico para https://petstore3.swagger.io/ 🎉
{
"mcpServers": {
"petstore": {
"command": "openapi-to-mcp",
"args": [
"https://petstore3.swagger.io/api/v3/openapi.json"
]
}
}
}
Ejemplo más complejo, usando la API de Github:
{
"mcpServers": {
"github": {
"command": "openapi-to-mcp",
"args": [
"https://raw.githubusercontent.com/github/rest-api-description/refs/heads/main/descriptions/api.github.com/api.github.com.yaml",
"--bearer-token",
"github_pat_xxxxxx",
"--tool-naming-strategy",
"verbandpath"
]
}
}
}
Este ejemplo usa la autenticación con token bearer (con un Token de Acceso Personal de Github) y fuerza la estrategia de nombres de herramientas a "verbo y ruta", ya que los ids de operación de Github no son nombres de herramientas válidos.

Instalación
Como herramienta Nuget: openapi-to-mcp
dotnet tool install --global openapi-to-mcp
O descarga los ejecutables desde lanzamientos
Uso
Usage:
openapi-to-mcp <open-api> [options]
Arguments:
<open-api> You OpenAPI specification (URL or file) [required]
Options:
-t, --tool-naming-strategy <extension|extension_or_operationid_or_verbandpath|operationid|verbandpath> How the tool name should be computed [default: extension_or_operationid_or_verbandpath]
-h, --host-override Host override
-b, --bearer-token Bearer token
-o2, --oauth-2-grant-type <client_credentials|password|refresh_token> OAuth2 flow to be used
-o2_tu, --oauth-2-token-url OAuth2 token endpoint URL (override the one defined in your OpenAPI for your chosen OAuth2 flow)
-o2_ci, --oauth-2-client-id OAuth2 client id (for the client_credentials grant_type)
-o2_cs, --oauth-2-client-secret OAuth2 client secret (for the client_credentials grant_type)
-o2_rt, --oauth-2-refresh-token OAuth2 refresh token (for the refresh_token grant_type)
-o2_un, --oauth-2-username OAuth2 username (for the password grant_type)
-o2_pw, --oauth-2-password OAuth2 password (for the password grant_type)
-i, --instructions MCP instruction to be advertised by the server
--verbose Log more info (in sdterr) [default: False]
-?, -h, --help Show help and usage information
--version Show version information
Soporte de OpenAPI
- Actualmente, se soportan OpenAPI 2.0 y 3.0.
- 3.1 no (al menos hasta que microsoft/OpenAPI.NET lo soporte)
- Las especificaciones pueden ser JSON/YAML y locales (archivo) o remotas (URL)
- Solo se soportan $refs locales
Extensiones personalizadas de OpenAPI
Un conjunto de extensiones personalizadas está disponible para personalizar cómo se debe exponer tu API:
info.x-mcp-instructions(string): Instrucciones textuales expuestas por el servidor MCP durante el handshake de inicializaciónoperation.x-mcp-tool-name(string): Nombre de herramienta personalizadooperation.x-mcp-tool-description(string): Descripción de herramienta personalizadaoperation.x-mcp-tool-enabled(boolean): Habilita/deshabilita una operación específica (habilitada por defecto)
Características de MCP
Solo se soporta actualmente el transporte STDIO.
Herramientas
Las operaciones ("endpoints") de tu especificación OpenAPI se traducen a herramientas de MCP
- Todos los parámetros de ruta/consulta/cuerpo JSON se exponen (usando su esquema JSON)
- La respuesta se devuelve tal cual
- Por defecto, el nombre de la herramienta se calcula usando primero la extensión
operation.x-mcp-tool-name, luego el operation.operationId y luego{httpMethod}_{escaped_path}- La estrategia de nombres de herramientas se puede definir mediante la opción
--tool-naming-strategy. - ⚠️Las herramientas se descartan si su nombre no coincide con
^[a-zA-Z0-9_-]{1,64}$
- La estrategia de nombres de herramientas se puede definir mediante la opción
- Las descripciones de herramientas se extraen de la siguiente manera:
operation.x-mcp-tool-description??operation.description??path.description
Llamada a herramienta y host
Cuando se llama a una herramienta, el servidor MCP llamará al endpoint subyacente. Para determinar qué host llamar se usa una combinación de parámetros:
- la opción
--host-override - la URL del primer servidor de tu especificación si es una URL absoluta
- el host del OpenAPI remoto proporcionado
- de lo contrario, se lanza un error
Por ejemplo, ejecutando openapi-to-mcp https://petstore3.swagger.io/api/v3/openapi.json:
- https://petstore3.swagger.io/api/v3/openapi.json define un servidor, pero su URL es relativa (/api/v3)
- por lo que se usa el host de la URL de la propia especificación: https://petstore3.swagger.io y se le añade la ruta relativa del servidor
Autorización
Token Bearer
Se puede proporcionar un token como opción --bearer-token. Se proporcionará a todas las llamadas como el encabezado Authorization: Bearer {token}.
También se proporcionará al obtener una especificación remota.
OAuth2
Se soportan ClientCredentials, RefreshToken y Password.
Si tu especificación OpenAPI declara securitySchemes para esos flujos, se usará el tokenUrl correspondiente.
Cómo publicar
Crea una nueva etiqueta/versión 🤷