ScavioScavio
ProductoPreciosDocumentación
Iniciar sesionComenzar
  1. Inicio
  2. Tutoriales
  3. Cómo generar un servidor MCP a partir de una especificación OpenAPI
Tutorial

Cómo generar un servidor MCP a partir de una especificación OpenAPI

Genere automáticamente un servidor MCP a partir de cualquier especificación de OpenAPI. Ofrezca a los agentes de IA acceso a herramientas escritas a las API REST en minutos, no en días.

Obtener clave API gratisDocumentacion API

La generación de un servidor MCP a partir de una especificación OpenAPI convierte cualquier API REST documentada en un conjunto de herramientas escritas a las que los agentes de IA pueden llamar directamente, eliminando la definición manual de herramientas. En lugar de escribir controladores de herramientas MCP a mano para cada punto final, analiza OpenAPI JSON/YAML, extrae operaciones, parámetros y esquemas de respuesta, y genera un servidor MCP compatible con los estándares que Claude Code, Cursor o cualquier cliente MCP puede consumir. Este tutorial crea un generador en Python que toma una especificación OpenAPI 3.x y genera un servidor MCP en funcionamiento.

Requisitos previos

  • Python 3.10+
  • biblioteca fastmcp instalada (pip install fastmcp)
  • Una especificación OpenAPI 3.x (JSON o YAML)
  • Clave API de Scavio para pruebas con una especificación real

Guia paso a paso

Paso 1: Analizar la especificación OpenAPI

Cargue y analice un archivo de especificaciones OpenAPI 3.x, extrayendo todas las operaciones con sus rutas, métodos, parámetros y cuerpos de solicitud.

Python
import json, yaml
from pathlib import Path

def parse_openapi(spec_path):
    content = Path(spec_path).read_text()
    spec = yaml.safe_load(content) if spec_path.endswith(('.yml', '.yaml')) else json.loads(content)
    operations = []
    for path, methods in spec.get('paths', {}).items():
        for method, details in methods.items():
            if method in ('get', 'post', 'put', 'patch', 'delete'):
                op = {
                    'operation_id': details.get('operationId', f'{method}_{path}'.replace('/', '_')),
                    'summary': details.get('summary', ''),
                    'method': method.upper(),
                    'path': path,
                    'parameters': details.get('parameters', []),
                    'request_body': details.get('requestBody', {}),
                }
                operations.append(op)
    print(f'Parsed {len(operations)} operations from {spec_path}')
    return spec, operations

spec, ops = parse_openapi('openapi.json')

Paso 2: Generar definiciones de herramientas MCP

Convierta cada operación de OpenAPI en una herramienta MCP con parámetros y descripciones escritos.

Python
def openapi_type_to_python(schema):
    type_map = {'string': 'str', 'integer': 'int', 'number': 'float',
                'boolean': 'bool', 'array': 'list', 'object': 'dict'}
    return type_map.get(schema.get('type', 'string'), 'str')

def generate_tool_code(op, base_url):
    params = []
    for p in op['parameters']:
        ptype = openapi_type_to_python(p.get('schema', {}))
        default = f' = None' if not p.get('required') else ''
        params.append(f"{p['name']}: {ptype}{default}")

    body_params = []
    if op['request_body']:
        content = op['request_body'].get('content', {})
        json_schema = content.get('application/json', {}).get('schema', {})
        for prop, schema in json_schema.get('properties', {}).items():
            ptype = openapi_type_to_python(schema)
            required = prop in json_schema.get('required', [])
            default = '' if required else ' = None'
            body_params.append(f"{prop}: {ptype}{default}")

    all_params = ', '.join(params + body_params)
    name = op['operation_id'].replace('-', '_').replace('.', '_')
    return name, all_params, op['summary']

Paso 3: Cree el archivo del servidor MCP

Genere un archivo Python del servidor MCP completo que registre todas las herramientas y maneje las solicitudes HTTP a la API subyacente.

Python
def generate_mcp_server(spec, operations, base_url, output_path='generated_mcp.py'):
    lines = [
        'import httpx',
        'from fastmcp import FastMCP',
        '',
        f'mcp = FastMCP("Generated API")',
        f'BASE_URL = "{base_url}"',
        '',
    ]
    for op in operations:
        name, params, summary = generate_tool_code(op, base_url)
        lines.append(f'@mcp.tool(description="{summary}")')
        lines.append(f'async def {name}({params}) -> dict:')
        lines.append(f'    async with httpx.AsyncClient() as client:')
        if op['method'] == 'GET':
            lines.append(f'        resp = await client.get(f"{{BASE_URL}}{op["path"]}")')
        else:
            lines.append(f'        resp = await client.{op["method"].lower()}(f"{{BASE_URL}}{op["path"]}", json=locals())')
        lines.append(f'        return resp.json()')
        lines.append('')

    Path(output_path).write_text('\n'.join(lines))
    print(f'Generated MCP server with {len(operations)} tools at {output_path}')

generate_mcp_server(spec, ops, 'https://api.example.com')

Paso 4: Prueba con la especificación Scavio OpenAPI

Obtenga la especificación de la API de Scavio mediante la búsqueda y genere un servidor MCP a partir de ella como ejemplo práctico.

Python
import requests, os

# Use Scavio search to find OpenAPI specs for testing
H = {'x-api-key': os.environ['SCAVIO_API_KEY'], 'Content-Type': 'application/json'}
data = requests.post('https://api.scavio.dev/api/v1/search',
    headers=H, json={'query': 'petstore openapi 3.0 json spec', 'country_code': 'us'}).json()

print('Found specs to test with:')
for r in data.get('organic_results', [])[:3]:
    print(f"  {r.get('title', '')}: {r.get('link', '')}")

# Example: generate from the classic Petstore spec
# spec, ops = parse_openapi('petstore.json')
# generate_mcp_server(spec, ops, 'https://petstore3.swagger.io/api/v3')

Ejemplo en Python

Python
import json, yaml, httpx, os, requests
from pathlib import Path

def parse_openapi(spec_path):
    content = Path(spec_path).read_text()
    spec = yaml.safe_load(content) if spec_path.endswith(('.yml', '.yaml')) else json.loads(content)
    ops = []
    for path, methods in spec.get('paths', {}).items():
        for method, details in methods.items():
            if method in ('get', 'post', 'put', 'patch', 'delete'):
                ops.append({
                    'id': details.get('operationId', f'{method}_{path}'.replace('/', '_')),
                    'summary': details.get('summary', ''),
                    'method': method.upper(), 'path': path,
                    'parameters': details.get('parameters', []),
                    'body': details.get('requestBody', {}),
                })
    return spec, ops

def generate_server(spec, ops, base_url, out='generated_mcp.py'):
    type_map = {'string': 'str', 'integer': 'int', 'number': 'float', 'boolean': 'bool'}
    lines = ['import httpx', 'from fastmcp import FastMCP', '',
             'mcp = FastMCP("Generated API")', f'BASE = "{base_url}"', '']
    for op in ops:
        name = op['id'].replace('-', '_').replace('.', '_')
        params = []
        for p in op['parameters']:
            pt = type_map.get(p.get('schema', {}).get('type', 'string'), 'str')
            params.append(f"{p['name']}: {pt}")
        sig = ', '.join(params)
        lines.extend([
            f'@mcp.tool(description="{op["summary"]}")',
            f'async def {name}({sig}) -> dict:',
            f'    async with httpx.AsyncClient() as c:',
            f'        r = await c.request("{op["method"]}", f"{{BASE}}{op["path"]}")',
            f'        return r.json()', ''
        ])
    Path(out).write_text('\n'.join(lines))
    print(f'Generated {len(ops)} MCP tools to {out}')

# Example usage
# spec, ops = parse_openapi('openapi.json')
# generate_server(spec, ops, 'https://api.example.com')
print('MCP generator ready. Pass any OpenAPI 3.x spec.')

Ejemplo en JavaScript

JavaScript
const fs = require('fs');

function parseOpenAPI(specPath) {
  const spec = JSON.parse(fs.readFileSync(specPath, 'utf-8'));
  const ops = [];
  for (const [path, methods] of Object.entries(spec.paths || {})) {
    for (const [method, details] of Object.entries(methods)) {
      if (['get', 'post', 'put', 'patch', 'delete'].includes(method)) {
        ops.push({
          id: details.operationId || \`\${method}_\${path.replace(/\//g, '_')}\`,
          summary: details.summary || '',
          method: method.toUpperCase(), path,
          parameters: details.parameters || [],
        });
      }
    }
  }
  return {spec, ops};
}

function generateServer(spec, ops, baseUrl, out = 'generated_mcp.mjs') {
  let code = \`import {FastMCP} from 'fastmcp';\nconst mcp = new FastMCP('Generated API');\nconst BASE = '\${baseUrl}';\n\n\`;
  for (const op of ops) {
    const name = op.id.replace(/[-. ]/g, '_');
    const params = op.parameters.map(p => \`\${p.name}: {type: 'string'}\`).join(', ');
    code += \`mcp.addTool({name: '\${name}', description: '\${op.summary}',\n  parameters: {\${params}},\n  execute: async (args) => {\n    const r = await fetch(\\\`\\\${BASE}\${op.path}\\\`, {method: '\${op.method}'});\n    return JSON.stringify(await r.json());\n  }\n});\n\n\`;
  }
  fs.writeFileSync(out, code);
  console.log(\`Generated \${ops.length} MCP tools to \${out}\`);
}

// const {spec, ops} = parseOpenAPI('openapi.json');
// generateServer(spec, ops, 'https://api.example.com');
console.log('MCP generator ready');

Salida esperada

JSON
Parsed 12 operations from openapi.json
Generated MCP server with 12 tools at generated_mcp.py
Tools: get_users, post_users, get_users_by_id, put_users_by_id, ...

Tutoriales relacionados

  • Cómo agregar búsqueda MCP a Claude Code
  • Cómo configurar una rutina de búsqueda de codificación previa de MCP
  • Cómo crear una búsqueda seleccionada para agentes de IA

Preguntas frecuentes

La mayoria de los desarrolladores completan este tutorial en 15 a 30 minutos. Necesitaras una clave API de Scavio (el plan gratuito funciona) y un entorno de Python o JavaScript.

Python 3.10+. biblioteca fastmcp instalada (pip install fastmcp). Una especificación OpenAPI 3.x (JSON o YAML). Clave API de Scavio para pruebas con una especificación real. Una clave API de Scavio te da 50 creditos gratuitos al registrarte.

Si. El plan gratuito incluye 50 creditos al registrarte, mas que suficiente para completar este tutorial y crear un prototipo funcional.

Scavio tiene un paquete nativo de LangChain (langchain-scavio), un servidor MCP y una API REST simple que funciona con cualquier cliente HTTP. Este tutorial usa the raw REST API, pero puedes adaptarlo al framework que prefieras.

Recursos relacionados

Best Of

Las mejores herramientas generadoras de OpenAPI a MCP en 2026

Read more
Solution

Genere servidores MCP a partir de especificaciones de OpenAPI con esquemas verificados por búsqueda

Read more
Comparison

MCP Search Integration vs Direct API Integration

Read more
Best Of

Las mejores API de búsqueda después de los cambios en el modo AI de Google I/O 2026

Read more
Glossary

Panorama de proveedores de API de búsqueda (2026)

Read more
Use Case

Integración de API personalizada de MCP para operaciones comerciales

Read more

Empieza a construir

Genere automáticamente un servidor MCP a partir de cualquier especificación de OpenAPI. Ofrezca a los agentes de IA acceso a herramientas escritas a las API REST en minutos, no en días.

Obtener clave API gratuitaLeer la documentacion
ScavioScavio

API de busqueda en tiempo real para agentes de IA. Busca en todas las plataformas, no solo en Google.

Producto

  • Funciones
  • Precios
  • Panel
  • Afiliados

Desarrolladores

  • Documentacion
  • Referencia de API
  • Inicio rapido
  • Integracion MCP
  • Python SDK

Alternativas

  • Alternativa a Tavily
  • Alternativa a SerpAPI
  • Alternativa a Firecrawl
  • Alternativa a Exa

Herramientas

  • Formateador JSON
  • cURL a codigo
  • Contador de tokens
  • Todas las herramientas

© 2026 Scavio. Todos los derechos reservados.

Featured on TAAFT
Terminos de servicioPolitica de privacidad