github-to-mcp-monorepo 1.0.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 (388) hide show
  1. package/.env.example +8 -0
  2. package/.github/CODEOWNERS +6 -0
  3. package/.husky/pre-commit +1 -0
  4. package/.nvmrc +1 -0
  5. package/.prettierignore +5 -0
  6. package/.prettierrc +7 -0
  7. package/.vscode/settings.json +4 -0
  8. package/ARCHITECTURE.md +1429 -0
  9. package/CHANGELOG.md +167 -0
  10. package/CONTRIBUTING.md +327 -0
  11. package/LICENSE +201 -0
  12. package/README.md +1028 -0
  13. package/SECURITY.md +248 -0
  14. package/VISUAL_GUIDE.md +437 -0
  15. package/apps/vscode/IMPLEMENTATION.md +480 -0
  16. package/apps/vscode/README.md +248 -0
  17. package/apps/vscode/package.json +381 -0
  18. package/apps/vscode/resources/icon.png +0 -0
  19. package/apps/vscode/resources/icon.svg +5 -0
  20. package/apps/vscode/src/commands/browseRegistry.ts +211 -0
  21. package/apps/vscode/src/commands/configureClaudeDesktop.ts +332 -0
  22. package/apps/vscode/src/commands/convert.ts +82 -0
  23. package/apps/vscode/src/commands/convertCurrentRepo.ts +109 -0
  24. package/apps/vscode/src/commands/convertFromUrl.ts +138 -0
  25. package/apps/vscode/src/commands/index.ts +121 -0
  26. package/apps/vscode/src/commands/validate.ts +197 -0
  27. package/apps/vscode/src/extension.ts +464 -0
  28. package/apps/vscode/src/global.d.ts +36 -0
  29. package/apps/vscode/src/test/extension.test.ts +73 -0
  30. package/apps/vscode/src/utils/file-generator.ts +529 -0
  31. package/apps/vscode/src/utils/github-api.ts +335 -0
  32. package/apps/vscode/src/utils/index.ts +29 -0
  33. package/apps/vscode/src/utils/mcp-config.ts +334 -0
  34. package/apps/vscode/src/utils/storage.ts +87 -0
  35. package/apps/vscode/src/views/McpServersTreeView.ts +160 -0
  36. package/apps/vscode/src/views/OutputChannelView.ts +195 -0
  37. package/apps/vscode/src/views/StatusBarItem.ts +251 -0
  38. package/apps/vscode/src/views/ToolsExplorerView.ts +314 -0
  39. package/apps/vscode/src/views/historyProvider.ts +75 -0
  40. package/apps/vscode/src/views/index.ts +12 -0
  41. package/apps/vscode/src/views/resultsPanel.ts +330 -0
  42. package/apps/vscode/src/webviews/ConversionPanel.ts +350 -0
  43. package/apps/vscode/src/webviews/ToolDetailsPanel.ts +448 -0
  44. package/apps/vscode/src/webviews/index.ts +9 -0
  45. package/apps/vscode/src/webviews/webview-ui/styles.ts +492 -0
  46. package/apps/vscode/tsconfig.json +20 -0
  47. package/apps/web/PLAYGROUND_GUIDE.md +499 -0
  48. package/apps/web/README.md +505 -0
  49. package/apps/web/app/api/convert/route.ts +100 -0
  50. package/apps/web/app/api/convert/stream/route.ts +198 -0
  51. package/apps/web/app/api/deploy/route.ts +157 -0
  52. package/apps/web/app/api/edge/route.ts +308 -0
  53. package/apps/web/app/api/export-docker/route.ts +284 -0
  54. package/apps/web/app/api/generate-openapi/route.ts +119 -0
  55. package/apps/web/app/api/mcp/[serverId]/route.ts +263 -0
  56. package/apps/web/app/api/playground/connect/route.ts +143 -0
  57. package/apps/web/app/api/playground/disconnect/route.ts +78 -0
  58. package/apps/web/app/api/playground/execute/route.ts +135 -0
  59. package/apps/web/app/api/playground/sessions/route.ts +103 -0
  60. package/apps/web/app/api/playground/tools/route.ts +117 -0
  61. package/apps/web/app/api/playground/v2/connect/route.ts +96 -0
  62. package/apps/web/app/api/playground/v2/disconnect/route.ts +88 -0
  63. package/apps/web/app/api/playground/v2/health/route.ts +80 -0
  64. package/apps/web/app/api/playground/v2/prompts/route.ts +160 -0
  65. package/apps/web/app/api/playground/v2/resources/route.ts +159 -0
  66. package/apps/web/app/api/playground/v2/sessions/route.ts +184 -0
  67. package/apps/web/app/api/playground/v2/tools/route.ts +167 -0
  68. package/apps/web/app/api/stream/route.ts +232 -0
  69. package/apps/web/app/batch/BatchConvertClient.tsx +190 -0
  70. package/apps/web/app/batch/page.tsx +37 -0
  71. package/apps/web/app/convert/page.tsx +269 -0
  72. package/apps/web/app/dashboard/page.tsx +380 -0
  73. package/apps/web/app/globals.css +622 -0
  74. package/apps/web/app/layout.tsx +120 -0
  75. package/apps/web/app/manifest.ts +31 -0
  76. package/apps/web/app/opengraph-image.tsx +112 -0
  77. package/apps/web/app/page.old.tsx +924 -0
  78. package/apps/web/app/page.tsx +77 -0
  79. package/apps/web/app/playground/page.tsx +306 -0
  80. package/apps/web/app/playground/v2/error.tsx +163 -0
  81. package/apps/web/app/playground/v2/layout.tsx +58 -0
  82. package/apps/web/app/playground/v2/loading.tsx +152 -0
  83. package/apps/web/app/playground/v2/page.tsx +644 -0
  84. package/apps/web/app/playground/v2/providers.tsx +214 -0
  85. package/apps/web/app/playground/v2/use-shortcuts.ts +209 -0
  86. package/apps/web/app/playground/v2/use-url-state.ts +296 -0
  87. package/apps/web/app/providers.tsx +22 -0
  88. package/apps/web/app/sitemap.ts +32 -0
  89. package/apps/web/app/twitter-image.tsx +112 -0
  90. package/apps/web/components/BranchSelector.tsx +401 -0
  91. package/apps/web/components/ClaudeConfigExport.tsx +226 -0
  92. package/apps/web/components/Features.tsx +84 -0
  93. package/apps/web/components/Footer.tsx +119 -0
  94. package/apps/web/components/GenerationProgress.tsx +248 -0
  95. package/apps/web/components/GithubUrlInput.tsx +483 -0
  96. package/apps/web/components/Header.tsx +175 -0
  97. package/apps/web/components/Hero.tsx +117 -0
  98. package/apps/web/components/HowItWorks.tsx +119 -0
  99. package/apps/web/components/InstallBanner.tsx +158 -0
  100. package/apps/web/components/Logo.tsx +116 -0
  101. package/apps/web/components/ParticleBackground.tsx +105 -0
  102. package/apps/web/components/Playground.tsx +472 -0
  103. package/apps/web/components/PlaygroundToolTester.tsx +410 -0
  104. package/apps/web/components/ProductCards.tsx +179 -0
  105. package/apps/web/components/SplitView.tsx +194 -0
  106. package/apps/web/components/ToolFilter.tsx +260 -0
  107. package/apps/web/components/ToolList.tsx +325 -0
  108. package/apps/web/components/batch/BatchConvert.tsx +785 -0
  109. package/apps/web/components/batch/index.ts +7 -0
  110. package/apps/web/components/convert/ConfigTabs.tsx +230 -0
  111. package/apps/web/components/convert/ConversionResult.tsx +482 -0
  112. package/apps/web/components/convert/InlinePlayground.tsx +259 -0
  113. package/apps/web/components/convert/LoadingSteps.tsx +311 -0
  114. package/apps/web/components/convert/OneClickInstall.tsx +224 -0
  115. package/apps/web/components/convert/ToolCard.tsx +189 -0
  116. package/apps/web/components/convert/TryInPlayground.tsx +242 -0
  117. package/apps/web/components/convert/index.ts +12 -0
  118. package/apps/web/components/deploy/DeployButton.tsx +369 -0
  119. package/apps/web/components/deploy/index.ts +7 -0
  120. package/apps/web/components/docker/DockerExport.tsx +690 -0
  121. package/apps/web/components/docker/index.ts +7 -0
  122. package/apps/web/components/install/OneClickInstall.tsx +676 -0
  123. package/apps/web/components/install/index.ts +7 -0
  124. package/apps/web/components/playground/CapabilityTabs.tsx +150 -0
  125. package/apps/web/components/playground/ConnectionStatusV2.tsx +322 -0
  126. package/apps/web/components/playground/EmptyStates.tsx +305 -0
  127. package/apps/web/components/playground/ExecutionLog.tsx +260 -0
  128. package/apps/web/components/playground/ExecutionLogV2.tsx +378 -0
  129. package/apps/web/components/playground/JsonViewer.tsx +388 -0
  130. package/apps/web/components/playground/PlaygroundLayout.tsx +244 -0
  131. package/apps/web/components/playground/PromptsPanel.tsx +385 -0
  132. package/apps/web/components/playground/ResourcesPanel.tsx +378 -0
  133. package/apps/web/components/playground/SchemaForm.tsx +477 -0
  134. package/apps/web/components/playground/ServerStatus.tsx +151 -0
  135. package/apps/web/components/playground/ShareButton.tsx +239 -0
  136. package/apps/web/components/playground/ToolsPanel.tsx +309 -0
  137. package/apps/web/components/playground/TransportConfigurator.tsx +563 -0
  138. package/apps/web/components/playground/index.ts +74 -0
  139. package/apps/web/components/playground/types.ts +202 -0
  140. package/apps/web/components/streaming/StreamingProgress.tsx +441 -0
  141. package/apps/web/components/streaming/index.ts +7 -0
  142. package/apps/web/components/ui/badge.tsx +42 -0
  143. package/apps/web/components/ui/button.tsx +88 -0
  144. package/apps/web/components/ui/card.tsx +75 -0
  145. package/apps/web/components/ui/code-block.tsx +122 -0
  146. package/apps/web/components/ui/index.ts +12 -0
  147. package/apps/web/components/ui/input.tsx +55 -0
  148. package/apps/web/components/ui/tabs.tsx +61 -0
  149. package/apps/web/hooks/index.ts +85 -0
  150. package/apps/web/hooks/types.ts +1173 -0
  151. package/apps/web/hooks/use-conversion.ts +133 -0
  152. package/apps/web/hooks/use-execution-history.ts +376 -0
  153. package/apps/web/hooks/use-generation-progress.ts +147 -0
  154. package/apps/web/hooks/use-local-storage.ts +88 -0
  155. package/apps/web/hooks/use-mcp-client.ts +623 -0
  156. package/apps/web/hooks/use-mcp-connection.ts +500 -0
  157. package/apps/web/hooks/use-mcp-execution.ts +282 -0
  158. package/apps/web/hooks/use-mcp-prompts.ts +441 -0
  159. package/apps/web/hooks/use-mcp-resources.ts +430 -0
  160. package/apps/web/hooks/use-mcp-tools.ts +540 -0
  161. package/apps/web/hooks/use-playground-store.ts +299 -0
  162. package/apps/web/hooks/use-playground.ts +184 -0
  163. package/apps/web/hooks/use-streaming-conversion.ts +227 -0
  164. package/apps/web/hooks/useBatchConversion.ts +271 -0
  165. package/apps/web/hooks/useDockerConfig.ts +161 -0
  166. package/apps/web/hooks/usePlatformDetection.ts +80 -0
  167. package/apps/web/hooks/useStreaming.ts +199 -0
  168. package/apps/web/lib/api/errors.ts +386 -0
  169. package/apps/web/lib/api/index.ts +137 -0
  170. package/apps/web/lib/api/logger.ts +187 -0
  171. package/apps/web/lib/api/middleware.ts +364 -0
  172. package/apps/web/lib/api/openapi.ts +977 -0
  173. package/apps/web/lib/api/session-manager.ts +594 -0
  174. package/apps/web/lib/api/types.ts +433 -0
  175. package/apps/web/lib/api/validation.ts +523 -0
  176. package/apps/web/lib/constants.ts +114 -0
  177. package/apps/web/lib/mcp/client.ts +1137 -0
  178. package/apps/web/lib/mcp/events.ts +651 -0
  179. package/apps/web/lib/mcp/index.ts +347 -0
  180. package/apps/web/lib/mcp/logger.ts +428 -0
  181. package/apps/web/lib/mcp/metrics.ts +703 -0
  182. package/apps/web/lib/mcp/retry.ts +616 -0
  183. package/apps/web/lib/mcp/session-manager.ts +779 -0
  184. package/apps/web/lib/mcp/transports.ts +988 -0
  185. package/apps/web/lib/mcp/types.ts +594 -0
  186. package/apps/web/lib/mcp-client-enhanced.ts +871 -0
  187. package/apps/web/lib/mcp-client.ts +778 -0
  188. package/apps/web/lib/mcp-errors.ts +489 -0
  189. package/apps/web/lib/mcp-sandbox.ts +593 -0
  190. package/apps/web/lib/mcp-testing.ts +428 -0
  191. package/apps/web/lib/mcp-types.ts +448 -0
  192. package/apps/web/lib/playground-store.tsx +1147 -0
  193. package/apps/web/lib/utils.ts +439 -0
  194. package/apps/web/next-env.d.ts +5 -0
  195. package/apps/web/next.config.js +23 -0
  196. package/apps/web/package.json +55 -0
  197. package/apps/web/postcss.config.js +6 -0
  198. package/apps/web/public/.well-known/ai-plugin.json +17 -0
  199. package/apps/web/public/logo.svg +6 -0
  200. package/apps/web/public/robots.txt +22 -0
  201. package/apps/web/public/schema.json +27 -0
  202. package/apps/web/tailwind.config.js +26 -0
  203. package/apps/web/tailwind.config.ts +123 -0
  204. package/apps/web/tsconfig.json +20 -0
  205. package/apps/web/types/deploy.ts +139 -0
  206. package/apps/web/types/index.ts +247 -0
  207. package/apps/web/vercel.json +39 -0
  208. package/eslint.config.mjs +23 -0
  209. package/llms.txt +102 -0
  210. package/mkdocs/docs/api/core.md +318 -0
  211. package/mkdocs/docs/api/index.md +128 -0
  212. package/mkdocs/docs/api/mcp-server.md +301 -0
  213. package/mkdocs/docs/api/openapi-parser.md +254 -0
  214. package/mkdocs/docs/assets/logo.svg +7 -0
  215. package/mkdocs/docs/changelog.md +118 -0
  216. package/mkdocs/docs/cli/generate.md +148 -0
  217. package/mkdocs/docs/cli/index.md +52 -0
  218. package/mkdocs/docs/cli/inspect.md +164 -0
  219. package/mkdocs/docs/cli/serve.md +136 -0
  220. package/mkdocs/docs/concepts/classification.md +254 -0
  221. package/mkdocs/docs/concepts/how-it-works.md +299 -0
  222. package/mkdocs/docs/concepts/index.md +77 -0
  223. package/mkdocs/docs/concepts/mcp-protocol.md +362 -0
  224. package/mkdocs/docs/concepts/tool-types.md +382 -0
  225. package/mkdocs/docs/contributing/architecture.md +262 -0
  226. package/mkdocs/docs/contributing/development.md +245 -0
  227. package/mkdocs/docs/contributing/index.md +73 -0
  228. package/mkdocs/docs/contributing/testing.md +320 -0
  229. package/mkdocs/docs/getting-started/configuration.md +235 -0
  230. package/mkdocs/docs/getting-started/index.md +54 -0
  231. package/mkdocs/docs/getting-started/installation.md +145 -0
  232. package/mkdocs/docs/getting-started/quickstart.md +160 -0
  233. package/mkdocs/docs/guides/batch.md +375 -0
  234. package/mkdocs/docs/guides/claude-desktop.md +227 -0
  235. package/mkdocs/docs/guides/cursor.md +188 -0
  236. package/mkdocs/docs/guides/custom-tools.md +367 -0
  237. package/mkdocs/docs/guides/index.md +78 -0
  238. package/mkdocs/docs/guides/private-repos.md +221 -0
  239. package/mkdocs/docs/guides/vscode.md +247 -0
  240. package/mkdocs/docs/index.md +175 -0
  241. package/mkdocs/docs/reference/config.md +223 -0
  242. package/mkdocs/docs/reference/env.md +192 -0
  243. package/mkdocs/docs/reference/index.md +102 -0
  244. package/mkdocs/docs/reference/tools.md +309 -0
  245. package/mkdocs/docs/stylesheets/extra.css +231 -0
  246. package/mkdocs/mkdocs.yml +204 -0
  247. package/mkdocs/overrides/.gitkeep +1 -0
  248. package/mkdocs/overrides/main.html +7 -0
  249. package/mkdocs/python-deps.txt +7 -0
  250. package/mkdocs/vercel.json +11 -0
  251. package/package.json +63 -0
  252. package/packages/core/package.json +61 -0
  253. package/packages/core/src/__tests__/bitbucket-client.test.ts +366 -0
  254. package/packages/core/src/__tests__/cli.test.ts +235 -0
  255. package/packages/core/src/__tests__/code-extractor.test.ts +378 -0
  256. package/packages/core/src/__tests__/docker-generator.test.ts +255 -0
  257. package/packages/core/src/__tests__/github-client.test.ts +390 -0
  258. package/packages/core/src/__tests__/gitlab-client.test.ts +319 -0
  259. package/packages/core/src/__tests__/go-extractor.test.ts +351 -0
  260. package/packages/core/src/__tests__/graphql-extractor.test.ts +330 -0
  261. package/packages/core/src/__tests__/java-extractor.test.ts +497 -0
  262. package/packages/core/src/__tests__/plugins.test.ts +467 -0
  263. package/packages/core/src/__tests__/readme-extractor.test.ts +258 -0
  264. package/packages/core/src/__tests__/redis-cache.test.ts +307 -0
  265. package/packages/core/src/__tests__/rust-extractor.test.ts +252 -0
  266. package/packages/core/src/__tests__/streaming.test.ts +251 -0
  267. package/packages/core/src/additional-extractors.ts +333 -0
  268. package/packages/core/src/cache/cache-interface.ts +179 -0
  269. package/packages/core/src/cache/index.ts +210 -0
  270. package/packages/core/src/cache/redis-cache.ts +291 -0
  271. package/packages/core/src/cache/upstash-cache.ts +379 -0
  272. package/packages/core/src/cache.ts +251 -0
  273. package/packages/core/src/cli.ts +822 -0
  274. package/packages/core/src/code-extractor.ts +696 -0
  275. package/packages/core/src/docker-generator.ts +470 -0
  276. package/packages/core/src/edge-compatible.ts +491 -0
  277. package/packages/core/src/extractors/go-extractor.ts +791 -0
  278. package/packages/core/src/extractors/index.ts +9 -0
  279. package/packages/core/src/extractors/java-extractor.ts +937 -0
  280. package/packages/core/src/extractors/rust-extractor.ts +744 -0
  281. package/packages/core/src/github-client.ts +319 -0
  282. package/packages/core/src/go-generator.ts +356 -0
  283. package/packages/core/src/graphql-extractor.ts +358 -0
  284. package/packages/core/src/index.ts +797 -0
  285. package/packages/core/src/langchain-exporter.ts +617 -0
  286. package/packages/core/src/language-parsers.ts +1114 -0
  287. package/packages/core/src/mcp-introspector.ts +279 -0
  288. package/packages/core/src/monorepo-detector.ts +378 -0
  289. package/packages/core/src/plugins/index.ts +370 -0
  290. package/packages/core/src/plugins/registry.ts +404 -0
  291. package/packages/core/src/plugins/types.ts +215 -0
  292. package/packages/core/src/providers/base-provider.ts +246 -0
  293. package/packages/core/src/providers/bitbucket-client.ts +464 -0
  294. package/packages/core/src/providers/gitlab-client.ts +388 -0
  295. package/packages/core/src/providers/index.ts +176 -0
  296. package/packages/core/src/python-generator.ts +260 -0
  297. package/packages/core/src/queue/index.ts +100 -0
  298. package/packages/core/src/queue/memory-queue.ts +445 -0
  299. package/packages/core/src/queue/redis-queue.ts +578 -0
  300. package/packages/core/src/queue/types.ts +251 -0
  301. package/packages/core/src/readme-extractor.ts +409 -0
  302. package/packages/core/src/schema-generator.ts +638 -0
  303. package/packages/core/src/streaming.ts +999 -0
  304. package/packages/core/src/types.ts +289 -0
  305. package/packages/core/tsconfig.json +9 -0
  306. package/packages/core/tsup.config.ts +25 -0
  307. package/packages/mcp-server/README.md +297 -0
  308. package/packages/mcp-server/package.json +55 -0
  309. package/packages/mcp-server/src/__tests__/mcp-server.test.ts +177 -0
  310. package/packages/mcp-server/src/__tests__/tools.test.ts +217 -0
  311. package/packages/mcp-server/src/index.ts +1206 -0
  312. package/packages/mcp-server/src/prompts/index.ts +601 -0
  313. package/packages/mcp-server/src/tools/export-docker.ts +362 -0
  314. package/packages/mcp-server/src/tools/generate-openapi.ts +162 -0
  315. package/packages/mcp-server/src/tools/monitor-mcp-server.ts +448 -0
  316. package/packages/mcp-server/src/tools/stream-convert.ts +398 -0
  317. package/packages/mcp-server/src/tools/test-mcp-tool.ts +531 -0
  318. package/packages/mcp-server/tsconfig.json +12 -0
  319. package/packages/mcp-server/tsup.config.ts +14 -0
  320. package/packages/openapi-parser/package-lock.json +3028 -0
  321. package/packages/openapi-parser/package.json +41 -0
  322. package/packages/openapi-parser/src/analyzer.ts +700 -0
  323. package/packages/openapi-parser/src/asyncapi-parser.ts +475 -0
  324. package/packages/openapi-parser/src/cli.ts +302 -0
  325. package/packages/openapi-parser/src/generator.ts +570 -0
  326. package/packages/openapi-parser/src/generators/express-analyzer.ts +649 -0
  327. package/packages/openapi-parser/src/generators/fastapi-analyzer.ts +960 -0
  328. package/packages/openapi-parser/src/generators/index.ts +200 -0
  329. package/packages/openapi-parser/src/generators/nextjs-analyzer.ts +768 -0
  330. package/packages/openapi-parser/src/generators/openapi-builder.ts +527 -0
  331. package/packages/openapi-parser/src/generators/types.ts +298 -0
  332. package/packages/openapi-parser/src/graphql-parser.ts +462 -0
  333. package/packages/openapi-parser/src/grpc-parser.ts +649 -0
  334. package/packages/openapi-parser/src/har-parser.ts +723 -0
  335. package/packages/openapi-parser/src/index.ts +635 -0
  336. package/packages/openapi-parser/src/insomnia-parser.ts +614 -0
  337. package/packages/openapi-parser/src/parser.ts +231 -0
  338. package/packages/openapi-parser/src/postman-parser.ts +611 -0
  339. package/packages/openapi-parser/src/ref-resolver.ts +313 -0
  340. package/packages/openapi-parser/src/transformer.ts +459 -0
  341. package/packages/openapi-parser/tests/generators/express.test.ts +209 -0
  342. package/packages/openapi-parser/tests/generators/fastapi.test.ts +236 -0
  343. package/packages/openapi-parser/tests/generators/nextjs.test.ts +273 -0
  344. package/packages/openapi-parser/tests/parsers.test.ts +847 -0
  345. package/packages/openapi-parser/tsconfig.json +9 -0
  346. package/packages/openapi-parser/tsup.config.ts +11 -0
  347. package/packages/registry/package.json +59 -0
  348. package/packages/registry/src/cli.ts +456 -0
  349. package/packages/registry/src/index.ts +44 -0
  350. package/packages/registry/src/popular/github.json +47 -0
  351. package/packages/registry/src/popular/index.ts +55 -0
  352. package/packages/registry/src/popular/linear.json +42 -0
  353. package/packages/registry/src/popular/notion.json +42 -0
  354. package/packages/registry/src/popular/openai.json +40 -0
  355. package/packages/registry/src/popular/resend.json +38 -0
  356. package/packages/registry/src/popular/slack.json +42 -0
  357. package/packages/registry/src/popular/stripe.json +163 -0
  358. package/packages/registry/src/popular/supabase.json +42 -0
  359. package/packages/registry/src/popular/twilio.json +40 -0
  360. package/packages/registry/src/popular/vercel.json +40 -0
  361. package/packages/registry/src/registry.ts +492 -0
  362. package/packages/registry/src/storage.ts +334 -0
  363. package/packages/registry/src/types.ts +275 -0
  364. package/packages/registry/src/updater.ts +208 -0
  365. package/packages/registry/tsconfig.json +10 -0
  366. package/packages/registry/tsup.config.ts +11 -0
  367. package/pnpm-workspace.yaml +3 -0
  368. package/scripts/build-docs.sh +16 -0
  369. package/server.json +9 -0
  370. package/templates/Dockerfile.python.template +60 -0
  371. package/templates/Dockerfile.typescript.template +60 -0
  372. package/templates/docker-compose.template.yml +68 -0
  373. package/tests/fixtures/express-app/index.js +34 -0
  374. package/tests/fixtures/express-app/routes/posts.js +43 -0
  375. package/tests/fixtures/express-app/routes/users.js +58 -0
  376. package/tests/fixtures/fastapi-app/main.py +125 -0
  377. package/tests/fixtures/fastapi-app/routes/admin.py +42 -0
  378. package/tests/fixtures/graphql/simple-schema.graphql +65 -0
  379. package/tests/fixtures/mocks/github-api-responses.json +63 -0
  380. package/tests/fixtures/nextjs-app/app/api/posts/route.ts +55 -0
  381. package/tests/fixtures/nextjs-app/app/api/users/[id]/route.ts +63 -0
  382. package/tests/fixtures/nextjs-app/app/api/users/route.ts +44 -0
  383. package/tests/fixtures/nextjs-app/pages/api/health.ts +28 -0
  384. package/tests/fixtures/openapi/petstore.yaml +179 -0
  385. package/tests/integration/langchain-export.test.ts +405 -0
  386. package/tests/integration/openapi-conversion.test.ts +221 -0
  387. package/tsconfig.json +18 -0
  388. package/vitest.config.ts +32 -0
@@ -0,0 +1,369 @@
1
+ /**
2
+ * Deploy Button Component - One-click cloud deployment
3
+ * @copyright 2024-2026 nirholas
4
+ * @license MIT
5
+ */
6
+
7
+ 'use client';
8
+
9
+ import { useState, useCallback } from 'react';
10
+ import { motion, AnimatePresence } from 'framer-motion';
11
+ import {
12
+ Cloud,
13
+ Loader2,
14
+ Check,
15
+ Copy,
16
+ ExternalLink,
17
+ Zap,
18
+ Shield,
19
+ Globe,
20
+ X,
21
+ AlertCircle,
22
+ Rocket,
23
+ } from 'lucide-react';
24
+ import { Button } from '@/components/ui/button';
25
+ import { copyToClipboard } from '@/lib/utils';
26
+ import type { ConversionResult } from '@/types';
27
+ import type { DeployedServer, DeployResponse } from '@/types/deploy';
28
+
29
+ interface DeployButtonProps {
30
+ result: ConversionResult;
31
+ onDeploy?: (server: DeployedServer) => void;
32
+ className?: string;
33
+ }
34
+
35
+ type DeployStep = 'idle' | 'configuring' | 'deploying' | 'success' | 'error';
36
+
37
+ export default function DeployButton({ result, onDeploy, className = '' }: DeployButtonProps) {
38
+ const [step, setStep] = useState<DeployStep>('idle');
39
+ const [showModal, setShowModal] = useState(false);
40
+ const [deployedServer, setDeployedServer] = useState<DeployedServer | null>(null);
41
+ const [apiKey, setApiKey] = useState<string | null>(null);
42
+ const [error, setError] = useState<string | null>(null);
43
+ const [copied, setCopied] = useState<string | null>(null);
44
+
45
+ const handleCopy = useCallback(async (text: string, id: string) => {
46
+ const success = await copyToClipboard(text);
47
+ if (success) {
48
+ setCopied(id);
49
+ setTimeout(() => setCopied(null), 2000);
50
+ }
51
+ }, []);
52
+
53
+ const handleDeploy = useCallback(async () => {
54
+ setStep('deploying');
55
+ setError(null);
56
+
57
+ try {
58
+ const response = await fetch('/api/deploy', {
59
+ method: 'POST',
60
+ headers: { 'Content-Type': 'application/json' },
61
+ body: JSON.stringify({
62
+ name: result.name,
63
+ description: result.description,
64
+ code: result.code,
65
+ tools: result.tools.map(t => ({
66
+ name: t.name,
67
+ description: t.description,
68
+ inputSchema: t.inputSchema,
69
+ })),
70
+ sourceRepo: result.repository?.fullName,
71
+ }),
72
+ });
73
+
74
+ const data = await response.json() as DeployResponse;
75
+
76
+ if (!data.success || !data.server) {
77
+ throw new Error(data.error || 'Deployment failed');
78
+ }
79
+
80
+ setDeployedServer(data.server);
81
+ setApiKey(data.apiKey || null);
82
+ setStep('success');
83
+
84
+ // Store in localStorage for dashboard
85
+ const stored = localStorage.getItem('deployed-servers');
86
+ const servers = stored ? JSON.parse(stored) : [];
87
+ servers.push(data.server);
88
+ localStorage.setItem('deployed-servers', JSON.stringify(servers));
89
+
90
+ onDeploy?.(data.server);
91
+ } catch (err) {
92
+ setError(err instanceof Error ? err.message : 'Deployment failed');
93
+ setStep('error');
94
+ }
95
+ }, [result, onDeploy]);
96
+
97
+ const openModal = useCallback(() => {
98
+ setShowModal(true);
99
+ setStep('configuring');
100
+ }, []);
101
+
102
+ const closeModal = useCallback(() => {
103
+ setShowModal(false);
104
+ if (step !== 'success') {
105
+ setStep('idle');
106
+ }
107
+ }, [step]);
108
+
109
+ // Generate Claude Desktop config for the deployed server
110
+ const claudeConfig = deployedServer ? JSON.stringify({
111
+ mcpServers: {
112
+ [deployedServer.name]: {
113
+ transport: 'http',
114
+ url: deployedServer.endpoint,
115
+ headers: apiKey ? { Authorization: `Bearer ${apiKey}` } : undefined,
116
+ },
117
+ },
118
+ }, null, 2) : '';
119
+
120
+ return (
121
+ <>
122
+ {/* Deploy Button */}
123
+ <Button
124
+ onClick={openModal}
125
+ disabled={step === 'deploying'}
126
+ className={`bg-gradient-to-r from-blue-600 to-purple-600 hover:from-blue-500 hover:to-purple-500 text-white border-0 ${className}`}
127
+ >
128
+ {step === 'deploying' ? (
129
+ <>
130
+ <Loader2 className="w-4 h-4 mr-2 animate-spin" />
131
+ Deploying...
132
+ </>
133
+ ) : step === 'success' ? (
134
+ <>
135
+ <Check className="w-4 h-4 mr-2" />
136
+ Deployed!
137
+ </>
138
+ ) : (
139
+ <>
140
+ <Cloud className="w-4 h-4 mr-2" />
141
+ Deploy to Cloud
142
+ </>
143
+ )}
144
+ </Button>
145
+
146
+ {/* Deploy Modal */}
147
+ <AnimatePresence>
148
+ {showModal && (
149
+ <>
150
+ {/* Backdrop */}
151
+ <motion.div
152
+ initial={{ opacity: 0 }}
153
+ animate={{ opacity: 1 }}
154
+ exit={{ opacity: 0 }}
155
+ onClick={closeModal}
156
+ className="fixed inset-0 bg-black/80 backdrop-blur-sm z-50"
157
+ />
158
+
159
+ {/* Modal */}
160
+ <motion.div
161
+ initial={{ opacity: 0, scale: 0.95, y: 20 }}
162
+ animate={{ opacity: 1, scale: 1, y: 0 }}
163
+ exit={{ opacity: 0, scale: 0.95, y: 20 }}
164
+ className="fixed inset-4 md:inset-auto md:left-1/2 md:top-1/2 md:-translate-x-1/2 md:-translate-y-1/2 md:w-full md:max-w-lg bg-neutral-900 border border-neutral-800 rounded-2xl shadow-2xl z-50 overflow-hidden flex flex-col max-h-[90vh]"
165
+ >
166
+ {/* Header */}
167
+ <div className="flex items-center justify-between p-6 border-b border-neutral-800">
168
+ <div className="flex items-center gap-3">
169
+ <div className="w-10 h-10 rounded-xl bg-gradient-to-br from-blue-500 to-purple-600 flex items-center justify-center">
170
+ <Cloud className="w-5 h-5 text-white" />
171
+ </div>
172
+ <div>
173
+ <h2 className="text-lg font-bold text-white">Deploy to Cloud</h2>
174
+ <p className="text-sm text-neutral-400">Host your MCP server instantly</p>
175
+ </div>
176
+ </div>
177
+ <button
178
+ onClick={closeModal}
179
+ className="p-2 text-neutral-400 hover:text-white rounded-lg hover:bg-white/5 transition-colors"
180
+ >
181
+ <X className="w-5 h-5" />
182
+ </button>
183
+ </div>
184
+
185
+ {/* Content */}
186
+ <div className="flex-1 overflow-y-auto p-6">
187
+ {step === 'configuring' && (
188
+ <div className="space-y-6">
189
+ {/* Server Info */}
190
+ <div className="p-4 bg-black/30 rounded-xl border border-neutral-800">
191
+ <div className="text-sm text-neutral-400 mb-1">Server Name</div>
192
+ <div className="text-lg font-medium text-white">{result.name}</div>
193
+ <div className="text-sm text-neutral-500 mt-1">
194
+ {result.tools.length} tools • {result.repository?.fullName || 'Local'}
195
+ </div>
196
+ </div>
197
+
198
+ {/* Features */}
199
+ <div className="space-y-3">
200
+ <h3 className="text-sm font-medium text-neutral-400">What you'll get:</h3>
201
+ {[
202
+ { icon: Globe, label: 'Instant endpoint URL', desc: 'No server setup required' },
203
+ { icon: Zap, label: 'Edge deployment', desc: 'Global low-latency access' },
204
+ { icon: Shield, label: 'Secure API key', desc: 'Protected access to your tools' },
205
+ ].map(({ icon: Icon, label, desc }) => (
206
+ <div key={label} className="flex items-start gap-3 p-3 bg-white/5 rounded-lg">
207
+ <Icon className="w-5 h-5 text-blue-400 flex-shrink-0 mt-0.5" />
208
+ <div>
209
+ <div className="text-sm font-medium text-white">{label}</div>
210
+ <div className="text-xs text-neutral-500">{desc}</div>
211
+ </div>
212
+ </div>
213
+ ))}
214
+ </div>
215
+
216
+ {/* Tools preview */}
217
+ <div>
218
+ <h3 className="text-sm font-medium text-neutral-400 mb-2">Tools to deploy:</h3>
219
+ <div className="flex flex-wrap gap-2">
220
+ {result.tools.slice(0, 5).map(tool => (
221
+ <span
222
+ key={tool.name}
223
+ className="px-2 py-1 text-xs bg-white/5 border border-neutral-800 rounded text-neutral-300"
224
+ >
225
+ {tool.name}
226
+ </span>
227
+ ))}
228
+ {result.tools.length > 5 && (
229
+ <span className="px-2 py-1 text-xs text-neutral-500">
230
+ +{result.tools.length - 5} more
231
+ </span>
232
+ )}
233
+ </div>
234
+ </div>
235
+ </div>
236
+ )}
237
+
238
+ {step === 'deploying' && (
239
+ <div className="flex flex-col items-center justify-center py-12">
240
+ <div className="relative">
241
+ <div className="w-16 h-16 rounded-full border-4 border-neutral-800 border-t-blue-500 animate-spin" />
242
+ <Rocket className="w-6 h-6 text-blue-400 absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2" />
243
+ </div>
244
+ <div className="mt-6 text-lg font-medium text-white">Deploying your server...</div>
245
+ <div className="mt-2 text-sm text-neutral-400">This usually takes a few seconds</div>
246
+ </div>
247
+ )}
248
+
249
+ {step === 'success' && deployedServer && (
250
+ <div className="space-y-6">
251
+ {/* Success message */}
252
+ <div className="text-center py-4">
253
+ <div className="w-16 h-16 mx-auto rounded-full bg-green-500/20 flex items-center justify-center mb-4">
254
+ <Check className="w-8 h-8 text-green-400" />
255
+ </div>
256
+ <h3 className="text-xl font-bold text-white mb-2">Deployed Successfully!</h3>
257
+ <p className="text-neutral-400">Your MCP server is now live</p>
258
+ </div>
259
+
260
+ {/* Endpoint */}
261
+ <div className="p-4 bg-black/30 rounded-xl border border-neutral-800">
262
+ <div className="text-xs text-neutral-500 mb-2">Endpoint URL</div>
263
+ <div className="flex items-center gap-2">
264
+ <code className="flex-1 text-sm text-green-400 font-mono truncate">
265
+ {deployedServer.endpoint}
266
+ </code>
267
+ <button
268
+ onClick={() => handleCopy(deployedServer.endpoint, 'endpoint')}
269
+ className="p-2 text-neutral-400 hover:text-white rounded-lg hover:bg-white/5"
270
+ >
271
+ {copied === 'endpoint' ? <Check className="w-4 h-4 text-green-400" /> : <Copy className="w-4 h-4" />}
272
+ </button>
273
+ </div>
274
+ </div>
275
+
276
+ {/* API Key (only shown once!) */}
277
+ {apiKey && (
278
+ <div className="p-4 bg-yellow-500/10 rounded-xl border border-yellow-500/30">
279
+ <div className="flex items-center gap-2 mb-2">
280
+ <AlertCircle className="w-4 h-4 text-yellow-400" />
281
+ <div className="text-xs text-yellow-400 font-medium">Save your API key - shown once!</div>
282
+ </div>
283
+ <div className="flex items-center gap-2">
284
+ <code className="flex-1 text-sm text-yellow-300 font-mono truncate">
285
+ {apiKey}
286
+ </code>
287
+ <button
288
+ onClick={() => handleCopy(apiKey, 'apikey')}
289
+ className="p-2 text-yellow-400 hover:text-yellow-300 rounded-lg hover:bg-yellow-500/10"
290
+ >
291
+ {copied === 'apikey' ? <Check className="w-4 h-4 text-green-400" /> : <Copy className="w-4 h-4" />}
292
+ </button>
293
+ </div>
294
+ </div>
295
+ )}
296
+
297
+ {/* Claude Config */}
298
+ <div>
299
+ <div className="flex items-center justify-between mb-2">
300
+ <div className="text-xs text-neutral-500">Claude Desktop Config</div>
301
+ <button
302
+ onClick={() => handleCopy(claudeConfig, 'config')}
303
+ className="text-xs text-neutral-400 hover:text-white flex items-center gap-1"
304
+ >
305
+ {copied === 'config' ? <Check className="w-3 h-3 text-green-400" /> : <Copy className="w-3 h-3" />}
306
+ Copy
307
+ </button>
308
+ </div>
309
+ <pre className="p-3 bg-black/50 rounded-lg text-xs text-neutral-300 font-mono overflow-x-auto">
310
+ {claudeConfig}
311
+ </pre>
312
+ </div>
313
+ </div>
314
+ )}
315
+
316
+ {step === 'error' && (
317
+ <div className="flex flex-col items-center justify-center py-12">
318
+ <div className="w-16 h-16 rounded-full bg-red-500/20 flex items-center justify-center mb-4">
319
+ <X className="w-8 h-8 text-red-400" />
320
+ </div>
321
+ <div className="text-lg font-medium text-white mb-2">Deployment Failed</div>
322
+ <div className="text-sm text-neutral-400 text-center mb-6">{error}</div>
323
+ <Button onClick={() => setStep('configuring')} variant="outline">
324
+ Try Again
325
+ </Button>
326
+ </div>
327
+ )}
328
+ </div>
329
+
330
+ {/* Footer */}
331
+ {(step === 'configuring' || step === 'success') && (
332
+ <div className="p-6 border-t border-neutral-800 bg-black/30">
333
+ {step === 'configuring' && (
334
+ <div className="flex gap-3">
335
+ <Button onClick={closeModal} variant="outline" className="flex-1">
336
+ Cancel
337
+ </Button>
338
+ <Button
339
+ onClick={handleDeploy}
340
+ className="flex-1 bg-gradient-to-r from-blue-600 to-purple-600 hover:from-blue-500 hover:to-purple-500 border-0"
341
+ >
342
+ <Rocket className="w-4 h-4 mr-2" />
343
+ Deploy Now
344
+ </Button>
345
+ </div>
346
+ )}
347
+ {step === 'success' && (
348
+ <div className="flex gap-3">
349
+ <Button onClick={closeModal} variant="outline" className="flex-1">
350
+ Close
351
+ </Button>
352
+ <Button
353
+ onClick={() => window.open('/dashboard', '_blank')}
354
+ className="flex-1 bg-white text-black hover:bg-neutral-200"
355
+ >
356
+ <ExternalLink className="w-4 h-4 mr-2" />
357
+ View Dashboard
358
+ </Button>
359
+ </div>
360
+ )}
361
+ </div>
362
+ )}
363
+ </motion.div>
364
+ </>
365
+ )}
366
+ </AnimatePresence>
367
+ </>
368
+ );
369
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Deploy Components Index
3
+ * @copyright 2024-2026 nirholas
4
+ * @license MIT
5
+ */
6
+
7
+ export { default as DeployButton } from './DeployButton';