@christopher_dondici/mcp-gen 2.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/CHANGELOG.md +217 -0
  2. package/LICENSE +21 -0
  3. package/README.md +439 -0
  4. package/README.pt-BR.md +320 -0
  5. package/RELEASE_NOTES.md +98 -0
  6. package/SECURITY.md +75 -0
  7. package/SECURITY.pt-BR.md +77 -0
  8. package/dist/cli/index.d.ts +3 -0
  9. package/dist/cli/index.d.ts.map +1 -0
  10. package/dist/cli/index.js +685 -0
  11. package/dist/cli/index.js.map +1 -0
  12. package/dist/core/generator.d.ts +4 -0
  13. package/dist/core/generator.d.ts.map +1 -0
  14. package/dist/core/generator.js +275 -0
  15. package/dist/core/generator.js.map +1 -0
  16. package/dist/core/incremental.d.ts +25 -0
  17. package/dist/core/incremental.d.ts.map +1 -0
  18. package/dist/core/incremental.js +91 -0
  19. package/dist/core/incremental.js.map +1 -0
  20. package/dist/core/parser.d.ts +3 -0
  21. package/dist/core/parser.d.ts.map +1 -0
  22. package/dist/core/parser.js +372 -0
  23. package/dist/core/parser.js.map +1 -0
  24. package/dist/core/registry.d.ts +13 -0
  25. package/dist/core/registry.d.ts.map +1 -0
  26. package/dist/core/registry.js +107 -0
  27. package/dist/core/registry.js.map +1 -0
  28. package/dist/core/security-lint.d.ts +53 -0
  29. package/dist/core/security-lint.d.ts.map +1 -0
  30. package/dist/core/security-lint.js +470 -0
  31. package/dist/core/security-lint.js.map +1 -0
  32. package/dist/core/security.d.ts +41 -0
  33. package/dist/core/security.d.ts.map +1 -0
  34. package/dist/core/security.js +150 -0
  35. package/dist/core/security.js.map +1 -0
  36. package/dist/core/templating.d.ts +5 -0
  37. package/dist/core/templating.d.ts.map +1 -0
  38. package/dist/core/templating.js +211 -0
  39. package/dist/core/templating.js.map +1 -0
  40. package/dist/core/types.d.ts +104 -0
  41. package/dist/core/types.d.ts.map +1 -0
  42. package/dist/core/types.js +3 -0
  43. package/dist/core/types.js.map +1 -0
  44. package/dist/index.d.ts +7 -0
  45. package/dist/index.d.ts.map +1 -0
  46. package/dist/index.js +20 -0
  47. package/dist/index.js.map +1 -0
  48. package/dist/templates/go/Dockerfile.hbs +16 -0
  49. package/dist/templates/go/README.md.hbs +77 -0
  50. package/dist/templates/go/ci.yml.hbs +28 -0
  51. package/dist/templates/go/client.go.hbs +86 -0
  52. package/dist/templates/go/go.mod.hbs +5 -0
  53. package/dist/templates/go/models.go.hbs +28 -0
  54. package/dist/templates/go/server.go.hbs +220 -0
  55. package/dist/templates/python/Dockerfile.hbs +12 -0
  56. package/dist/templates/python/README.md.hbs +115 -0
  57. package/dist/templates/python/ci.yml.hbs +24 -0
  58. package/dist/templates/python/models.py.hbs +20 -0
  59. package/dist/templates/python/requirements.txt.hbs +3 -0
  60. package/dist/templates/python/server.py.hbs +195 -0
  61. package/dist/templates/typescript/Dockerfile.hbs +18 -0
  62. package/dist/templates/typescript/README.md.hbs +91 -0
  63. package/dist/templates/typescript/ci.yml.hbs +28 -0
  64. package/dist/templates/typescript/client.hbs +49 -0
  65. package/dist/templates/typescript/models.hbs +23 -0
  66. package/dist/templates/typescript/package.json.hbs +26 -0
  67. package/dist/templates/typescript/server.hbs +337 -0
  68. package/dist/templates/typescript/tsconfig.json.hbs +17 -0
  69. package/examples/petstore.json +130 -0
  70. package/examples/petstore.yaml +131 -0
  71. package/examples/week3.json +47 -0
  72. package/package.json +64 -0
@@ -0,0 +1,320 @@
1
+ # MCP-Generator
2
+
3
+ > **Também disponível em:** [English (English Version)](README.md)
4
+
5
+ Gere servidores MCP a partir de specs OpenAPI.
6
+
7
+ > **Status**: `@christopher_dondici/mcp-gen` 2.1.2 está preparado para release e ainda não foi publicado no npm. Esta versão inclui correções de build, empacotamento, CI e dependências, sem novas funcionalidades de runtime. Use o início rápido pelo código-fonte abaixo. Veja as [notas de release](RELEASE_NOTES.md).
8
+
9
+ `mcp-gen` transforma uma spec OpenAPI v3 em um servidor [Model Context Protocol](https://modelcontextprotocol.io) em TypeScript, Python ou Go. Cada rota vira uma tool, e a geração incremental preserva o código customizado entre os marcadores indicados.
10
+
11
+
12
+ ## Início rápido
13
+
14
+ Com Git, Node.js 20+ e npm 9+ instalados, execute:
15
+
16
+ ```bash
17
+ git clone https://github.com/ChristopherDond/MCP-Generator.git
18
+ cd MCP-Generator
19
+ npm ci
20
+ npm run build
21
+ node dist/cli/index.js --version
22
+ ```
23
+
24
+ Gerar um servidor a partir de uma spec local:
25
+
26
+ ```bash
27
+ node dist/cli/index.js generate -i examples/petstore.yaml -l typescript -o ./my-server
28
+ ```
29
+
30
+ Validar uma spec sem gerar arquivos:
31
+
32
+ ```bash
33
+ node dist/cli/index.js validate -i examples/petstore.yaml
34
+ ```
35
+
36
+ Execute esses comandos na raiz do repositório, na branch `main`. As correções de build e empacotamento fazem parte da 2.1.2. A geração cria um scaffold; não instala dependências, compila ou inicia o servidor gerado.
37
+
38
+ Use a CLI interativa se preferir prompts:
39
+
40
+ ```bash
41
+ npm run dev
42
+ ```
43
+
44
+ ## O que a ferramenta faz
45
+
46
+ ```mermaid
47
+ sequenceDiagram
48
+ participant User
49
+ participant CLI
50
+ participant Parser
51
+ participant Generator
52
+ participant Output
53
+
54
+ User->>CLI: mcp-gen generate --input api.yaml --lang python
55
+ CLI->>Parser: valida e faz parse de OpenAPI v3 (JSON ou YAML)
56
+ Parser->>Generator: AST interna (tools, models, examples)
57
+ Generator->>Output: renderiza templates Handlebars
58
+ Output-->>User: projeto MCP em TypeScript, Python ou Go
59
+ ```
60
+
61
+ Cada rota vira uma tool MCP com:
62
+
63
+ - entrada tipada a partir de parâmetros e request body
64
+ - respostas de exemplo da spec
65
+ - preservação opcional de código incremental
66
+
67
+ ## Requisitos
68
+
69
+ - Node.js 20+
70
+ - npm 9+ (o início rápido usa o lockfile do repositório)
71
+ - Git para clonar o repositório
72
+ - (Opcional) Python 3.8+ para projetos Python
73
+ - (Opcional) Go 1.22+ para projetos Go
74
+
75
+ ## Instalação local e comandos abreviados
76
+
77
+ Use o build do código-fonte em [Início rápido](#início-rápido) enquanto a publicação no npm não estiver verificada. Quando a versão 2.1.2 for publicada e sua disponibilidade no npm for confirmada, você poderá instalá-la com `npm install -g @christopher_dondici/mcp-gen@2.1.2`.
78
+ Neste README, `mcp-gen` é uma abreviação de `node dist/cli/index.js`, executado na raiz do repositório. Por exemplo, `mcp-gen validate -i examples/petstore.yaml` equivale a `node dist/cli/index.js validate -i examples/petstore.yaml`.
79
+
80
+ Opcionalmente, execute `npm link` na raiz após o build para disponibilizar o comando `mcp-gen` apontando para seu checkout local. Isso altera os links globais do npm; não baixa um pacote `@christopher_dondici/mcp-gen` publicado. O nome npm mudou porque `mcp-gen` foi recusado por similaridade com `mcpgen`; o comando continua sendo `mcp-gen`.
81
+
82
+ Para instalar um tarball produzido localmente sem publicar:
83
+
84
+ ```bash
85
+ npm install ./christopher_dondici-mcp-gen-2.1.2.tgz
86
+ ./node_modules/.bin/mcp-gen --version
87
+ ./node_modules/.bin/mcp-gen validate -i node_modules/@christopher_dondici/mcp-gen/examples/petstore.yaml
88
+ ```
89
+
90
+ ## CLI
91
+
92
+ ### Comandos
93
+
94
+ - `mcp-gen generate` ou `mcp-gen g` cria um servidor a partir de uma spec.
95
+ - `mcp-gen validate` ou `mcp-gen v` confere uma spec sem gerar arquivos.
96
+ - `mcp-gen init` baixa uma spec pública conhecida e pode gerar um projeto.
97
+ - `mcp-gen watch` observa um arquivo ou URL e regenera quando houver mudança.
98
+
99
+ ### Gerar
100
+
101
+ ```bash
102
+ mcp-gen generate -i ./api/openapi.yaml -l typescript -o ./my-server
103
+ mcp-gen generate -i ./api/openapi.yaml -l python -o ./my-server
104
+ ```
105
+
106
+ Flags úteis:
107
+
108
+ - `--force`, `-f` sobrescreve arquivos existentes.
109
+ - `--incremental` mantém o código entre `@@mcp-gen:start` e `@@mcp-gen:end`.
110
+ - `--name <name>` define o nome do servidor.
111
+ - `--server-version <version>` define a versão do servidor.
112
+ - `--plugin <path>` carrega um plugin.
113
+
114
+ ### Validar
115
+
116
+ ```bash
117
+ mcp-gen validate -i ./api/openapi.yaml
118
+ ```
119
+
120
+ Formatos aceitos: `.json`, `.yaml`, `.yml` ou uma URL.
121
+
122
+ ### Segurança e lint (v2.1.1)
123
+
124
+ ```bash
125
+ node dist/cli/index.js security -p ./my-server
126
+ node dist/cli/index.js security -p ./my-server --fail-on-warn
127
+ ```
128
+
129
+ Analisa arquivos gerados buscando padrões semelhantes a credenciais, identificadores ligados à autorização, nomes, descrições e marcadores incrementais. `--json` imprime um relatório JSON, mas a CLI também imprime um cabeçalho; stdout não é um documento JSON puro. Erros resultam em código de saída 1; `--fail-on-warn` também falha com avisos. É análise estática, não garantia de segurança.
130
+
131
+ ### Init
132
+
133
+ `init` usa o registry interno:
134
+
135
+ ```bash
136
+ mcp-gen init --from list
137
+ mcp-gen init --from stripe
138
+ mcp-gen init --from stripe --generate -o ./stripe-mcp
139
+ ```
140
+
141
+ Chaves disponíveis no registry:
142
+
143
+ | Chave | Descrição |
144
+ |-----|-------------|
145
+ | `stripe` | Stripe Payment API |
146
+ | `github` | GitHub REST API |
147
+ | `slack` | Slack Web API |
148
+ | `openai` | OpenAI API |
149
+ | `petstore` | Exemplo Swagger Petstore |
150
+ | `twilio` | Twilio Communications API |
151
+ | `shopify` | Shopify Admin API |
152
+ | `kubernetes` | Kubernetes API |
153
+ | `digitalocean` | DigitalOcean API |
154
+ | `azure` | Azure Resource Manager API |
155
+
156
+ ### Watch
157
+
158
+ ```bash
159
+ mcp-gen watch -i ./api/openapi.yaml -o ./my-server
160
+ mcp-gen watch -i https://example.com/spec.json --interval 60000
161
+ ```
162
+
163
+ Para entradas via URL, `--interval <ms>` controla o polling. `--once` gera uma vez e encerra após a primeira mudança.
164
+
165
+ ## Plugins
166
+
167
+ Plugins podem sobrescrever templates e registrar helpers extras do Handlebars.
168
+
169
+ Estrutura básica:
170
+
171
+ - `templates/typescript/...` ou `templates/python/...` para sobrescrever templates `.hbs`
172
+ - `index.js` que exporta `registerHandlebars(handlebars)` para helpers customizados
173
+
174
+ Exemplo:
175
+
176
+ ```bash
177
+ mcp-gen generate -i ./api/openapi.yaml --plugin ./meu-plugin
178
+ mcp-gen watch -i ./api/openapi.yaml --plugin ./meu-plugin
179
+ ```
180
+
181
+ Os templates do plugin substituem os do core quando usam o mesmo caminho em `templates/<lang>/`.
182
+
183
+ ---
184
+
185
+ ## Estrutura do projeto gerado
186
+
187
+ **TypeScript:**
188
+ ```
189
+ my-server/
190
+ ├── src/
191
+ │ ├── server.ts # MCP server — definições de tools + handlers
192
+ │ └── models.ts # Interfaces TypeScript geradas a partir dos schemas OpenAPI
193
+ ├── .github/
194
+ │ └── workflows/
195
+ │ └── ci.yml
196
+ ├── Dockerfile
197
+ ├── package.json
198
+ ├── tsconfig.json
199
+ └── README.md
200
+ ```
201
+
202
+ **Python:**
203
+ ```
204
+ my-server/
205
+ ├── server.py # Servidor FastMCP — definições de tools + handlers
206
+ ├── models.py # Modelos Pydantic gerados a partir dos schemas OpenAPI
207
+ ├── requirements.txt
208
+ ├── .github/
209
+ │ └── workflows/
210
+ │ └── ci.yml
211
+ ├── Dockerfile
212
+ └── README.md
213
+ ```
214
+
215
+ ---
216
+
217
+ ## Conectar ao Claude Desktop
218
+
219
+ **TypeScript:**
220
+ ```json
221
+ {
222
+ "mcpServers": {
223
+ "my-server": {
224
+ "command": "node",
225
+ "args": ["/absolute/path/to/my-server/dist/server.js"]
226
+ }
227
+ }
228
+ }
229
+ ```
230
+
231
+ **Python:**
232
+ ```json
233
+ {
234
+ "mcpServers": {
235
+ "my-server": {
236
+ "command": "python",
237
+ "args": ["/absolute/path/to/my-server/server.py"]
238
+ }
239
+ }
240
+ }
241
+ ```
242
+
243
+ Reinicie o Claude Desktop. As tools da sua API vão aparecer automaticamente.
244
+
245
+ ---
246
+
247
+ ## Implementar handlers
248
+
249
+ Os arquivos gerados retornam exemplos da spec por padrão. Substitua os stubs pela lógica real.
250
+
251
+ **TypeScript** (`src/server.ts`):
252
+ ```typescript
253
+ case "get_users_id": {
254
+ // @@mcp-gen:start:get_users_id
255
+ const user = await db.users.findById(args.id);
256
+ return { content: [{ type: "text", text: JSON.stringify(user) }] };
257
+ // @@mcp-gen:end:get_users_id
258
+ }
259
+ ```
260
+
261
+ **Python** (`server.py`):
262
+ ```python
263
+ @mcp.tool()
264
+ async def get_users_id(id: float) -> Any:
265
+ # @@mcp-gen:start:get_users_id
266
+ user = await db.users.find_by_id(id)
267
+ return user
268
+ # @@mcp-gen:end:get_users_id
269
+ ```
270
+
271
+ Código entre os marcadores `@@mcp-gen:start` e `@@mcp-gen:end` é preservado quando você roda `generate --incremental` novamente.
272
+
273
+ ---
274
+
275
+ ## Desenvolvimento
276
+
277
+ ```bash
278
+ npm test
279
+ npx tsc --noEmit
280
+
281
+ # Exemplo TypeScript
282
+ node dist/cli/index.js generate --input examples/petstore.json --out /tmp/ts-test --force
283
+
284
+ # Exemplo Python
285
+ node dist/cli/index.js generate --input examples/petstore.yaml --lang python --out /tmp/py-test --force
286
+
287
+ # Exemplo incremental
288
+ node dist/cli/index.js generate --input examples/petstore.json --out /tmp/ts-test --incremental
289
+ ```
290
+
291
+ ---
292
+
293
+ ## Roadmap
294
+
295
+ | Etapa | Status | Escopo |
296
+ |-------|--------|-------|
297
+ | Recursos existentes | Implementados | CLI, parser OpenAPI v3, geração TypeScript/Python, geração incremental, modo interativo, registry de specs, plugins |
298
+ | v2.1.0 | Com tag | Target Go, modo HTTP, enums, parâmetros header/cookie, API de biblioteca, validação detalhada |
299
+ | v2.1.1 | Com tag | Análise estática de segurança/lint e verificações no template de servidor Go; templates TypeScript/Python sem alterações desde v2.1.0 |
300
+ | v2.1.2 | Preparada para release | Cópia portátil de templates, lockfile, allowlist do pacote, build no prepack, workflow de release corrigido, smoke test do tarball na CI, atualização de dependências |
301
+ | Distribuição | Não verificada | A publicação da 2.1.2 no npm precisa ser confirmada antes da instalação pelo registry; publicação via pip não comprovada. Python é um target de geração, não uma forma de instalar esta CLI via pip |
302
+ | Futuro | Planejado | Streaming/resources/prompts, OpenAPI v2, mais registries |
303
+
304
+ ---
305
+
306
+ ## Limitações conhecidas
307
+
308
+ - OpenAPI v2 (Swagger) não é suportado — apenas v3.x
309
+ - `oneOf` / `anyOf` / `discriminator` são parcialmente tratados
310
+ - A análise de segurança/lint usa padrões estáticos de texto e pode gerar falsos positivos ou deixar problemas passar. Um relatório aprovado não garante segurança nem verifica autorização, revogação, gastos ou auditoria em execução
311
+ - As verificações de autorização geradas são scaffolding, não um backend completo de segurança; revise e teste antes do deploy
312
+ - Streaming/resources/prompts ainda não estão implementados
313
+
314
+ A correção de `copy-templates` incluída na 2.1.2 usa `fs.cpSync` do Node.js no Windows, Linux e macOS; não depende mais de `cp` ou `xcopy`. A CI atual executa apenas no Ubuntu.
315
+
316
+ ---
317
+
318
+ ## Licença
319
+
320
+ MIT © 2026 - Christopher D.
@@ -0,0 +1,98 @@
1
+ # Notas de release
2
+
3
+ ## Estado e fontes
4
+
5
+ A versão `2.1.2` do pacote `@christopher_dondici/mcp-gen` está preparada para release e ainda não foi publicada, com `package.json` e `package-lock.json` alinhados. O npm recusou `mcp-gen` por similaridade com `mcpgen`; a renomeação mantém a versão, o binário `mcp-gen` e o repositório. A publicação no npm não foi verificada; estas notas não confirmam publicação nem criação de tag. Uma tag Git ou um workflow de publicação não comprova disponibilidade no registry.
6
+
7
+ A 2.1.2 reúne correções de build, empacotamento, CI e dependências, sem novas funcionalidades de runtime. Estas notas preservam o histórico da 2.1.1, confrontando o [CHANGELOG](CHANGELOG.md) com os diffs `v2.1.0..v2.1.1` e `v2.1.1..1629696`, e descrevem separadamente a preparação da 2.1.2. As seções históricas do changelog não foram alteradas; suas afirmações sobre publicação e segurança não confirmam o estado atual.
8
+
9
+ ## Funcionalidade histórica da v2.1.1
10
+
11
+ Comparação: `v2.1.0..v2.1.1`.
12
+
13
+ - Inclusão de `src/core/security-lint.ts`, com análise estática de padrões semelhantes a credenciais, referências a `authContext`, identificadores de políticas, nomes, descrições, TODO/FIXME e marcadores incrementais. Também há verificações de descrições e exemplos de uma spec encontrada no projeto; isso não equivale a validar integralmente seus schemas.
14
+ - Novo comando `security` (alias `sec`) e opção no menu interativo. A sintaxe real exige `-p` ou `--project`, não o caminho posicional mostrado no changelog.
15
+ - `--json` imprime o relatório em JSON; a CLI ainda imprime um cabeçalho antes dele, portanto stdout não é JSON puro. Erros encerram com código 1; `--fail-on-warn` também encerra com código 1 quando há avisos.
16
+ - Exports de biblioteca: `scanProject`, `formatReport` e os tipos `SecurityRule` e `SecurityReport`.
17
+ - Inclusão de 11 testes em `tests/security-lint.test.ts` e configuração explícita de transformação via `ts-jest`.
18
+ - Ajustes nos textos e prompts da CLI, com remoção de textos bilíngues em diversos pontos.
19
+ - O workflow de release passou a tentar condicionar `npm publish` à presença de `NPM_TOKEN`; a correção atual dessa condição é descrita separadamente abaixo.
20
+
21
+ Exemplo após compilar o checkout local:
22
+
23
+ ```bash
24
+ node dist/cli/index.js security -p ./my-server
25
+ node dist/cli/index.js security -p ./my-server --fail-on-warn
26
+ ```
27
+
28
+ ### Templates: correção em relação ao changelog
29
+
30
+ **Os templates TypeScript e Python não mudaram entre `v2.1.0` e `v2.1.1`.** As melhorias atribuídas a eles na seção 2.1.1 do changelog não aparecem nesse diff e não são novidades dessa tag.
31
+
32
+ O template alterado foi `src/templates/go/server.go.hbs`: recebeu `RAW_CREDENTIAL_KEYS`, `TOOL_POLICIES`, `hasRawCredentialKey`, `requireSecurity` e a chamada de verificação nos handlers. Esses elementos são scaffolding e não comprovam uma implementação completa de autorização, auditoria ou revogação.
33
+
34
+ Go, modo HTTP, enums, parâmetros header/cookie, API de biblioteca e validação detalhada já pertenciam à v2.1.0; não são novidades da v2.1.1.
35
+
36
+ ## Alterações após a tag até 1629696
37
+
38
+ Comparação: `v2.1.1..1629696`.
39
+
40
+ - `690de37`: remoção de comentários em `src/cli/index.ts`, `src/core/generator.ts` e `src/core/incremental.ts`, sem mudança de lógica executável nesse diff.
41
+ - `1629696`: alteração da sintaxe do `if` referente a `NPM_TOKEN` no workflow de release. Ainda era uma referência direta a `secrets` na condição; a correção incluída na 2.1.2 abaixo substitui essa abordagem.
42
+ - Nenhum template mudou nesse intervalo. Esses commits posteriores à tag não constituem uma nova versão publicada.
43
+
44
+ ## Correções incluídas na 2.1.2
45
+
46
+ As alterações abaixo fazem parte da preparação da 2.1.2 e abrangem build, empacotamento, automação e dependências. Não adicionam funcionalidades aos servidores gerados e não fazem parte do conteúdo histórico da tag `v2.1.1`.
47
+
48
+ ### Build e pacote
49
+
50
+ - `publishConfig.access` é `public` para o pacote scoped. O tarball da 2.1.2 se chama `christopher_dondici-mcp-gen-2.1.2.tgz` e a instalação local usa `node_modules/@christopher_dondici/mcp-gen`.
51
+ - Para o pacote final, use um clone ou worktree limpo fora do checkout de desenvolvimento; `prepack` não remove arquivos antigos nem caches já existentes em `dist/`.
52
+ - `copy-templates` usa uma chamada inline de Node.js a `fs.cpSync`, com cópia recursiva de `src/templates` para `dist/templates`. Não depende mais de `xcopy` nem de comandos de cópia específicos do shell.
53
+ - A allowlist `files` inclui `dist/`, `examples/`, `README.md`, `README.pt-BR.md`, `CHANGELOG.md`, `RELEASE_NOTES.md`, `SECURITY.md`, `SECURITY.pt-BR.md` e `LICENSE`. O npm também inclui seu manifesto automaticamente.
54
+ - `prepack` executa `npm run build`, preparando o código compilado e os templates antes do empacotamento.
55
+ - `package-lock.json` deixa de ser ignorado e passa a ser versionado com metadados alinhados a `2.1.2`, permitindo o fluxo `npm ci` com dependências fixadas pelo lockfile.
56
+ - `repository.url` usa o formato normalizado `git+https://github.com/ChristopherDond/MCP-Generator.git`.
57
+ - `npm run release` agora executa somente build e testes, removendo a chamada ao inexistente `scripts/release.js`. Esse comando não aumenta versão nem faz push.
58
+ - **Os comandos explícitos `release:patch` e `release:rc` continuam presentes e podem aumentar a versão e fazer push de commits/tags.** `scripts/release.sh` e `scripts/release.bat` também permanecem, com operações de atualização de versão, push e criação de release no GitHub. Não são comandos de verificação local e não foram executados nesta tarefa.
59
+
60
+ ### CI e release
61
+
62
+ - A nova CI é acionada por pushes em qualquer branch e por pull requests, em `ubuntu-latest` com Node.js 20.
63
+ - Executa `npm ci`, `npx tsc --noEmit`, testes, build e `npm pack` real. Instala o tarball em um diretório temporário e verifica `--version` e `validate` usando o exemplo Petstore incluído no pacote.
64
+ - O smoke test verifica instalação e execução básica do tarball; não compila nem executa servidores gerados em todas as linguagens. A CI não publica no npm e não testa Windows/macOS.
65
+ - O workflow separado de release mantém o mesmo gatilho de tags estáveis (`v[0-9]+.[0-9]+.[0-9]+`). Verifica nome scoped, acesso público e correspondência entre tag e versão; executa typecheck, testes, build, pack e smoke test antes da publicação.
66
+ - A publicação usa `--access public` sobre o mesmo tarball validado, também anexado à release GitHub. A lógica de RC inalcançável foi removida. Uma release GitHub sem publicação npm continua possível quando o segredo não está disponível; não comprova publicação no registry.
67
+ - A variável de ambiente booleana `HAS_NPM_TOKEN` representa apenas a presença do segredo. O passo de publicação usa `if: env.HAS_NPM_TOKEN == 'true'`, em vez de consultar `secrets` diretamente no `if`. Isso não confirma que o pacote já foi publicado.
68
+
69
+ ### Dependências
70
+
71
+ - Atualizações fixadas no lockfile da 2.1.2: `fast-uri` 3.1.8, `hono` 4.13.8, `js-yaml` 4.3.2 e `qs` 6.16.0. Resultados de auditoria dependem da data da consulta; essas versões não são uma garantia de ausência de vulnerabilidades.
72
+
73
+ ## Uso local
74
+
75
+ Com Git, Node.js 20+ e npm 9+ instalados:
76
+
77
+ ```bash
78
+ git clone https://github.com/ChristopherDond/MCP-Generator.git
79
+ cd MCP-Generator
80
+ npm ci
81
+ npm run build
82
+ node dist/cli/index.js --version
83
+ node dist/cli/index.js generate -i examples/petstore.yaml -l typescript -o ./my-server
84
+ node dist/cli/index.js validate -i examples/petstore.yaml
85
+ ```
86
+
87
+ O fluxo acima usa a branch `main`, com as correções de build e empacotamento incluídas na 2.1.2, não um checkout isolado da tag histórica `v2.1.1`. A geração cria arquivos; não instala dependências nem inicia o servidor gerado.
88
+
89
+ Quando a versão 2.1.2 for publicada e sua disponibilidade no npm for confirmada, a instalação pelo registry poderá ser feita com `npm install -g @christopher_dondici/mcp-gen@2.1.2`. Até essa confirmação, use o fluxo pelo código-fonte.
90
+
91
+ Nos READMEs, `mcp-gen` é uma abreviação de `node dist/cli/index.js` na raiz do repositório. Opcionalmente, `npm link` após o build cria o comando apontando para o checkout local, alterando os links globais do npm sem depender de uma publicação de `@christopher_dondici/mcp-gen` no registry. Não há fluxo de instalação desta CLI via pip confirmado.
92
+
93
+ ## Limitações
94
+
95
+ - A análise de segurança é estática, baseada em padrões de texto: pode gerar falsos positivos e deixar problemas passar. Um relatório aprovado não garante segurança nem prontidão para produção.
96
+ - Encontrar nomes de políticas ou funções no texto não comprova sua execução nem valida autorização, TTL, limites financeiros, revogação ou persistência de auditoria. Esses controles precisam de revisão e integração com um backend confiável.
97
+ - Os servidores gerados são scaffolds e exigem testes e revisão antes do deploy; não há garantia de segurança ou de equivalência entre os targets.
98
+ - OpenAPI v2 não é suportado. Unions geradas de `oneOf`/`anyOf`/`discriminator` não fornecem validação completa em runtime. Streaming/resources/prompts ainda não estão implementados.
package/SECURITY.md ADDED
@@ -0,0 +1,75 @@
1
+ # Security Policy
2
+
3
+ ## Overview
4
+
5
+ This document outlines the security measures and practices implemented in the MCP Generator project.
6
+
7
+ ## Security Features
8
+
9
+ ### 1. Path Traversal Protection
10
+ - All output file paths are validated to prevent directory traversal attacks
11
+ - Uses `validateOutputPath()` to ensure files are written only to the intended output directory
12
+ - Rejects paths that attempt to access parent directories
13
+
14
+ ### 2. Plugin Security
15
+ - By default, dynamic plugin code loading is **disabled**
16
+ - Plugins can only provide templates, not arbitrary code execution
17
+ - To enable plugin code loading (not recommended for untrusted sources):
18
+ ```bash
19
+ MCP_GEN_ALLOW_PLUGINS=true mcp-gen generate --plugin ./my-plugin ...
20
+ ```
21
+ - Plugin modules are validated for safe exports
22
+ - Symbolic links are rejected to prevent symlink attacks
23
+
24
+ ### 3. Remote URL Validation
25
+ - Only HTTPS URLs are allowed for fetching OpenAPI specs
26
+ - Private/local IP addresses and localhost are blocked (SSRF prevention)
27
+ - Content-Type validation (only JSON/YAML allowed)
28
+ - Content-Length validation (max 50MB)
29
+ - 30-second timeout on remote fetches
30
+
31
+ ### 4. Input Sanitization
32
+ - User inputs are sanitized to remove null bytes and control characters
33
+ - Length limits enforced on user-provided strings
34
+
35
+ ## Vulnerability Fixes
36
+
37
+ ### Fixed Issues
38
+ - ✅ Remote Code Execution via plugin loading - **MITIGATED**: Dynamic code loading disabled by default
39
+ - ✅ Path traversal - **FIXED**: All output paths validated
40
+ - ✅ SSRF attacks - **FIXED**: URL validation and IP filtering
41
+ - ✅ Dependency vulnerabilities - **FIXED**: All packages audited and updated
42
+
43
+ ## Best Practices
44
+
45
+ ### For Users
46
+ 1. Keep the project updated: `npm audit fix`
47
+ 2. Do not enable `MCP_GEN_ALLOW_PLUGINS` with untrusted sources
48
+ 3. Validate OpenAPI specs from unknown sources before generation
49
+ 4. Use `--force` carefully when overwriting existing projects
50
+
51
+ ### For Developers
52
+ 1. Run `npm audit` before committing
53
+ 2. Add security tests for new features
54
+ 3. Never suppress security warnings
55
+ 4. Review security.ts for validation functions before adding new file operations
56
+
57
+ ## Security Audit Checklist
58
+
59
+ - [x] Path traversal protection
60
+ - [x] Plugin execution control
61
+ - [x] Remote URL validation
62
+ - [x] Dependency vulnerability scanning
63
+ - [x] Input sanitization
64
+ - [ ] Code signing (future)
65
+ - [ ] Security headers (future)
66
+
67
+ ## Reporting Security Issues
68
+
69
+ If you discover a security vulnerability, please email security@example.com instead of using the issue tracker.
70
+
71
+ ## References
72
+
73
+ - [OWASP Path Traversal](https://owasp.org/www-community/attacks/Path_Traversal)
74
+ - [OWASP SSRF](https://owasp.org/www-community/attacks/Server-Side_Request_Forgery)
75
+ - [OWASP Code Injection](https://owasp.org/www-community/attacks/Code_Injection)
@@ -0,0 +1,77 @@
1
+ # Política de Segurança
2
+
3
+ ## Visão Geral
4
+
5
+ Este documento descreve as medidas e práticas de segurança implementadas no projeto MCP Generator.
6
+
7
+ ## Recursos de Segurança
8
+
9
+ ### 1. Proteção contra Path Traversal
10
+ - Todos os caminhos de arquivo de saída são validados para prevenir ataques de travessia de diretório
11
+ - Usa `validateOutputPath()` para garantir que os arquivos sejam gravados apenas no diretório de saída pretendido
12
+ - Rejeita caminhos que tentam acessar diretórios pai
13
+
14
+ ### 2. Segurança de Plugins
15
+ - Por padrão, o carregamento dinâmico de código de plugin está **desabilitado**
16
+ - Os plugins podem fornecer apenas templates, não execução arbitrária de código
17
+ - Para ativar o carregamento de código de plugin (não recomendado para fontes não confiáveis):
18
+ ```bash
19
+ MCP_GEN_ALLOW_PLUGINS=true mcp-gen generate --plugin ./meu-plugin ...
20
+ ```
21
+ - Módulos de plugin são validados para exportações seguras
22
+ - Links simbólicos são rejeitados para prevenir ataques de symlink
23
+
24
+ ### 3. Validação de URL Remota
25
+ - Apenas URLs HTTPS são permitidas para buscar specs OpenAPI
26
+ - Endereços IP privados e localhost são bloqueados (prevenção de SSRF)
27
+ - Validação de Content-Type (apenas JSON/YAML permitidos)
28
+ - Validação de Content-Length (máximo 50MB)
29
+ - Timeout de 30 segundos em buscas remotas
30
+
31
+ ### 4. Sanitização de Entrada
32
+ - Entradas do usuário são sanitizadas para remover bytes nulos e caracteres de controle
33
+ - Limites de comprimento aplicados em strings fornecidas pelo usuário
34
+
35
+ ## Correções de Vulnerabilidades
36
+
37
+ ### Problemas Corrigidos
38
+ - ✅ Execução Remota de Código via carregamento de plugin - **MITIGADO**: Carregamento dinâmico desabilitado por padrão
39
+ - ✅ Path traversal - **CORRIGIDO**: Todos os caminhos de saída validados
40
+ - ✅ Ataques SSRF - **CORRIGIDO**: Validação de URL e filtragem de IP
41
+ - ✅ Vulnerabilidades de dependência - **CORRIGIDO**: Todos os pacotes auditados e atualizados
42
+
43
+ ## Melhores Práticas
44
+
45
+ ### Para Usuários
46
+ 1. Mantenha o projeto atualizado: `npm audit fix`
47
+ 2. Não ative `MCP_GEN_ALLOW_PLUGINS` com fontes não confiáveis
48
+ 3. Valide specs OpenAPI de fontes desconhecidas antes de gerar
49
+ 4. Use `--force` com cuidado ao sobrescrever projetos existentes
50
+
51
+ ### Para Desenvolvedores
52
+ 1. Execute `npm audit` antes de fazer commit
53
+ 2. Adicione testes de segurança para novas funcionalidades
54
+ 3. Nunca suprima avisos de segurança
55
+ 4. Revise security.ts para funções de validação antes de adicionar novas operações de arquivo
56
+
57
+ ## Lista de Verificação de Auditoria de Segurança
58
+
59
+ - [x] Proteção contra path traversal
60
+ - [x] Controle de execução de plugins
61
+ - [x] Validação de URL remota
62
+ - [x] Verificação de vulnerabilidades de dependência
63
+ - [x] Sanitização de entrada
64
+ - [ ] Assinatura de código (futuro)
65
+ - [ ] Headers de segurança (futuro)
66
+
67
+ ## Reportando Problemas de Segurança
68
+
69
+ Se você descobrir uma vulnerabilidade de segurança, por favor envie um email para security@example.com em vez de usar o rastreador de problemas.
70
+
71
+ ## Referências
72
+
73
+ - [OWASP Path Traversal](https://owasp.org/www-community/attacks/Path_Traversal)
74
+ - [OWASP SSRF](https://owasp.org/www-community/attacks/Server-Side_Request_Forgery)
75
+ - [OWASP Injeção de Código](https://owasp.org/www-community/attacks/Code_Injection)
76
+ - [CWE-22: Improper Limitation of a Pathname to a Restricted Directory](https://cwe.mitre.org/data/definitions/22.html)
77
+ - [CWE-918: Server-Side Request Forgery (SSRF)](https://cwe.mitre.org/data/definitions/918.html)
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":""}