mcp-gen

Genera servidores MCP a partir de especificaciones OpenAPI v3 o Swagger 2.0 en TypeScript, Python o Go. Cada ruta se convierte en una herramienta tipada, con regeneración incremental que preserva el código personalizado.

Documentación

MCP-Generator

Também disponível em: Português (Versão em Português)

Gere servidores MCP a partir de especificações OpenAPI.

Status: @christopher_dondici/mcp-gen 2.3.5 é a versão publicada mais recente no npm. Consulte notas de versão (PT-BR).

mcp-gen transforma uma especificação OpenAPI v3 ou Swagger 2.0 em um servidor MCP em TypeScript, Python ou Go. Ele mapeia cada rota para uma ferramenta, gera modelos tipados (incluindo enums, oneOf/anyOf) e mantém código personalizado quando você regenera.

Novidades na versão 2.3.5

(Release de correção — sem mudanças que quebrem compatibilidade.)

  • A lista de permissões de operações METHOD path agora faz correspondência sem diferenciar maiúsculas de minúsculas (get /pets = GET /pets).
  • Filtros que correspondem a zero ferramentas emitem um aviso Filters matched 0 of N tools sugerindo --dry-run.
  • A regeneração incremental em Go usa o stub padrão do Go (handler not implemented); stubs não modificados não são mais preservados como personalizados.
  • Corpos de requisição não-JSON e exemplos de resposta recorrem ao primeiro content-type quando application/json está ausente (cobre multipart/form-data e urlencoded da conversão formData do Swagger 2.0).
  • Verificação local: 19 suítes Jest / 244 testes, smoke de código de saída da CLI 3/3, smokes de servidores gerados em TypeScript/Python/Go, npm audit --omit=dev limpo.

Novidades na versão 2.3.4

(Release de correção — sem mudanças que quebrem compatibilidade.)

  • ip-address 10.4.0 → 10.7.2 através da cadeia transitiva do SDK (express-rate-limit ^10.2.0), então npm audit --omit=dev está limpo novamente.
  • Novo guard tests/scaffold-lockfile.test.ts: faixas de scaffold package.json.hbs contra o snapshot package-lock.json.hbs, além de um piso ip-address acima de 10.5.0 nos lockfiles do projeto e do scaffold.
  • A descoberta js-yaml apenas para desenvolvimento permanece documentada em SECURITY.md, sem upgrade amplo do Jest na linha 2.3.x.
  • Verificação local: 19 suítes Jest / 238 testes, smoke de código de saída da CLI 3/3, smokes de servidores gerados em TypeScript/Python/Go, npm audit --omit=dev limpo.

Novidades na versão 2.3.3

(Release de correção — sem mudanças que quebrem compatibilidade.)

  • Caminhos --env-file ausentes agora falham com um erro explícito em vez de serem ignorados silenciosamente.
  • O fluxo interativo init mostra os próximos passos do Go (go mod tidy && go run .) em vez de sugerir pip install.
  • Links de espaço reservado nos READMEs e documentos SECURITY gerados foram substituídos pelos links oficiais do repositório.
  • dist é limpo antes de cada build, para que artefatos obsoletos não vazem para builds ou tarballs.
  • Verificação local: 18 suítes Jest / 234 testes, smoke de código de saída da CLI 3/3, smokes de servidores gerados em TypeScript/Python/Go, npm audit --omit=dev limpo.

Novidades na versão 2.3.2

(Release de correção — sem mudanças que quebrem compatibilidade.)

  • js-yaml e openapi-types agora são dependências diretas em vez de transitivas; a varredura de especificações YAML no security-lint usa uma importação tipada.
  • A validação de URL do registro é coberta por testes reais: chaves não-HTTPS, desconhecidas e removidas falham sem chamar fetch.
  • Globs de caminho /** com barra final também correspondem ao caminho base, então /pets/** inclui /pets.
  • Marcadores incrementais ganharam um padrão de stub padrão do Go além de cobertura de ida e volta para guards <generated:handlers:name> junto com os marcadores legados @@mcp-gen.
  • Novo smoke de compilação Go (npm run test:generated:go): o scaffold Go do Petstore executa go mod tidy + go build, também controlado no CI com Go 1.22.
  • Verificação local: 17 suítes Jest / 232 testes, smoke de código de saída da CLI 3/3, smokes de servidores gerados em TypeScript e Go, npm audit --omit=dev limpo.

Novidades na versão 2.3.1

(Release de correção — sem mudanças que quebrem compatibilidade.)

  • Projetos TypeScript gerados incluem package-lock.json, então seus comandos de CI e Docker npm ci funcionam a partir de um checkout limpo.
  • --force agora tem precedência quando combinado com --incremental, descartando handlers preservados conforme documentado.
  • watch --once retorna código de saída 1 em falhas de busca, análise ou geração e usa o fluxo de ação assíncrona do Commander.
  • ESLint é instalado localmente com uma configuração TypeScript flat mínima e roda tanto no CI quanto no release.
  • Verificação local: 16 suítes Jest / 214 testes, smoke de código de saída da CLI, smoke de servidor gerado em TypeScript e Python, e npm pack --dry-run.

Novidades na versão 2.3.0

(Fase 2 — âncora: desbloqueia o registro, sem mudanças que quebrem compatibilidade.)

  • Suporte a Swagger 2.0: especificações v2 são convertidas para v3 internamente na ingestão (host/basePath/schemes → servers, definitions → components.schemas, body/formData → requestBody, securityDefinitions → securitySchemes). validate + generate aceitam arquivos v2 (veja examples/swagger-v2-petstore.json).
  • Registro reativado: slack, kubernetes, digitalocean estão de volta (v2, convertidos em tempo real); apenas azure permanece removido (era um fragmento de tipos, não uma especificação completa).
  • Benchmark de escala: examples/large-scale.json (180 operações, 10 tags) prova 180 → 10 tools com --group-by tag (também 10 com path-prefix). Veja Benchmark.

Novidades na versão 2.2.0 (anterior)

(Fase 1 — base sólida, sem mudanças que quebrem compatibilidade.)

  • generate --dry-run lista ferramentas/modelos/grupos/arquivos sem escrever nada; --json imprime um resumo legível por máquina (amigável ao Codex, sem ruído de chalk).
  • watch aceita os mesmos flags de filtro/agrupamento que generate, e o modo interativo pergunta sobre filtros e agrupamento. watch --once sai após a primeira geração também em entradas de arquivo.
  • validate (e generate) avisam por esquema afetado quando allOf $refs são pulados ou variantes inline oneOf/anyOf são descartadas (suporte parcial não é mais silencioso).
  • Higiene OSS: CONTRIBUTING atualizado, MCP_GEN_ALLOW_PLUGINS documentado em Plugins.

Novidades na versão 2.1.5 (anterior)

(Fase 0, PR #4 — correções P0 sobre 2.1.4.)

  • O cliente TypeScript serializa parâmetros de consulta (queryNames + URLSearchParams); get_pets({ limit: 5 }) chama /pets?limit=5.
  • O servidor Python passa consulta e cabeçalhos (_build_query / _build_headers, kwargs["params"]) no modo --http, incluindo ferramentas agrupadas.
  • O modo Go --http conectado ao APIClient real (__client.do(...), q.Encode(), PathEscape), sem mais stubs not yet wired.
  • O registro é somente v3 (stripe, github, openai, petstore, twilio, shopify); chaves removidas falham com orientação e chaves desconhecidas listam Known keys; especificações v2 falham com Only OpenAPI v3.

Novidades na versão 2.1.4 (anterior)

(A tag v2.1.3 foi substituída antes de chegar ao npm; tudo abaixo foi lançado na 2.1.4, além de uma correção para o middleware de autenticação gerado em especificações sem securitySchemes.)

  • Filtragem de caminhos com globs: --path-prefix "/users/**", --include-paths, --exclude-paths; --operation-allowlist op1,op2 inline (arquivo ainda suportado).
  • Agregação com --group-by tag | path-prefix: uma ferramenta lógica por tag ou segmento de caminho, roteando internamente por action (nome da operação + método).
  • Deduplicação de nomes: colisões recorrem ao sufixo de método e depois ao hash curto do caminho.
  • Guards incrementais: regiões <generated:handlers> além de marcadores @@mcp-gen por ferramenta, merge de 3 vias em --incremental, --force para sobrescrever.
  • Middleware de autenticação separado (src/auth.ts, auth.py, auth.go) gerado a partir de securitySchemes, e arquivos handlers.custom.* que nunca são sobrescritos sem --force.

Início rápido

Com Git, Node.js 20+ e npm 9+ instalados, execute:

git clone https://github.com/ChristopherDond/MCP-Generator.git
cd MCP-Generator
npm ci
npm run build
node dist/cli/index.js --version

Gere um servidor a partir de uma especificação local:

node dist/cli/index.js generate -i examples/petstore.yaml -l typescript -o ./my-server

Valide uma especificação sem gerar arquivos:

node dist/cli/index.js validate -i examples/petstore.yaml

Execute esses comandos a partir da raiz do repositório em main. As correções de build e empacotamento fazem parte da 2.1.2. A geração escreve um scaffold; ela não instala dependências, não faz build e não inicia o servidor gerado.

Execute a CLI interativa se preferir prompts:

npm run dev

O que ela faz

sequenceDiagram
    participant User
    participant CLI
    participant Parser
    participant Generator
    participant Output

    User->>CLI: mcp-gen generate --input api.yaml --lang go
    CLI->>Parser: validate and parse OpenAPI v3 / Swagger 2.0 (JSON or YAML)
    Parser->>Generator: internal AST (tools, models, examples)
    Generator->>Output: render Handlebars templates
    Output-->>User: TypeScript, Python, or Go MCP server project

Cada rota se torna uma ferramenta MCP com:

  • entrada tipada a partir de parâmetros (path, query, header, cookie, body) e corpos de requisição
  • exemplos de resposta da especificação
  • suporte a esquemas enum / oneOf / anyOf / discriminator
  • modo cliente HTTP real (--http) que chama a API real
  • verificações scaffolded de authContext para metadados com escopo e chaves de argumento semelhantes a credenciais; revise antes da implantação
  • preservação incremental opcional de código

Requisitos

  • Node.js 20+
  • npm 9+ (o início rápido da fonte usa o lockfile do repositório)
  • Git para clonar o repositório
  • (Opcional) Python 3.8+ para projetos Python
  • (Opcional) Go 1.22+ para projetos Go

Instalação local e atalho de comando

Instale a versão mais recente com npm install -g @christopher_dondici/mcp-gen@2.3.4. Para trabalhar a partir da fonte, use o build em Início rápido. Ao longo deste README, mcp-gen é um atalho para node dist/cli/index.js a partir da raiz do repositório. Por exemplo, mcp-gen validate -i examples/petstore.yaml significa node dist/cli/index.js validate -i examples/petstore.yaml.

Opcionalmente, execute npm link a partir da raiz do repositório após o build para fazer o comando mcp-gen apontar para seu checkout local. Isso altera os links globais do npm; não baixa um pacote @christopher_dondici/mcp-gen publicado. O nome do pacote npm mudou porque mcp-gen foi rejeitado por similaridade com mcpgen; o comando permanece mcp-gen.

Para instalar um tarball produzido localmente sem publicar:

npm install ./christopher_dondici-mcp-gen-2.3.4.tgz
./node_modules/.bin/mcp-gen --version
./node_modules/.bin/mcp-gen validate -i node_modules/@christopher_dondici/mcp-gen/examples/petstore.yaml

CLI

Comandos

  • mcp-gen generate ou mcp-gen g cria um servidor a partir de uma especificação.
  • mcp-gen validate ou mcp-gen v verifica uma especificação com avisos detalhados (colisões de nomes, exemplos ausentes, esquemas não suportados).
  • mcp-gen init baixa uma especificação pública conhecida e pode gerar um projeto.
  • mcp-gen watch observa um arquivo ou URL e regenera em mudanças.

Gerar

mcp-gen generate -i ./api/openapi.yaml -l typescript -o ./my-server
mcp-gen generate -i ./api/openapi.yaml -l python -o ./my-server
mcp-gen generate -i ./api/openapi.yaml -l go -o ./my-server

Flags úteis:

  • --force, -f sobrescreve arquivos existentes, ignorando handlers preservados e arquivos personalizados (pula o merge de 3 vias). Ele vence quando combinado com --incremental.
  • --incremental mantém código entre @@mcp-gen:start e @@mcp-gen:end (também <generated:handlers:name>). Usa merge de 3 vias: stub base vs. seu código personalizado vs. novo template.
  • --http gera handlers que chamam a API real via HTTP em vez de retornar stubs de exemplo.
  • --env-file <path> incorpora TOKEN/BASE_URL de um arquivo estilo .env no cliente gerado.
  • --name <name> define o nome do servidor.
  • --server-version <version> define a versão do servidor.
  • --plugin <path> carrega um módulo ou pasta de plugin (pode ser repetido).
  • --include-tags <a,b> inclui apenas ferramentas com uma dessas tags.
  • --exclude-tags <a,b> exclui ferramentas com essas tags.
  • --path-prefix <glob> inclui apenas caminhos que correspondem a um prefixo ou glob (/users, /users/**, /pets/*).
  • --include-paths <globs> globs de caminho separados por vírgula para incluir.
  • --exclude-paths <globs> globs de caminho separados por vírgula para excluir.
  • --operation-allowlist <ops> lista separada por vírgulas de operationId, nome de ferramenta ou METHOD /path, ou um caminho para um arquivo de lista de permissões (array JSON ou separado por linha/vírgula).
  • --group-by <mode> agrega em uma ferramenta lógica por grupo: tag ou path-prefix. Cada grupo roteia por action (nome da operação) internamente.
  • --dry-run lista ferramentas/modelos/grupos/arquivos que seriam gerados sem escrever nada.
  • --json imprime o resumo da geração como JSON legível por máquina (combina com --dry-run para scripts).

Exemplos de filtragem

mcp-gen generate -i api.yaml -o ./out --include-tags pets,orders
mcp-gen generate -i api.yaml -o ./out --exclude-tags admin
mcp-gen generate -i api.yaml -o ./out --path-prefix "/users/**"
mcp-gen generate -i api.yaml -o ./out --include-paths "/users/**,/orders/*" --exclude-paths "/users/internal/*"
mcp-gen generate -i api.yaml -o ./out --operation-allowlist listPets,createPet
mcp-gen generate -i api.yaml -o ./out --operation-allowlist ./allow.json
mcp-gen generate -i api.yaml -o ./out --include-tags pets --group-by tag

Agrupamento

--group-by tag emite uma ferramenta por tag (mais untagged), por exemplo, 200 operações em 8 tags se tornam ~8 ferramentas. --group-by path-prefix emite uma ferramenta por primeiro segmento de caminho (/users/** se torna users_group). Cada ferramenta agrupada recebe um enum action obrigatório (nomes de operações membro) e roteia internamente por METHOD + path. Parâmetros membro são unidos como opcionais.

Benchmark

Medido em examples/large-scale.json (180 operações em 10 tags, 2 modelos):

ModoHerramientas
sin agrupación180
--group-by tag10
--group-by path-prefix10

180 → 10 tools — la agrupación reduce la superficie 18x en este fixture. Cubierto por tests/scale.test.ts.

Deduplicación de nombres de herramientas

Los nombres de las herramientas provienen de METHOD + path (GET /pets/{id} se convierte en get_pets_petid). operationId se almacena para la coincidencia de listas de permitidos. En caso de colisión, el generador agrega el sufijo primero con el método y luego con un hash corto de la ruta, en lugar de emitir herramientas duplicadas.

Middleware de autenticación

Los proyectos generados incluyen una capa de autenticación separada construida a partir de securitySchemes:

  • TypeScript: src/auth.ts
  • Python: auth.py
  • Go: auth.go

Coloque la lógica de negocio en los guards; mantenga la autenticación y la validación de esquemas en el middleware para no necesitar un guard para la autenticación.

Cómo no sobrescribir sus ediciones

Los handlers generados están envueltos en dos marcadores:

// <generated:handlers>
// @@mcp-gen:start:get_pets
// ... your code here ...
// @@mcp-gen:end:get_pets
// </generated:handlers>

Reglas:

  1. Edite solo entre @@mcp-gen:start:<tool> y @@mcp-gen:end:<tool> (o <generated:handlers:<tool>>). Ese cuerpo se conserva al regenerar.
  2. Coloque la lógica de negocio reutilizable en src/handlers.custom.ts (TS), handlers_custom.py (Python) o handlers_custom.go (Go). Ese archivo se crea una vez y nunca se sobrescribe a menos que pase --force.
  3. Vuelva a ejecutar con generate --incremental. El generador realiza una fusión de 3 vías (stub fresco vs. su cuerpo personalizado vs. nueva plantilla) e informa preserved handlers más Merged ... custom handlers preserved. Pase --force para ignorar la preservación y sobrescribir todo; force también gana si ambos flags están presentes.

Validar (v2.1+)

mcp-gen validate -i ./api/openapi.yaml

Genera un informe detallado:

Spec is valid
  Tools: 12  Models: 8  Base URL: https://api.example.com

  2 warning(s):
  ⚠ Tool name collision resolved: "get_users" appears 2x (unique suffixes added)
  ⚠ 3 tool(s) have no example response: get_users_id, delete_user, patch_user

Seguridad y lint (v2.1.1)

node dist/cli/index.js security -p ./my-server
node dist/cli/index.js security -p ./my-server --fail-on-warn

Escanea los archivos generados en busca de patrones similares a credenciales, identificadores relacionados con autorización, nombres, descripciones y marcadores incrementales. --json imprime un informe JSON, pero el CLI también imprime un encabezado; stdout no es un documento JSON puro. Los errores causan código de salida 1; --fail-on-warn también falla en advertencias. Esto es análisis estático, no una garantía de seguridad.

Init

init usa el registro integrado:

mcp-gen init --from list
mcp-gen init --from stripe
mcp-gen init --from stripe --generate -o ./stripe-mcp

Claves de registro disponibles:

ClaveDescripción
stripeStripe Payment API
githubGitHub REST API
openaiOpenAI API
petstoreSwagger Petstore example
twilioTwilio Communications API
shopifyShopify Admin API
slackSlack Web API (Swagger 2.0, convertido)
kubernetesKubernetes API (Swagger 2.0, convertido)
digitaloceanDigitalOcean API (Swagger 2.0, convertido)

OpenAPI v3 y Swagger 2.0 son compatibles (v2 se convierte a v3 al ingerir). Solo azure permanece eliminado: apuntaba a un fragmento de tipos, no a una especificación completa.

Watch

mcp-gen watch -i ./api/openapi.yaml -o ./my-server
mcp-gen watch -i https://example.com/spec.json --interval 60000

Para entradas URL, --interval <ms> controla el intervalo de sondeo. --once ejecuta una generación inmediatamente y sale. Los fallos de fetch, parse o generación devuelven código de salida 1 en lugar de un éxito falso.

watch acepta los mismos flags de filtrado que generate (--include-tags, --exclude-tags, --path-prefix, --include-paths, --exclude-paths, --operation-allowlist, --group-by), más --http, --force/--incremental:

mcp-gen watch -i ./api/openapi.yaml -o ./my-server --include-tags pets --group-by tag --once

Plugins

Los plugins pueden sobrescribir plantillas y registrar helpers adicionales de Handlebars.

Estructura básica:

  • templates/typescript/..., templates/python/... o templates/go/... para sobrescrituras de plantillas .hbs
  • index.js que exporta registerHandlebars(handlebars) para helpers personalizados

Ejemplo:

mcp-gen generate -i ./api/openapi.yaml --plugin ./my-plugin
mcp-gen watch -i ./api/openapi.yaml --plugin ./my-plugin

Las plantillas de plugins sobrescriben las plantillas principales cuando usan la misma ruta bajo templates/<lang>/.

Puerta de ejecución de código de plugins: las sobrescrituras de plantillas siempre se aplican, pero el módulo JS de un plugin (registerHandlebars) solo se carga cuando MCP_GEN_ALLOW_PLUGINS=true está configurado. Sin él, --plugin solo proporciona sobrescrituras de plantillas. Nunca habilite la variable con plugins no confiables — consulte SECURITY.md.

Estructura del proyecto generado

TypeScript:

my-server/
├── src/
│   ├── server.ts        # MCP server — tool definitions + handlers
│   ├── auth.ts          # Auth/validation middleware from securitySchemes
│   ├── handlers.custom.ts # Your code — never overwritten without --force
│   ├── models.ts        # TypeScript interfaces from OpenAPI schemas (enums, unions)
│   └── client.ts        # HTTP client (used in --http mode)
├── .github/
│   └── workflows/
│       └── ci.yml
├── Dockerfile
├── package.json
├── package-lock.json
├── tsconfig.json
└── README.md

Python:

my-server/
├── server.py            # FastMCP server — tool definitions + handlers
├── auth.py              # Auth/validation middleware from securitySchemes
├── handlers_custom.py   # Your code — never overwritten without --force
├── models.py            # Pydantic models from OpenAPI schemas (enums, unions)
├── requirements.txt
├── .github/
│   └── workflows/
│       └── ci.yml
├── Dockerfile
└── README.md

Go (nuevo en v2.1):

my-server/
├── main.go              # MCP server using mark3labs/mcp-go
├── auth.go              # Auth/validation middleware from securitySchemes
├── handlers_custom.go   # Your code — never overwritten without --force
├── models.go            # Go types from OpenAPI schemas (enums, unions)
├── client.go            # HTTP client (used in --http mode)
├── go.mod
├── .github/
│   └── workflows/
│       └── ci.yml
├── Dockerfile
└── README.md

Conectar a Claude Desktop

TypeScript:

{
  "mcpServers": {
    "my-server": {
      "command": "node",
      "args": ["/absolute/path/to/my-server/dist/server.js"]
    }
  }
}

Python:

{
  "mcpServers": {
    "my-server": {
      "command": "python",
      "args": ["/absolute/path/to/my-server/server.py"]
    }
  }
}

Go:

{
  "mcpServers": {
    "my-server": {
      "command": "go",
      "args": ["run", "/absolute/path/to/my-server/main.go"]
    }
  }
}

Reinicie Claude Desktop. Sus herramientas API aparecen automáticamente.


Seguridad y Contrato authContext

Las herramientas generadas esperan metadatos de autorización con alcance (no credenciales sin procesar):

{
  "tokenId": "tok_abc123",
  "principal": "user:42",
  "expiresAt": "2026-05-11T14:00:00Z",
  "allowedTools": ["get_orders"],
  "endpointAllowlist": ["GET /orders"],
  "spendLimitUsd": 5,
  "spendUsedUsd": 1.2,
  "revoked": false,
  "requestId": "req_01J..."
}

El scaffold bloquea argumentos como token, authorization, api_key, client_secret, password, secret por defecto.

Ejemplo rápido (variable de entorno):

# Linux / macOS
export TOKEN=your_api_key_here

# Windows (PowerShell)
$env:TOKEN='your_api_key_here'

Para integraciones y gestión avanzadas, considere Cohesivity.ai como backend para autenticación, almacenamiento y políticas de revocación.


Implementar handlers

Los archivos generados devuelven ejemplos de la especificación por defecto. Reemplace los stubs con lógica real.

TypeScript (src/server.ts):

case "get_users_id": {
  // @@mcp-gen:start:get_users_id
  const user = await db.users.findById(args.id);
  return { content: [{ type: "text", text: JSON.stringify(user) }] };
  // @@mcp-gen:end:get_users_id
}

Python (server.py):

@mcp.tool()
async def get_users_id(id: float, auth_context: dict | None = None) -> Any:
    # @@mcp-gen:start:get_users_id
    user = await db.users.find_by_id(id)
    return user
    # @@mcp-gen:end:get_users_id

Go (main.go):

s.AddTool(get_users_idTool, func(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) {
    // @@mcp-gen:start:get_users_id
    return jsonSerialize(jsonExample(`{"id": 1, "name": "Alice"}`))
    // @@mcp-gen:end:get_users_id
})

El código entre los marcadores @@mcp-gen:start y @@mcp-gen:end se conserva cuando vuelve a ejecutar generate --incremental (consulte Cómo no sobrescribir sus ediciones).


API programática (Modo Biblioteca)

Con el paquete instalado desde npm, importe el paquete con alcance como se muestra a continuación. Desde la raíz del repositorio después de compilar, use "./dist/index.js" en su lugar.

import { generate, validateSpec, parseOpenAPI } from "@christopher_dondici/mcp-gen";

const result = await generate({
  input: "./api/openapi.yaml",
  lang: "typescript",
  out: "./my-server",
  force: true,
  incremental: false,
  http: false,
});

const validation = await validateSpec("./api/openapi.yaml");
console.log(validation.tools, validation.models, validation.warnings);

Desarrollo

npm run lint
npx tsc --noEmit
npm test
npm run test:cli
npm run test:generated
npm run test:generated:py

# TypeScript example
node dist/cli/index.js generate --input examples/petstore.json --out /tmp/ts-test --force

# Python example
node dist/cli/index.js generate --input examples/petstore.yaml --lang python --out /tmp/py-test --force

# Go example
node dist/cli/index.js generate --input examples/petstore.json --lang go --out /tmp/go-test --force

# HTTP mode (real API calls)
node dist/cli/index.js generate --input examples/petstore.json --lang typescript --out /tmp/ts-http --force --http

# Incremental example
node dist/cli/index.js generate --input examples/petstore.json --out /tmp/ts-test --incremental

Hoja de ruta

EtapaEstadoAlcance
Funcionalidades existentesImplementadoCLI, parser OpenAPI v3, generación TypeScript/Python, generación incremental, modo interactivo, registro de especificaciones, plugins
v2.1.0EtiquetadoObjetivo Go, modo HTTP, enums, parámetros header/cookie, API de biblioteca, validación enriquecida
v2.1.1EtiquetadoEscaneo estático de seguridad/lint y verificaciones de plantillas de servidor Go; plantillas TypeScript/Python sin cambios desde v2.1.0
v2.1.2Publicado en npmCopia de plantilla portátil, lockfile, lista de permitidos de paquetes, build prepack, flujo de trabajo de publicación corregido, prueba de humo de tarball en CI, actualizaciones de dependencias
v2.1.3Solo etiquetado, superado (nunca publicado en npm)Contenido de rama de funcionalidad, reemplazado por 2.1.4 antes de la publicación
v2.1.4Publicado en npmFiltros glob de ruta, lista de permitidos de operaciones en línea, agrupación por tag/prefijo de ruta con enrutamiento de acciones, deduplicación por método/hash, guards <generated:handlers> con fusión de 3 vías, middleware de autenticación separado, handlers.custom.* nunca sobrescrito, corrección de plantilla de autenticación para especificaciones sin securitySchemes
v2.1.5Publicado en npmCorrecciones Fase 0 P0 (PR #4): serialización de consultas TS, consultas/headers Python, cableado HTTP Go, registro solo v3 con orientación
v2.2.0Publicado en npmFase 1: resumen generate --dry-run + --json, flags de filtro/agrupación en watch (+ prompts interactivos, corrección de archivo --once), advertencias de soporte parcial por esquema en validate/generate, documentación CONTRIBUTING + MCP_GEN_ALLOW_PLUGINS
v2.3.5Publicado en npm (último)Lista de permitidos METHOD insensible a mayúsculas, advertencia de filtro cero con sugerencia --dry-run, patrón de stub Go en regeneración incremental, respaldo de cuerpo/ejemplo no JSON
v2.3.4Publicado en npm (último)ip-address 10.4.0 → 10.7.2 a través de la cadena SDK, guard de instantánea de lockfile del scaffold, js-yaml solo dev permanece documentado
v2.3.3Publicado en npm (último)Error explícito de --env-file faltante, próximos pasos Go en init interactivo, enlaces de marcador de posición reemplazados, dist limpiado antes del build
v2.3.2Publicado en npmDependencias directas js-yaml/openapi-types, pruebas reales de validación de registro, /** final coincide con la ruta base, patrón de stub Go + round-trip de guard, smoke de build Go en CI
v2.3.1Publicado en npmLockfile del scaffold TypeScript, precedencia force-sobre-incremental, códigos de salida confiables de watch --once, puerta de lint reproducible
v2.3.0Publicado en npmFase 2: conversión Swagger 2.0 → v3 al ingerir, slack/kubernetes/digitalocean de vuelta en el registro, benchmark examples/large-scale.json (180 → 10 herramientas)
DistribuciónVerificado para 2.3.4La instalación del registro funciona a través de npm install -g @christopher_dondici/mcp-gen; la publicación en pip no está establecida. Python es un objetivo de generación, no una ruta de instalación pip para este CLI
FuturoPlanificadoStreaming/recursos/prompts, más registros

Limitaciones conocidas

  • Swagger 2.0 se convierte a OpenAPI 3.0.3 al ingerir (body/formData → requestBody, definitions → components.schemas); las construcciones v2 exóticas pueden perder fidelidad
  • Los esquemas oneOf / anyOf / discriminator generan tipos de unión pero sin validación en tiempo de ejecución
  • El escaneo de seguridad/lint usa patrones de texto estáticos y puede producir falsos positivos o pasar por alto problemas. Un informe aprobado no garantiza seguridad ni verifica autorización en tiempo de ejecución, revocación, gastos o registro de auditoría
  • Las verificaciones de autorización generadas son scaffolding, no un backend de seguridad completo; revíselas y pruébelas antes del despliegue
  • Streaming/recursos/prompts no están implementados

La corrección de copy-templates incluida en 2.1.2 usa Node.js fs.cpSync en Windows, Linux y macOS; ya no requiere cp ni xcopy. CI actualmente se ejecuta solo en Ubuntu.


Licencia

MIT © 2026 - Christopher D.