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,84 @@
1
+ 'use client'
2
+
3
+ import { motion } from 'framer-motion'
4
+ import { Search, FileJson, Terminal, Cpu, Server } from 'lucide-react'
5
+
6
+ const FEATURES = [
7
+ {
8
+ icon: Search,
9
+ title: 'Smart Extraction',
10
+ description: 'Extracts tools from README, source code, OpenAPI specs, and GraphQL schemas automatically.',
11
+ },
12
+ {
13
+ icon: FileJson,
14
+ title: 'Ready-to-Use Config',
15
+ description: 'Generate configs for Claude Desktop, Cursor, and other MCP clients instantly.',
16
+ },
17
+ {
18
+ icon: Terminal,
19
+ title: 'TypeScript & Python',
20
+ description: 'Get production-ready MCP server code in both languages with full type safety.',
21
+ },
22
+ {
23
+ icon: Cpu,
24
+ title: 'Auto Classification',
25
+ description: 'Detects repo type automatically: API SDK, CLI tool, library, or existing MCP server.',
26
+ },
27
+ ]
28
+
29
+ export default function Features() {
30
+ return (
31
+ <section id="features" className="py-24 scroll-mt-24">
32
+ <div className="text-center mb-16">
33
+ <motion.div
34
+ initial={{ opacity: 0, y: 20 }}
35
+ whileInView={{ opacity: 1, y: 0 }}
36
+ viewport={{ once: true }}
37
+ className="inline-flex items-center gap-2 px-4 py-2 rounded-full bg-white/5 border border-neutral-800 mb-6"
38
+ >
39
+ <Server className="w-4 h-4 text-white" />
40
+ <span className="text-sm font-medium text-neutral-400">FEATURES</span>
41
+ </motion.div>
42
+
43
+ <motion.h2
44
+ initial={{ opacity: 0, y: 20 }}
45
+ whileInView={{ opacity: 1, y: 0 }}
46
+ viewport={{ once: true }}
47
+ transition={{ delay: 0.1 }}
48
+ className="text-4xl md:text-5xl font-bold text-white mb-4"
49
+ >
50
+ Powerful & Flexible
51
+ </motion.h2>
52
+
53
+ <motion.p
54
+ initial={{ opacity: 0, y: 20 }}
55
+ whileInView={{ opacity: 1, y: 0 }}
56
+ viewport={{ once: true }}
57
+ transition={{ delay: 0.2 }}
58
+ className="text-xl text-neutral-400 max-w-2xl mx-auto"
59
+ >
60
+ Everything you need to turn any repository into an MCP server
61
+ </motion.p>
62
+ </div>
63
+
64
+ <div className="grid md:grid-cols-2 lg:grid-cols-4 gap-6">
65
+ {FEATURES.map((feature, index) => (
66
+ <motion.div
67
+ key={feature.title}
68
+ initial={{ opacity: 0, y: 20 }}
69
+ whileInView={{ opacity: 1, y: 0 }}
70
+ viewport={{ once: true }}
71
+ transition={{ delay: index * 0.1 }}
72
+ className="group rounded-xl border border-neutral-800 p-6 bg-neutral-900/50 backdrop-blur-sm hover:border-neutral-700 transition-all hover:-translate-y-1"
73
+ >
74
+ <div className="w-12 h-12 rounded-xl bg-white/5 border border-neutral-800 flex items-center justify-center mb-4 group-hover:border-neutral-600 transition-colors">
75
+ <feature.icon className="w-6 h-6 text-white" />
76
+ </div>
77
+ <h3 className="text-lg font-semibold text-white mb-2">{feature.title}</h3>
78
+ <p className="text-sm text-neutral-400 leading-relaxed">{feature.description}</p>
79
+ </motion.div>
80
+ ))}
81
+ </div>
82
+ </section>
83
+ )
84
+ }
@@ -0,0 +1,119 @@
1
+ 'use client'
2
+
3
+ import { BookOpen, Zap, Sparkles, Terminal, Layers, Link2, Bug, Users, Scale } from 'lucide-react'
4
+ import Link from 'next/link'
5
+ import { Logo, LogoIcon } from './Logo'
6
+
7
+ // GitHub icon as inline SVG to avoid importing Github from lucide
8
+ function GithubIcon({ className = '' }: { className?: string }) {
9
+ return (
10
+ <svg className={className} viewBox="0 0 24 24" fill="currentColor">
11
+ <path d="M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0024 12c0-6.63-5.37-12-12-12z"/>
12
+ </svg>
13
+ )
14
+ }
15
+
16
+ const FOOTER_LINKS = {
17
+ resources: [
18
+ { href: '/#how-it-works', label: 'How it works', icon: Zap },
19
+ { href: '/#features', label: 'Features', icon: Sparkles },
20
+ { href: '/playground', label: 'Playground', icon: Terminal },
21
+ { href: '/batch', label: 'Batch Convert', icon: Layers },
22
+ { href: 'https://github.com/nirholas/github-to-mcp#readme', label: 'Documentation', icon: BookOpen, external: true },
23
+ { href: 'https://modelcontextprotocol.io', label: 'MCP Protocol', icon: Link2, external: true },
24
+ ],
25
+ project: [
26
+ { href: 'https://github.com/nirholas/github-to-mcp', label: 'GitHub Repository', icon: GithubIcon, external: true },
27
+ { href: 'https://github.com/nirholas/github-to-mcp/issues', label: 'Report Issues', icon: Bug, external: true },
28
+ { href: 'https://github.com/nirholas/github-to-mcp/blob/main/CONTRIBUTING.md', label: 'Contributing', icon: Users, external: true },
29
+ { href: 'https://github.com/nirholas/github-to-mcp/blob/main/LICENSE', label: 'License', icon: Scale, external: true },
30
+ ],
31
+ }
32
+
33
+ export default function Footer() {
34
+ return (
35
+ <footer className="border-t border-neutral-800 bg-black/80 backdrop-blur-xl">
36
+ <div className="container mx-auto px-4 py-12">
37
+ <div className="grid grid-cols-1 md:grid-cols-4 gap-12 md:gap-8">
38
+ {/* Brand */}
39
+ <div className="md:col-span-2">
40
+ <Link href="/" className="inline-block mb-4">
41
+ <Logo size="lg" />
42
+ </Link>
43
+ <p className="text-neutral-500 text-sm max-w-md mb-6">
44
+ Convert GitHub repositories into MCP (Model Context Protocol) servers, making your code instantly accessible to AI agents like Claude, ChatGPT, and other assistants.
45
+ </p>
46
+ <div className="flex items-center gap-3">
47
+ <a
48
+ href="https://github.com/nirholas/github-to-mcp"
49
+ target="_blank"
50
+ rel="noopener noreferrer"
51
+ className="w-10 h-10 rounded-lg bg-white/5 border border-neutral-800 flex items-center justify-center hover:border-neutral-600 hover:bg-white/10 transition-colors"
52
+ aria-label="GitHub"
53
+ >
54
+ <GithubIcon className="w-5 h-5 text-neutral-400 hover:text-white" />
55
+ </a>
56
+ </div>
57
+ </div>
58
+
59
+ {/* Resources */}
60
+ <div>
61
+ <h3 className="text-white font-semibold mb-4">Resources</h3>
62
+ <ul className="space-y-3">
63
+ {FOOTER_LINKS.resources.map((link) => (
64
+ <li key={link.href}>
65
+ {link.external ? (
66
+ <a
67
+ href={link.href}
68
+ target="_blank"
69
+ rel="noopener noreferrer"
70
+ className="flex items-center gap-2 text-sm text-neutral-400 hover:text-white transition-colors"
71
+ >
72
+ {link.icon && <link.icon className="w-4 h-4" />}
73
+ {link.label}
74
+ </a>
75
+ ) : (
76
+ <Link
77
+ href={link.href}
78
+ className="flex items-center gap-2 text-sm text-neutral-400 hover:text-white transition-colors"
79
+ >
80
+ {link.icon && <link.icon className="w-4 h-4" />}
81
+ {link.label}
82
+ </Link>
83
+ )}
84
+ </li>
85
+ ))}
86
+ </ul>
87
+ </div>
88
+
89
+ {/* Project */}
90
+ <div>
91
+ <h3 className="text-white font-semibold mb-4">Project</h3>
92
+ <ul className="space-y-3">
93
+ {FOOTER_LINKS.project.map((link) => (
94
+ <li key={link.href}>
95
+ <a
96
+ href={link.href}
97
+ target="_blank"
98
+ rel="noopener noreferrer"
99
+ className="flex items-center gap-2 text-sm text-neutral-400 hover:text-white transition-colors"
100
+ >
101
+ {link.icon && <link.icon className="w-4 h-4" />}
102
+ {link.label}
103
+ </a>
104
+ </li>
105
+ ))}
106
+ </ul>
107
+ </div>
108
+ </div>
109
+
110
+ {/* Bottom */}
111
+ <div className="mt-12 pt-8 border-t border-neutral-800 flex flex-col md:flex-row items-center justify-center gap-4">
112
+ <div className="text-sm text-neutral-500">
113
+ © {new Date().getFullYear()} github-to-mcp — Open Source
114
+ </div>
115
+ </div>
116
+ </div>
117
+ </footer>
118
+ )
119
+ }
@@ -0,0 +1,248 @@
1
+ /**
2
+ * GenerationProgress Component - Multi-step progress bar with real-time updates
3
+ * @copyright 2024-2026 nirholas
4
+ * @license MIT
5
+ */
6
+
7
+ 'use client';
8
+
9
+ import { useMemo } from 'react';
10
+ import { motion, AnimatePresence } from 'framer-motion';
11
+ import {
12
+ Github,
13
+ Layers,
14
+ FileSearch,
15
+ Code2,
16
+ Package,
17
+ Check,
18
+ Loader2,
19
+ AlertCircle,
20
+ } from 'lucide-react';
21
+
22
+ export type GenerationStepId =
23
+ | 'fetching'
24
+ | 'classifying'
25
+ | 'extracting'
26
+ | 'generating';
27
+
28
+ export type GenerationStepStatus = 'pending' | 'in-progress' | 'complete' | 'error';
29
+
30
+ export interface GenerationStep {
31
+ id: GenerationStepId;
32
+ label: string;
33
+ description: string;
34
+ status: GenerationStepStatus;
35
+ toolsFound?: number;
36
+ detail?: string;
37
+ }
38
+
39
+ const STEP_ICONS: Record<GenerationStepId, typeof Github> = {
40
+ fetching: Github,
41
+ classifying: Layers,
42
+ extracting: FileSearch,
43
+ generating: Code2,
44
+ };
45
+
46
+ const STEP_COLORS: Record<GenerationStepStatus, string> = {
47
+ pending: 'text-neutral-500 bg-neutral-800/50 border-neutral-700',
48
+ 'in-progress': 'text-white bg-white/10 border-white/30',
49
+ complete: 'text-green-400 bg-green-500/10 border-green-500/30',
50
+ error: 'text-red-400 bg-red-500/10 border-red-500/30',
51
+ };
52
+
53
+ interface GenerationProgressProps {
54
+ steps: GenerationStep[];
55
+ currentStep: GenerationStepId | null;
56
+ totalToolsFound: number;
57
+ statusMessage?: string;
58
+ className?: string;
59
+ }
60
+
61
+ export default function GenerationProgress({
62
+ steps,
63
+ currentStep,
64
+ totalToolsFound,
65
+ statusMessage,
66
+ className = '',
67
+ }: GenerationProgressProps) {
68
+ const progress = useMemo(() => {
69
+ const completedSteps = steps.filter(s => s.status === 'complete').length;
70
+ const inProgressSteps = steps.filter(s => s.status === 'in-progress').length;
71
+ return Math.round(((completedSteps + inProgressSteps * 0.5) / steps.length) * 100);
72
+ }, [steps]);
73
+
74
+ const currentStepData = useMemo(() => {
75
+ return steps.find(s => s.id === currentStep);
76
+ }, [steps, currentStep]);
77
+
78
+ return (
79
+ <div className={`rounded-2xl border border-neutral-800 p-6 md:p-8 bg-neutral-900/50 backdrop-blur-xl ${className}`}>
80
+ {/* Header with progress ring */}
81
+ <div className="flex items-center justify-between mb-6">
82
+ <div className="flex items-center gap-4">
83
+ <div className="relative w-16 h-16">
84
+ {/* Background ring */}
85
+ <svg className="w-16 h-16 -rotate-90">
86
+ <circle
87
+ cx="32"
88
+ cy="32"
89
+ r="28"
90
+ stroke="currentColor"
91
+ strokeWidth="4"
92
+ fill="none"
93
+ className="text-neutral-800"
94
+ />
95
+ <motion.circle
96
+ cx="32"
97
+ cy="32"
98
+ r="28"
99
+ stroke="currentColor"
100
+ strokeWidth="4"
101
+ fill="none"
102
+ strokeLinecap="round"
103
+ className="text-white"
104
+ initial={{ pathLength: 0 }}
105
+ animate={{ pathLength: progress / 100 }}
106
+ transition={{ duration: 0.5, ease: 'easeOut' }}
107
+ />
108
+ </svg>
109
+ {/* Center content */}
110
+ <div className="absolute inset-0 flex items-center justify-center">
111
+ <span className="text-lg font-bold text-white">{progress}%</span>
112
+ </div>
113
+ </div>
114
+ <div>
115
+ <h3 className="text-lg font-semibold text-white">Generating MCP Server</h3>
116
+ <AnimatePresence mode="wait">
117
+ <motion.p
118
+ key={statusMessage || currentStepData?.description}
119
+ initial={{ opacity: 0, y: 5 }}
120
+ animate={{ opacity: 1, y: 0 }}
121
+ exit={{ opacity: 0, y: -5 }}
122
+ className="text-sm text-neutral-400"
123
+ >
124
+ {statusMessage || currentStepData?.description || 'Initializing...'}
125
+ </motion.p>
126
+ </AnimatePresence>
127
+ </div>
128
+ </div>
129
+
130
+ {/* Tools found counter */}
131
+ <motion.div
132
+ initial={{ scale: 0.8, opacity: 0 }}
133
+ animate={{ scale: 1, opacity: 1 }}
134
+ className="flex items-center gap-2 px-4 py-2 rounded-lg bg-white/5 border border-neutral-800"
135
+ >
136
+ <Package className="w-4 h-4 text-neutral-400" />
137
+ <span className="text-sm text-neutral-400">Tools found:</span>
138
+ <motion.span
139
+ key={totalToolsFound}
140
+ initial={{ scale: 1.2 }}
141
+ animate={{ scale: 1 }}
142
+ className="text-lg font-bold text-white"
143
+ >
144
+ {totalToolsFound}
145
+ </motion.span>
146
+ </motion.div>
147
+ </div>
148
+
149
+ {/* Progress bar */}
150
+ <div className="relative h-2 bg-neutral-800 rounded-full overflow-hidden mb-8">
151
+ <motion.div
152
+ className="absolute inset-y-0 left-0 bg-gradient-to-r from-white to-neutral-400 rounded-full"
153
+ initial={{ width: 0 }}
154
+ animate={{ width: `${progress}%` }}
155
+ transition={{ duration: 0.5, ease: 'easeOut' }}
156
+ />
157
+ {/* Animated shimmer */}
158
+ {progress < 100 && (
159
+ <motion.div
160
+ className="absolute inset-y-0 w-20 bg-gradient-to-r from-transparent via-white/30 to-transparent"
161
+ animate={{ x: ['-100%', '500%'] }}
162
+ transition={{ duration: 1.5, repeat: Infinity, ease: 'linear' }}
163
+ />
164
+ )}
165
+ </div>
166
+
167
+ {/* Steps grid */}
168
+ <div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4">
169
+ {steps.map((step, index) => {
170
+ const Icon = STEP_ICONS[step.id];
171
+ const isActive = step.status === 'in-progress';
172
+ const isComplete = step.status === 'complete';
173
+ const isError = step.status === 'error';
174
+
175
+ return (
176
+ <motion.div
177
+ key={step.id}
178
+ initial={{ opacity: 0, y: 20 }}
179
+ animate={{ opacity: 1, y: 0 }}
180
+ transition={{ delay: index * 0.1 }}
181
+ className={`relative p-4 rounded-xl border transition-all ${STEP_COLORS[step.status]}`}
182
+ >
183
+ {/* Step number connector line */}
184
+ {index < steps.length - 1 && (
185
+ <div className="hidden lg:block absolute top-1/2 -right-2 w-4 h-0.5 bg-neutral-800" />
186
+ )}
187
+
188
+ <div className="flex items-start gap-3">
189
+ <div className={`flex-shrink-0 w-10 h-10 rounded-lg flex items-center justify-center ${
190
+ isComplete ? 'bg-green-500/20' :
191
+ isError ? 'bg-red-500/20' :
192
+ isActive ? 'bg-white/10' : 'bg-neutral-800/50'
193
+ }`}>
194
+ {isComplete ? (
195
+ <Check className="w-5 h-5 text-green-400" />
196
+ ) : isError ? (
197
+ <AlertCircle className="w-5 h-5 text-red-400" />
198
+ ) : isActive ? (
199
+ <Loader2 className="w-5 h-5 text-white animate-spin" />
200
+ ) : (
201
+ <Icon className="w-5 h-5 text-neutral-500" />
202
+ )}
203
+ </div>
204
+ <div className="flex-1 min-w-0">
205
+ <div className="flex items-center gap-2">
206
+ <span className={`text-xs font-medium ${
207
+ isActive ? 'text-white' :
208
+ isComplete ? 'text-green-400' :
209
+ isError ? 'text-red-400' : 'text-neutral-500'
210
+ }`}>
211
+ Step {index + 1}
212
+ </span>
213
+ {step.toolsFound !== undefined && step.toolsFound > 0 && (
214
+ <span className="px-1.5 py-0.5 text-xs bg-white/10 rounded text-white">
215
+ +{step.toolsFound}
216
+ </span>
217
+ )}
218
+ </div>
219
+ <h4 className={`font-medium truncate ${
220
+ isActive ? 'text-white' :
221
+ isComplete ? 'text-green-300' :
222
+ isError ? 'text-red-300' : 'text-neutral-400'
223
+ }`}>
224
+ {step.label}
225
+ </h4>
226
+ {step.detail && (
227
+ <p className="text-xs text-neutral-500 truncate mt-0.5">
228
+ {step.detail}
229
+ </p>
230
+ )}
231
+ </div>
232
+ </div>
233
+
234
+ {/* Active step glow effect */}
235
+ {isActive && (
236
+ <motion.div
237
+ className="absolute inset-0 rounded-xl border-2 border-white/20"
238
+ animate={{ opacity: [0.3, 0.6, 0.3] }}
239
+ transition={{ duration: 2, repeat: Infinity }}
240
+ />
241
+ )}
242
+ </motion.div>
243
+ );
244
+ })}
245
+ </div>
246
+ </div>
247
+ );
248
+ }