mcpmake 0.1.1 → 0.2.1
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.
- package/README.md +88 -635
- package/dist/commands/bundle.d.ts +1 -0
- package/dist/commands/bundle.d.ts.map +1 -0
- package/dist/commands/bundle.js +5 -4
- package/dist/commands/bundle.js.map +1 -0
- package/dist/commands/ci.d.ts +1 -0
- package/dist/commands/ci.d.ts.map +1 -0
- package/dist/commands/ci.js +3 -2
- package/dist/commands/ci.js.map +1 -0
- package/dist/commands/deploy.d.ts +1 -0
- package/dist/commands/deploy.d.ts.map +1 -0
- package/dist/commands/deploy.js +4 -3
- package/dist/commands/deploy.js.map +1 -0
- package/dist/commands/diff.d.ts +1 -0
- package/dist/commands/diff.d.ts.map +1 -0
- package/dist/commands/diff.js +5 -4
- package/dist/commands/diff.js.map +1 -0
- package/dist/commands/from/describe.d.ts +1 -0
- package/dist/commands/from/describe.d.ts.map +1 -0
- package/dist/commands/from/describe.js +11 -10
- package/dist/commands/from/describe.js.map +1 -0
- package/dist/commands/from/har.d.ts +1 -0
- package/dist/commands/from/har.d.ts.map +1 -0
- package/dist/commands/from/har.js +14 -13
- package/dist/commands/from/har.js.map +1 -0
- package/dist/commands/from/openapi.d.ts +1 -0
- package/dist/commands/from/openapi.d.ts.map +1 -0
- package/dist/commands/from/openapi.js +17 -16
- package/dist/commands/from/openapi.js.map +1 -0
- package/dist/commands/from/postman.d.ts +1 -0
- package/dist/commands/from/postman.d.ts.map +1 -0
- package/dist/commands/from/postman.js +13 -12
- package/dist/commands/from/postman.js.map +1 -0
- package/dist/commands/from/stainless.d.ts +110 -0
- package/dist/commands/from/stainless.d.ts.map +1 -0
- package/dist/commands/from/stainless.js +272 -0
- package/dist/commands/from/stainless.js.map +1 -0
- package/dist/commands/from/target-support.d.ts +1 -0
- package/dist/commands/from/target-support.d.ts.map +1 -0
- package/dist/commands/from/target-support.js +2 -1
- package/dist/commands/from/target-support.js.map +1 -0
- package/dist/commands/from/url.d.ts +1 -0
- package/dist/commands/from/url.d.ts.map +1 -0
- package/dist/commands/from/url.js +14 -13
- package/dist/commands/from/url.js.map +1 -0
- package/dist/commands/from/website.d.ts +1 -0
- package/dist/commands/from/website.d.ts.map +1 -0
- package/dist/commands/from/website.js +17 -16
- package/dist/commands/from/website.js.map +1 -0
- package/dist/commands/lint.d.ts +1 -0
- package/dist/commands/lint.d.ts.map +1 -0
- package/dist/commands/lint.js +6 -5
- package/dist/commands/lint.js.map +1 -0
- package/dist/commands/merge.d.ts +1 -0
- package/dist/commands/merge.d.ts.map +1 -0
- package/dist/commands/merge.js +3 -2
- package/dist/commands/merge.js.map +1 -0
- package/dist/commands/publish.d.ts +1 -0
- package/dist/commands/publish.d.ts.map +1 -0
- package/dist/commands/publish.js +4 -3
- package/dist/commands/publish.js.map +1 -0
- package/dist/commands/rescan.d.ts +1 -0
- package/dist/commands/rescan.d.ts.map +1 -0
- package/dist/commands/rescan.js +12 -11
- package/dist/commands/rescan.js.map +1 -0
- package/dist/commands/update.d.ts +1 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +10 -9
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/verify.d.ts +1 -0
- package/dist/commands/verify.d.ts.map +1 -0
- package/dist/commands/verify.js +7 -6
- package/dist/commands/verify.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -2
- package/dist/index.js.map +1 -0
- package/dist/registry/official-registry.d.ts +1 -0
- package/dist/registry/official-registry.d.ts.map +1 -0
- package/dist/registry/official-registry.js +1 -0
- package/dist/registry/official-registry.js.map +1 -0
- package/package.json +20 -46
- package/dist/analyzer/auth-detector.d.ts +0 -12
- package/dist/analyzer/auth-detector.js +0 -142
- package/dist/analyzer/dom-parser.d.ts +0 -10
- package/dist/analyzer/dom-parser.js +0 -259
- package/dist/analyzer/goal-crawler.d.ts +0 -25
- package/dist/analyzer/goal-crawler.js +0 -177
- package/dist/analyzer/hybrid-detector.d.ts +0 -28
- package/dist/analyzer/hybrid-detector.js +0 -96
- package/dist/analyzer/index.d.ts +0 -12
- package/dist/analyzer/index.js +0 -8
- package/dist/analyzer/screenshot-capture.d.ts +0 -29
- package/dist/analyzer/screenshot-capture.js +0 -42
- package/dist/analyzer/selector-builder.d.ts +0 -19
- package/dist/analyzer/selector-builder.js +0 -199
- package/dist/analyzer/semantic-analyzer.d.ts +0 -13
- package/dist/analyzer/semantic-analyzer.js +0 -145
- package/dist/analyzer/site-crawler.d.ts +0 -38
- package/dist/analyzer/site-crawler.js +0 -235
- package/dist/cloud/billing/billing-engine.d.ts +0 -44
- package/dist/cloud/billing/billing-engine.js +0 -81
- package/dist/cloud/billing/credit-store.d.ts +0 -64
- package/dist/cloud/billing/credit-store.js +0 -168
- package/dist/cloud/billing/index.d.ts +0 -4
- package/dist/cloud/billing/index.js +0 -2
- package/dist/cloud/billing/usage-store.d.ts +0 -42
- package/dist/cloud/billing/usage-store.js +0 -85
- package/dist/cloud/billing/usage-tracker.d.ts +0 -38
- package/dist/cloud/billing/usage-tracker.js +0 -95
- package/dist/cloud/build-pipeline.d.ts +0 -39
- package/dist/cloud/build-pipeline.js +0 -310
- package/dist/cloud/build-queue.d.ts +0 -30
- package/dist/cloud/build-queue.js +0 -70
- package/dist/cloud/caddy-manager.d.ts +0 -18
- package/dist/cloud/caddy-manager.js +0 -97
- package/dist/cloud/container-backend.d.ts +0 -62
- package/dist/cloud/container-backend.js +0 -59
- package/dist/cloud/container-manager.d.ts +0 -64
- package/dist/cloud/container-manager.js +0 -301
- package/dist/cloud/crypto.d.ts +0 -27
- package/dist/cloud/crypto.js +0 -63
- package/dist/cloud/db/index.d.ts +0 -27
- package/dist/cloud/db/index.js +0 -53
- package/dist/cloud/db/migrations.d.ts +0 -12
- package/dist/cloud/db/migrations.js +0 -329
- package/dist/cloud/db/pg-store.d.ts +0 -45
- package/dist/cloud/db/pg-store.js +0 -336
- package/dist/cloud/failure-tracker.d.ts +0 -51
- package/dist/cloud/failure-tracker.js +0 -102
- package/dist/cloud/idle-monitor.d.ts +0 -30
- package/dist/cloud/idle-monitor.js +0 -70
- package/dist/cloud/mailer.d.ts +0 -21
- package/dist/cloud/mailer.js +0 -193
- package/dist/cloud/mcp-proxy.d.ts +0 -58
- package/dist/cloud/mcp-proxy.js +0 -203
- package/dist/cloud/metric-samples.d.ts +0 -43
- package/dist/cloud/metric-samples.js +0 -85
- package/dist/cloud/metrics.d.ts +0 -26
- package/dist/cloud/metrics.js +0 -59
- package/dist/cloud/multipart.d.ts +0 -26
- package/dist/cloud/multipart.js +0 -132
- package/dist/cloud/observability.d.ts +0 -27
- package/dist/cloud/observability.js +0 -98
- package/dist/cloud/rate-limiter.d.ts +0 -31
- package/dist/cloud/rate-limiter.js +0 -58
- package/dist/cloud/request-security.d.ts +0 -5
- package/dist/cloud/request-security.js +0 -74
- package/dist/cloud/resource-monitor.d.ts +0 -69
- package/dist/cloud/resource-monitor.js +0 -130
- package/dist/cloud/secret-store.d.ts +0 -38
- package/dist/cloud/secret-store.js +0 -103
- package/dist/cloud/security.d.ts +0 -26
- package/dist/cloud/security.js +0 -142
- package/dist/cloud/server.d.ts +0 -21
- package/dist/cloud/server.js +0 -1079
- package/dist/cloud/shared-state.d.ts +0 -72
- package/dist/cloud/shared-state.js +0 -159
- package/dist/cloud/ssrf.d.ts +0 -43
- package/dist/cloud/ssrf.js +0 -150
- package/dist/cloud/store.d.ts +0 -41
- package/dist/cloud/store.js +0 -75
- package/dist/cloud/stripe.d.ts +0 -78
- package/dist/cloud/stripe.js +0 -317
- package/dist/cloud/telemetry-store.d.ts +0 -53
- package/dist/cloud/telemetry-store.js +0 -108
- package/dist/cloud/web/auth.d.ts +0 -225
- package/dist/cloud/web/auth.js +0 -555
- package/dist/cloud/web/charts.d.ts +0 -70
- package/dist/cloud/web/charts.js +0 -178
- package/dist/cloud/web/csrf.d.ts +0 -14
- package/dist/cloud/web/csrf.js +0 -22
- package/dist/cloud/web/docs.d.ts +0 -40
- package/dist/cloud/web/docs.js +0 -174
- package/dist/cloud/web/router.d.ts +0 -25
- package/dist/cloud/web/router.js +0 -1921
- package/dist/cloud/web/static/alpine.min.js +0 -5
- package/dist/cloud/web/static/favicon.svg +0 -4
- package/dist/cloud/web/static/htmx-sse.js +0 -290
- package/dist/cloud/web/static/htmx.min.js +0 -1
- package/dist/cloud/web/static/style.css +0 -2683
- package/dist/cloud/web/static-server.d.ts +0 -13
- package/dist/cloud/web/static-server.js +0 -73
- package/dist/cloud/web/template-engine.d.ts +0 -27
- package/dist/cloud/web/template-engine.js +0 -146
- package/dist/cloud/web/templates/layouts/admin.hbs +0 -57
- package/dist/cloud/web/templates/layouts/auth.hbs +0 -138
- package/dist/cloud/web/templates/layouts/base.hbs +0 -16
- package/dist/cloud/web/templates/layouts/dashboard.hbs +0 -39
- package/dist/cloud/web/templates/layouts/landing.hbs +0 -82
- package/dist/cloud/web/templates/pages/admin/overview.hbs +0 -123
- package/dist/cloud/web/templates/pages/admin/servers.hbs +0 -129
- package/dist/cloud/web/templates/pages/admin/telemetry.hbs +0 -39
- package/dist/cloud/web/templates/pages/admin/user-edit.hbs +0 -91
- package/dist/cloud/web/templates/pages/admin/users.hbs +0 -179
- package/dist/cloud/web/templates/pages/auth/forgot-password.hbs +0 -25
- package/dist/cloud/web/templates/pages/auth/login.hbs +0 -33
- package/dist/cloud/web/templates/pages/auth/register.hbs +0 -32
- package/dist/cloud/web/templates/pages/auth/reset-password.hbs +0 -34
- package/dist/cloud/web/templates/pages/dashboard/billing.hbs +0 -140
- package/dist/cloud/web/templates/pages/dashboard/create.hbs +0 -173
- package/dist/cloud/web/templates/pages/dashboard/index.hbs +0 -8
- package/dist/cloud/web/templates/pages/dashboard/server-detail.hbs +0 -280
- package/dist/cloud/web/templates/pages/dashboard/server-logs.hbs +0 -35
- package/dist/cloud/web/templates/pages/dashboard/server-metrics.hbs +0 -63
- package/dist/cloud/web/templates/pages/dashboard/servers-partial.hbs +0 -21
- package/dist/cloud/web/templates/pages/dashboard/servers.hbs +0 -44
- package/dist/cloud/web/templates/pages/docs/show.hbs +0 -16
- package/dist/cloud/web/templates/pages/errors/404.hbs +0 -9
- package/dist/cloud/web/templates/pages/errors/500.hbs +0 -8
- package/dist/cloud/web/templates/pages/landing/index.hbs +0 -223
- package/dist/cloud/web/templates/pages/legal/privacy.hbs +0 -71
- package/dist/cloud/web/templates/pages/legal/terms.hbs +0 -73
- package/dist/cloud/web/templates/partials/admin-stats.hbs +0 -52
- package/dist/cloud/web/templates/partials/flash-message.hbs +0 -6
- package/dist/cloud/web/templates/partials/pricing-table.hbs +0 -103
- package/dist/cloud/web/templates/partials/server-card.hbs +0 -19
- package/dist/cloud/web/templates/partials/status-badge.hbs +0 -1
- package/dist/config/configurable-command.d.ts +0 -13
- package/dist/config/configurable-command.js +0 -70
- package/dist/config/mcpmake-config.d.ts +0 -68
- package/dist/config/mcpmake-config.js +0 -207
- package/dist/docs/cli.md +0 -400
- package/dist/docs/mcp-2026-07-28-migration.md +0 -78
- package/dist/docs/migrate-from-stainless.md +0 -94
- package/dist/docs/quickstart.md +0 -166
- package/dist/docs/show-hn.md +0 -26
- package/dist/docs/website-servers.md +0 -169
- package/dist/emitter/code-writer.d.ts +0 -8
- package/dist/emitter/code-writer.js +0 -25
- package/dist/emitter/index.d.ts +0 -32
- package/dist/emitter/index.js +0 -280
- package/dist/emitter/mcpb-bundler.d.ts +0 -31
- package/dist/emitter/mcpb-bundler.js +0 -172
- package/dist/emitter/project-scaffolder.d.ts +0 -4
- package/dist/emitter/project-scaffolder.js +0 -89
- package/dist/emitter/python-template-loader.d.ts +0 -4
- package/dist/emitter/python-template-loader.js +0 -30
- package/dist/emitter/python-templates/dockerfile.hbs +0 -14
- package/dist/emitter/python-templates/env.example.hbs +0 -6
- package/dist/emitter/python-templates/requirements.txt.hbs +0 -4
- package/dist/emitter/python-templates/server.py.hbs +0 -77
- package/dist/emitter/site-scaffolder.d.ts +0 -13
- package/dist/emitter/site-scaffolder.js +0 -70
- package/dist/emitter/site-template-loader.d.ts +0 -5
- package/dist/emitter/site-template-loader.js +0 -47
- package/dist/emitter/site-templates/browser-manager.ts.hbs +0 -233
- package/dist/emitter/site-templates/config.ts.hbs +0 -28
- package/dist/emitter/site-templates/dockerfile.hbs +0 -31
- package/dist/emitter/site-templates/env.example.hbs +0 -19
- package/dist/emitter/site-templates/package.json.hbs +0 -26
- package/dist/emitter/site-templates/server-main-http.ts.hbs +0 -108
- package/dist/emitter/site-templates/server-main.ts.hbs +0 -23
- package/dist/emitter/site-templates/tool-handler-action.ts.hbs +0 -86
- package/dist/emitter/site-templates/tool-handler-form.ts.hbs +0 -116
- package/dist/emitter/site-templates/tool-handler-lifecycle.ts.hbs +0 -146
- package/dist/emitter/site-templates/tool-index.ts.hbs +0 -11
- package/dist/emitter/template-loader.d.ts +0 -1
- package/dist/emitter/template-loader.js +0 -27
- package/dist/emitter/templates/auth-provider.ts.hbs +0 -57
- package/dist/emitter/templates/config.ts.hbs +0 -63
- package/dist/emitter/templates/discovery.ts.hbs +0 -301
- package/dist/emitter/templates/dockerfile.hbs +0 -34
- package/dist/emitter/templates/env.example.hbs +0 -28
- package/dist/emitter/templates/gitignore.hbs +0 -5
- package/dist/emitter/templates/http-executor.ts.hbs +0 -117
- package/dist/emitter/templates/oauth.ts.hbs +0 -188
- package/dist/emitter/templates/package.json.hbs +0 -25
- package/dist/emitter/templates/prompts.ts.hbs +0 -22
- package/dist/emitter/templates/readme.md.hbs +0 -123
- package/dist/emitter/templates/resources.ts.hbs +0 -63
- package/dist/emitter/templates/server-main-http.ts.hbs +0 -407
- package/dist/emitter/templates/server-main.ts.hbs +0 -40
- package/dist/emitter/templates/task-handlers.ts.hbs +0 -189
- package/dist/emitter/templates/task-manager.ts.hbs +0 -139
- package/dist/emitter/templates/task-sse.ts.hbs +0 -105
- package/dist/emitter/templates/tool-handler.ts.hbs +0 -124
- package/dist/emitter/templates/tool-index.ts.hbs +0 -11
- package/dist/emitter/templates/tool-test.ts.hbs +0 -57
- package/dist/emitter/templates/trace.ts.hbs +0 -79
- package/dist/emitter/templates/tsconfig.json.hbs +0 -16
- package/dist/emitter/templates/types.ts.hbs +0 -5
- package/dist/emitter/worker-template-loader.d.ts +0 -5
- package/dist/emitter/worker-template-loader.js +0 -33
- package/dist/emitter/worker-templates/config.ts.hbs +0 -54
- package/dist/emitter/worker-templates/dev-vars.example.hbs +0 -10
- package/dist/emitter/worker-templates/gitignore.hbs +0 -6
- package/dist/emitter/worker-templates/package.json.hbs +0 -24
- package/dist/emitter/worker-templates/readme.md.hbs +0 -53
- package/dist/emitter/worker-templates/server.test.ts.hbs +0 -20
- package/dist/emitter/worker-templates/tool-handler.ts.hbs +0 -85
- package/dist/emitter/worker-templates/tool-index.ts.hbs +0 -28
- package/dist/emitter/worker-templates/tsconfig.json.hbs +0 -17
- package/dist/emitter/worker-templates/worker.ts.hbs +0 -242
- package/dist/emitter/worker-templates/wrangler.toml.hbs +0 -19
- package/dist/generator/spec-generator.d.ts +0 -6
- package/dist/generator/spec-generator.js +0 -50
- package/dist/parser/har-filter.d.ts +0 -8
- package/dist/parser/har-filter.js +0 -71
- package/dist/parser/har-loader.d.ts +0 -2
- package/dist/parser/har-loader.js +0 -14
- package/dist/parser/har-normalizer.d.ts +0 -20
- package/dist/parser/har-normalizer.js +0 -78
- package/dist/parser/index.d.ts +0 -10
- package/dist/parser/index.js +0 -6
- package/dist/parser/openapi-loader.d.ts +0 -6
- package/dist/parser/openapi-loader.js +0 -308
- package/dist/parser/operation-extractor.d.ts +0 -13
- package/dist/parser/operation-extractor.js +0 -155
- package/dist/parser/overlay-loader.d.ts +0 -10
- package/dist/parser/overlay-loader.js +0 -184
- package/dist/parser/postman-loader.d.ts +0 -9
- package/dist/parser/postman-loader.js +0 -106
- package/dist/parser/schema-converter.d.ts +0 -12
- package/dist/parser/schema-converter.js +0 -117
- package/dist/plugins/adapter.d.ts +0 -40
- package/dist/plugins/adapter.js +0 -15
- package/dist/plugins/loader.d.ts +0 -25
- package/dist/plugins/loader.js +0 -58
- package/dist/pricing.d.ts +0 -55
- package/dist/pricing.js +0 -133
- package/dist/providers/index.d.ts +0 -15
- package/dist/providers/index.js +0 -56
- package/dist/recorder/browser-recorder.d.ts +0 -22
- package/dist/recorder/browser-recorder.js +0 -205
- package/dist/rescan/diff-engine.d.ts +0 -5
- package/dist/rescan/diff-engine.js +0 -312
- package/dist/rescan/index.d.ts +0 -3
- package/dist/rescan/index.js +0 -2
- package/dist/rescan/rescan-runner.d.ts +0 -42
- package/dist/rescan/rescan-runner.js +0 -69
- package/dist/rescan/rescan-scheduler.d.ts +0 -41
- package/dist/rescan/rescan-scheduler.js +0 -179
- package/dist/site-transformer/browser-tools.d.ts +0 -10
- package/dist/site-transformer/browser-tools.js +0 -59
- package/dist/site-transformer/index.d.ts +0 -2
- package/dist/site-transformer/index.js +0 -2
- package/dist/site-transformer/selector-healer.d.ts +0 -8
- package/dist/site-transformer/selector-healer.js +0 -106
- package/dist/site-transformer/tool-generator.d.ts +0 -13
- package/dist/site-transformer/tool-generator.js +0 -245
- package/dist/transformer/auth-detector.d.ts +0 -13
- package/dist/transformer/auth-detector.js +0 -90
- package/dist/transformer/catalog-builder.d.ts +0 -18
- package/dist/transformer/catalog-builder.js +0 -56
- package/dist/transformer/client-compat.d.ts +0 -6
- package/dist/transformer/client-compat.js +0 -44
- package/dist/transformer/har-clusterer.d.ts +0 -9
- package/dist/transformer/har-clusterer.js +0 -27
- package/dist/transformer/har-dedup.d.ts +0 -10
- package/dist/transformer/har-dedup.js +0 -81
- package/dist/transformer/har-schema-inferrer.d.ts +0 -15
- package/dist/transformer/har-schema-inferrer.js +0 -90
- package/dist/transformer/har-to-operations.d.ts +0 -13
- package/dist/transformer/har-to-operations.js +0 -192
- package/dist/transformer/index.d.ts +0 -8
- package/dist/transformer/index.js +0 -6
- package/dist/transformer/llm-namer.d.ts +0 -6
- package/dist/transformer/llm-namer.js +0 -59
- package/dist/transformer/naming.d.ts +0 -4
- package/dist/transformer/naming.js +0 -30
- package/dist/transformer/operation-filter.d.ts +0 -13
- package/dist/transformer/operation-filter.js +0 -52
- package/dist/transformer/resource-builder.d.ts +0 -12
- package/dist/transformer/resource-builder.js +0 -80
- package/dist/transformer/schema-merger.d.ts +0 -14
- package/dist/transformer/schema-merger.js +0 -65
- package/dist/transformer/tool-builder.d.ts +0 -3
- package/dist/transformer/tool-builder.js +0 -114
- package/dist/types/index.d.ts +0 -131
- package/dist/types/index.js +0 -1
- package/dist/types/site.d.ts +0 -284
- package/dist/types/site.js +0 -8
- package/dist/utils/fail.d.ts +0 -48
- package/dist/utils/fail.js +0 -204
- package/dist/utils/fs.d.ts +0 -5
- package/dist/utils/fs.js +0 -28
- package/dist/utils/interactive.d.ts +0 -6
- package/dist/utils/interactive.js +0 -30
- package/dist/utils/logger.d.ts +0 -1
- package/dist/utils/logger.js +0 -2
- package/dist/utils/sanitize.d.ts +0 -28
- package/dist/utils/sanitize.js +0 -44
- package/dist/utils/watcher.d.ts +0 -11
- package/dist/utils/watcher.js +0 -36
package/README.md
CHANGED
|
@@ -1,691 +1,144 @@
|
|
|
1
1
|
# mcpmake
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
**Turn any API into an MCP server an AI agent can actually use — in one command.**
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
# From a browser recording
|
|
11
|
-
mcpmake from har ./session.har -o ./api-mcp
|
|
12
|
-
|
|
13
|
-
# From a live website (opens a browser, you interact, close when done)
|
|
14
|
-
mcpmake from url https://app.example.com -o ./app-mcp
|
|
5
|
+
`mcpmake` reads what you already have — an OpenAPI spec, a Postman collection, a
|
|
6
|
+
HAR capture, a live URL, a whole website, or just a plain-English description —
|
|
7
|
+
and generates a clean, typed, editable [Model Context Protocol](https://modelcontextprotocol.io)
|
|
8
|
+
server. No boilerplate, no SDK lock-in.
|
|
15
9
|
|
|
16
|
-
|
|
17
|
-
|
|
10
|
+
[](https://www.npmjs.com/package/mcpmake)
|
|
11
|
+
[](https://www.apache.org/licenses/LICENSE-2.0)
|
|
12
|
+
[](https://nodejs.org)
|
|
18
13
|
|
|
19
|
-
|
|
20
|
-
mcpmake rescan ./site-mcp --write
|
|
14
|
+
---
|
|
21
15
|
|
|
22
|
-
|
|
23
|
-
mcpmake from postman ./collection.json -o ./api-mcp
|
|
16
|
+
## Six ways in
|
|
24
17
|
|
|
25
|
-
|
|
26
|
-
|
|
18
|
+
| Input | Command |
|
|
19
|
+
|-------|---------|
|
|
20
|
+
| OpenAPI / Swagger spec | `mcpmake from openapi ./spec.yaml -o ./server` |
|
|
21
|
+
| Postman collection | `mcpmake from postman ./collection.json -o ./server` |
|
|
22
|
+
| HAR capture (recorded traffic) | `mcpmake from har ./session.har -o ./server` |
|
|
23
|
+
| A live URL (record it for you) | `mcpmake from url https://api.example.com -o ./server` |
|
|
24
|
+
| A whole website (browser tools) | `mcpmake from website https://example.com -o ./server` |
|
|
25
|
+
| A plain-English description | `mcpmake from describe "a todo API with auth" -o ./server` |
|
|
27
26
|
|
|
28
|
-
|
|
29
|
-
mcpmake from openapi ./spec.yaml -o ./api-mcp --format python
|
|
27
|
+
Every path produces the same thing: an MCP server **you own**.
|
|
30
28
|
|
|
31
|
-
|
|
32
|
-
mcpmake deploy ./spec.yaml
|
|
29
|
+
## Quickstart
|
|
33
30
|
|
|
34
|
-
|
|
35
|
-
mcpmake
|
|
31
|
+
```bash
|
|
32
|
+
npx mcpmake from openapi ./spec.yaml -o ./server
|
|
36
33
|
```
|
|
37
34
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
## Why
|
|
41
|
-
|
|
42
|
-
The official `create-mcp-server` scaffolding gives you an empty shell. Writing tool definitions, wiring up auth, handling errors, and converting schemas by hand is tedious and repetitive. mcpmake does it all from your existing API spec, a browser recording, a live website, or even a plain English description.
|
|
43
|
-
|
|
44
|
-
## Quick Start
|
|
45
|
-
|
|
46
|
-
> **Not yet on npm.** Until the first release is published, install from source:
|
|
47
|
-
> `git clone` this repo, `npm install && npm run build`, then `npm link` (or run
|
|
48
|
-
> `npx tsx src/index.ts ...`). The `npm install -g mcpmake` line below applies
|
|
49
|
-
> once published.
|
|
35
|
+
Then point your MCP client (Claude Desktop, Cursor, your own agent, …) at the
|
|
36
|
+
generated server. That's it.
|
|
50
37
|
|
|
51
38
|
```bash
|
|
52
|
-
|
|
53
|
-
npm install -g mcpmake
|
|
54
|
-
|
|
55
|
-
# Generate from an OpenAPI spec
|
|
56
|
-
mcpmake from openapi ./api-spec.yaml -o ./my-mcp-server
|
|
57
|
-
|
|
58
|
-
# Or use a provider shortcut
|
|
59
|
-
mcpmake from openapi github -o ./github-mcp
|
|
60
|
-
|
|
61
|
-
# Run the generated server
|
|
62
|
-
cd my-mcp-server
|
|
63
|
-
cp .env.example .env # fill in your API credentials
|
|
39
|
+
cd server
|
|
64
40
|
npm install
|
|
65
|
-
npm run build
|
|
66
41
|
npm start
|
|
67
42
|
```
|
|
68
43
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
```bash
|
|
72
|
-
# Writes .github/workflows/mcpmake.yaml — regenerates + verifies the server
|
|
73
|
-
# on every spec change, and fails CI if the committed output is out of date.
|
|
74
|
-
mcpmake ci init ./api-spec.yaml -o ./my-mcp-server
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
> **Coming from Stainless?** See [Migrate off Stainless to an MCP server you own](https://github.com/starkyru/mcpmake/blob/main/docs/migrate-from-stainless.md).
|
|
78
|
-
|
|
79
|
-
### Project config (`.mcpmake.yaml`)
|
|
80
|
-
|
|
81
|
-
Stop repeating CLI flags — drop a `.mcpmake.yaml` in your project root and commit it so your team shares the same generation settings. It's auto-discovered from the working directory (override with `--config <path>` or `MCPMAKE_CONFIG`).
|
|
82
|
-
|
|
83
|
-
```yaml
|
|
84
|
-
# .mcpmake.yaml
|
|
85
|
-
output: ./generated # global defaults for every command
|
|
86
|
-
transport: http
|
|
87
|
-
format: typescript
|
|
88
|
-
|
|
89
|
-
openapi: # optional per-command overrides
|
|
90
|
-
base-url: https://api.example.com
|
|
91
|
-
include: [users, repos] # arrays become the --include users,repos form
|
|
92
|
-
deploy:
|
|
93
|
-
server: https://mcpmake.dev
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
```bash
|
|
97
|
-
# With the config above, this is equivalent to
|
|
98
|
-
# mcpmake from openapi ./api-spec.yaml -o ./generated -t http -b https://api.example.com -i users,repos
|
|
99
|
-
mcpmake from openapi ./api-spec.yaml
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
**Precedence (highest wins):** explicit CLI flag → per-command section → global key → built-in default. Positional args (the spec path) always stay on the command line. See [`.mcpmake.example.yaml`](https://github.com/starkyru/mcpmake/blob/main/.mcpmake.example.yaml). Supported by every `from` generator and `deploy`.
|
|
103
|
-
|
|
104
|
-
## What Gets Generated
|
|
105
|
-
|
|
106
|
-
```
|
|
107
|
-
my-mcp-server/
|
|
108
|
-
├── package.json # 2 runtime deps: @modelcontextprotocol/sdk + zod
|
|
109
|
-
├── tsconfig.json
|
|
110
|
-
├── Dockerfile # (with --transport http) production-ready, non-root, read-only
|
|
111
|
-
├── .env.example # Pre-filled with base URL + auth vars
|
|
112
|
-
├── README.md # Tool docs + Claude Desktop config snippet
|
|
113
|
-
├── .gitignore
|
|
114
|
-
├── src/
|
|
115
|
-
│ ├── index.ts # McpServer bootstrap (stdio or HTTP transport)
|
|
116
|
-
│ ├── config.ts # Environment config loader + validation
|
|
117
|
-
│ ├── auth.ts # Auth header injection
|
|
118
|
-
│ ├── http.ts # fetch wrapper: retries, backoff, rate limiting
|
|
119
|
-
│ ├── types.ts # Shared types
|
|
120
|
-
│ ├── resources.ts # MCP resources (GET list endpoints)
|
|
121
|
-
│ ├── prompts.ts # MCP prompts (tag-grouped workflows)
|
|
122
|
-
│ └── tools/
|
|
123
|
-
│ ├── index.ts # registerAllTools(server, config)
|
|
124
|
-
│ ├── list-pets.ts # One file per API operation
|
|
125
|
-
│ ├── create-pet.ts
|
|
126
|
-
│ └── get-pet.ts
|
|
127
|
-
└── test/tools/
|
|
128
|
-
├── list-pets.test.ts # Test scaffolds (vitest)
|
|
129
|
-
├── create-pet.test.ts
|
|
130
|
-
└── get-pet.test.ts
|
|
131
|
-
```
|
|
132
|
-
|
|
133
|
-
Each tool file is self-contained, clean, and designed to be edited after generation.
|
|
134
|
-
|
|
135
|
-
## Input Adapters
|
|
136
|
-
|
|
137
|
-
### `from openapi` — OpenAPI Specs
|
|
138
|
-
|
|
139
|
-
Parse any OpenAPI 3.x spec and generate one tool per operation. Supports YAML/JSON, local files and URLs, and full `$ref` dereferencing.
|
|
140
|
-
|
|
141
|
-
**Provider shortcuts** — skip the spec URL for popular APIs:
|
|
142
|
-
|
|
143
|
-
```bash
|
|
144
|
-
mcpmake from openapi stripe -o ./stripe-mcp --include customers,charges
|
|
145
|
-
mcpmake from openapi github -o ./github-mcp --include repos,issues
|
|
146
|
-
mcpmake from openapi slack -o ./slack-mcp --include chat,users
|
|
147
|
-
```
|
|
148
|
-
|
|
149
|
-
Available providers: `stripe`, `github`, `slack`, `notion`, `linear`, `shopify`
|
|
150
|
-
|
|
151
|
-
### `from har` — Browser Recordings
|
|
152
|
-
|
|
153
|
-
Record a session in Chrome/Firefox DevTools (Network tab -> Export HAR), and mcpmake will:
|
|
154
|
-
|
|
155
|
-
- **Filter noise** — removes favicon, analytics, CDN, and static asset requests automatically
|
|
156
|
-
- **Detect path parameters** — recognizes numeric IDs, UUIDs, and MongoDB ObjectIDs
|
|
157
|
-
- **Cluster requests** — groups `GET /users/42` and `GET /users/99` into one `get_user` tool
|
|
158
|
-
- **Infer schemas** — extracts Zod schemas from JSON request/response bodies
|
|
159
|
-
- **Detect auth** — finds Bearer tokens, API keys, and Basic auth in headers
|
|
160
|
-
|
|
161
|
-
```bash
|
|
162
|
-
mcpmake from har ./session.har -o ./api-mcp --domain api.example.com
|
|
163
|
-
```
|
|
164
|
-
|
|
165
|
-
### `from url` — Live Website Recording
|
|
44
|
+
## You own the output
|
|
166
45
|
|
|
167
|
-
|
|
46
|
+
`mcpmake` is licensed under **Apache-2.0**, and so is the code it produces — but
|
|
47
|
+
your generated server has **no runtime dependency on mcpmake and no license
|
|
48
|
+
strings attached**. Edit it, host it, ship it, sell it. There is no lock-in: the
|
|
49
|
+
output is plain TypeScript (or Python, or a Cloudflare Worker) that you control.
|
|
168
50
|
|
|
169
|
-
|
|
170
|
-
mcpmake from url https://app.example.com -o ./app-mcp
|
|
171
|
-
```
|
|
172
|
-
|
|
173
|
-
Uses Playwright under the hood. Requires `npx playwright install chromium` on first use.
|
|
174
|
-
|
|
175
|
-
**Headless / CI capture** — for automated environments where no one can drive a window, run headless and auto-visit a set of same-origin paths to surface their API calls:
|
|
176
|
-
|
|
177
|
-
```bash
|
|
178
|
-
mcpmake from url https://app.example.com -o ./app-mcp \
|
|
179
|
-
--headless --navigate /dashboard,/orders,/settings
|
|
180
|
-
```
|
|
181
|
-
|
|
182
|
-
`--navigate` takes a comma-separated list of absolute or relative same-origin URLs; cross-origin targets are skipped. The browser loads each, captures the traffic, and exits — no manual interaction needed.
|
|
183
|
-
|
|
184
|
-
### `from postman` — Postman Collections
|
|
185
|
-
|
|
186
|
-
Import a Postman Collection v2.1 and generate tools from its requests:
|
|
187
|
-
|
|
188
|
-
```bash
|
|
189
|
-
mcpmake from postman ./collection.json -o ./api-mcp
|
|
190
|
-
```
|
|
191
|
-
|
|
192
|
-
### `from website` — Website DOM Analysis
|
|
193
|
-
|
|
194
|
-
Analyze any website's HTML structure (forms, buttons, links) and generate a Playwright-based MCP server with site-specific tools:
|
|
195
|
-
|
|
196
|
-
```bash
|
|
197
|
-
mcpmake from website https://app.example.com -o ./site-mcp
|
|
198
|
-
mcpmake from website https://shop.example.com -o ./shop-mcp --depth 3 --max-pages 30
|
|
199
|
-
mcpmake from website https://app.example.com -o ./site-mcp --goal "complete checkout flow"
|
|
200
|
-
mcpmake from website https://app.example.com -o ./site-mcp --hybrid --improve-names
|
|
201
|
-
```
|
|
202
|
-
|
|
203
|
-
Unlike generic browser MCP servers (Playwright MCP, Puppeteer MCP), this generates **site-specific tools** like `login(email, password)` instead of generic `click(selector)`. Features:
|
|
204
|
-
|
|
205
|
-
- **Multi-strategy selectors** — data-testid > id > aria-label > name > CSS path > XPath
|
|
206
|
-
- **Resilient selectors at runtime** — each generated tool tries its primary selector and then every fallback, so a tool keeps working when the page's DOM shifts instead of failing on the first broken selector
|
|
207
|
-
- **Page-level tools** — one tool per form (e.g., `login`, `search`, `subscribe`)
|
|
208
|
-
- **Action-level tools** — one tool per standalone button
|
|
209
|
-
- **Browser lifecycle** — `start_browser`, `stop_browser`, `take_screenshot`
|
|
210
|
-
- **Session management** — persistent browser sessions via `sessionId`
|
|
211
|
-
- **LLM-powered naming** — Claude infers semantic tool names from page context (`--improve-names`)
|
|
212
|
-
- **Goal-directed crawl** — `--goal` flag for AI-driven navigation toward a specific objective
|
|
213
|
-
- **Hybrid mode** — `--hybrid` uses HTTP fetch for API-backed forms, Playwright for HTML-only forms
|
|
214
|
-
- **Auth detection** — automatically detects login forms, OAuth buttons, session cookies
|
|
215
|
-
- **Drift rescan** — re-crawl the site later and self-heal broken selectors with [`mcpmake rescan`](#mcpmake-rescan)
|
|
216
|
-
|
|
217
|
-
When the site changes, run `mcpmake rescan ./site-mcp` to diff the live site against the embedded snapshot, heal low-confidence selectors, and (with `--write`) regenerate the server in place.
|
|
218
|
-
|
|
219
|
-
See **[Website MCP servers](https://github.com/starkyru/mcpmake/blob/main/docs/website-servers.md)** for the full `from url` / `from website` / `rescan` workflow, headless capture, and the runtime selector-resilience details.
|
|
51
|
+
## Don't want to host it yourself?
|
|
220
52
|
|
|
221
|
-
|
|
53
|
+
Generating the server is the easy part. Running it in production — with auth,
|
|
54
|
+
metering, rate limits, and quotas — is where the work is.
|
|
222
55
|
|
|
223
|
-
|
|
56
|
+
**Deploy and host your MCP server with auth, metering, and quotas at
|
|
57
|
+
[mcpmake.dev](https://mcpmake.dev).** Sign up, push, and get a managed endpoint:
|
|
224
58
|
|
|
225
59
|
```bash
|
|
226
|
-
|
|
227
|
-
mcpmake from describe "manage GitHub issues and pull requests" -o ./github-mcp
|
|
228
|
-
mcpmake from describe "a todo list API" -o ./todo-mcp --save-spec ./todo-spec.json
|
|
60
|
+
mcpmake deploy ./server
|
|
229
61
|
```
|
|
230
62
|
|
|
231
|
-
##
|
|
63
|
+
## Keep it in sync (CI)
|
|
232
64
|
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
Generate servers in TypeScript (default) or Python:
|
|
65
|
+
APIs drift. When your spec changes, your MCP server should regenerate itself.
|
|
66
|
+
Wire it into CI in one step:
|
|
236
67
|
|
|
237
68
|
```bash
|
|
238
|
-
mcpmake
|
|
69
|
+
mcpmake ci init
|
|
239
70
|
```
|
|
240
71
|
|
|
241
|
-
|
|
72
|
+
This scaffolds a GitHub Actions workflow that re-generates your server on every
|
|
73
|
+
spec change. Pair it with managed [spec-sync on mcpmake.dev](https://mcpmake.dev)
|
|
74
|
+
to keep a hosted server continuously up to date.
|
|
242
75
|
|
|
243
|
-
|
|
76
|
+
## Migrating off Stainless?
|
|
244
77
|
|
|
245
|
-
|
|
78
|
+
`mcpmake` reads the **same OpenAPI spec** your Stainless SDK is built from — you
|
|
79
|
+
are one command away from an MCP server:
|
|
246
80
|
|
|
247
81
|
```bash
|
|
248
|
-
mcpmake from
|
|
82
|
+
mcpmake from stainless ./stainless.yml -o ./server
|
|
249
83
|
```
|
|
250
84
|
|
|
251
|
-
|
|
252
|
-
SDK transport — the MCP 2026‑07‑28 stateless transport maps 1:1 onto a Worker
|
|
253
|
-
request) plus `wrangler.toml`. Deploy with `wrangler deploy`; Cloudflare's free
|
|
254
|
-
plan covers 100K requests/day. Secrets (API credentials + the MCP bearer token)
|
|
255
|
-
are injected via the `env` binding (`wrangler secret put`), not `process.env`.
|
|
256
|
-
Available on all spec adapters (`openapi`, `postman`, `har`, `url`, `describe`).
|
|
257
|
-
v1 emits **tools** — for resources, prompts, the Tasks extension, or OAuth2
|
|
258
|
-
outbound auth, use the default `--target node`.
|
|
259
|
-
|
|
260
|
-
### Full MCP Primitive Support
|
|
261
|
-
|
|
262
|
-
Generated servers include all three MCP primitives:
|
|
263
|
-
|
|
264
|
-
- **Tools** — one per API operation, with Zod input schemas
|
|
265
|
-
- **Resources** — GET list endpoints exposed as readable resources
|
|
266
|
-
- **Prompts** — tag-grouped workflow prompts listing available tools
|
|
267
|
-
|
|
268
|
-
### Auth Detection
|
|
269
|
-
|
|
270
|
-
Security schemes are auto-detected from specs and HAR headers:
|
|
271
|
-
|
|
272
|
-
| Source | Detected As | Env Var |
|
|
273
|
-
| --------------------- | ----------------------- | ----------------------------------- |
|
|
274
|
-
| OpenAPI `apiKey` | Custom header/query | `API_KEY` |
|
|
275
|
-
| OpenAPI `http` bearer | `Authorization: Bearer` | `BEARER_TOKEN` |
|
|
276
|
-
| OpenAPI `http` basic | `Authorization: Basic` | `BASIC_USERNAME` / `BASIC_PASSWORD` |
|
|
277
|
-
| OpenAPI `oauth2` | Bearer (pre-obtained) | `OAUTH2_TOKEN` |
|
|
278
|
-
| HAR Bearer header | Bearer token | `BEARER_TOKEN` |
|
|
279
|
-
| HAR custom headers | API key | `API_KEY` |
|
|
280
|
-
|
|
281
|
-
### HTTP Executor
|
|
282
|
-
|
|
283
|
-
Generated servers include a production-grade HTTP client:
|
|
284
|
-
|
|
285
|
-
- Exponential backoff with `Retry-After` header support
|
|
286
|
-
- Retries on 429, 500, 502, 503, 504
|
|
287
|
-
- Configurable rate limiting (min interval between requests)
|
|
288
|
-
- Structured `ApiError` with status code and response body
|
|
289
|
-
|
|
290
|
-
### Dual Transport
|
|
85
|
+
See the migration guide at **[mcpmake.dev](https://mcpmake.dev)**.
|
|
291
86
|
|
|
292
|
-
|
|
293
|
-
- **HTTP** (`--transport http`) — for remote deployment with:
|
|
294
|
-
- Stateful sessions via `Mcp-Session-Id`
|
|
295
|
-
- Origin validation (DNS-rebinding protection per MCP spec)
|
|
296
|
-
- `/health` and `/ready` endpoints
|
|
297
|
-
- Graceful shutdown on `SIGTERM`
|
|
298
|
-
- Structured JSON logging
|
|
299
|
-
- Production Dockerfile (non-root, read-only, multi-stage build)
|
|
87
|
+
## Publish to a registry
|
|
300
88
|
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
- **Input sanitization** — all user-controlled strings sanitized before embedding in generated code
|
|
304
|
-
- **Path traversal protection** — generated file paths validated to stay within output directory
|
|
305
|
-
- **Secret redaction** — auth tokens from HAR headers never included in generated code
|
|
306
|
-
- **Prototype pollution defense** — dangerous keys filtered during schema inference
|
|
307
|
-
- **Size limits** — HAR files capped at 50 MB, schema inference depth-limited to 20 levels
|
|
308
|
-
- **Generated code audit** — scans for dangerous patterns before Docker image build
|
|
309
|
-
|
|
310
|
-
### Operation Filtering
|
|
311
|
-
|
|
312
|
-
All adapters support `--include` and `--exclude` to select operations by tag, path glob, or operationId:
|
|
89
|
+
Generated servers can be published to the MCP ecosystem — mcp.so, Smithery,
|
|
90
|
+
Glama, and the official registry:
|
|
313
91
|
|
|
314
92
|
```bash
|
|
315
|
-
mcpmake
|
|
316
|
-
mcpmake from openapi ./spec.yaml -o ./out --exclude "/admin*,/internal*"
|
|
93
|
+
mcpmake publish ./server
|
|
317
94
|
```
|
|
318
95
|
|
|
319
|
-
##
|
|
96
|
+
## All commands
|
|
320
97
|
|
|
321
|
-
|
|
98
|
+
```text
|
|
99
|
+
$ mcpmake --help
|
|
322
100
|
|
|
323
|
-
|
|
101
|
+
mcpmake — Generate MCP servers from API specifications
|
|
324
102
|
|
|
325
|
-
|
|
326
|
-
|
|
103
|
+
COMMANDS
|
|
104
|
+
from openapi Generate from an OpenAPI / Swagger spec
|
|
105
|
+
from postman Generate from a Postman collection
|
|
106
|
+
from har Generate from a HAR capture
|
|
107
|
+
from url Record a live URL and generate from the captured traffic
|
|
108
|
+
from website Crawl a website and generate browser-driven tools
|
|
109
|
+
from describe Generate from a plain-English description
|
|
110
|
+
from stainless Generate from a Stainless config (migration)
|
|
111
|
+
merge Merge multiple specs into one server
|
|
112
|
+
verify Verify a generated server against its source spec
|
|
113
|
+
update Re-generate a server from an updated spec
|
|
114
|
+
diff Show what would change before regenerating
|
|
115
|
+
lint Lint a spec for MCP-generation issues
|
|
116
|
+
bundle Bundle a server into a distributable .mcpb
|
|
117
|
+
publish Publish a server to MCP registries
|
|
118
|
+
ci Scaffold CI (spec-sync) — `mcpmake ci init`
|
|
119
|
+
rescan Re-scan a website server and heal broken selectors
|
|
120
|
+
deploy Deploy a server to managed hosting (mcpmake.dev)
|
|
327
121
|
```
|
|
328
122
|
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
Re-generate a project from an updated spec, showing what changed:
|
|
123
|
+
Run `mcpmake <command> --help` for command-specific flags (targets, transports,
|
|
124
|
+
filtering, Python / Cloudflare Workers output, and more).
|
|
332
125
|
|
|
333
|
-
|
|
334
|
-
mcpmake update ./spec.yaml -p ./my-mcp-server
|
|
335
|
-
```
|
|
336
|
-
|
|
337
|
-
### `mcpmake rescan`
|
|
338
|
-
|
|
339
|
-
The website counterpart to `update`: re-crawl the target of a `from website`
|
|
340
|
-
project, diff it against the snapshot embedded at generation time, self-heal
|
|
341
|
-
broken selectors, and optionally regenerate the server in place.
|
|
342
|
-
|
|
343
|
-
```bash
|
|
344
|
-
# Report what changed (and which selectors are fragile) — no writes
|
|
345
|
-
mcpmake rescan ./site-mcp
|
|
126
|
+
## Built on `@mcpmake/core`
|
|
346
127
|
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
mcpmake rescan ./site-mcp --write
|
|
352
|
-
|
|
353
|
-
# Machine-readable diff for CI
|
|
354
|
-
mcpmake rescan ./site-mcp --format json
|
|
355
|
-
```
|
|
356
|
-
|
|
357
|
-
How it works:
|
|
358
|
-
|
|
359
|
-
- Reads the snapshot from `src/site-descriptor.json` and the regeneration
|
|
360
|
-
settings from `mcpmake.site.json` (both written by `from website`).
|
|
361
|
-
- Re-crawls the live site (override the URL with `--url`; crawl bounds default
|
|
362
|
-
from the snapshot, override with `--depth` / `--max-pages`).
|
|
363
|
-
- Diffs old vs new and reports added/removed/modified pages, forms, fields,
|
|
364
|
-
buttons, and links, plus selectors that broke.
|
|
365
|
-
- **Self-healing:** for fragile (low-confidence) selectors, it asks Claude for a
|
|
366
|
-
better one from the live accessibility tree and only applies it if it actually
|
|
367
|
-
resolves on the page. Skipped (with a warning) when `ANTHROPIC_API_KEY` is unset.
|
|
368
|
-
- `--write` regenerates the project (overwrites generated files, like `update`).
|
|
369
|
-
|
|
370
|
-
### `mcpmake deploy`
|
|
371
|
-
|
|
372
|
-
Deploy a spec to mcpmake Cloud and get a running MCP server at a URL:
|
|
373
|
-
|
|
374
|
-
```bash
|
|
375
|
-
mcpmake deploy ./spec.yaml --name my-api
|
|
376
|
-
# Returns: endpoint URL, bearer token, Claude Desktop config snippet
|
|
377
|
-
```
|
|
378
|
-
|
|
379
|
-
### `mcpmake publish`
|
|
380
|
-
|
|
381
|
-
Generate registry manifests, or publish to the official MCP Registry:
|
|
382
|
-
|
|
383
|
-
```bash
|
|
384
|
-
mcpmake publish ./my-mcp-server # smithery.yaml + glama.json (default)
|
|
385
|
-
mcpmake publish ./my-mcp-server --registry smithery # smithery.yaml only
|
|
386
|
-
mcpmake publish ./my-mcp-server --registry glama # glama.json only
|
|
387
|
-
|
|
388
|
-
# Official MCP Registry (registry.modelcontextprotocol.io)
|
|
389
|
-
mcpmake publish ./my-mcp-server --registry official # writes server.json + sets package.json mcpName
|
|
390
|
-
mcpmake publish ./my-mcp-server --registry official --name io.github.you/my-server
|
|
391
|
-
mcpmake publish ./my-mcp-server --registry official --remote-url https://my-server.example.com/mcp
|
|
392
|
-
mcpmake publish ./my-mcp-server --registry official --push # runs `mcp-publisher publish`
|
|
393
|
-
```
|
|
394
|
-
|
|
395
|
-
For `official`, mcpmake builds a schema-conformant `server.json`, sets the
|
|
396
|
-
`mcpName` marker in `package.json`, and prints the exact `npm publish` +
|
|
397
|
-
`mcp-publisher login/publish` steps. `--name` defaults to a namespaced id
|
|
398
|
-
derived from your git remote; `--push` requires the `mcp-publisher` CLI (after
|
|
399
|
-
`mcp-publisher login github` and an `npm publish`).
|
|
400
|
-
|
|
401
|
-
### `mcpmake bundle`
|
|
402
|
-
|
|
403
|
-
Bundle a generated project into an `.mcpb` file for one-click Claude Desktop
|
|
404
|
-
install (builds the project first unless `--skip-build`):
|
|
405
|
-
|
|
406
|
-
```bash
|
|
407
|
-
mcpmake bundle ./my-mcp-server -o ./my-mcp-server.mcpb
|
|
408
|
-
mcpmake bundle ./my-mcp-server --skip-build # if already built
|
|
409
|
-
```
|
|
410
|
-
|
|
411
|
-
### `mcpmake lint`
|
|
412
|
-
|
|
413
|
-
MCP-specific linting for OpenAPI specs (useful in CI):
|
|
414
|
-
|
|
415
|
-
```bash
|
|
416
|
-
mcpmake lint ./spec.yaml
|
|
417
|
-
mcpmake lint ./spec.yaml --format json # machine-readable output
|
|
418
|
-
mcpmake lint ./spec.yaml --level warn # filter by severity
|
|
419
|
-
```
|
|
420
|
-
|
|
421
|
-
Rules: tool name length (60/128 char limits), description quality, parameter count, duplicate names, missing annotations, reserved names. Exits with code 1 on errors.
|
|
422
|
-
|
|
423
|
-
### `mcpmake diff`
|
|
424
|
-
|
|
425
|
-
Compare two specs and show which MCP tools changed:
|
|
426
|
-
|
|
427
|
-
```bash
|
|
428
|
-
mcpmake diff ./old-spec.yaml ./new-spec.yaml
|
|
429
|
-
mcpmake diff ./old-spec.yaml ./new-spec.yaml --format json
|
|
430
|
-
```
|
|
431
|
-
|
|
432
|
-
Shows added, removed, and changed tools with parameter-level detail.
|
|
433
|
-
|
|
434
|
-
### `mcpmake merge`
|
|
435
|
-
|
|
436
|
-
Combine multiple API specs into one MCP server:
|
|
437
|
-
|
|
438
|
-
```bash
|
|
439
|
-
mcpmake merge ./users-api.yaml ./orders-api.yaml -o ./combined.yaml
|
|
440
|
-
```
|
|
441
|
-
|
|
442
|
-
## Advanced Features
|
|
443
|
-
|
|
444
|
-
### Swagger 2.0 Support
|
|
445
|
-
|
|
446
|
-
Swagger 2.0 specs are automatically converted to OpenAPI 3.0 on ingest:
|
|
447
|
-
|
|
448
|
-
```bash
|
|
449
|
-
mcpmake from openapi ./swagger-v2.json -o ./my-server # auto-detected
|
|
450
|
-
```
|
|
451
|
-
|
|
452
|
-
### OpenAPI Overlays
|
|
453
|
-
|
|
454
|
-
Customize a spec non-destructively without editing the source:
|
|
455
|
-
|
|
456
|
-
```bash
|
|
457
|
-
mcpmake from openapi ./spec.yaml --overlay ./my-overrides.yaml -o ./my-server
|
|
458
|
-
```
|
|
459
|
-
|
|
460
|
-
Overlay format:
|
|
461
|
-
|
|
462
|
-
```yaml
|
|
463
|
-
overlay: 1.0.0
|
|
464
|
-
actions:
|
|
465
|
-
- target: "$.paths['/users'].get"
|
|
466
|
-
update:
|
|
467
|
-
x-mcp-name: list_all_users
|
|
468
|
-
x-mcp-description: 'Retrieve all registered users'
|
|
469
|
-
- target: "$.paths['/admin/*']"
|
|
470
|
-
remove: true
|
|
471
|
-
```
|
|
472
|
-
|
|
473
|
-
### MCP Extensions
|
|
474
|
-
|
|
475
|
-
Custom `x-mcp-*` extensions in your OpenAPI spec:
|
|
476
|
-
|
|
477
|
-
```yaml
|
|
478
|
-
paths:
|
|
479
|
-
/users:
|
|
480
|
-
get:
|
|
481
|
-
x-mcp-name: list_users # override tool name
|
|
482
|
-
x-mcp-description: 'Get users' # override description
|
|
483
|
-
x-mcp-emit: skip # skip this operation
|
|
484
|
-
x-mcp-scope: read # semantic scope hint
|
|
485
|
-
x-mcp-jq-filter: '.data' # trim response before returning
|
|
486
|
-
x-mcp-deprecation-message: 'Use /v2/users instead'
|
|
487
|
-
x-mcp-deprecation-replacement: list_users_v2
|
|
488
|
-
x-mcp-unknown-values: allow # accept unknown enum values
|
|
489
|
-
```
|
|
490
|
-
|
|
491
|
-
## CLI Reference
|
|
492
|
-
|
|
493
|
-
Every command, argument, flag, default, and required env var is documented in
|
|
494
|
-
the complete **[CLI reference → `docs/cli.md`](https://github.com/starkyru/mcpmake/blob/main/docs/cli.md)**. You can also run
|
|
495
|
-
`mcpmake <command> --help` for the live, authoritative flag list.
|
|
496
|
-
|
|
497
|
-
| Command | Purpose |
|
|
498
|
-
| --- | --- |
|
|
499
|
-
| [`from openapi`](https://github.com/starkyru/mcpmake/blob/main/docs/cli.md#mcpmake-from-openapi) | Generate from an OpenAPI/Swagger spec or provider shortcut |
|
|
500
|
-
| [`from har`](https://github.com/starkyru/mcpmake/blob/main/docs/cli.md#mcpmake-from-har) | Generate from a HAR (browser DevTools) recording |
|
|
501
|
-
| [`from url`](https://github.com/starkyru/mcpmake/blob/main/docs/cli.md#mcpmake-from-url) | Generate by recording a live browser session |
|
|
502
|
-
| [`from postman`](https://github.com/starkyru/mcpmake/blob/main/docs/cli.md#mcpmake-from-postman) | Generate from a Postman Collection (v2.1) |
|
|
503
|
-
| [`from website`](https://github.com/starkyru/mcpmake/blob/main/docs/cli.md#mcpmake-from-website) | Generate a Playwright server from a site's DOM |
|
|
504
|
-
| [`from describe`](https://github.com/starkyru/mcpmake/blob/main/docs/cli.md#mcpmake-from-describe) | Generate from a natural-language description (AI) |
|
|
505
|
-
| [`merge`](https://github.com/starkyru/mcpmake/blob/main/docs/cli.md#mcpmake-merge) | Merge two OpenAPI specs into one |
|
|
506
|
-
| [`diff`](https://github.com/starkyru/mcpmake/blob/main/docs/cli.md#mcpmake-diff) | Compare tools generated from two specs |
|
|
507
|
-
| [`lint`](https://github.com/starkyru/mcpmake/blob/main/docs/cli.md#mcpmake-lint) | Lint an OpenAPI spec for MCP issues |
|
|
508
|
-
| [`verify`](https://github.com/starkyru/mcpmake/blob/main/docs/cli.md#mcpmake-verify) | Check a generated project still matches its spec |
|
|
509
|
-
| [`update`](https://github.com/starkyru/mcpmake/blob/main/docs/cli.md#mcpmake-update) | Re-generate a project from a changed spec |
|
|
510
|
-
| [`rescan`](https://github.com/starkyru/mcpmake/blob/main/docs/cli.md#mcpmake-rescan) | Re-crawl a website project, heal selectors, regenerate |
|
|
511
|
-
| [`bundle`](https://github.com/starkyru/mcpmake/blob/main/docs/cli.md#mcpmake-bundle) | Bundle a generated project into an `.mcpb` file |
|
|
512
|
-
| [`publish`](https://github.com/starkyru/mcpmake/blob/main/docs/cli.md#mcpmake-publish) | Generate registry manifests / publish to the MCP Registry |
|
|
513
|
-
| [`deploy`](https://github.com/starkyru/mcpmake/blob/main/docs/cli.md#mcpmake-deploy) | Deploy a spec to the hosting backend |
|
|
514
|
-
| [`ci init`](https://github.com/starkyru/mcpmake/blob/main/docs/cli.md#mcpmake-ci-init) | Generate a GitHub Actions drift-check workflow |
|
|
515
|
-
|
|
516
|
-
## Architecture
|
|
517
|
-
|
|
518
|
-
```
|
|
519
|
-
Input Source (OpenAPI / HAR / URL / Description)
|
|
520
|
-
-> Parser (load, extract operations, convert schemas)
|
|
521
|
-
-> Transformer (build tools + resources + prompts, detect auth)
|
|
522
|
-
-> Emitter (render Handlebars templates, write project to disk)
|
|
523
|
-
-> Runnable MCP Server (stdio or HTTP)
|
|
524
|
-
```
|
|
525
|
-
|
|
526
|
-
Two parallel pipelines share the emitter infrastructure:
|
|
527
|
-
|
|
528
|
-
- **API pipeline**: OpenAPI/HAR/URL/Postman/Describe → `OperationDescriptor[]` → HTTP-fetch MCP server
|
|
529
|
-
- **Website pipeline**: Website URL → `SiteDescriptor` → Playwright-based MCP server
|
|
530
|
-
|
|
531
|
-
### Project Layout
|
|
532
|
-
|
|
533
|
-
```
|
|
534
|
-
src/
|
|
535
|
-
├── parser/ # Input adapters (OpenAPI, HAR, Postman)
|
|
536
|
-
├── analyzer/ # Website DOM analysis (crawler, forms, selectors, screenshots)
|
|
537
|
-
├── transformer/ # Tool/resource/prompt building, auth, naming, filtering
|
|
538
|
-
├── site-transformer/ # Website → site-specific tool generation
|
|
539
|
-
├── emitter/ # Template rendering, code writing, project scaffolding
|
|
540
|
-
│ ├── templates/ # Handlebars templates for TypeScript servers
|
|
541
|
-
│ ├── site-templates/ # Templates for Playwright-based servers
|
|
542
|
-
│ └── python-templates/ # Templates for Python servers
|
|
543
|
-
├── generator/ # AI-powered spec generation (Claude API)
|
|
544
|
-
├── recorder/ # Playwright browser recorder (interactive + headless capture)
|
|
545
|
-
├── rescan/ # Site diff + self-heal engine (powers `mcpmake rescan`)
|
|
546
|
-
├── providers/ # Pre-built configs for popular APIs
|
|
547
|
-
├── plugins/ # Adapter plugin system
|
|
548
|
-
├── cloud/ # Hosting backend (server, containers, billing, DB)
|
|
549
|
-
│ ├── db/ # PostgreSQL stores and migrations
|
|
550
|
-
│ ├── billing/ # Usage tracking and plan enforcement
|
|
551
|
-
│ └── web/ # Dashboard, auth, admin panel
|
|
552
|
-
├── commands/ # CLI commands (from/*, verify, update, rescan, deploy, publish)
|
|
553
|
-
├── pricing.ts # Canonical Family A price card (served at /api/pricing)
|
|
554
|
-
├── types/ # Shared TypeScript types
|
|
555
|
-
└── utils/ # Logger, filesystem, sanitization helpers
|
|
556
|
-
```
|
|
557
|
-
|
|
558
|
-
## Pricing
|
|
559
|
-
|
|
560
|
-
The CLI is **free forever** — generate code you own and run it anywhere. Paid
|
|
561
|
-
tiers cover keeping it in sync and running it for you.
|
|
562
|
-
|
|
563
|
-
| Tier | Price | What you get |
|
|
564
|
-
| ------------------------ | ------------------ | ------------------------------------------------------------- |
|
|
565
|
-
| **Local compiler (CLI)** | **Free forever** | Generate, own the code, run anywhere. |
|
|
566
|
-
| **Sync — Solo** | **$19/mo** | CI drift-check + spec-currency auto-PRs, 1 repo. |
|
|
567
|
-
| **Sync — Team** | **$499/mo** | Multi-repo CI sync, policy checks, support. |
|
|
568
|
-
| **Self-hosted license** | **from $8,000/yr** | Run the generator + sync on your own infra; governance + SLA. |
|
|
569
|
-
| **Migration engagement** | **$5,000–$20,000** | Done-for-you API → owned MCP servers + CI wiring. |
|
|
570
|
-
| **Managed hosting** | convenience add-on | We host code you already own — self-host any time. See below. |
|
|
571
|
-
| **Enterprise** | custom | SSO, RBAC, private registry, audit. |
|
|
572
|
-
|
|
573
|
-
Prices are served live from the backend (`GET /api/pricing`) and defined in
|
|
574
|
-
[`src/pricing.ts`](https://github.com/starkyru/mcpmake/blob/main/src/pricing.ts), so the CLI never shows stale numbers.
|
|
575
|
-
Managed hosting is a convenience tier, not the anchor — the value you own is the
|
|
576
|
-
editable code and safe regeneration.
|
|
577
|
-
|
|
578
|
-
## mcpmake Cloud
|
|
579
|
-
|
|
580
|
-
Hosted platform for deploying generated MCP servers as containers:
|
|
581
|
-
|
|
582
|
-
- **Spec upload API** — `POST /api/servers` accepts specs, returns endpoint + bearer token
|
|
583
|
-
- **Container management** — Docker-based with resource limits (HTTP: 256MB/0.5CPU, Playwright: 768MB/1CPU)
|
|
584
|
-
- **Security** — read-only containers, non-root user, code auditing, bearer auth, encrypted secrets (AES-256-GCM)
|
|
585
|
-
- **Auto-scaling** — idle containers stopped automatically, dynamic routing
|
|
586
|
-
- **Monitoring** — per-server metrics, log streaming via SSE, rate limiting
|
|
587
|
-
- **Web dashboard** — register/login, server CRUD, logs, metrics, billing, admin panel
|
|
588
|
-
- **Billing** — browser-minute metering, plan quotas, Stripe payment integration
|
|
589
|
-
- **Database** — PostgreSQL with in-memory fallback, automatic migrations
|
|
590
|
-
- **Deployment** — VPS setup scripts, PM2/nginx, nightly pg_dump backups
|
|
591
|
-
|
|
592
|
-
```bash
|
|
593
|
-
# Deploy to mcpmake.dev
|
|
594
|
-
mcpmake deploy ./petstore.yaml --server https://mcpmake.dev
|
|
595
|
-
```
|
|
596
|
-
|
|
597
|
-
### Admin dashboard
|
|
598
|
-
|
|
599
|
-
The admin panel adds operational visibility and growth levers on top of the
|
|
600
|
-
per-server views:
|
|
601
|
-
|
|
602
|
-
- **Promotional tool-call credits** — grant or revoke bonus tool-calls per user
|
|
603
|
-
from the dashboard. Credits are consumed (all-or-nothing, atomically) when a
|
|
604
|
-
user is over their plan quota, _before_ the 429 hard cap. Every grant/revoke is
|
|
605
|
-
recorded in an auditable **ledger** (newest-first; per-request consumption is
|
|
606
|
-
intentionally not ledgered).
|
|
607
|
-
- **Time-series charts** — server-rendered, script-free inline SVG (sparklines,
|
|
608
|
-
bar charts, and a requests-vs-errors dual line) backed by periodic metric
|
|
609
|
-
samples. CSP-safe: no inline JS, hover values via `<title>` only.
|
|
610
|
-
- **Health panel** — host RAM/disk pressure, active containers, and totals at a
|
|
611
|
-
glance.
|
|
612
|
-
- **API failure-rate** — a rolling per-minute tracker classifies responses by
|
|
613
|
-
status class (2xx/3xx/4xx/5xx) plus aborted requests, surfacing a
|
|
614
|
-
server-error rate (`(5xx + aborted) / total`) and client-error rate.
|
|
615
|
-
- **CLI telemetry viewer** — opt-in crash reports grouped by fingerprint with
|
|
616
|
-
counts and last-seen, hardened against abuse (size cap, no decompression,
|
|
617
|
-
per-IP rate limit, strict field whitelist).
|
|
618
|
-
|
|
619
|
-
### Public API endpoints
|
|
620
|
-
|
|
621
|
-
Two endpoints are public (unauthenticated) and stable:
|
|
622
|
-
|
|
623
|
-
| Endpoint | Purpose |
|
|
624
|
-
| ---------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
625
|
-
| `GET /api/pricing` | Canonical Family A price card (the CLI fetches this so an old binary never prints stale prices; falls back to its bundled copy when unreachable). |
|
|
626
|
-
| `POST /api/telemetry/report` | Receives opt-in, pre-redacted CLI crash reports. Returns **202** on accept; **400** (malformed/empty), **413** (oversized), **415** (`Content-Encoding` set), or **429** (rate-limited) on reject. |
|
|
627
|
-
|
|
628
|
-
### Configuration
|
|
629
|
-
|
|
630
|
-
Environment variables for the cloud backend:
|
|
631
|
-
|
|
632
|
-
| Variable | Required | Description |
|
|
633
|
-
| ----------------------- | -------- | --------------------------------------------------------------- |
|
|
634
|
-
| `DATABASE_URL` | Yes | PostgreSQL connection string |
|
|
635
|
-
| `PORT` | No | Server port (default: 3001) |
|
|
636
|
-
| `DOMAIN` | Yes | Domain for hosted servers |
|
|
637
|
-
| `TRUST_PROXY` | No | Trust X-Forwarded headers |
|
|
638
|
-
| `ADMIN_TOKEN` | Yes | Admin API auth token |
|
|
639
|
-
| `ENCRYPTION_KEY` | Yes | 32+ char key for AES-256-GCM secrets |
|
|
640
|
-
| `ALLOWED_EMAILS` | No | Comma-separated allowlist (e.g. `*@company.com,user@gmail.com`) |
|
|
641
|
-
| `STRIPE_SECRET_KEY` | No | Stripe API key for payments |
|
|
642
|
-
| `STRIPE_WEBHOOK_SECRET` | No | Stripe webhook signature secret |
|
|
643
|
-
| `ANTHROPIC_API_KEY` | No | For AI-powered features |
|
|
644
|
-
|
|
645
|
-
## Development
|
|
646
|
-
|
|
647
|
-
```bash
|
|
648
|
-
git clone <repo>
|
|
649
|
-
cd mcpmake
|
|
650
|
-
npm install
|
|
651
|
-
npm run build
|
|
652
|
-
|
|
653
|
-
# Run without building
|
|
654
|
-
npx tsx src/index.ts from openapi ./test/fixtures/petstore.yaml -o /tmp/test-mcp
|
|
655
|
-
|
|
656
|
-
# Type check
|
|
657
|
-
npm run typecheck
|
|
658
|
-
|
|
659
|
-
# Run tests (263 tests across 39 files)
|
|
660
|
-
npm test
|
|
661
|
-
|
|
662
|
-
# Release smoke tests (validate the packaged binary + a generated server)
|
|
663
|
-
npm run smoke:pack
|
|
664
|
-
npm run smoke:server
|
|
665
|
-
|
|
666
|
-
# Format code
|
|
667
|
-
npm run format
|
|
668
|
-
```
|
|
669
|
-
|
|
670
|
-
## Supported Inputs
|
|
671
|
-
|
|
672
|
-
| Input | Format | Notes |
|
|
673
|
-
| ----------- | -------------- | ---------------------------------------------- |
|
|
674
|
-
| OpenAPI | 3.0.x, 3.1.x | YAML/JSON, local/remote |
|
|
675
|
-
| HAR | 1.2 | Chrome/Firefox DevTools export |
|
|
676
|
-
| URL | http/https | Playwright browser recording |
|
|
677
|
-
| Website | http/https | DOM analysis, Playwright MCP server |
|
|
678
|
-
| Postman | v2.1 | Collection import |
|
|
679
|
-
| Description | Plain English | Claude-powered spec generation |
|
|
680
|
-
| Providers | Shortcut names | stripe, github, slack, notion, linear, shopify |
|
|
128
|
+
The CLI is a thin wrapper around
|
|
129
|
+
[`@mcpmake/core`](https://www.npmjs.com/package/@mcpmake/core) — the shared
|
|
130
|
+
generation library (parsers, transformers, emitters, templates). Use it directly
|
|
131
|
+
to build your own tooling.
|
|
681
132
|
|
|
682
133
|
## Requirements
|
|
683
134
|
|
|
684
|
-
- Node.js
|
|
685
|
-
- Playwright (`npx playwright install chromium`) for `from url` command
|
|
686
|
-
- `ANTHROPIC_API_KEY` for `from describe` command
|
|
687
|
-
- Docker for `mcpmake deploy` / Cloud hosting
|
|
135
|
+
- Node.js **>= 20**
|
|
688
136
|
|
|
689
137
|
## License
|
|
690
138
|
|
|
691
|
-
|
|
139
|
+
[Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0). The servers you
|
|
140
|
+
generate are yours.
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
Built by the [mcpmake](https://mcpmake.dev) team · [Docs](https://mcpmake.dev) · [Hosting](https://mcpmake.dev)
|