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-gen2.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 pathagora 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 toolssugerindo--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/jsonestá ausente (cobremultipart/form-dataeurlencodedda conversãoformDatado 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=devlimpo.
Novidades na versão 2.3.4
(Release de correção — sem mudanças que quebrem compatibilidade.)
ip-address10.4.0 → 10.7.2 através da cadeia transitiva do SDK (express-rate-limit^10.2.0), entãonpm audit --omit=devestá limpo novamente.- Novo guard
tests/scaffold-lockfile.test.ts: faixas de scaffoldpackage.json.hbscontra o snapshotpackage-lock.json.hbs, além de um pisoip-addressacima de 10.5.0 nos lockfiles do projeto e do scaffold. - A descoberta
js-yamlapenas para desenvolvimento permanece documentada emSECURITY.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=devlimpo.
Novidades na versão 2.3.3
(Release de correção — sem mudanças que quebrem compatibilidade.)
- Caminhos
--env-fileausentes agora falham com um erro explícito em vez de serem ignorados silenciosamente. - O fluxo interativo
initmostra os próximos passos do Go (go mod tidy && go run .) em vez de sugerirpip 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=devlimpo.
Novidades na versão 2.3.2
(Release de correção — sem mudanças que quebrem compatibilidade.)
js-yamleopenapi-typesagora 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 executago 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=devlimpo.
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 Dockernpm cifuncionam a partir de um checkout limpo. --forceagora tem precedência quando combinado com--incremental, descartando handlers preservados conforme documentado.watch --onceretorna 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+generateaceitam arquivos v2 (vejaexamples/swagger-v2-petstore.json). - Registro reativado:
slack,kubernetes,digitaloceanestão de volta (v2, convertidos em tempo real); apenasazurepermanece removido (era um fragmento de tipos, não uma especificação completa). - Benchmark de escala:
examples/large-scale.json(180 operações, 10 tags) prova180 → 10 toolscom--group-by tag(também10compath-prefix). Veja Benchmark.
Novidades na versão 2.2.0 (anterior)
(Fase 1 — base sólida, sem mudanças que quebrem compatibilidade.)
generate --dry-runlista ferramentas/modelos/grupos/arquivos sem escrever nada;--jsonimprime um resumo legível por máquina (amigável ao Codex, sem ruído de chalk).watchaceita os mesmos flags de filtro/agrupamento quegenerate, e o modo interativo pergunta sobre filtros e agrupamento.watch --oncesai após a primeira geração também em entradas de arquivo.validate(egenerate) avisam por esquema afetado quandoallOf$refs são pulados ou variantes inlineoneOf/anyOfsão descartadas (suporte parcial não é mais silencioso).- Higiene OSS: CONTRIBUTING atualizado,
MCP_GEN_ALLOW_PLUGINSdocumentado 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
--httpconectado aoAPIClientreal (__client.do(...),q.Encode(),PathEscape), sem mais stubsnot yet wired. - O registro é somente v3 (
stripe,github,openai,petstore,twilio,shopify); chaves removidas falham com orientação e chaves desconhecidas listamKnown keys; especificações v2 falham comOnly 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,op2inline (arquivo ainda suportado). - Agregação com
--group-by tag | path-prefix: uma ferramenta lógica por tag ou segmento de caminho, roteando internamente poraction(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-genpor ferramenta, merge de 3 vias em--incremental,--forcepara sobrescrever. - Middleware de autenticação separado (
src/auth.ts,auth.py,auth.go) gerado a partir desecuritySchemes, e arquivoshandlers.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 generateoumcp-gen gcria um servidor a partir de uma especificação.mcp-gen validateoumcp-gen vverifica uma especificação com avisos detalhados (colisões de nomes, exemplos ausentes, esquemas não suportados).mcp-gen initbaixa uma especificação pública conhecida e pode gerar um projeto.mcp-gen watchobserva 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,-fsobrescreve arquivos existentes, ignorando handlers preservados e arquivos personalizados (pula o merge de 3 vias). Ele vence quando combinado com--incremental.--incrementalmantém código entre@@mcp-gen:starte@@mcp-gen:end(também<generated:handlers:name>). Usa merge de 3 vias: stub base vs. seu código personalizado vs. novo template.--httpgera 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 deoperationId, nome de ferramenta ouMETHOD /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:tagoupath-prefix. Cada grupo roteia poraction(nome da operação) internamente.--dry-runlista ferramentas/modelos/grupos/arquivos que seriam gerados sem escrever nada.--jsonimprime o resumo da geração como JSON legível por máquina (combina com--dry-runpara 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):
| Modo | Herramientas |
|---|---|
| sin agrupación | 180 |
--group-by tag | 10 |
--group-by path-prefix | 10 |
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:
- Edite solo entre
@@mcp-gen:start:<tool>y@@mcp-gen:end:<tool>(o<generated:handlers:<tool>>). Ese cuerpo se conserva al regenerar. - Coloque la lógica de negocio reutilizable en
src/handlers.custom.ts(TS),handlers_custom.py(Python) ohandlers_custom.go(Go). Ese archivo se crea una vez y nunca se sobrescribe a menos que pase--force. - 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 informapreservedhandlers másMerged ... custom handlers preserved. Pase--forcepara 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:
| Clave | Descripción |
|---|---|
stripe | Stripe Payment API |
github | GitHub REST API |
openai | OpenAI API |
petstore | Swagger Petstore example |
twilio | Twilio Communications API |
shopify | Shopify Admin API |
slack | Slack Web API (Swagger 2.0, convertido) |
kubernetes | Kubernetes API (Swagger 2.0, convertido) |
digitalocean | DigitalOcean 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/...otemplates/go/...para sobrescrituras de plantillas.hbsindex.jsque exportaregisterHandlebars(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 cuandoMCP_GEN_ALLOW_PLUGINS=trueestá configurado. Sin él,--pluginsolo 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
| Etapa | Estado | Alcance |
|---|---|---|
| Funcionalidades existentes | Implementado | CLI, parser OpenAPI v3, generación TypeScript/Python, generación incremental, modo interactivo, registro de especificaciones, plugins |
| v2.1.0 | Etiquetado | Objetivo Go, modo HTTP, enums, parámetros header/cookie, API de biblioteca, validación enriquecida |
| v2.1.1 | Etiquetado | Escaneo estático de seguridad/lint y verificaciones de plantillas de servidor Go; plantillas TypeScript/Python sin cambios desde v2.1.0 |
| v2.1.2 | Publicado en npm | Copia 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.3 | Solo etiquetado, superado (nunca publicado en npm) | Contenido de rama de funcionalidad, reemplazado por 2.1.4 antes de la publicación |
| v2.1.4 | Publicado en npm | Filtros 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.5 | Publicado en npm | Correcciones Fase 0 P0 (PR #4): serialización de consultas TS, consultas/headers Python, cableado HTTP Go, registro solo v3 con orientación |
| v2.2.0 | Publicado en npm | Fase 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.5 | Publicado 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.4 | Publicado 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.3 | Publicado 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.2 | Publicado en npm | Dependencias 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.1 | Publicado en npm | Lockfile del scaffold TypeScript, precedencia force-sobre-incremental, códigos de salida confiables de watch --once, puerta de lint reproducible |
| v2.3.0 | Publicado en npm | Fase 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ón | Verificado para 2.3.4 | La 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 |
| Futuro | Planificado | Streaming/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/discriminatorgeneran 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.