mcp-gen

Gere servidores MCP a partir de especificações OpenAPI v3 ou Swagger 2.0 em TypeScript, Python ou Go. Cada rota se torna uma ferramenta tipada, com regeneração incremental que preserva código personalizado.

Documentação

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 2.3.5

(Release de correção — sem mudanças que quebram 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 2.3.4

(Release de correção — sem mudanças que quebram 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 package.json.hbs do scaffold contra o snapshot package-lock.json.hbs, além de um piso de 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 2.3.3

(Release de correção — sem mudanças que quebram 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 2.3.2

(Release de correção — sem mudanças que quebram 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 2.3.1

(Release de correção — sem mudanças que quebram 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 fetch, parse 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 executa 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 2.3.0

(Fase 2 — âncora: desbloqueia o registro, sem mudanças que quebram 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 2.2.0 (anterior)

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

  • generate --dry-run lista ferramentas/modelos/grupos/arquivos sem escrever nada; --json imprime um resumo legível por máquina (compatível com 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 2.1.5 (anterior)

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

  • O cliente TypeScript serializa parâmetros de query (queryNames + URLSearchParams); get_pets({ limit: 5 }) chama /pets?limit=5.
  • O servidor Python passa query e headers (_build_query / _build_headers, kwargs["params"]) no modo --http, incluindo ferramentas agrupadas.
  • O modo --http do Go 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 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 ele 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 authContext scaffolded 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 nome, 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 destas tags.
  • --exclude-tags <a,b> exclui ferramentas com estas 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), ex.: 200 operações em 8 tags viram ~8 ferramentas. --group-by path-prefix emite uma ferramenta por primeiro segmento de caminho (/users/** vira users_group). Cada ferramenta agrupada recebe um enum action obrigatório (nomes das 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):

ModoFerramentas
sem agrupamento180
--group-by tag10
--group-by path-prefix10

180 → 10 tools — o agrupamento reduz a superfície em 18x neste fixture. Coberto por tests/scale.test.ts.

Deduplicação de nomes de ferramentas

Os nomes das ferramentas vêm de METHOD + path (GET /pets/{id} torna-se get_pets_petid). operationId é armazenado para correspondência na allowlist. Em caso de colisão, o gerador adiciona o sufixo primeiro com o método e depois com um hash curto do caminho, em vez de emitir ferramentas duplicadas.

Middleware de autenticação

Os projetos gerados incluem uma camada de autenticação separada construída a partir de securitySchemes:

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

Coloque a lógica de negócio em guards; mantenha a autenticação e a validação de schema no middleware para que você não precise de um guard para autenticação.

Como não sobrescrever suas edições

Os handlers gerados são envolvidos em dois marcadores:

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

Regras:

  1. Edite apenas entre @@mcp-gen:start:<tool> e @@mcp-gen:end:<tool> (ou <generated:handlers:<tool>>). Esse corpo é preservado na regeneração.
  2. Coloque a lógica de negócio reutilizável em src/handlers.custom.ts (TS), handlers_custom.py (Python) ou handlers_custom.go (Go). Esse arquivo é criado uma vez e nunca é sobrescrito, a menos que você passe --force.
  3. Execute novamente com generate --incremental. O gerador faz um merge de 3 vias (stub fresco vs. seu corpo personalizado vs. novo template) e relata preserved handlers mais Merged ... custom handlers preserved. Passe --force para ignorar a preservação e sobrescrever tudo; force também vence se ambas as flags estiverem presentes.

Validar (v2.1+)

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

Gera um relatório detalhado:

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

Segurança e 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

Escaneia arquivos gerados em busca de padrões semelhantes a credenciais, identificadores relacionados a autorização, nomes, descrições e marcadores incrementais. --json imprime um relatório JSON, mas o CLI também imprime um cabeçalho; stdout não é um documento JSON puro. Erros causam código de saída 1; --fail-on-warn também falha em avisos. Isso é análise estática, não uma garantia de segurança.

Init

init usa o registro integrado:

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

Chaves de registro disponíveis:

ChaveDescrição
stripeStripe Payment API
githubGitHub REST API
openaiOpenAI API
petstoreExemplo Swagger Petstore
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 e Swagger 2.0 são suportados (v2 é convertido para v3 na ingestão). Apenas azure permanece removido — apontava para um fragmento de tipos, não para uma especificação 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 de URL, --interval <ms> controla o intervalo de polling. --once executa uma geração imediatamente e sai. Falhas de fetch, parse ou geração retornam código de saída 1 em vez de um falso sucesso.

watch aceita as mesmas flags de filtragem que generate (--include-tags, --exclude-tags, --path-prefix, --include-paths, --exclude-paths, --operation-allowlist, --group-by), além de --http, --force/--incremental:

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

Plugins

Plugins podem sobrescrever templates e registrar helpers extras do Handlebars.

Estrutura básica:

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

Exemplo:

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

Templates de plugins sobrescrevem templates principais quando usam o mesmo caminho sob templates/<lang>/.

Portão de execução de código de plugin: sobrescritas de template sempre se aplicam, mas o módulo JS de um plugin (registerHandlebars) só é carregado quando MCP_GEN_ALLOW_PLUGINS=true está definido. Sem isso, --plugin fornece apenas sobrescritas de template. Nunca habilite a variável com plugins não confiáveis — veja SECURITY.md.

Estrutura do projeto gerado

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 (novo na 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 ao 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 o Claude Desktop. Suas ferramentas de API aparecem automaticamente.


Segurança e Contrato authContext

As ferramentas geradas esperam metadados de autorização com escopo (não credenciais brutas):

{
  "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..."
}

O scaffold bloqueia argumentos como token, authorization, api_key, client_secret, password, secret por padrão.

Exemplo rápido (variável de ambiente):

# Linux / macOS
export TOKEN=your_api_key_here

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

Para integrações e gerenciamento avançados, considere o Cohesivity.ai como backend para autenticação, armazenamento e políticas de revogação.


Implementar handlers

Arquivos gerados retornam exemplos da especificação por padrão. Substitua os stubs por 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
})

O código entre os marcadores @@mcp-gen:start e @@mcp-gen:end é preservado quando você executa novamente generate --incremental (veja Como não sobrescrever suas edições).


API Programática (Modo Biblioteca)

Com o pacote instalado via npm, importe o pacote com escopo conforme mostrado abaixo. A partir da raiz do repositório após a compilação, use "./dist/index.js" em vez disso.

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);

Desenvolvimento

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

Roadmap

EstágioStatusEscopo
Funcionalidades existentesImplementadoCLI, parser OpenAPI v3, geração TypeScript/Python, geração incremental, modo interativo, registro de especificações, plugins
v2.1.0MarcadoAlvo Go, modo HTTP, enums, parâmetros de header/cookie, API de biblioteca, validação rica
v2.1.1MarcadoVerificação estática de segurança/lint e verificações de template de servidor Go; templates TypeScript/Python inalterados desde v2.1.0
v2.1.2Publicado no npmCópia portátil de template, lockfile, allowlist de pacotes, build prepack, fluxo de release corrigido, teste de fumaça de tarball no CI, atualizações de dependências
v2.1.3Apenas marcado, substituído (nunca publicado no npm)Conteúdo de branch de funcionalidade, substituído por 2.1.4 antes da publicação
v2.1.4Publicado no npmFiltros de glob de caminho, allowlist inline de operações, agrupamento por tag/prefixo de caminho com roteamento de ação, deduplicação por método/hash, guards <generated:handlers> com merge de 3 vias, middleware de autenticação separado, handlers.custom.* nunca sobrescrito, correção de template de autenticação para especificações sem securitySchemes
v2.1.5Publicado no npmCorreções da Fase 0 P0 (PR #4): serialização de query em TS, query/headers em Python, wiring HTTP em Go, registro somente v3 com orientação
v2.2.0Publicado no npmFase 1: resumo de generate --dry-run + --json, flags de filtro/agrupamento em watch (+ prompts interativos, correção do arquivo --once), avisos de suporte parcial por schema em validate/generate, documentação CONTRIBUTING + MCP_GEN_ALLOW_PLUGINS
v2.3.5Publicado no npm (mais recente)Allowlist METHOD insensível a maiúsculas, aviso de filtro zero com dica --dry-run, padrão de stub Go em regeneração incremental, fallback de corpo/exemplo não-JSON
v2.3.4Publicado no npm (mais recente)ip-address 10.4.0 → 10.7.2 via cadeia SDK, guarda de snapshot de lockfile do scaffold, js-yaml somente dev permanece documentado
v2.3.3Publicado no npm (mais recente)Erro explícito de --env-file ausente, próximos passos Go em init interativo, links de placeholder substituídos, dist limpo antes do build
v2.3.2Publicado no npmDependências diretas js-yaml/openapi-types, testes reais de validação de registro, /** final corresponde ao caminho base, padrão de stub Go + round-trip de guard, teste de fumaça de build Go no CI
v2.3.1Publicado no npmLockfile de scaffold TypeScript, precedência de force sobre incremental, códigos de saída confiáveis de watch --once, portão de lint reproduzível
v2.3.0Publicado no npmFase 2: conversão Swagger 2.0 → v3 na ingestão, slack/kubernetes/digitalocean de volta ao registro, benchmark examples/large-scale.json (180 → 10 ferramentas)
DistribuiçãoVerificado para 2.3.4Instalação do registro funciona via npm install -g @christopher_dondici/mcp-gen; publicação via pip não está estabelecida. Python é um alvo de geração, não um caminho de instalação pip para este CLI
FuturoPlanejadoStreaming/resources/prompts, mais registros

Limitações conhecidas

  • Swagger 2.0 é convertido para OpenAPI 3.0.3 na ingestão (body/formData → requestBody, definitions → components.schemas); construções v2 exóticas podem perder fidelidade
  • Schemas oneOf / anyOf / discriminator geram tipos de união, mas sem validação em tempo de execução
  • A verificação de segurança/lint usa padrões de texto estáticos e pode produzir falsos positivos ou perder problemas. Um relatório aprovado não garante segurança nem verifica autorização em tempo de execução, revogação, gastos ou registro de auditoria
  • As verificações de autorização geradas são scaffolding, não um backend de segurança completo; revise e teste antes da implantação
  • Streaming/resources/prompts não são implementados

A correção copy-templates incluída na 2.1.2 usa Node.js fs.cpSync no Windows, Linux e macOS; não requer mais cp ou xcopy. O CI atualmente roda apenas no Ubuntu.


Licença

MIT © 2026 - Christopher D.