generate¶
Use generate when you want a reusable generated project on disk.
Command¶
openapi-to-mcp generate [OPTIONS]
Options¶
| Option | Required | Default | Meaning |
|---|---|---|---|
--openapi-json, -o |
Yes | None | Local path or URL to a JSON or YAML OpenAPI spec |
--config |
No | Auto-discover mcpgen.yaml / mcpgen.yml |
Policy file path for generation defaults and tool policy |
--output-dir, -d |
Yes | None | Output directory for generated files |
--mcp-server-name, -n |
No | Spec title or fallback | Generated MCP server name |
--mcp-server-version, -v |
No | Spec version or fallback | Generated MCP server version |
--transport, -t |
No | streamable-http |
Generated transport target |
--host |
No | 127.0.0.1 |
Host for streamable-http |
--port, -p |
No | 8080 |
Port for streamable-http |
--mcp-endpoint |
No | /mcp |
HTTP MCP endpoint path |
--strict/--no-strict |
No | --strict |
Fail or degrade on unsupported required behavior |
--on-mapping-error |
No | strict=fail, non-strict=skip |
How to handle non-schema operation mapping failures |
--on-schema-error |
No | strict=fail, non-strict=skip |
How to handle schema conversion failures while mapping operations |
--runtime-validation |
No | input |
Runtime validation mode compiled into the generated server (none or input) |
--tool-grouping |
No | none |
Optional grouped tool naming strategy (none or tag-prefix) |
Examples¶
Local spec, stdio output¶
openapi-to-mcp generate \
--openapi-json ./openapi.yaml \
--output-dir ./generated-stdio \
--transport stdio
Remote spec, streamable HTTP output¶
openapi-to-mcp generate \
--openapi-json https://petstore.swagger.io/v2/swagger.json \
--output-dir ./generated-http \
--transport streamable-http \
--host 127.0.0.1 \
--port 8080 \
--mcp-endpoint /mcp
Generate with mcpgen.yaml policy¶
openapi-to-mcp generate \
--openapi-json ./openapi.yaml \
--config ./mcpgen.yaml \
--output-dir ./generated-policy
See mcpgen.yaml for policy shape and precedence.
Non-strict generation¶
openapi-to-mcp generate \
--openapi-json ./openapi.yaml \
--output-dir ./generated-loose \
--no-strict
Use non-strict mode only when you accept degraded generation plus warnings in generation_report.json.
Explicitly skip mapping failures in strict mode¶
openapi-to-mcp generate \
--openapi-json ./openapi.yaml \
--output-dir ./generated-partial \
--on-mapping-error skip
Explicitly fail on schema errors in non-strict mode¶
openapi-to-mcp generate \
--openapi-json ./openapi.yaml \
--output-dir ./generated-strict-schema \
--no-strict \
--on-schema-error fail
Disable generated runtime input validation¶
openapi-to-mcp generate \
--openapi-json ./openapi.yaml \
--output-dir ./generated-no-validation \
--runtime-validation none
Generate grouped tools by first tag prefix¶
openapi-to-mcp generate \
--openapi-json ./openapi.yaml \
--output-dir ./generated-grouped \
--tool-grouping tag-prefix
tag-prefix uses the first operation tag when available and prefixes the generated tool
name with a normalized form such as pets_listPets.
If the normalized tag would start with a digit, the generator prefixes it with group_
to keep the emitted tool name conservative.
Generated artifacts¶
generate writes:
src/TypeScript runtime files.env.example- generated project
README.md generation_report.json- optional policy application from
mcpgen.yaml package.json,tsconfig.json, and related build files
generation_report.json¶
The report captures:
strict_mode- selected
transport - selected
tool_grouping - applied
policy_filewhen config was used - mapped tool count
- resolved
on_mapping_errorandon_schema_errormodes - skipped operations
- warnings
Use it as the machine-readable summary of what happened during generation.
Validation rules¶
--mcp-endpointmust start with/--portmatters only forstreamable-http- generation aborts if no tools are mapped
Common failure cases¶
- invalid or unreachable OpenAPI source
- strict-mode collision or unsupported mapping failure
- unusable output directory
- malformed endpoint path for
streamable-http
Next step¶
After generate, follow the generated project's own README.md or use test-server against the built server.