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-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 2.3.5
(Release de correção — sem mudanças que quebram 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 2.3.4
(Release de correção — sem mudanças que quebram 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 depackage.json.hbsdo scaffold contra o snapshotpackage-lock.json.hbs, além de um piso deip-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 2.3.3
(Release de correção — sem mudanças que quebram 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 2.3.2
(Release de correção — sem mudanças que quebram 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 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 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 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+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 2.2.0 (anterior)
(Fase 1 — base sólida, sem mudanças que quebram compatibilidade.)
generate --dry-runlista ferramentas/modelos/grupos/arquivos sem escrever nada;--jsonimprime um resumo legível por máquina (compatível com 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 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
--httpdo Go conectado 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 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 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 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 nome, 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 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 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), 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):
| Modo | Ferramentas |
|---|---|
| sem agrupamento | 180 |
--group-by tag | 10 |
--group-by path-prefix | 10 |
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:
- Edite apenas entre
@@mcp-gen:start:<tool>e@@mcp-gen:end:<tool>(ou<generated:handlers:<tool>>). Esse corpo é preservado na regeneração. - Coloque a lógica de negócio reutilizável em
src/handlers.custom.ts(TS),handlers_custom.py(Python) ouhandlers_custom.go(Go). Esse arquivo é criado uma vez e nunca é sobrescrito, a menos que você passe--force. - Execute novamente com
generate --incremental. O gerador faz um merge de 3 vias (stub fresco vs. seu corpo personalizado vs. novo template) e relatapreservedhandlers maisMerged ... custom handlers preserved. Passe--forcepara 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:
| Chave | Descrição |
|---|---|
stripe | Stripe Payment API |
github | GitHub REST API |
openai | OpenAI API |
petstore | Exemplo Swagger Petstore |
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 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/...outemplates/go/...para sobrescrever templates de.hbsindex.jsque exportaregisterHandlebars(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 quandoMCP_GEN_ALLOW_PLUGINS=trueestá definido. Sem isso,--pluginfornece 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ágio | Status | Escopo |
|---|---|---|
| Funcionalidades existentes | Implementado | CLI, parser OpenAPI v3, geração TypeScript/Python, geração incremental, modo interativo, registro de especificações, plugins |
| v2.1.0 | Marcado | Alvo Go, modo HTTP, enums, parâmetros de header/cookie, API de biblioteca, validação rica |
| v2.1.1 | Marcado | Verificaçã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.2 | Publicado no npm | Có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.3 | Apenas 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.4 | Publicado no npm | Filtros 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.5 | Publicado no npm | Correçõ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.0 | Publicado no npm | Fase 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.5 | Publicado 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.4 | Publicado 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.3 | Publicado 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.2 | Publicado no npm | Dependê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.1 | Publicado no npm | Lockfile 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.0 | Publicado no npm | Fase 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ção | Verificado para 2.3.4 | Instalaçã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 |
| Futuro | Planejado | Streaming/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/discriminatorgeram 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.