mcpmake 0.1.0

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 (344) hide show
  1. package/README.md +691 -0
  2. package/bin/mcpmake.mjs +2 -0
  3. package/dist/analyzer/auth-detector.d.ts +12 -0
  4. package/dist/analyzer/auth-detector.js +142 -0
  5. package/dist/analyzer/dom-parser.d.ts +10 -0
  6. package/dist/analyzer/dom-parser.js +259 -0
  7. package/dist/analyzer/goal-crawler.d.ts +25 -0
  8. package/dist/analyzer/goal-crawler.js +177 -0
  9. package/dist/analyzer/hybrid-detector.d.ts +28 -0
  10. package/dist/analyzer/hybrid-detector.js +96 -0
  11. package/dist/analyzer/index.d.ts +12 -0
  12. package/dist/analyzer/index.js +8 -0
  13. package/dist/analyzer/screenshot-capture.d.ts +29 -0
  14. package/dist/analyzer/screenshot-capture.js +42 -0
  15. package/dist/analyzer/selector-builder.d.ts +19 -0
  16. package/dist/analyzer/selector-builder.js +199 -0
  17. package/dist/analyzer/semantic-analyzer.d.ts +13 -0
  18. package/dist/analyzer/semantic-analyzer.js +145 -0
  19. package/dist/analyzer/site-crawler.d.ts +38 -0
  20. package/dist/analyzer/site-crawler.js +235 -0
  21. package/dist/cloud/billing/billing-engine.d.ts +44 -0
  22. package/dist/cloud/billing/billing-engine.js +81 -0
  23. package/dist/cloud/billing/credit-store.d.ts +64 -0
  24. package/dist/cloud/billing/credit-store.js +168 -0
  25. package/dist/cloud/billing/index.d.ts +4 -0
  26. package/dist/cloud/billing/index.js +2 -0
  27. package/dist/cloud/billing/usage-store.d.ts +42 -0
  28. package/dist/cloud/billing/usage-store.js +85 -0
  29. package/dist/cloud/billing/usage-tracker.d.ts +38 -0
  30. package/dist/cloud/billing/usage-tracker.js +95 -0
  31. package/dist/cloud/build-pipeline.d.ts +39 -0
  32. package/dist/cloud/build-pipeline.js +310 -0
  33. package/dist/cloud/build-queue.d.ts +30 -0
  34. package/dist/cloud/build-queue.js +70 -0
  35. package/dist/cloud/caddy-manager.d.ts +18 -0
  36. package/dist/cloud/caddy-manager.js +97 -0
  37. package/dist/cloud/container-backend.d.ts +62 -0
  38. package/dist/cloud/container-backend.js +59 -0
  39. package/dist/cloud/container-manager.d.ts +64 -0
  40. package/dist/cloud/container-manager.js +301 -0
  41. package/dist/cloud/crypto.d.ts +27 -0
  42. package/dist/cloud/crypto.js +63 -0
  43. package/dist/cloud/db/index.d.ts +27 -0
  44. package/dist/cloud/db/index.js +53 -0
  45. package/dist/cloud/db/migrations.d.ts +12 -0
  46. package/dist/cloud/db/migrations.js +329 -0
  47. package/dist/cloud/db/pg-store.d.ts +45 -0
  48. package/dist/cloud/db/pg-store.js +336 -0
  49. package/dist/cloud/failure-tracker.d.ts +51 -0
  50. package/dist/cloud/failure-tracker.js +102 -0
  51. package/dist/cloud/idle-monitor.d.ts +30 -0
  52. package/dist/cloud/idle-monitor.js +70 -0
  53. package/dist/cloud/mailer.d.ts +21 -0
  54. package/dist/cloud/mailer.js +193 -0
  55. package/dist/cloud/mcp-proxy.d.ts +58 -0
  56. package/dist/cloud/mcp-proxy.js +203 -0
  57. package/dist/cloud/metric-samples.d.ts +43 -0
  58. package/dist/cloud/metric-samples.js +85 -0
  59. package/dist/cloud/metrics.d.ts +26 -0
  60. package/dist/cloud/metrics.js +59 -0
  61. package/dist/cloud/multipart.d.ts +26 -0
  62. package/dist/cloud/multipart.js +132 -0
  63. package/dist/cloud/observability.d.ts +27 -0
  64. package/dist/cloud/observability.js +98 -0
  65. package/dist/cloud/rate-limiter.d.ts +31 -0
  66. package/dist/cloud/rate-limiter.js +58 -0
  67. package/dist/cloud/request-security.d.ts +5 -0
  68. package/dist/cloud/request-security.js +74 -0
  69. package/dist/cloud/resource-monitor.d.ts +69 -0
  70. package/dist/cloud/resource-monitor.js +130 -0
  71. package/dist/cloud/secret-store.d.ts +38 -0
  72. package/dist/cloud/secret-store.js +103 -0
  73. package/dist/cloud/security.d.ts +26 -0
  74. package/dist/cloud/security.js +142 -0
  75. package/dist/cloud/server.d.ts +21 -0
  76. package/dist/cloud/server.js +1079 -0
  77. package/dist/cloud/shared-state.d.ts +72 -0
  78. package/dist/cloud/shared-state.js +159 -0
  79. package/dist/cloud/ssrf.d.ts +43 -0
  80. package/dist/cloud/ssrf.js +150 -0
  81. package/dist/cloud/store.d.ts +41 -0
  82. package/dist/cloud/store.js +75 -0
  83. package/dist/cloud/stripe.d.ts +78 -0
  84. package/dist/cloud/stripe.js +317 -0
  85. package/dist/cloud/telemetry-store.d.ts +53 -0
  86. package/dist/cloud/telemetry-store.js +108 -0
  87. package/dist/cloud/web/auth.d.ts +225 -0
  88. package/dist/cloud/web/auth.js +555 -0
  89. package/dist/cloud/web/charts.d.ts +70 -0
  90. package/dist/cloud/web/charts.js +178 -0
  91. package/dist/cloud/web/csrf.d.ts +14 -0
  92. package/dist/cloud/web/csrf.js +22 -0
  93. package/dist/cloud/web/docs.d.ts +40 -0
  94. package/dist/cloud/web/docs.js +174 -0
  95. package/dist/cloud/web/router.d.ts +25 -0
  96. package/dist/cloud/web/router.js +1921 -0
  97. package/dist/cloud/web/static/alpine.min.js +5 -0
  98. package/dist/cloud/web/static/favicon.svg +4 -0
  99. package/dist/cloud/web/static/htmx-sse.js +290 -0
  100. package/dist/cloud/web/static/htmx.min.js +1 -0
  101. package/dist/cloud/web/static/style.css +2683 -0
  102. package/dist/cloud/web/static-server.d.ts +13 -0
  103. package/dist/cloud/web/static-server.js +73 -0
  104. package/dist/cloud/web/template-engine.d.ts +27 -0
  105. package/dist/cloud/web/template-engine.js +146 -0
  106. package/dist/cloud/web/templates/layouts/admin.hbs +57 -0
  107. package/dist/cloud/web/templates/layouts/auth.hbs +138 -0
  108. package/dist/cloud/web/templates/layouts/base.hbs +16 -0
  109. package/dist/cloud/web/templates/layouts/dashboard.hbs +39 -0
  110. package/dist/cloud/web/templates/layouts/landing.hbs +82 -0
  111. package/dist/cloud/web/templates/pages/admin/overview.hbs +123 -0
  112. package/dist/cloud/web/templates/pages/admin/servers.hbs +129 -0
  113. package/dist/cloud/web/templates/pages/admin/telemetry.hbs +39 -0
  114. package/dist/cloud/web/templates/pages/admin/user-edit.hbs +91 -0
  115. package/dist/cloud/web/templates/pages/admin/users.hbs +179 -0
  116. package/dist/cloud/web/templates/pages/auth/forgot-password.hbs +25 -0
  117. package/dist/cloud/web/templates/pages/auth/login.hbs +33 -0
  118. package/dist/cloud/web/templates/pages/auth/register.hbs +32 -0
  119. package/dist/cloud/web/templates/pages/auth/reset-password.hbs +34 -0
  120. package/dist/cloud/web/templates/pages/dashboard/billing.hbs +140 -0
  121. package/dist/cloud/web/templates/pages/dashboard/create.hbs +173 -0
  122. package/dist/cloud/web/templates/pages/dashboard/index.hbs +8 -0
  123. package/dist/cloud/web/templates/pages/dashboard/server-detail.hbs +280 -0
  124. package/dist/cloud/web/templates/pages/dashboard/server-logs.hbs +35 -0
  125. package/dist/cloud/web/templates/pages/dashboard/server-metrics.hbs +63 -0
  126. package/dist/cloud/web/templates/pages/dashboard/servers-partial.hbs +21 -0
  127. package/dist/cloud/web/templates/pages/dashboard/servers.hbs +44 -0
  128. package/dist/cloud/web/templates/pages/docs/show.hbs +16 -0
  129. package/dist/cloud/web/templates/pages/errors/404.hbs +9 -0
  130. package/dist/cloud/web/templates/pages/errors/500.hbs +8 -0
  131. package/dist/cloud/web/templates/pages/landing/index.hbs +223 -0
  132. package/dist/cloud/web/templates/pages/legal/privacy.hbs +71 -0
  133. package/dist/cloud/web/templates/pages/legal/terms.hbs +73 -0
  134. package/dist/cloud/web/templates/partials/admin-stats.hbs +52 -0
  135. package/dist/cloud/web/templates/partials/flash-message.hbs +6 -0
  136. package/dist/cloud/web/templates/partials/pricing-table.hbs +103 -0
  137. package/dist/cloud/web/templates/partials/server-card.hbs +19 -0
  138. package/dist/cloud/web/templates/partials/status-badge.hbs +1 -0
  139. package/dist/commands/bundle.d.ts +18 -0
  140. package/dist/commands/bundle.js +82 -0
  141. package/dist/commands/ci.d.ts +25 -0
  142. package/dist/commands/ci.js +149 -0
  143. package/dist/commands/deploy.d.ts +24 -0
  144. package/dist/commands/deploy.js +145 -0
  145. package/dist/commands/diff.d.ts +18 -0
  146. package/dist/commands/diff.js +185 -0
  147. package/dist/commands/from/describe.d.ts +65 -0
  148. package/dist/commands/from/describe.js +173 -0
  149. package/dist/commands/from/har.d.ts +81 -0
  150. package/dist/commands/from/har.js +255 -0
  151. package/dist/commands/from/openapi.d.ts +105 -0
  152. package/dist/commands/from/openapi.js +302 -0
  153. package/dist/commands/from/postman.d.ts +51 -0
  154. package/dist/commands/from/postman.js +146 -0
  155. package/dist/commands/from/target-support.d.ts +11 -0
  156. package/dist/commands/from/target-support.js +33 -0
  157. package/dist/commands/from/url.d.ts +75 -0
  158. package/dist/commands/from/url.js +244 -0
  159. package/dist/commands/from/website.d.ts +75 -0
  160. package/dist/commands/from/website.js +284 -0
  161. package/dist/commands/lint.d.ts +24 -0
  162. package/dist/commands/lint.js +184 -0
  163. package/dist/commands/merge.d.ts +18 -0
  164. package/dist/commands/merge.js +161 -0
  165. package/dist/commands/publish.d.ts +27 -0
  166. package/dist/commands/publish.js +334 -0
  167. package/dist/commands/rescan.d.ts +40 -0
  168. package/dist/commands/rescan.js +255 -0
  169. package/dist/commands/update.d.ts +14 -0
  170. package/dist/commands/update.js +87 -0
  171. package/dist/commands/verify.d.ts +14 -0
  172. package/dist/commands/verify.js +71 -0
  173. package/dist/config/configurable-command.d.ts +13 -0
  174. package/dist/config/configurable-command.js +70 -0
  175. package/dist/config/mcpmake-config.d.ts +68 -0
  176. package/dist/config/mcpmake-config.js +207 -0
  177. package/dist/docs/cli.md +400 -0
  178. package/dist/docs/mcp-2026-07-28-migration.md +78 -0
  179. package/dist/docs/migrate-from-stainless.md +94 -0
  180. package/dist/docs/quickstart.md +166 -0
  181. package/dist/docs/show-hn.md +26 -0
  182. package/dist/docs/website-servers.md +169 -0
  183. package/dist/emitter/code-writer.d.ts +8 -0
  184. package/dist/emitter/code-writer.js +25 -0
  185. package/dist/emitter/index.d.ts +32 -0
  186. package/dist/emitter/index.js +280 -0
  187. package/dist/emitter/mcpb-bundler.d.ts +31 -0
  188. package/dist/emitter/mcpb-bundler.js +172 -0
  189. package/dist/emitter/project-scaffolder.d.ts +4 -0
  190. package/dist/emitter/project-scaffolder.js +89 -0
  191. package/dist/emitter/python-template-loader.d.ts +4 -0
  192. package/dist/emitter/python-template-loader.js +30 -0
  193. package/dist/emitter/python-templates/dockerfile.hbs +14 -0
  194. package/dist/emitter/python-templates/env.example.hbs +6 -0
  195. package/dist/emitter/python-templates/requirements.txt.hbs +4 -0
  196. package/dist/emitter/python-templates/server.py.hbs +77 -0
  197. package/dist/emitter/site-scaffolder.d.ts +13 -0
  198. package/dist/emitter/site-scaffolder.js +70 -0
  199. package/dist/emitter/site-template-loader.d.ts +5 -0
  200. package/dist/emitter/site-template-loader.js +47 -0
  201. package/dist/emitter/site-templates/browser-manager.ts.hbs +233 -0
  202. package/dist/emitter/site-templates/config.ts.hbs +28 -0
  203. package/dist/emitter/site-templates/dockerfile.hbs +31 -0
  204. package/dist/emitter/site-templates/env.example.hbs +19 -0
  205. package/dist/emitter/site-templates/package.json.hbs +26 -0
  206. package/dist/emitter/site-templates/server-main-http.ts.hbs +108 -0
  207. package/dist/emitter/site-templates/server-main.ts.hbs +23 -0
  208. package/dist/emitter/site-templates/tool-handler-action.ts.hbs +86 -0
  209. package/dist/emitter/site-templates/tool-handler-form.ts.hbs +116 -0
  210. package/dist/emitter/site-templates/tool-handler-lifecycle.ts.hbs +146 -0
  211. package/dist/emitter/site-templates/tool-index.ts.hbs +11 -0
  212. package/dist/emitter/template-loader.d.ts +1 -0
  213. package/dist/emitter/template-loader.js +27 -0
  214. package/dist/emitter/templates/auth-provider.ts.hbs +57 -0
  215. package/dist/emitter/templates/config.ts.hbs +63 -0
  216. package/dist/emitter/templates/discovery.ts.hbs +301 -0
  217. package/dist/emitter/templates/dockerfile.hbs +34 -0
  218. package/dist/emitter/templates/env.example.hbs +28 -0
  219. package/dist/emitter/templates/gitignore.hbs +5 -0
  220. package/dist/emitter/templates/http-executor.ts.hbs +117 -0
  221. package/dist/emitter/templates/oauth.ts.hbs +188 -0
  222. package/dist/emitter/templates/package.json.hbs +25 -0
  223. package/dist/emitter/templates/prompts.ts.hbs +22 -0
  224. package/dist/emitter/templates/readme.md.hbs +123 -0
  225. package/dist/emitter/templates/resources.ts.hbs +63 -0
  226. package/dist/emitter/templates/server-main-http.ts.hbs +407 -0
  227. package/dist/emitter/templates/server-main.ts.hbs +40 -0
  228. package/dist/emitter/templates/task-handlers.ts.hbs +189 -0
  229. package/dist/emitter/templates/task-manager.ts.hbs +139 -0
  230. package/dist/emitter/templates/task-sse.ts.hbs +105 -0
  231. package/dist/emitter/templates/tool-handler.ts.hbs +124 -0
  232. package/dist/emitter/templates/tool-index.ts.hbs +11 -0
  233. package/dist/emitter/templates/tool-test.ts.hbs +57 -0
  234. package/dist/emitter/templates/trace.ts.hbs +79 -0
  235. package/dist/emitter/templates/tsconfig.json.hbs +16 -0
  236. package/dist/emitter/templates/types.ts.hbs +5 -0
  237. package/dist/emitter/worker-template-loader.d.ts +5 -0
  238. package/dist/emitter/worker-template-loader.js +33 -0
  239. package/dist/emitter/worker-templates/config.ts.hbs +54 -0
  240. package/dist/emitter/worker-templates/dev-vars.example.hbs +10 -0
  241. package/dist/emitter/worker-templates/gitignore.hbs +6 -0
  242. package/dist/emitter/worker-templates/package.json.hbs +24 -0
  243. package/dist/emitter/worker-templates/readme.md.hbs +53 -0
  244. package/dist/emitter/worker-templates/server.test.ts.hbs +20 -0
  245. package/dist/emitter/worker-templates/tool-handler.ts.hbs +85 -0
  246. package/dist/emitter/worker-templates/tool-index.ts.hbs +28 -0
  247. package/dist/emitter/worker-templates/tsconfig.json.hbs +17 -0
  248. package/dist/emitter/worker-templates/worker.ts.hbs +242 -0
  249. package/dist/emitter/worker-templates/wrangler.toml.hbs +19 -0
  250. package/dist/generator/spec-generator.d.ts +6 -0
  251. package/dist/generator/spec-generator.js +50 -0
  252. package/dist/index.d.ts +1 -0
  253. package/dist/index.js +64 -0
  254. package/dist/parser/har-filter.d.ts +8 -0
  255. package/dist/parser/har-filter.js +71 -0
  256. package/dist/parser/har-loader.d.ts +2 -0
  257. package/dist/parser/har-loader.js +14 -0
  258. package/dist/parser/har-normalizer.d.ts +20 -0
  259. package/dist/parser/har-normalizer.js +78 -0
  260. package/dist/parser/index.d.ts +10 -0
  261. package/dist/parser/index.js +6 -0
  262. package/dist/parser/openapi-loader.d.ts +6 -0
  263. package/dist/parser/openapi-loader.js +308 -0
  264. package/dist/parser/operation-extractor.d.ts +13 -0
  265. package/dist/parser/operation-extractor.js +155 -0
  266. package/dist/parser/overlay-loader.d.ts +10 -0
  267. package/dist/parser/overlay-loader.js +184 -0
  268. package/dist/parser/postman-loader.d.ts +9 -0
  269. package/dist/parser/postman-loader.js +106 -0
  270. package/dist/parser/schema-converter.d.ts +12 -0
  271. package/dist/parser/schema-converter.js +117 -0
  272. package/dist/plugins/adapter.d.ts +40 -0
  273. package/dist/plugins/adapter.js +15 -0
  274. package/dist/plugins/loader.d.ts +25 -0
  275. package/dist/plugins/loader.js +58 -0
  276. package/dist/pricing.d.ts +55 -0
  277. package/dist/pricing.js +133 -0
  278. package/dist/providers/index.d.ts +15 -0
  279. package/dist/providers/index.js +56 -0
  280. package/dist/recorder/browser-recorder.d.ts +22 -0
  281. package/dist/recorder/browser-recorder.js +205 -0
  282. package/dist/registry/official-registry.d.ts +90 -0
  283. package/dist/registry/official-registry.js +129 -0
  284. package/dist/rescan/diff-engine.d.ts +5 -0
  285. package/dist/rescan/diff-engine.js +312 -0
  286. package/dist/rescan/index.d.ts +3 -0
  287. package/dist/rescan/index.js +2 -0
  288. package/dist/rescan/rescan-runner.d.ts +42 -0
  289. package/dist/rescan/rescan-runner.js +69 -0
  290. package/dist/rescan/rescan-scheduler.d.ts +41 -0
  291. package/dist/rescan/rescan-scheduler.js +179 -0
  292. package/dist/site-transformer/browser-tools.d.ts +10 -0
  293. package/dist/site-transformer/browser-tools.js +59 -0
  294. package/dist/site-transformer/index.d.ts +2 -0
  295. package/dist/site-transformer/index.js +2 -0
  296. package/dist/site-transformer/selector-healer.d.ts +8 -0
  297. package/dist/site-transformer/selector-healer.js +106 -0
  298. package/dist/site-transformer/tool-generator.d.ts +13 -0
  299. package/dist/site-transformer/tool-generator.js +245 -0
  300. package/dist/transformer/auth-detector.d.ts +13 -0
  301. package/dist/transformer/auth-detector.js +90 -0
  302. package/dist/transformer/catalog-builder.d.ts +18 -0
  303. package/dist/transformer/catalog-builder.js +56 -0
  304. package/dist/transformer/client-compat.d.ts +6 -0
  305. package/dist/transformer/client-compat.js +44 -0
  306. package/dist/transformer/har-clusterer.d.ts +9 -0
  307. package/dist/transformer/har-clusterer.js +27 -0
  308. package/dist/transformer/har-dedup.d.ts +10 -0
  309. package/dist/transformer/har-dedup.js +81 -0
  310. package/dist/transformer/har-schema-inferrer.d.ts +15 -0
  311. package/dist/transformer/har-schema-inferrer.js +90 -0
  312. package/dist/transformer/har-to-operations.d.ts +13 -0
  313. package/dist/transformer/har-to-operations.js +192 -0
  314. package/dist/transformer/index.d.ts +8 -0
  315. package/dist/transformer/index.js +6 -0
  316. package/dist/transformer/llm-namer.d.ts +6 -0
  317. package/dist/transformer/llm-namer.js +59 -0
  318. package/dist/transformer/naming.d.ts +4 -0
  319. package/dist/transformer/naming.js +30 -0
  320. package/dist/transformer/operation-filter.d.ts +13 -0
  321. package/dist/transformer/operation-filter.js +52 -0
  322. package/dist/transformer/resource-builder.d.ts +12 -0
  323. package/dist/transformer/resource-builder.js +80 -0
  324. package/dist/transformer/schema-merger.d.ts +14 -0
  325. package/dist/transformer/schema-merger.js +65 -0
  326. package/dist/transformer/tool-builder.d.ts +3 -0
  327. package/dist/transformer/tool-builder.js +114 -0
  328. package/dist/types/index.d.ts +131 -0
  329. package/dist/types/index.js +1 -0
  330. package/dist/types/site.d.ts +284 -0
  331. package/dist/types/site.js +8 -0
  332. package/dist/utils/fail.d.ts +48 -0
  333. package/dist/utils/fail.js +204 -0
  334. package/dist/utils/fs.d.ts +5 -0
  335. package/dist/utils/fs.js +28 -0
  336. package/dist/utils/interactive.d.ts +6 -0
  337. package/dist/utils/interactive.js +30 -0
  338. package/dist/utils/logger.d.ts +1 -0
  339. package/dist/utils/logger.js +2 -0
  340. package/dist/utils/sanitize.d.ts +28 -0
  341. package/dist/utils/sanitize.js +44 -0
  342. package/dist/utils/watcher.d.ts +11 -0
  343. package/dist/utils/watcher.js +36 -0
  344. package/package.json +65 -0
@@ -0,0 +1,400 @@
1
+ # mcpmake CLI reference
2
+
3
+ Complete reference for every `mcpmake` command, generated from and verified
4
+ against the source. For task-oriented guides see the
5
+ [README](../README.md) and [Website MCP servers](website-servers.md).
6
+
7
+ ```
8
+ mcpmake <command> [subcommand] [arguments] [options]
9
+ ```
10
+
11
+ ## Conventions
12
+
13
+ - **Required** arguments are marked; everything else is optional.
14
+ - Defaults are shown as `(default: …)`. A flag with no default is simply unset.
15
+ - **Boolean negation:** a boolean flag whose default is **true** is disabled
16
+ with its `--no-` form (citty convention). Only two such flags exist:
17
+ `--no-dedup` (`from har`), `--no-heal` / `--no-headless` (`rescan`).
18
+ - **`ANTHROPIC_API_KEY`** is required for any AI-assisted flag: `--improve-names`
19
+ (openapi/har/url/website), `--goal` (website), `from describe`, and `rescan`
20
+ selector healing.
21
+ - Generated servers read their own env vars at runtime (always `BASE_URL`, plus
22
+ auth-derived `BEARER_TOKEN` / `BASIC_USERNAME`+`BASIC_PASSWORD` / `API_KEY`).
23
+ These are written into the project's `.env.example`, not passed on the CLI.
24
+ - **`--config <path>`:** `from openapi`, `from postman`, `from website`,
25
+ `from describe`, and `deploy` honor a `.mcpmake.yaml` file (auto-discovered from
26
+ the working directory, or set explicitly with `--config <path>` / the
27
+ `MCPMAKE_CONFIG` env var). Precedence: explicit CLI flag → config file → built-in
28
+ default. See the [README → Project config](../README.md#project-config-mcpmakeyaml).
29
+
30
+ ## Command index
31
+
32
+ | Command | Purpose |
33
+ | --- | --- |
34
+ | [`from openapi`](#mcpmake-from-openapi) | Generate from an OpenAPI/Swagger spec or provider shortcut |
35
+ | [`from har`](#mcpmake-from-har) | Generate from a HAR (browser DevTools) recording |
36
+ | [`from url`](#mcpmake-from-url) | Generate by recording a live browser session |
37
+ | [`from postman`](#mcpmake-from-postman) | Generate from a Postman Collection (v2.1) |
38
+ | [`from website`](#mcpmake-from-website) | Generate a Playwright server from a site's DOM |
39
+ | [`from describe`](#mcpmake-from-describe) | Generate from a natural-language description (AI) |
40
+ | [`merge`](#mcpmake-merge) | Merge two OpenAPI specs into one |
41
+ | [`diff`](#mcpmake-diff) | Compare tools generated from two specs |
42
+ | [`lint`](#mcpmake-lint) | Lint an OpenAPI spec for MCP issues |
43
+ | [`verify`](#mcpmake-verify) | Check a generated project still matches its spec |
44
+ | [`update`](#mcpmake-update) | Re-generate a project from a changed spec |
45
+ | [`rescan`](#mcpmake-rescan) | Re-crawl a website project, heal selectors, regenerate |
46
+ | [`bundle`](#mcpmake-bundle) | Bundle a generated project into an `.mcpb` file |
47
+ | [`publish`](#mcpmake-publish) | Generate registry manifests / publish to the MCP Registry |
48
+ | [`deploy`](#mcpmake-deploy) | Deploy a spec to the hosting backend |
49
+ | [`ci init`](#mcpmake-ci-init) | Generate a GitHub Actions drift-check workflow |
50
+
51
+ ---
52
+
53
+ ## `mcpmake from openapi`
54
+
55
+ Generate an MCP server from an OpenAPI specification.
56
+
57
+ ```
58
+ mcpmake from openapi <spec> -o <dir> [options]
59
+ ```
60
+
61
+ - `<spec>` *(required)* — path/URL to an OpenAPI spec, or a built-in provider
62
+ shortcut (e.g. `stripe`, `github`, `slack`, `notion`, `linear`, `shopify`;
63
+ run with `--help` for the current list).
64
+
65
+ | Option | Default | Description |
66
+ | --- | --- | --- |
67
+ | `-o, --output <dir>` | *(required)* | Output directory |
68
+ | `-n, --name <name>` | spec title | Server name |
69
+ | `-b, --base-url <url>` | first server in spec | Base URL override |
70
+ | `-t, --transport <mode>` | `stdio` | `stdio` or `http` |
71
+ | `-i, --include <patterns>` | | Include operations (comma-separated tags/paths/operationIds) |
72
+ | `-e, --exclude <patterns>` | | Exclude operations (comma-separated) |
73
+ | `-c, --client <mode>` | | Client compatibility mode: `cursor`, `claude`, `openai` |
74
+ | `--format <lang>` | `typescript` | `typescript` or `python` |
75
+ | `--target <platform>` | `node` | `node` or `cloudflare` (Workers) |
76
+ | `--overlay <file>` | | OpenAPI Overlay file to patch the spec before processing |
77
+ | `--no-resources` | off | Skip generating MCP resources |
78
+ | `--no-prompts` | off | Skip generating MCP prompts |
79
+ | `--dynamic-discovery` | off | Emit 4 meta-tools instead of N tools (large APIs) |
80
+ | `--static-tools <n>` | | With `--dynamic-discovery`: also register the first N tools statically |
81
+ | `--improve-names` | off | AI-generated tool names (needs `ANTHROPIC_API_KEY`) |
82
+ | `--mcpb` | off | Also generate an `.mcpb` bundle for one-click Claude Desktop install |
83
+ | `-w, --watch` | off | Watch the spec file and regenerate on change |
84
+ | `-f, --force` | off | Overwrite the output directory |
85
+ | `--dry-run` | off | Preview files without writing |
86
+
87
+ Notes: `--target cloudflare` forces `--transport http` and is incompatible with
88
+ `--format python`. `--mcpb` is ignored (with a warning) for `python`/`cloudflare`
89
+ targets. `--watch` is a no-op when a provider shortcut is used.
90
+
91
+ ## `mcpmake from har`
92
+
93
+ Generate an MCP server from a HAR (HTTP Archive) file.
94
+
95
+ ```
96
+ mcpmake from har <file> -o <dir> [options]
97
+ ```
98
+
99
+ - `<file>` *(required)* — path to a HAR file exported from browser DevTools.
100
+
101
+ | Option | Default | Description |
102
+ | --- | --- | --- |
103
+ | `-o, --output <dir>` | *(required)* | Output directory |
104
+ | `-n, --name <name>` | | Server name |
105
+ | `-d, --domain <host>` | | Only include requests to this domain (comma-separated) |
106
+ | `-t, --transport <mode>` | `stdio` | `stdio` or `http` |
107
+ | `--target <platform>` | `node` | `node` or `cloudflare` (Workers) |
108
+ | `-i, --include <patterns>` | | Include operations (comma-separated) |
109
+ | `-e, --exclude <patterns>` | | Exclude operations (comma-separated) |
110
+ | `--include-errors` | off | Include requests that returned HTTP errors |
111
+ | `--no-dedup` | dedup **on** | Disable deduplication of pagination/retry requests |
112
+ | `--interactive` | off | Review and confirm detected tools before generation |
113
+ | `--improve-names` | off | AI-generated tool names (needs `ANTHROPIC_API_KEY`) |
114
+ | `--format <lang>` | `typescript` | `typescript` or `python` |
115
+ | `-f, --force` | off | Overwrite the output directory |
116
+ | `--dry-run` | off | Preview files without writing |
117
+
118
+ Notes: deduplication is **on by default**; pass `--no-dedup` to keep every
119
+ request. `--target cloudflare` is incompatible with `--format python`.
120
+
121
+ ## `mcpmake from url`
122
+
123
+ Generate an MCP server by recording a live browser session (Playwright). Opens
124
+ a browser; you interact, then close it (or use `--headless`). Requires
125
+ `npx playwright install chromium` on first use. See
126
+ [Website MCP servers](website-servers.md) for the full workflow.
127
+
128
+ ```
129
+ mcpmake from url <url> -o <dir> [options]
130
+ ```
131
+
132
+ - `<url>` *(required)* — URL to open in the browser.
133
+
134
+ | Option | Default | Description |
135
+ | --- | --- | --- |
136
+ | `-o, --output <dir>` | *(required)* | Output directory |
137
+ | `-n, --name <name>` | hostname | Server name |
138
+ | `--timeout <seconds>` | `300` | Idle timeout before auto-closing |
139
+ | `--headless` | off | Headless / CI capture (no window to drive) |
140
+ | `--navigate <urls>` | | Same-origin URLs/paths to auto-visit in `--headless` mode (comma-separated) |
141
+ | `-t, --transport <mode>` | `stdio` | `stdio` or `http` |
142
+ | `--target <platform>` | `node` | `node` or `cloudflare` (Workers) |
143
+ | `-i, --include <patterns>` | | Include operations (comma-separated) |
144
+ | `-e, --exclude <patterns>` | | Exclude operations (comma-separated) |
145
+ | `--improve-names` | off | AI-generated tool names (needs `ANTHROPIC_API_KEY`) |
146
+ | `--interactive` | off | Review and confirm detected tools before generation |
147
+ | `-f, --force` | off | Overwrite the output directory |
148
+ | `--dry-run` | off | Preview files without writing |
149
+
150
+ ## `mcpmake from postman`
151
+
152
+ Generate an MCP server from a Postman Collection.
153
+
154
+ ```
155
+ mcpmake from postman <collection> -o <dir> [options]
156
+ ```
157
+
158
+ - `<collection>` *(required)* — path to a Postman Collection JSON file (v2.1).
159
+
160
+ | Option | Default | Description |
161
+ | --- | --- | --- |
162
+ | `-o, --output <dir>` | *(required)* | Output directory |
163
+ | `-n, --name <name>` | collection name | Server name |
164
+ | `-t, --transport <mode>` | `stdio` | `stdio` or `http` |
165
+ | `--target <platform>` | `node` | `node` or `cloudflare` (Workers) |
166
+ | `-i, --include <patterns>` | | Include operations (comma-separated) |
167
+ | `-e, --exclude <patterns>` | | Exclude operations (comma-separated) |
168
+ | `-f, --force` | off | Overwrite the output directory |
169
+ | `--dry-run` | off | Preview files without writing |
170
+
171
+ ## `mcpmake from website`
172
+
173
+ Generate a Playwright-based MCP server by analyzing a website's DOM (forms,
174
+ buttons, links → site-specific tools). Requires
175
+ `npx playwright install chromium`. See [Website MCP servers](website-servers.md).
176
+
177
+ ```
178
+ mcpmake from website <url> -o <dir> [options]
179
+ ```
180
+
181
+ - `<url>` *(required)* — URL of the website to analyze.
182
+
183
+ | Option | Default | Description |
184
+ | --- | --- | --- |
185
+ | `-o, --output <dir>` | *(required)* | Output directory |
186
+ | `-n, --name <name>` | hostname | Server name |
187
+ | `--depth <n>` | `2` | Crawl depth |
188
+ | `--max-pages <n>` | `20` | Maximum pages to crawl |
189
+ | `--timeout <seconds>` | `300` | Idle timeout during analysis |
190
+ | `--max-sessions <n>` | `10` | Max concurrent browser sessions in the generated server |
191
+ | `-t, --transport <mode>` | `stdio` | `stdio` or `http` |
192
+ | `--headless` | off | Run the analysis browser headless |
193
+ | `--hybrid` | off | HTTP fetch for API-backed forms, Playwright for HTML-only forms |
194
+ | `--goal <text>` | | LLM-driven navigation toward a goal instead of BFS (needs `ANTHROPIC_API_KEY`) |
195
+ | `--improve-names` | off | LLM-inferred semantic names (needs `ANTHROPIC_API_KEY`) |
196
+ | `-f, --force` | off | Overwrite the output directory |
197
+ | `--dry-run` | off | Preview files without writing |
198
+
199
+ Note: the `website` pipeline is `--target node` only (a Worker can't run a
200
+ browser). Keep the generated project fresh with [`rescan`](#mcpmake-rescan).
201
+
202
+ ## `mcpmake from describe`
203
+
204
+ Generate an MCP server from a natural-language description (Claude synthesizes
205
+ an OpenAPI spec, then runs the normal pipeline). Requires `ANTHROPIC_API_KEY`.
206
+
207
+ ```
208
+ mcpmake from describe "<description>" -o <dir> [options]
209
+ ```
210
+
211
+ - `<description>` *(required)* — e.g. `"manage GitHub issues and pull requests"`.
212
+
213
+ | Option | Default | Description |
214
+ | --- | --- | --- |
215
+ | `-o, --output <dir>` | *(required)* | Output directory |
216
+ | `-n, --name <name>` | | Server name |
217
+ | `-b, --base-url <url>` | | Base URL for the API (falls back to `https://api.example.com` if unset) |
218
+ | `-m, --model <model>` | `claude-sonnet-4-20250514` | Claude model to use |
219
+ | `--save-spec <path>` | | Save the generated OpenAPI spec to this path |
220
+ | `-t, --transport <mode>` | `stdio` | `stdio` or `http` |
221
+ | `--target <platform>` | `node` | `node` or `cloudflare` (Workers) |
222
+ | `-i, --include <patterns>` | | Include operations (comma-separated) |
223
+ | `-e, --exclude <patterns>` | | Exclude operations (comma-separated) |
224
+ | `-f, --force` | off | Overwrite the output directory |
225
+ | `--dry-run` | off | Preview files without writing |
226
+
227
+ ## `mcpmake merge`
228
+
229
+ Merge two OpenAPI specs into one.
230
+
231
+ ```
232
+ mcpmake merge <spec1> <spec2> [-o <file>]
233
+ ```
234
+
235
+ - `<spec1>` *(required)* — base spec (its `info`/`servers` are kept).
236
+ - `<spec2>` *(required)* — spec to merge in.
237
+
238
+ | Option | Default | Description |
239
+ | --- | --- | --- |
240
+ | `-o, --output <file>` | stdout | Output file path |
241
+
242
+ ## `mcpmake diff`
243
+
244
+ Compare the MCP tools generated from two OpenAPI specs (added/removed/changed).
245
+
246
+ ```
247
+ mcpmake diff <oldSpec> <newSpec> [--format <fmt>]
248
+ ```
249
+
250
+ - `<oldSpec>`, `<newSpec>` *(required)* — paths/URLs to the old and new specs.
251
+
252
+ | Option | Default | Description |
253
+ | --- | --- | --- |
254
+ | `--format <fmt>` | `text` | `text` or `json` |
255
+
256
+ ## `mcpmake lint`
257
+
258
+ Lint an OpenAPI spec for MCP-compatibility issues (tool-name length, descriptions,
259
+ parameter counts, duplicates, etc.). Exits non-zero on error-level findings.
260
+
261
+ ```
262
+ mcpmake lint <spec> [options]
263
+ ```
264
+
265
+ - `<spec>` *(required)* — path/URL to an OpenAPI spec.
266
+
267
+ | Option | Default | Description |
268
+ | --- | --- | --- |
269
+ | `--format <fmt>` | `text` | `text` or `json` |
270
+ | `--level <level>` | `info` | Minimum level to show: `info`, `warn`, or `error` |
271
+
272
+ ## `mcpmake verify`
273
+
274
+ Check that a generated project still matches its source spec (CI-friendly).
275
+
276
+ ```
277
+ mcpmake verify <spec> -p <dir>
278
+ ```
279
+
280
+ - `<spec>` *(required)* — path to the OpenAPI spec.
281
+
282
+ | Option | Default | Description |
283
+ | --- | --- | --- |
284
+ | `-p, --project <dir>` | *(required)* | Generated project directory |
285
+
286
+ ## `mcpmake update`
287
+
288
+ Re-generate a project from an updated spec, showing what changed.
289
+
290
+ ```
291
+ mcpmake update <spec> -p <dir>
292
+ ```
293
+
294
+ - `<spec>` *(required)* — path to the updated OpenAPI spec.
295
+
296
+ | Option | Default | Description |
297
+ | --- | --- | --- |
298
+ | `-p, --project <dir>` | *(required)* | Existing generated project |
299
+
300
+ ## `mcpmake rescan`
301
+
302
+ The website counterpart to `update`: re-crawl a `from website` project's target,
303
+ diff against the embedded snapshot, heal broken selectors, and optionally
304
+ regenerate. See [Website MCP servers](website-servers.md).
305
+
306
+ ```
307
+ mcpmake rescan <project> [options]
308
+ ```
309
+
310
+ - `<project>` *(required)* — a generated `from website` project (must contain
311
+ `src/site-descriptor.json`; reads `mcpmake.site.json` for regeneration settings).
312
+
313
+ | Option | Default | Description |
314
+ | --- | --- | --- |
315
+ | `--url <url>` | from snapshot | Override the base URL to rescan |
316
+ | `--depth <n>` | from snapshot | Crawl depth |
317
+ | `--max-pages <n>` | snapshot pages + headroom | Maximum pages to crawl |
318
+ | `--no-heal` | heal **on** | Disable LLM selector healing (healing needs `ANTHROPIC_API_KEY`) |
319
+ | `--no-headless` | headless **on** | Run the crawl/heal browser with a visible window |
320
+ | `--write` | off | Regenerate the project in place from the new snapshot |
321
+ | `--format <fmt>` | `text` | `text` or `json` |
322
+
323
+ ## `mcpmake bundle`
324
+
325
+ Bundle a generated MCP server project into an `.mcpb` file (one-click Claude
326
+ Desktop install). Runs `npm install --omit=dev` + `npm run build` first unless
327
+ `--skip-build` is set.
328
+
329
+ ```
330
+ mcpmake bundle <directory> [options]
331
+ ```
332
+
333
+ - `<directory>` *(required)* — a generated MCP server project (must have a `package.json`).
334
+
335
+ | Option | Default | Description |
336
+ | --- | --- | --- |
337
+ | `-o, --output <file>` | | Output path for the `.mcpb` file |
338
+ | `--skip-build` | off | Skip `npm install` / build (use if already built) |
339
+
340
+ ## `mcpmake publish`
341
+
342
+ Generate registry manifests, or publish to the official MCP Registry.
343
+
344
+ ```
345
+ mcpmake publish <directory> [options]
346
+ ```
347
+
348
+ - `<directory>` *(required)* — a generated MCP server project.
349
+
350
+ | Option | Default | Description |
351
+ | --- | --- | --- |
352
+ | `-r, --registry <name>` | smithery + glama | Target registry: `official`, `smithery`, or `glama` |
353
+ | `-n, --name <name>` | derived from git remote | `official`: registry name (e.g. `io.github.you/my-server`) |
354
+ | `--remote-url <url>` | | `official`: hosted endpoint to advertise as a remote (streamable-http) |
355
+ | `--push` | off | `official`: run `mcp-publisher publish` after generating `server.json` |
356
+
357
+ Notes: with no `--registry`, both `smithery.yaml` and `glama.json` are written.
358
+ The `official` flow writes a schema-conformant `server.json`, sets `mcpName` in
359
+ `package.json`, and prints the exact `npm publish` + `mcp-publisher login/publish`
360
+ steps. `--push` requires the external `mcp-publisher` CLI on `PATH`, a prior
361
+ `mcp-publisher login github`, and an `npm publish` first.
362
+
363
+ ## `mcpmake deploy`
364
+
365
+ Deploy a spec to the hosting backend and get a running MCP server URL.
366
+
367
+ ```
368
+ mcpmake deploy <spec> [options]
369
+ ```
370
+
371
+ - `<spec>` *(required)* — OpenAPI spec or HAR file (≤ 5 MB; `.yaml`/`.yml`/`.json`/`.har`).
372
+
373
+ | Option | Default | Description |
374
+ | --- | --- | --- |
375
+ | `-n, --name <name>` | derived from spec | Server name |
376
+ | `-s, --server <url>` | `http://localhost:3001` | Cloud backend URL |
377
+ | `-t, --token <token>` | `$MCPMAKE_ADMIN_TOKEN` | Admin token for gated backends |
378
+
379
+ The admin token falls back to the `MCPMAKE_ADMIN_TOKEN` environment variable when
380
+ `--token` is omitted, and is sent as an `Authorization: Bearer` header.
381
+
382
+ ## `mcpmake ci init`
383
+
384
+ Generate a GitHub Actions workflow (`.github/workflows/mcpmake.yaml`) that
385
+ regenerates and verifies the server when the spec changes, failing CI on drift.
386
+
387
+ ```
388
+ mcpmake ci init <spec> [options]
389
+ ```
390
+
391
+ - `<spec>` *(required)* — path to the API spec, relative to the repo root.
392
+
393
+ | Option | Default | Description |
394
+ | --- | --- | --- |
395
+ | `-o, --output <dir>` | `./mcp-server` | Generated server directory |
396
+ | `-s, --source <adapter>` | `openapi` | Source adapter: `openapi`, `har`, or `postman` |
397
+ | `-n, --name <name>` | | Server name passed to generation |
398
+ | `-t, --transport <mode>` | `stdio` | `stdio` or `http` |
399
+ | `--mcpmake-version <ver>` | `latest` | mcpmake version/tag to pin in CI (e.g. `latest`, `0.1.0`) |
400
+ | `-f, --force` | off | Overwrite an existing workflow file |
@@ -0,0 +1,78 @@
1
+ # MCP 2026-07-28 migration status
2
+
3
+ The MCP spec revision **2026-07-28** is a **release candidate** (final publishes
4
+ July 28, 2026). It is the largest revision since launch: a stateless core, new
5
+ routing headers, a `server/discover` preflight, a reshaped Tasks extension, and
6
+ authorization hardening.
7
+
8
+ > **Two facts that bound this work** (verified during implementation):
9
+ > 1. The RC is **explicitly not final** — "Changes may be introduced between the
10
+ > RC and the final release." Every speculative wire shape below is marked
11
+ > `VERIFY` in the generated code.
12
+ > 2. The TypeScript SDK is still at protocol **`2025-11-25`** (`@modelcontextprotocol/sdk`
13
+ > resolves `^1.12.0` → 1.29.0; `LATEST_PROTOCOL_VERSION = "2025-11-25"`). It
14
+ > does **not** dispatch `server/discover`, the new headers, or the reshaped
15
+ > Tasks extension, and **still requires the `initialize` handshake**. So the
16
+ > handshake-removal half is **SDK-gated** — it lands when we bump the pin to
17
+ > the post-RC SDK.
18
+
19
+ Primary sources: the official RC post
20
+ (`blog.modelcontextprotocol.io/posts/2026-07-28-release-candidate/`) and the
21
+ spec repo SEPs. The versioning page (`modelcontextprotocol.io/specification/versioning`)
22
+ still lists **2025-11-25** as *current*.
23
+
24
+ ## Verified change set (corrects earlier secondary-source notes)
25
+
26
+ | Change | SEP | Status here |
27
+ | ------ | --- | ----------- |
28
+ | `Mcp-Session-Id` + protocol session removed (stateless) | SEP-2567 | ✅ Shipped (stateless default) |
29
+ | `initialize`/`initialized` removed; version/capabilities in per-request `_meta` | SEP-2575 | ⏳ SDK-gated |
30
+ | `server/discover` preflight | SEP-2575 | ✅ Shipped (hand-rolled) |
31
+ | `Mcp-Method` **and** `Mcp-Name` routing headers | SEP-2243 | ✅ Logged + forwarded |
32
+ | `MCP-Protocol-Version: 2026-07-28` header | — | ✅ Advertised in discover; ⏳ enforcement SDK-gated |
33
+ | Tasks extension: `tasks/get`/`update`/`cancel`; **no `tasks/list`**; tool returns a handle | — | ✅ Shipped (hand-rolled) |
34
+ | OAuth: `iss` validation, `application_type` in DCR, issuer binding, `.well-known` discovery | SEP-2468/837/2352/2351 | ✅ RFC 8414 `.well-known` route; rest mostly client-side |
35
+ | ~~OAuth DCR → CIMD~~ | — | ❌ **Does not exist** — secondary-source error. DCR is retained. |
36
+
37
+ Deprecated in the RC (12-month grace): **Roots, Sampling, MCP Logging**.
38
+ mcpmake's generated servers use **none** of these (logging is structured JSON
39
+ to stderr), so there is nothing to remove.
40
+
41
+ ## What shipped (generated HTTP servers)
42
+
43
+ All additive and flag-guarded so current SDK-1.12+ clients keep working.
44
+ Verified by emitting an HTTP+OAuth+async project and running `tsc --noEmit` +
45
+ runtime smoke against the real SDK (1.29).
46
+
47
+ - **Stateless transport by default** — per-request `StreamableHTTPServerTransport({ sessionIdGenerator: undefined })` with a **fresh `McpServer` per request** (a shared server connected to many transports races on its internal transport reference). Set **`MCP_STATEFUL=true`** to keep session mode (one shared server + transport). `initialize` round-trips in both modes.
48
+ - **`server/discover`** — hand-rolled: `POST /mcp` bodies are peeked; a `server/discover` JSON-RPC request is answered directly (capabilities: tool count, declared extensions, `protocolRevision`, `cacheTtlSeconds`) without touching the SDK transport. Body is then replayed to the transport via its `parsedBody` argument.
49
+ - **`Mcp-Method` / `Mcp-Name`** — logged for observability; never rejected.
50
+ - **Tasks extension** — `tasks/get`/`tasks/update`/`tasks/cancel` JSON-RPC intercepts backed by the existing task manager; `tasks/list` returns method-not-found; `isAsync` tools answer `tools/call` with a `{ task: { taskId, status } }` handle and run the work in the background. REST `/tasks/*` endpoints retained during the grace period.
51
+ - **`.well-known/oauth-authorization-server`** (RFC 8414) — public GET route when the server has OAuth; reuses `getAuthServerMetadata`. (No CIMD — that was a research error.)
52
+
53
+ ## What shipped (mcpmake Cloud)
54
+
55
+ The backend was already stateless: one container per tenant, the proxy forwards
56
+ all headers verbatim except hop-by-hop. Regression tests now assert
57
+ `Mcp-Method`/`Mcp-Name`/`Mcp-Session-Id`/`MCP-Protocol-Version` pass through to
58
+ the container unchanged and that `GET /mcp` proxies. No backend code change was
59
+ needed; see `deploy/Caddyfile.example` for the round-robin payoff note.
60
+
61
+ ## SDK-gated follow-ups (do when the post-RC SDK ships)
62
+
63
+ 1. Bump the generated `@modelcontextprotocol/sdk` pin to the version that
64
+ implements 2026-07-28, then remove the in-template `server/discover`/Tasks
65
+ hand-rolls in favor of native SDK dispatch where available.
66
+ 2. With that SDK: `initialize`/`initialized` removal + per-request `_meta`
67
+ (version/clientInfo/capabilities) become real; enforce/advertise
68
+ `MCP-Protocol-Version: 2026-07-28`.
69
+ 3. Re-verify every `VERIFY`-marked wire shape (`server/discover` result fields,
70
+ Tasks envelopes, the `isAsync` task-handle shape) against the **final** spec
71
+ once published, and align field names.
72
+
73
+ ## VERIFY checklist (re-confirm before the final spec)
74
+
75
+ - [ ] `server/discover` result fields: `server`, `protocolRevision`, `capabilities`, `extensions`, `cacheTtlSeconds`.
76
+ - [ ] `Mcp-Method` / `Mcp-Name` exact semantics (we only log them).
77
+ - [ ] Tasks wire: `tasks/get`/`update`/`cancel` params + result fields; the `tools/call` task-handle envelope.
78
+ - [ ] OAuth `application_type` / `iss` / issuer-binding handling if generated servers act as the authorization server.
@@ -0,0 +1,94 @@
1
+ # Migrate off Stainless to an MCP server you own
2
+
3
+ Stainless was acquired by Anthropic (~May 2026) and its hosted MCP generator is
4
+ winding down. If you have an MCP server generated/hosted by Stainless, this
5
+ guide moves you to an **mcpmake** server you fully own: editable code you can run
6
+ anywhere, kept in sync with your spec by CI, with self-hosting and your existing
7
+ inputs preserved.
8
+
9
+ ## What you keep and gain
10
+
11
+ | | Stainless (hosted generator) | mcpmake |
12
+ | --- | --- | --- |
13
+ | Generated code | Managed for you | **Yours** — exported, editable, committed to your repo |
14
+ | Hosting | Their platform | Self-host (Docker), your VPS, or mcpmake Cloud |
15
+ | Input | OpenAPI spec | OpenAPI **+** HAR / Postman / live website / plain-English describe |
16
+ | Spec sync | Auto-regenerate on spec change | `mcpmake ci init` — same workflow, in your CI |
17
+ | Lock-in | Platform-managed | None — plain TypeScript (or Python) you control |
18
+
19
+ ## Migrate in five steps
20
+
21
+ ### 1. Find your source of truth
22
+
23
+ Use the same OpenAPI spec Stainless generated from (often `openapi.yaml` /
24
+ `openapi.json` in your API repo, or your provider's published spec). No spec?
25
+ See [No spec?](#no-spec) below.
26
+
27
+ ### 2. Generate a server you own
28
+
29
+ ```bash
30
+ # HTTP server (for remote/hosted use); drop -t http for stdio/local
31
+ mcpmake from openapi ./openapi.yaml -o ./my-mcp-server -t http
32
+ ```
33
+
34
+ The output is a complete, self-contained project: tools, auth wiring, schemas,
35
+ tests, a Dockerfile, and a README. Commit it — it's yours to edit.
36
+
37
+ > Large API (50+ operations)? Add `--dynamic-discovery` so the agent loads tool
38
+ > schemas on demand instead of paying upfront token cost for every tool.
39
+
40
+ ### 3. Review and own it
41
+
42
+ Open `my-mcp-server/`. Each tool is a readable file under `src/tools/`; auth is
43
+ in `src/auth.ts`; the HTTP/transport entry is `src/index.ts`. Edit anything —
44
+ there's no hidden runtime.
45
+
46
+ ```bash
47
+ cd my-mcp-server && npm install && npm run build && npm test
48
+ ```
49
+
50
+ ### 4. Keep it in sync with the spec (the Stainless habit)
51
+
52
+ ```bash
53
+ mcpmake ci init ./openapi.yaml -o ./my-mcp-server
54
+ ```
55
+
56
+ This writes `.github/workflows/mcpmake.yaml`, which on every spec change
57
+ regenerates the server, runs `mcpmake verify`, and **fails CI if the committed
58
+ server has drifted from the spec** — the auto-regenerate-on-spec-change
59
+ guarantee, now in your own repo.
60
+
61
+ ### 5. Run it
62
+
63
+ - **Self-host:** the generated `Dockerfile` builds a hardened, non-root,
64
+ read-only-filesystem container. Set the bearer token your client sends as
65
+ `MCP_AUTH_TOKEN` and run it behind your reverse proxy.
66
+ - **mcpmake Cloud:** `mcpmake deploy ./openapi.yaml` (or use the dashboard) to
67
+ build + host it with auth, metering, and quotas.
68
+ - **Connect:** point Claude/Cursor at `https://<host>/mcp` with
69
+ `Authorization: Bearer <token>`.
70
+
71
+ ## No spec?
72
+
73
+ mcpmake doesn't require an OpenAPI spec — most APIs don't have one:
74
+
75
+ ```bash
76
+ mcpmake from har ./session.har -o ./my-mcp-server # a browser/devtools recording
77
+ mcpmake from postman ./collection.json -o ./my-mcp-server # a Postman collection
78
+ mcpmake from website https://app.example.com -o ./my-mcp-server # a live site
79
+ mcpmake from describe "manage GitHub issues" -o ./my-mcp-server # plain English
80
+ ```
81
+
82
+ ## FAQ
83
+
84
+ **Do I have to change my clients?** No — it still speaks MCP over the same
85
+ `/mcp` endpoint. Update the URL/token to point at your new server.
86
+
87
+ **Is there a one-click importer?** Not yet. In practice migration is: point
88
+ mcpmake at the same spec, generate, commit, wire up `ci init`. If you only have
89
+ a Stainless config and no spec, export the underlying OpenAPI document and use
90
+ step 2.
91
+
92
+ **TypeScript or Python?** Both — add `--format python` for a Python server.
93
+
94
+ **Questions:** support@mcpmake.dev