OpenAPI to MCP Server
Una herramienta para crear servidores MCP a partir de especificaciones OpenAPI/Swagger, permitiendo que asistentes de IA interactúen con tus APIs.
Documentación
OpenAPI to MCP Server
Una herramienta que crea servidores MCP (Model Context Protocol) a partir de especificaciones OpenAPI/Swagger, permitiendo que los asistentes de IA interactúen con tus APIs. Crea tus propios MCP personalizados y con tu marca para APIs o servicios específicos.
Descripción general
Este proyecto crea un servidor MCP dinámico que transforma especificaciones OpenAPI en herramientas MCP. Permite la integración fluida de APIs REST con asistentes de IA mediante el Protocolo de Contexto de Modelo (Model Context Protocol), convirtiendo cualquier API en una herramienta accesible para IA.
Características
- Carga dinámica de especificaciones OpenAPI desde archivos o URLs HTTP/HTTPS
- Soporte para OpenAPI Overlays cargados desde archivos o URLs HTTP/HTTPS
- Mapeo personalizable de operaciones OpenAPI a herramientas MCP
- Filtrado avanzado de operaciones mediante patrones glob tanto para operationId como para rutas URL
- Manejo integral de parámetros con preservación de formato y metadatos de ubicación
- Manejo de autenticación de API
- Metadatos de OpenAPI (título, versión, descripción) utilizados para configurar el servidor MCP
- Descripciones jerárquicas de respaldo (descripción de operación → resumen de operación → resumen de ruta)
- Soporte de cabeceras HTTP personalizadas mediante variables de entorno y CLI
- Cabecera X-MCP para seguimiento e identificación de solicitudes de API
- Soporte para extensiones personalizadas
x-mcpa nivel de ruta para sobrescribir nombres y descripciones de herramientas
Uso con Asistentes de IA
Esta herramienta crea un servidor MCP que permite a los asistentes de IA interactuar con APIs definidas por especificaciones OpenAPI. La forma principal de usarla es configurando tu asistente de IA para que la ejecute directamente como una herramienta MCP.
Configuración en Claude Desktop
-
Asegúrate de tener Node.js instalado en tu computadora
-
Abre Claude Desktop y navega a Configuración > Desarrollador
-
Edita el archivo de configuración (o se creará si no existe):
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
- macOS:
-
Añade esta configuración (personalízala según sea necesario):
{
"mcpServers": {
"api-tools": {
"command": "npx",
"args": [
"-y",
"@tyk-technologies/api-to-mcp@latest",
"--spec",
"https://petstore3.swagger.io/api/v3/openapi.json"
],
"enabled": true
}
}
}
- Reinicia Claude Desktop
- Ahora deberías ver un icono de martillo en el cuadro de entrada del chat. Haz clic en él para acceder a tus herramientas de API.
Personalización de la Configuración
Puedes ajustar el array args para personalizar tu servidor MCP con varias opciones:
{
"mcpServers": {
"my-api": {
"command": "npx",
"args": [
"-y",
"@tyk-technologies/api-to-mcp@latest",
"--spec",
"./path/to/your/openapi.json",
"--overlays",
"./path/to/overlay.json,https://example.com/api/overlay.json",
"--whitelist",
"getPet*,POST:/users/*",
"--targetUrl",
"https://api.example.com"
],
"enabled": true
}
}
}
Configuración en Cursor
-
Crea un archivo de configuración en una de estas ubicaciones:
- Específico del proyecto:
.cursor/mcp.jsonen el directorio de tu proyecto - Global:
~/.cursor/mcp.jsonen tu directorio de inicio
- Específico del proyecto:
-
Añade esta configuración (ajústala según sea necesario para tu API):
{
"servers": [
{
"command": "npx",
"args": [
"-y",
"@tyk-technologies/api-to-mcp@latest",
"--spec",
"./path/to/your/openapi.json"
],
"name": "My API Tools"
}
]
}
- Reinicia Cursor o recarga la ventana
Uso con Vercel AI SDK
También puedes usar este servidor MCP directamente en tus aplicaciones JavaScript/TypeScript utilizando el cliente MCP del Vercel AI SDK:
import { experimental_createMCPClient } from 'ai';
import { Experimental_StdioMCPTransport } from 'ai/mcp-stdio';
import { generateText } from 'ai';
import { createGoogleGenerativeAI } from '@ai-sdk/google';
// Initialize the Google Generative AI provider
const google = createGoogleGenerativeAI({
apiKey: process.env.GOOGLE_API_KEY, // Set your API key in environment variables
});
const model = google('gemini-2.0-flash');
// Create an MCP client with stdio transport
const mcpClient = await experimental_createMCPClient({
transport: {
type: 'stdio',
command: 'npx', // Command to run the MCP server
args: ['-y', '@tyk-technologies/api-to-mcp', '--spec', 'https://petstore3.swagger.io/api/v3/openapi.json'], // OpenAPI spec
env: {
// You can set environment variables here
// API_KEY: process.env.YOUR_API_KEY,
},
},
});
async function main() {
try {
// Retrieve tools from the MCP server
const tools = await mcpClient.tools();
// Generate text using the AI SDK with MCP tools
const { text } = await generateText({
model,
prompt: 'List all available pets in the pet store using the API.',
tools, // Pass the MCP tools to the model
});
console.log('Generated text:', text);
} catch (error) {
console.error('Error:', error);
} finally {
// Always close the MCP client to release resources
await mcpClient.close();
}
}
main();
Configuración
La configuración se gestiona mediante variables de entorno, opciones de línea de comandos o un archivo de configuración JSON:
Opciones de Línea de Comandos
# Start with specific OpenAPI spec file
@tyk-technologies/api-to-mcp --spec=./path/to/openapi.json
# Apply overlays to the spec
@tyk-technologies/api-to-mcp --spec=./path/to/openapi.json --overlays=./path/to/overlay.json,https://example.com/api/overlay.json
# Include only specific operations (supports glob patterns)
@tyk-technologies/api-to-mcp --spec=./path/to/openapi.json --whitelist="getPet*,POST:/users/*"
# Specify target API URL
@tyk-technologies/api-to-mcp --spec=./path/to/openapi.json --targetUrl=https://api.example.com
# Add custom headers to all API requests
@tyk-technologies/api-to-mcp --spec=./path/to/openapi.json --headers='{"X-Api-Version":"1.0.0"}'
# Disable the X-MCP header
@tyk-technologies/api-to-mcp --spec=./path/to/openapi.json --disableXMcp
Variables de Entorno
Puedes configurarlas en un archivo .env o directamente en tu entorno:
OPENAPI_SPEC_PATH: Ruta al archivo de especificación OpenAPIOPENAPI_OVERLAY_PATHS: Rutas separadas por comas a archivos JSON de overlayTARGET_API_BASE_URL: URL base para llamadas a la API (sobrescribe los servidores OpenAPI)MCP_WHITELIST_OPERATIONS: Lista separada por comas de IDs de operación o rutas URL a incluir (admite patrones glob comogetPet*oGET:/pets/*)MCP_BLACKLIST_OPERATIONS: Lista separada por comas de IDs de operación o rutas URL a excluir (admite patrones glob, se ignora si se usa la lista blanca)API_KEY: Clave de API para la API de destino (si es necesaria)SECURITY_SCHEME_NAME: Nombre del esquema de seguridad que requiere la clave de APISECURITY_CREDENTIALS: Cadena JSON que contiene credenciales de seguridad para múltiples esquemasCUSTOM_HEADERS: Cadena JSON que contiene cabeceras personalizadas para incluir en todas las solicitudes de APIHEADER_*: Cualquier variable de entorno que comience conHEADER_se añadirá como cabecera personalizada (por ejemplo,HEADER_X_API_Version=1.0.0añade la cabeceraX-API-Version: 1.0.0)DISABLE_X_MCP: Establécelo entruepara deshabilitar la adición de la cabeceraX-MCP: 1a todas las solicitudes de APICONFIG_FILE: Ruta a un archivo de configuración JSON
Configuración JSON
También puedes usar un archivo de configuración JSON en lugar de variables de entorno u opciones de línea de comandos. El servidor MCP buscará archivos de configuración en el siguiente orden:
- Ruta especificada por la opción de línea de comandos
--config - Ruta especificada por la variable de entorno
CONFIG_FILE config.jsonen el directorio actualopenapi-mcp.jsonen el directorio actual.openapi-mcp.jsonen el directorio actual
Ejemplo de archivo de configuración JSON:
{
"spec": "./path/to/openapi-spec.json",
"overlays": "./path/to/overlay1.json,https://example.com/api/overlay.json",
"targetUrl": "https://api.example.com",
"whitelist": "getPets,createPet,/pets/*",
"blacklist": "deletePet,/admin/*",
"apiKey": "your-api-key",
"securitySchemeName": "ApiKeyAuth",
"securityCredentials": {
"ApiKeyAuth": "your-api-key",
"OAuth2": "your-oauth-token"
},
"headers": {
"X-Custom-Header": "custom-value",
"User-Agent": "OpenAPI-MCP-Client/1.0"
},
"disableXMcp": false
}
Un archivo de configuración de ejemplo completo con comentarios explicativos está disponible en config.example.json en el directorio raíz.
Precedencia de Configuración
Los ajustes de configuración se aplican en el siguiente orden de precedencia (de mayor a menor):
- Opciones de línea de comandos
- Variables de entorno
- Archivo de configuración JSON
Desarrollo
Instalación
# Clone the repository
git clone <repository-url>
cd openapi-to-mcp-generator
# Install dependencies
npm install
# Build the project
npm run build
Pruebas Locales
# Start the MCP server
npm start
# Development mode with auto-reload
npm run dev
Personalización y Publicación de Tu Propia Versión
Puedes usar este repositorio como base para crear tu propio servidor OpenAPI a MCP personalizado. Esta sección explica cómo hacer un fork del repositorio, personalizarlo para tus APIs específicas y publicarlo como paquete.
Fork y Personalización
-
Haz un fork del repositorio: Haz un fork de este repositorio en GitHub para crear tu propia copia que puedas personalizar.
-
Añade tus especificaciones OpenAPI:
# Create a specs directory if it doesn't exist mkdir -p specs # Add your OpenAPI specifications cp path/to/your/openapi-spec.json specs/ # Add any overlay files cp path/to/your/overlay.json specs/ -
Configura los ajustes predeterminados: Crea un archivo de configuración personalizado que se incluirá con tu paquete:
# Copy the example config cp config.example.json config.json # Edit the config to point to your bundled specs # and set any default settings -
Actualiza package.json:
{ "name": "your-custom-mcp-server", "version": "1.0.0", "description": "Your customized MCP server for specific APIs", "files": [ "dist/**/*", "config.json", "specs/**/*", "README.md" ] } -
Asegúrate de que las especificaciones estén incluidas: El campo
filesen package.json (mostrado arriba) garantiza que tus especificaciones y archivo de configuración se incluyan en el paquete publicado.
Personalización del Flujo de Trabajo de GitHub
El repositorio incluye un flujo de trabajo de GitHub Actions para publicación automática en npm. Para personalizarlo para tu repositorio bifurcado:
-
Actualiza el nombre del flujo de trabajo: Edita
.github/workflows/publish-npm.yamlpara actualizar el nombre si lo deseas:name: Publish My Custom MCP Package -
Establece el ámbito del paquete (si es necesario): Si quieres publicar bajo un ámbito de organización npm, descomenta y modifica la línea de ámbito en el archivo del flujo de trabajo:
- name: Setup Node.js uses: actions/setup-node@v4 with: node-version: "18" registry-url: "https://registry.npmjs.org/" # Uncomment and update with your organization scope: scope: "@your-org" -
Configura el token de npm: Añade tu token de npm como secreto de GitHub llamado
NPM_TOKENen la configuración de tu repositorio bifurcado.
Publicación de Tu Paquete Personalizado
Una vez que hayas personalizado el repositorio:
-
Crea y sube una etiqueta (tag):
# Update version in package.json (optional, the workflow will update it based on the tag) npm version 1.0.0 # Push the tag git push --tags -
GitHub Actions:
- Compilará automáticamente el paquete
- Actualizará la versión en package.json para que coincida con la etiqueta
- Publicará en npm con tus especificaciones y configuración incluidas
Uso Después de la Publicación
Los usuarios de tu paquete personalizado pueden instalarlo y usarlo con npm:
# Install your customized package
npm install your-custom-mcp-server -g
# Run it
your-custom-mcp-server
Pueden sobrescribir tus ajustes predeterminados mediante variables de entorno u opciones de línea de comandos como se describe en la sección de Configuración.
Licencia
MIT