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,254 @@
1
+ # Repository Classification
2
+
3
+ How GitHub to MCP analyzes and categorizes repositories.
4
+
5
+ ## Why Classification Matters
6
+
7
+ Different repository types require different extraction strategies:
8
+
9
+ - **API SDKs** → Extract from OpenAPI specs
10
+ - **MCP Servers** → Parse existing tool definitions
11
+ - **CLI Tools** → Extract command structure
12
+ - **Libraries** → Default to universal tools
13
+
14
+ ## Classification Types
15
+
16
+ ### mcp-server
17
+
18
+ An existing MCP server implementation.
19
+
20
+ **Indicators:**
21
+ - `@modelcontextprotocol/sdk` in dependencies
22
+ - `mcp.json` configuration file
23
+ - `server.tool()` patterns in code
24
+ - "MCP" in README/description
25
+
26
+ **Extraction Strategy:**
27
+ Parse existing tool definitions and re-export them.
28
+
29
+ ---
30
+
31
+ ### api-sdk
32
+
33
+ A client library for REST or GraphQL APIs.
34
+
35
+ **Indicators:**
36
+ - `openapi.json`, `swagger.yaml` files
37
+ - `schema.graphql` file
38
+ - Package name contains `-sdk`, `-client`, `-api`
39
+ - REST client patterns in code
40
+
41
+ **Extraction Strategy:**
42
+ Parse OpenAPI/GraphQL specs, generate typed API tools.
43
+
44
+ ---
45
+
46
+ ### cli-tool
47
+
48
+ A command-line interface application.
49
+
50
+ **Indicators:**
51
+ - `bin` entry in package.json
52
+ - `argparse`, `commander`, `yargs` dependencies
53
+ - `click`, `typer` for Python
54
+ - CLI documentation in README
55
+
56
+ **Extraction Strategy:**
57
+ Parse CLI help output or code to extract commands.
58
+
59
+ ---
60
+
61
+ ### library
62
+
63
+ A general-purpose programming library.
64
+
65
+ **Indicators:**
66
+ - Published to npm/PyPI
67
+ - Exports functions/classes
68
+ - No specific API or CLI patterns
69
+ - Generic package name
70
+
71
+ **Extraction Strategy:**
72
+ Universal tools only, plus any detected patterns.
73
+
74
+ ---
75
+
76
+ ### documentation
77
+
78
+ A documentation-only repository.
79
+
80
+ **Indicators:**
81
+ - Primarily markdown/MDX files
82
+ - MkDocs, Docusaurus, Nextra config
83
+ - No source code directories
84
+ - "docs" in repo name
85
+
86
+ **Extraction Strategy:**
87
+ Universal tools optimized for documentation browsing.
88
+
89
+ ---
90
+
91
+ ### data
92
+
93
+ A data or configuration repository.
94
+
95
+ **Indicators:**
96
+ - JSON, YAML, CSV files
97
+ - No source code
98
+ - "data", "config", "assets" in name
99
+ - Large binary files
100
+
101
+ **Extraction Strategy:**
102
+ Universal tools for data access.
103
+
104
+ ---
105
+
106
+ ### unknown
107
+
108
+ Repository type couldn't be determined.
109
+
110
+ **Extraction Strategy:**
111
+ Universal tools only.
112
+
113
+ ---
114
+
115
+ ## Classification Logic
116
+
117
+ ```typescript
118
+ function classifyRepository(repo: RepositoryInfo): RepositoryType {
119
+ const { readme, files, packageJson } = repo;
120
+
121
+ // Priority 1: Check for MCP server
122
+ if (isMcpServer(packageJson, files)) {
123
+ return 'mcp-server';
124
+ }
125
+
126
+ // Priority 2: Check for API patterns
127
+ if (hasApiSpecs(files)) {
128
+ return 'api-sdk';
129
+ }
130
+
131
+ // Priority 3: Check for CLI
132
+ if (isCliTool(packageJson, files)) {
133
+ return 'cli-tool';
134
+ }
135
+
136
+ // Priority 4: Check for documentation
137
+ if (isDocumentation(files, readme)) {
138
+ return 'documentation';
139
+ }
140
+
141
+ // Priority 5: Check for data repo
142
+ if (isDataRepo(files)) {
143
+ return 'data';
144
+ }
145
+
146
+ // Priority 6: Check for library
147
+ if (isLibrary(packageJson)) {
148
+ return 'library';
149
+ }
150
+
151
+ return 'unknown';
152
+ }
153
+ ```
154
+
155
+ ## Detection Functions
156
+
157
+ ### isMcpServer
158
+
159
+ ```typescript
160
+ function isMcpServer(pkg: PackageJson, files: FileTree): boolean {
161
+ // Check dependencies
162
+ const deps = { ...pkg.dependencies, ...pkg.devDependencies };
163
+ if (deps['@modelcontextprotocol/sdk']) return true;
164
+
165
+ // Check for MCP config
166
+ if (files.includes('mcp.json')) return true;
167
+
168
+ // Check for MCP patterns in source
169
+ const sourceFiles = files.filter(f => f.endsWith('.ts') || f.endsWith('.js'));
170
+ for (const file of sourceFiles) {
171
+ const content = await readFile(file);
172
+ if (content.includes('server.tool(') ||
173
+ content.includes('McpServer')) {
174
+ return true;
175
+ }
176
+ }
177
+
178
+ return false;
179
+ }
180
+ ```
181
+
182
+ ### hasApiSpecs
183
+
184
+ ```typescript
185
+ function hasApiSpecs(files: FileTree): boolean {
186
+ const specPatterns = [
187
+ 'openapi.json', 'openapi.yaml', 'openapi.yml',
188
+ 'swagger.json', 'swagger.yaml', 'swagger.yml',
189
+ 'api-spec.json', 'api-spec.yaml',
190
+ 'schema.graphql', 'schema.gql',
191
+ ];
192
+
193
+ return specPatterns.some(pattern =>
194
+ files.some(f => f.endsWith(pattern))
195
+ );
196
+ }
197
+ ```
198
+
199
+ ### isCliTool
200
+
201
+ ```typescript
202
+ function isCliTool(pkg: PackageJson, files: FileTree): boolean {
203
+ // Check for bin entry
204
+ if (pkg.bin) return true;
205
+
206
+ // Check for CLI dependencies
207
+ const cliDeps = ['commander', 'yargs', 'meow', 'cac', 'argparse'];
208
+ const deps = Object.keys({ ...pkg.dependencies, ...pkg.devDependencies });
209
+ if (cliDeps.some(d => deps.includes(d))) return true;
210
+
211
+ // Check for cli directory
212
+ if (files.some(f => f.startsWith('cli/') || f.startsWith('bin/'))) {
213
+ return true;
214
+ }
215
+
216
+ return false;
217
+ }
218
+ ```
219
+
220
+ ## Manual Override
221
+
222
+ Classification can be overridden via options:
223
+
224
+ ```typescript
225
+ const result = await generateFromGithub(url, {
226
+ forceType: 'api-sdk' // Override automatic classification
227
+ });
228
+ ```
229
+
230
+ Or via CLI:
231
+
232
+ ```bash
233
+ github-to-mcp <url> --type api-sdk
234
+ ```
235
+
236
+ ## Classification Impact
237
+
238
+ | Type | Universal Tools | OpenAPI | GraphQL | Code Analysis |
239
+ |------|-----------------|---------|---------|---------------|
240
+ | mcp-server | ✅ | ❌ | ❌ | ✅ (MCP patterns) |
241
+ | api-sdk | ✅ | ✅ | ✅ | ❌ |
242
+ | cli-tool | ✅ | ❌ | ❌ | ✅ (CLI patterns) |
243
+ | library | ✅ | ❌ | ❌ | Limited |
244
+ | documentation | ✅ | ❌ | ❌ | ❌ |
245
+ | data | ✅ | ❌ | ❌ | ❌ |
246
+ | unknown | ✅ | ❌ | ❌ | ❌ |
247
+
248
+ ---
249
+
250
+ ## See Also
251
+
252
+ - [How It Works](how-it-works.md) - Full extraction flow
253
+ - [Tool Types](tool-types.md) - Understanding tools
254
+ - [Configuration](../getting-started/configuration.md) - Override options
@@ -0,0 +1,299 @@
1
+ # How It Works
2
+
3
+ A deep dive into the GitHub to MCP conversion process.
4
+
5
+ ## High-Level Flow
6
+
7
+ ```
8
+ ┌─────────────────────────────────────────────────────────────────┐
9
+ │ User Input (GitHub URL) │
10
+ └─────────────────────────────────────────────────────────────────┘
11
+
12
+ ┌─────────────────────────────────────────────────────────────────┐
13
+ │ 1. FETCH │ Download repo metadata, README, file tree │
14
+ └─────────────────────────────────────────────────────────────────┘
15
+
16
+ ┌─────────────────────────────────────────────────────────────────┐
17
+ │ 2. CLASSIFY │ Determine repo type (API, CLI, Library...) │
18
+ └─────────────────────────────────────────────────────────────────┘
19
+
20
+ ┌─────────────────────────────────────────────────────────────────┐
21
+ │ 3. EXTRACT │ Find tools from OpenAPI, GraphQL, code, etc. │
22
+ └─────────────────────────────────────────────────────────────────┘
23
+
24
+ ┌─────────────────────────────────────────────────────────────────┐
25
+ │ 4. GENERATE │ Create MCP server code and tool impls │
26
+ └─────────────────────────────────────────────────────────────────┘
27
+
28
+ ┌─────────────────────────────────────────────────────────────────┐
29
+ │ 5. PACKAGE │ Bundle with dependencies and config │
30
+ └─────────────────────────────────────────────────────────────────┘
31
+ ```
32
+
33
+ ## Step 1: Fetch Repository
34
+
35
+ The process starts by fetching information from GitHub:
36
+
37
+ ```typescript
38
+ // Pseudocode
39
+ const repoInfo = await githubClient.getRepository(url);
40
+ const readme = await githubClient.getReadme(url);
41
+ const fileTree = await githubClient.getFileTree(url, { depth: 3 });
42
+ ```
43
+
44
+ ### What's Fetched
45
+
46
+ | Data | Purpose |
47
+ |------|---------|
48
+ | Repository metadata | Name, description, stars, language |
49
+ | README content | Context for classification |
50
+ | File tree | Find specs, source files |
51
+ | Package files | package.json, pyproject.toml |
52
+ | Spec files | openapi.json, schema.graphql |
53
+
54
+ ### Rate Limiting
55
+
56
+ GitHub API limits are handled automatically:
57
+
58
+ - **Anonymous**: 60 requests/hour (very limited)
59
+ - **Authenticated**: 5,000 requests/hour (recommended)
60
+
61
+ ## Step 2: Classify Repository
62
+
63
+ The repo is analyzed to determine its type:
64
+
65
+ ```typescript
66
+ function classifyRepository(repoInfo): RepositoryType {
67
+ // Check for MCP server indicators
68
+ if (hasMcpDependency(repoInfo) || hasMcpServerFile(repoInfo)) {
69
+ return 'mcp-server';
70
+ }
71
+
72
+ // Check for API patterns
73
+ if (hasOpenApiSpec(repoInfo) || hasGraphqlSchema(repoInfo)) {
74
+ return 'api-sdk';
75
+ }
76
+
77
+ // Check for CLI patterns
78
+ if (hasCliPackage(repoInfo) || hasBinEntry(repoInfo)) {
79
+ return 'cli-tool';
80
+ }
81
+
82
+ // ... more checks
83
+ }
84
+ ```
85
+
86
+ ### Classification Types
87
+
88
+ | Type | Indicators | Tool Extraction |
89
+ |------|------------|-----------------|
90
+ | `mcp-server` | `@modelcontextprotocol/sdk` dependency | Parse existing tools |
91
+ | `api-sdk` | OpenAPI spec, REST client patterns | Extract API endpoints |
92
+ | `cli-tool` | `bin` in package.json, argparse | Extract CLI commands |
93
+ | `library` | Generic npm/pip package | Universal tools only |
94
+ | `documentation` | Mostly markdown files | Universal tools only |
95
+
96
+ ## Step 3: Extract Tools
97
+
98
+ Tools are extracted from multiple sources:
99
+
100
+ ### Universal Tools
101
+
102
+ Always included (unless disabled):
103
+
104
+ ```typescript
105
+ const universalTools = [
106
+ { name: 'get_readme', source: 'universal' },
107
+ { name: 'list_files', source: 'universal' },
108
+ { name: 'read_file', source: 'universal' },
109
+ { name: 'search_code', source: 'universal' },
110
+ ];
111
+ ```
112
+
113
+ ### OpenAPI Extraction
114
+
115
+ ```typescript
116
+ // Find and parse OpenAPI specs
117
+ const specs = findOpenApiSpecs(fileTree);
118
+
119
+ for (const spec of specs) {
120
+ const parsed = await parseOpenApi(spec.content);
121
+
122
+ for (const path of Object.keys(parsed.paths)) {
123
+ for (const method of ['get', 'post', 'put', 'delete']) {
124
+ const operation = parsed.paths[path][method];
125
+ if (operation) {
126
+ tools.push(createToolFromOperation(operation, path, method));
127
+ }
128
+ }
129
+ }
130
+ }
131
+ ```
132
+
133
+ ### GraphQL Extraction
134
+
135
+ ```typescript
136
+ // Parse GraphQL schema
137
+ const schema = parseGraphqlSchema(schemaContent);
138
+
139
+ // Extract queries as tools
140
+ for (const query of schema.queries) {
141
+ tools.push({
142
+ name: query.name,
143
+ description: query.description,
144
+ inputSchema: convertGraphqlArgsToJsonSchema(query.args),
145
+ source: 'graphql',
146
+ });
147
+ }
148
+
149
+ // Extract mutations as tools
150
+ for (const mutation of schema.mutations) {
151
+ tools.push({
152
+ name: mutation.name,
153
+ // ...
154
+ });
155
+ }
156
+ ```
157
+
158
+ ### Code Analysis
159
+
160
+ For MCP servers and Python packages:
161
+
162
+ ```typescript
163
+ // Find @mcp.tool decorators
164
+ const mcpTools = findMcpDecorators(sourceFiles);
165
+
166
+ // Find FastAPI/Flask routes
167
+ const apiRoutes = findApiRoutes(sourceFiles);
168
+
169
+ // Find CLI commands
170
+ const cliCommands = findCliCommands(sourceFiles);
171
+ ```
172
+
173
+ ## Step 4: Generate Code
174
+
175
+ The extracted tools are converted to working MCP server code:
176
+
177
+ ### Server Template
178
+
179
+ ```typescript
180
+ const serverCode = `
181
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
182
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
183
+
184
+ const server = new Server({
185
+ name: '${repoName}-mcp',
186
+ version: '1.0.0',
187
+ }, {
188
+ capabilities: {
189
+ tools: {},
190
+ },
191
+ });
192
+
193
+ // Register tools
194
+ ${tools.map(tool => generateToolRegistration(tool)).join('\n')}
195
+
196
+ // Start server
197
+ const transport = new StdioServerTransport();
198
+ await server.connect(transport);
199
+ `;
200
+ ```
201
+
202
+ ### Tool Implementation
203
+
204
+ Each tool gets an implementation:
205
+
206
+ ```typescript
207
+ function generateToolImplementation(tool: Tool): string {
208
+ if (tool.source === 'universal') {
209
+ return universalImplementations[tool.name];
210
+ }
211
+
212
+ if (tool.source === 'openapi') {
213
+ return `
214
+ async function ${tool.name}(params) {
215
+ const response = await fetch('${tool.endpoint}', {
216
+ method: '${tool.method}',
217
+ headers: { 'Content-Type': 'application/json' },
218
+ body: JSON.stringify(params),
219
+ });
220
+ return response.json();
221
+ }`;
222
+ }
223
+
224
+ // ... other sources
225
+ }
226
+ ```
227
+
228
+ ## Step 5: Package Output
229
+
230
+ Finally, everything is bundled:
231
+
232
+ ### Output Structure
233
+
234
+ ```
235
+ output/
236
+ ├── package.json # Dependencies
237
+ ├── tsconfig.json # TypeScript config
238
+ ├── server.ts # Main server (source)
239
+ ├── server.mjs # Compiled server
240
+ ├── tools/
241
+ │ ├── index.ts
242
+ │ ├── universal/
243
+ │ │ ├── read_file.ts
244
+ │ │ └── ...
245
+ │ └── extracted/
246
+ │ ├── create_customer.ts
247
+ │ └── ...
248
+ └── README.md # Usage instructions
249
+ ```
250
+
251
+ ### Generated package.json
252
+
253
+ ```json
254
+ {
255
+ "name": "repo-name-mcp",
256
+ "version": "1.0.0",
257
+ "type": "module",
258
+ "main": "server.mjs",
259
+ "scripts": {
260
+ "start": "node server.mjs",
261
+ "build": "tsc"
262
+ },
263
+ "dependencies": {
264
+ "@modelcontextprotocol/sdk": "^1.0.0"
265
+ }
266
+ }
267
+ ```
268
+
269
+ ---
270
+
271
+ ## Performance Considerations
272
+
273
+ ### Caching
274
+
275
+ - Repository metadata is cached for 5 minutes
276
+ - File contents are cached per session
277
+ - OpenAPI parsing results are memoized
278
+
279
+ ### Parallel Processing
280
+
281
+ - Multiple files are fetched in parallel
282
+ - Tool extraction runs concurrently
283
+ - Limited by GitHub API rate limits
284
+
285
+ ### Size Limits
286
+
287
+ | Limit | Default | Purpose |
288
+ |-------|---------|---------|
289
+ | Max depth | 3 | Prevent scanning huge repos |
290
+ | Max file size | 100KB | Skip large binary files |
291
+ | Max files | 1000 | Reasonable processing time |
292
+
293
+ ---
294
+
295
+ ## See Also
296
+
297
+ - [Tool Types](tool-types.md) - Understanding extracted tools
298
+ - [Classification](classification.md) - Repository classification
299
+ - [Architecture](../contributing/architecture.md) - Code architecture
@@ -0,0 +1,77 @@
1
+ # Concepts
2
+
3
+ Understand how GitHub to MCP works under the hood.
4
+
5
+ ## Core Concepts
6
+
7
+ <div class="feature-grid" markdown>
8
+
9
+ <div class="feature-card" markdown>
10
+
11
+ ### [How It Works](how-it-works.md)
12
+
13
+ The end-to-end flow from GitHub URL to MCP server.
14
+
15
+ </div>
16
+
17
+ <div class="feature-card" markdown>
18
+
19
+ ### [Tool Types](tool-types.md)
20
+
21
+ Understanding universal and extracted tools.
22
+
23
+ </div>
24
+
25
+ <div class="feature-card" markdown>
26
+
27
+ ### [Repository Classification](classification.md)
28
+
29
+ How repos are analyzed and categorized.
30
+
31
+ </div>
32
+
33
+ <div class="feature-card" markdown>
34
+
35
+ ### [MCP Protocol](mcp-protocol.md)
36
+
37
+ Understanding the Model Context Protocol.
38
+
39
+ </div>
40
+
41
+ </div>
42
+
43
+ ## Quick Overview
44
+
45
+ ### What is MCP?
46
+
47
+ The **Model Context Protocol (MCP)** is an open standard that enables AI assistants to interact with external tools and data sources. It provides a standardized way for AI models to:
48
+
49
+ - Call external functions (tools)
50
+ - Access external data (resources)
51
+ - Use predefined conversation templates (prompts)
52
+
53
+ ### What GitHub to MCP Does
54
+
55
+ 1. **Fetches** a GitHub repository
56
+ 2. **Analyzes** its structure and contents
57
+ 3. **Extracts** tool definitions from various sources
58
+ 4. **Generates** a complete MCP server
59
+ 5. **Packages** everything for easy deployment
60
+
61
+ ### Why This Matters
62
+
63
+ Without MCP, AI assistants are limited to their training data. With MCP:
64
+
65
+ - **Claude** can read your actual codebase
66
+ - **Cursor** can call real API endpoints
67
+ - **ChatGPT** can search your documentation
68
+
69
+ ## Key Terms
70
+
71
+ | Term | Definition |
72
+ |------|------------|
73
+ | **MCP Server** | A program that exposes tools via the MCP protocol |
74
+ | **Tool** | A function that an AI can call with parameters |
75
+ | **Resource** | Static data that an AI can read |
76
+ | **Transport** | How the AI communicates with the server (stdio, HTTP) |
77
+ | **Schema** | JSON Schema describing a tool's input/output |