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
package/README.md ADDED
@@ -0,0 +1,1028 @@
1
+ <p align="center">
2
+ <img src="apps/web/public/logo.svg" alt="GitHub to MCP" width="120" height="120" />
3
+ </p>
4
+
5
+ <h1 align="center">GitHub to MCP</h1>
6
+
7
+ <p align="center">
8
+ <strong>Convert any GitHub repository into an MCP server in seconds</strong>
9
+ </p>
10
+
11
+ <p align="center">
12
+ Give Claude, ChatGPT, Cursor, Windsurf, Cline, and any AI assistant instant access to any codebase.
13
+ </p>
14
+
15
+ <p align="center">
16
+ <a href="https://opensource.org/licenses/Apache-2.0"><img src="https://img.shields.io/badge/License-Apache%202.0-blue.svg" alt="License" /></a>
17
+ <a href="https://www.npmjs.com/package/@nirholas/github-to-mcp"><img src="https://img.shields.io/npm/v/@nirholas/github-to-mcp.svg" alt="npm version" /></a>
18
+ <a href="https://github.com/nirholas/github-to-mcp/stargazers"><img src="https://img.shields.io/github/stars/nirholas/github-to-mcp.svg?style=social" alt="GitHub Stars" /></a>
19
+ </p>
20
+
21
+ <p align="center">
22
+ <a href="https://github-to-mcp.vercel.app">🌐 Web App</a> •
23
+ <a href="#-quick-start">🚀 Quick Start</a> •
24
+ <a href="#-features">✨ Features</a> •
25
+ <a href="https://docs-github-to-mcp.vercel.app">📖 Docs</a>
26
+ </p>
27
+
28
+ ---
29
+
30
+ ## 📋 Table of Contents
31
+
32
+ - [Introduction](#-introduction)
33
+ - [What is MCP](#-what-is-mcp)
34
+ - [Quick Start](#-quick-start)
35
+ - [Features](#-features)
36
+ - [Installation](#-installation)
37
+ - [Usage](#-usage)
38
+ - [How It Works](#-how-it-works)
39
+ - [Generated Tools](#-generated-tools)
40
+ - [Configuration](#%EF%B8%8F-configuration)
41
+ - [Integrating with AI Assistants](#-integrating-with-ai-assistants)
42
+ - [Interactive Playground](#-interactive-playground)
43
+ - [Project Structure](#-project-structure)
44
+ - [Development](#-development)
45
+ - [Architecture Overview](#-architecture-overview)
46
+ - [Supported Input Formats](#-supported-input-formats)
47
+ - [Output Formats](#-output-formats)
48
+ - [Limitations](#%EF%B8%8F-limitations)
49
+ - [Troubleshooting](#-troubleshooting)
50
+ - [Contributing](#-contributing)
51
+ - [License](#-license)
52
+
53
+ ---
54
+
55
+ ## 📖 Introduction
56
+
57
+ GitHub to MCP bridges the gap between code repositories and AI assistants. Instead of manually describing APIs or copying code snippets into chat windows, this tool generates a standardized interface that allows AI systems to programmatically explore, read, and interact with any GitHub repository.
58
+
59
+ The generated MCP servers provide tools that AI assistants can invoke to read files, search code, list directory structures, and call API endpoints discovered within the repository. This enables AI assistants to have deep, structured access to codebases without requiring manual context management.
60
+
61
+ ```
62
+ ┌─────────────────────────────────────────────────────────────┐
63
+ │ GitHub Repository │
64
+ └─────────────────────────────────────────────────────────────┘
65
+
66
+ ┌─────────────────────────────────────────────────────────────┐
67
+ │ 1. Fetch & Classify → Detect repo type (API/CLI/Lib) │
68
+ │ 2. Extract Tools → OpenAPI, GraphQL, Code, README │
69
+ │ 3. Generate Server → TypeScript or Python MCP server │
70
+ │ 4. Bundle Output → Complete package with dependencies │
71
+ └─────────────────────────────────────────────────────────────┘
72
+
73
+ ┌─────────────────────────────────────────────────────────────┐
74
+ │ Ready-to-use MCP Server + Config │
75
+ └─────────────────────────────────────────────────────────────┘
76
+ ```
77
+
78
+ ---
79
+
80
+ ## 🔌 What is MCP
81
+
82
+ The **Model Context Protocol (MCP)** is an open standard developed by Anthropic that defines how AI assistants communicate with external tools and data sources. MCP servers expose "tools" that AI models can invoke, along with "resources" that provide context and "prompts" that guide interactions.
83
+
84
+ When you connect an MCP server to an AI assistant like Claude Desktop, the assistant gains the ability to call the tools defined by that server. For example, a GitHub MCP server might expose tools like `read_file`, `search_code`, or `list_pull_requests`, which the AI can invoke to gather information needed to answer questions or complete tasks.
85
+
86
+ This project generates MCP servers from GitHub repositories, automatically creating tools based on the repository's contents, APIs, and documentation.
87
+
88
+ ---
89
+
90
+ ## 🚀 Quick Start
91
+
92
+ ### 🌐 Web UI (Easiest)
93
+
94
+ Visit **[github-to-mcp.vercel.app](https://github-to-mcp.vercel.app)** — Paste any GitHub URL, click Generate, download your MCP server.
95
+
96
+ ### 💻 CLI (One Command)
97
+
98
+ ```bash
99
+ npx @nirholas/github-to-mcp https://github.com/stripe/stripe-node
100
+ ```
101
+
102
+ ### 📦 Programmatic (For Automation)
103
+
104
+ ```typescript
105
+ import { generateFromGithub } from '@nirholas/github-to-mcp';
106
+
107
+ const result = await generateFromGithub('https://github.com/stripe/stripe-node');
108
+ console.log(`Generated ${result.tools.length} tools`);
109
+ await result.save('./my-mcp-server');
110
+ ```
111
+
112
+ ---
113
+
114
+ ## ✨ Features
115
+
116
+ <table>
117
+ <tr>
118
+ <td width="50%">
119
+
120
+ ### 🔬 Repository Analysis
121
+ - Automatic repository type classification (API, library, CLI tool, MCP server, documentation)
122
+ - Detection and parsing of OpenAPI/Swagger specifications
123
+ - GraphQL schema extraction and query/mutation tool generation
124
+ - gRPC/Protobuf service definition parsing
125
+ - AsyncAPI specification support for event-driven APIs
126
+ - Source code analysis for function extraction
127
+
128
+ </td>
129
+ <td width="50%">
130
+
131
+ ### 🌍 Multi-Language Support
132
+
133
+ **Input repositories:**
134
+ - TypeScript and JavaScript
135
+ - Python
136
+ - Go
137
+ - Java and Kotlin
138
+ - Rust
139
+ - Ruby
140
+ - C# and F#
141
+
142
+ **Output MCP servers:**
143
+ - TypeScript (using the official MCP SDK)
144
+ - Python (using the MCP Python SDK)
145
+ - Go (using community MCP libraries)
146
+
147
+ </td>
148
+ </tr>
149
+ <tr>
150
+ <td width="50%">
151
+
152
+ ### 🔧 Tool Extraction
153
+ - OpenAPI endpoints become callable tools with typed parameters
154
+ - GraphQL queries and mutations become tools with input validation
155
+ - Python functions decorated with `@mcp.tool` are preserved
156
+ - CLI commands documented in READMEs become executable tools
157
+ - HTTP route handlers from popular frameworks are detected
158
+
159
+ </td>
160
+ <td width="50%">
161
+
162
+ ### ⚡ Code Generation
163
+ - Complete, runnable MCP server code with all dependencies
164
+ - Configuration files for Claude Desktop, Cursor, and other clients
165
+ - Docker deployment templates
166
+ - TypeScript type definitions for all generated tools
167
+
168
+ </td>
169
+ </tr>
170
+ </table>
171
+
172
+ ---
173
+
174
+ ## 📥 Installation
175
+
176
+ ### From Source
177
+
178
+ Clone the repository and install dependencies:
179
+
180
+ ```bash
181
+ git clone https://github.com/nirholas/github-to-mcp.git
182
+ cd github-to-mcp
183
+ pnpm install
184
+ pnpm build
185
+ ```
186
+
187
+ ### Using the Web Interface
188
+
189
+ The web application is deployed at **[github-to-mcp.vercel.app](https://github-to-mcp.vercel.app)**. Use the browser-based interface without any local installation.
190
+
191
+ ---
192
+
193
+ ## 📖 Usage
194
+
195
+ ### 🌐 Web Interface
196
+
197
+ The web interface provides the simplest way to convert repositories:
198
+
199
+ 1. Navigate to the web application
200
+ 2. Enter a GitHub repository URL (e.g., `https://github.com/owner/repo`)
201
+ 3. Optionally configure extraction options
202
+ 4. Click "Generate" to analyze the repository
203
+ 5. Review the generated tools and code
204
+ 6. Download the MCP server package or copy the configuration
205
+
206
+ The web interface also provides an interactive playground where you can test generated tools before downloading.
207
+
208
+ ### 💻 Command Line Interface
209
+
210
+ After building the project locally, you can use the CLI:
211
+
212
+ ```bash
213
+ # Basic usage
214
+ node packages/core/dist/cli.mjs https://github.com/owner/repo
215
+
216
+ # Specify output directory
217
+ node packages/core/dist/cli.mjs https://github.com/owner/repo --output ./my-mcp-server
218
+
219
+ # Generate Python instead of TypeScript
220
+ node packages/core/dist/cli.mjs https://github.com/owner/repo --language python
221
+
222
+ # Include only specific extraction sources
223
+ node packages/core/dist/cli.mjs https://github.com/owner/repo --sources openapi,readme
224
+
225
+ # Use a GitHub token for private repos or higher rate limits
226
+ GITHUB_TOKEN=ghp_xxx node packages/core/dist/cli.mjs https://github.com/owner/repo
227
+ ```
228
+
229
+ ### 📦 Programmatic API
230
+
231
+ Import the generator in your own TypeScript or JavaScript code:
232
+
233
+ ```typescript
234
+ import { GithubToMcpGenerator } from '@nirholas/github-to-mcp';
235
+
236
+ const generator = new GithubToMcpGenerator({
237
+ githubToken: process.env.GITHUB_TOKEN,
238
+ sources: ['openapi', 'readme', 'code'],
239
+ outputLanguage: 'typescript'
240
+ });
241
+
242
+ const result = await generator.generate('https://github.com/owner/repo');
243
+
244
+ console.log(`Repository: ${result.name}`);
245
+ console.log(`Classification: ${result.classification.type}`);
246
+ console.log(`Generated ${result.tools.length} tools`);
247
+
248
+ // Access the generated code
249
+ console.log(result.code);
250
+
251
+ // Save to disk
252
+ await result.save('./output-directory');
253
+ ```
254
+
255
+ <details>
256
+ <summary><strong>📋 Generator Options Interface</strong></summary>
257
+
258
+ ```typescript
259
+ interface GithubToMcpOptions {
260
+ // GitHub personal access token for API authentication
261
+ githubToken?: string;
262
+
263
+ // Which sources to extract tools from
264
+ // Default: ['openapi', 'readme', 'code', 'graphql', 'mcp']
265
+ sources?: Array<'openapi' | 'readme' | 'code' | 'graphql' | 'grpc' | 'mcp'>;
266
+
267
+ // Output language for generated server
268
+ // Default: 'typescript'
269
+ outputLanguage?: 'typescript' | 'python' | 'go';
270
+
271
+ // Include universal tools (read_file, list_files, etc.)
272
+ // Default: true
273
+ includeUniversalTools?: boolean;
274
+
275
+ // Maximum number of tools to generate
276
+ // Default: 100
277
+ maxTools?: number;
278
+
279
+ // Specific branch to analyze
280
+ // Default: repository's default branch
281
+ branch?: string;
282
+ }
283
+ ```
284
+
285
+ </details>
286
+
287
+ ---
288
+
289
+ ## ⚙️ How It Works
290
+
291
+ The conversion process follows these stages:
292
+
293
+ ### 🏷️ Repository Classification
294
+
295
+ The generator first analyzes the repository to determine its type and structure:
296
+
297
+ 1. Fetch repository metadata from the GitHub API
298
+ 2. Download and parse the README file
299
+ 3. Examine package.json, setup.py, go.mod, or other manifest files
300
+ 4. Scan for API specification files (openapi.json, schema.graphql, etc.)
301
+ 5. Classify the repository as one of:
302
+
303
+ | Classification | Description |
304
+ |----------------|-------------|
305
+ | `mcp-server` | An existing MCP server implementation |
306
+ | `api-sdk` | A client library for an API |
307
+ | `cli-tool` | A command-line application |
308
+ | `library` | A general-purpose code library |
309
+ | `documentation` | Primarily documentation content |
310
+ | `data` | Data files or datasets |
311
+ | `unknown` | Unclassified repository |
312
+
313
+ Classification influences which extraction strategies are prioritized and how tools are named.
314
+
315
+ ### 🔍 Tool Extraction
316
+
317
+ Tools are extracted from multiple sources within the repository:
318
+
319
+ <details>
320
+ <summary><strong>📄 OpenAPI/Swagger Extraction</strong></summary>
321
+
322
+ When an OpenAPI specification is found:
323
+ 1. Parse the specification (JSON or YAML, v2 or v3)
324
+ 2. Extract each endpoint as a potential tool
325
+ 3. Convert path parameters, query parameters, and request bodies to tool input schemas
326
+ 4. Generate descriptions from operation summaries and descriptions
327
+ 5. Map HTTP methods to appropriate tool semantics
328
+
329
+ </details>
330
+
331
+ <details>
332
+ <summary><strong>🔷 GraphQL Extraction</strong></summary>
333
+
334
+ When GraphQL schemas are found:
335
+ 1. Parse .graphql or .gql schema files
336
+ 2. Extract Query type fields as read-only tools
337
+ 3. Extract Mutation type fields as write tools
338
+ 4. Convert GraphQL input types to JSON Schema for tool inputs
339
+ 5. Handle nested types and custom scalars
340
+
341
+ </details>
342
+
343
+ <details>
344
+ <summary><strong>📖 README Extraction</strong></summary>
345
+
346
+ The README is analyzed for:
347
+ 1. Code blocks showing CLI usage patterns
348
+ 2. API endpoint examples with curl or fetch
349
+ 3. Function call examples with parameters
350
+ 4. Installation and usage instructions
351
+
352
+ Extracted examples become tools with inferred parameter schemas.
353
+
354
+ </details>
355
+
356
+ <details>
357
+ <summary><strong>💻 Source Code Extraction</strong></summary>
358
+
359
+ For supported languages, the source code is analyzed:
360
+ 1. **Python**: Functions decorated with `@mcp.tool`, `@server.tool`, or similar
361
+ 2. **TypeScript**: Exported functions with JSDoc annotations
362
+ 3. **Go**: HTTP handlers from Gin, Echo, Chi, Fiber, or Gorilla Mux
363
+ 4. **Java/Kotlin**: Methods annotated with `@GetMapping`, `@PostMapping`, etc.
364
+ 5. **Rust**: Route handlers from Actix-web, Axum, or Rocket
365
+
366
+ </details>
367
+
368
+ <details>
369
+ <summary><strong>🔌 MCP Server Introspection</strong></summary>
370
+
371
+ If the repository is already an MCP server:
372
+ 1. Detect `server.tool()` definitions
373
+ 2. Extract tool names, descriptions, and schemas
374
+ 3. Preserve existing tool implementations where possible
375
+
376
+ </details>
377
+
378
+ ### 🏗️ Code Generation
379
+
380
+ After tools are extracted, the generator produces:
381
+
382
+ 1. A main server file implementing the MCP protocol
383
+ 2. Tool handler functions for each extracted tool
384
+ 3. Type definitions for all input and output schemas
385
+ 4. A package.json or equivalent with required dependencies
386
+ 5. Configuration files for popular MCP clients
387
+ 6. Optional Docker deployment files
388
+
389
+ The generated code is complete and runnable without modification.
390
+
391
+ ---
392
+
393
+ ## 🛠️ Generated Tools
394
+
395
+ ### 🌐 Universal Tools
396
+
397
+ Every generated MCP server includes these baseline tools for repository exploration:
398
+
399
+ | Tool | Description | Parameters |
400
+ |------|-------------|------------|
401
+ | `get_readme` | Retrieve the repository's README content | None |
402
+ | `list_files` | List files and directories at a given path | `path` (optional, defaults to root) |
403
+ | `read_file` | Read the contents of a specific file | `path` (required) |
404
+ | `search_code` | Search for patterns across the repository | `query` (required), `path` (optional) |
405
+
406
+ These tools ensure that even if no APIs or functions are detected, the AI assistant can still explore and understand the repository.
407
+
408
+ ### 🔧 Extracted Tools
409
+
410
+ Additional tools are generated based on repository contents:
411
+
412
+ #### From OpenAPI Specifications
413
+
414
+ Each API endpoint becomes a tool:
415
+
416
+ ```
417
+ POST /users → create_user(name: string, email: string)
418
+ GET /users/{id} → get_user(id: string)
419
+ PUT /users/{id} → update_user(id: string, name?: string, email?: string)
420
+ DELETE /users/{id} → delete_user(id: string)
421
+ GET /users → list_users(page?: number, limit?: number)
422
+ ```
423
+
424
+ #### From GraphQL Schemas
425
+
426
+ Queries and mutations become tools:
427
+
428
+ ```graphql
429
+ type Query {
430
+ user(id: ID!): User → get_user(id: string)
431
+ users(first: Int): [User] → list_users(first?: number)
432
+ }
433
+
434
+ type Mutation {
435
+ createUser(input: CreateUserInput!): User → create_user(input: object)
436
+ }
437
+ ```
438
+
439
+ #### From Python Code
440
+
441
+ ```python
442
+ @server.tool()
443
+ async def analyze_sentiment(text: str) -> str:
444
+ """Analyze the sentiment of the given text."""
445
+ # Implementation
446
+ ```
447
+
448
+ Becomes: `analyze_sentiment(text: string)` → "Analyze the sentiment of the given text."
449
+
450
+ #### From README Examples
451
+
452
+ CLI commands documented in READMEs:
453
+
454
+ ```bash
455
+ # Create a new project
456
+ mycli create --name myproject --template typescript
457
+ ```
458
+
459
+ Becomes: `mycli_create(name: string, template?: string)`
460
+
461
+ ---
462
+
463
+ ## ⚙️ Configuration
464
+
465
+ ### 🔐 Environment Variables
466
+
467
+ | Variable | Description | Required |
468
+ |----------|-------------|----------|
469
+ | `GITHUB_TOKEN` | GitHub personal access token for API access | No (but recommended) |
470
+ | `GITHUB_API_URL` | Custom GitHub API URL for Enterprise | No |
471
+
472
+ #### GitHub Token
473
+
474
+ Without a token, GitHub API requests are limited to **60 per hour**. With a token, the limit increases to **5,000 per hour**. For private repositories, a token with appropriate access is required.
475
+
476
+ Create a token at: https://github.com/settings/tokens
477
+
478
+ **Required scopes:**
479
+ - `repo` (for private repositories)
480
+ - `public_repo` (for public repositories only)
481
+
482
+ ### 🎛️ Generator Options
483
+
484
+ When using the programmatic API, you can configure:
485
+
486
+ ```typescript
487
+ const generator = new GithubToMcpGenerator({
488
+ // Authentication
489
+ githubToken: process.env.GITHUB_TOKEN,
490
+
491
+ // Extraction sources to enable
492
+ sources: ['openapi', 'readme', 'code', 'graphql', 'grpc', 'mcp'],
493
+
494
+ // Output configuration
495
+ outputLanguage: 'typescript', // or 'python', 'go'
496
+
497
+ // Tool filtering
498
+ includeUniversalTools: true,
499
+ maxTools: 100,
500
+
501
+ // Repository options
502
+ branch: 'main', // specific branch to analyze
503
+ });
504
+ ```
505
+
506
+ ---
507
+
508
+ ## 🤖 Integrating with AI Assistants
509
+
510
+ ### <img src="https://claude.ai/favicon.ico" width="16" height="16" /> Claude Desktop
511
+
512
+ Add the generated server to your Claude Desktop configuration:
513
+
514
+ | Platform | Config Path |
515
+ |----------|-------------|
516
+ | **macOS** | `~/Library/Application Support/Claude/claude_desktop_config.json` |
517
+ | **Windows** | `%APPDATA%\Claude\claude_desktop_config.json` |
518
+
519
+ ```json
520
+ {
521
+ "mcpServers": {
522
+ "my-repo": {
523
+ "command": "node",
524
+ "args": ["/absolute/path/to/generated/server.mjs"],
525
+ "env": {
526
+ "GITHUB_TOKEN": "ghp_xxxx"
527
+ }
528
+ }
529
+ }
530
+ }
531
+ ```
532
+
533
+ > ⚠️ Restart Claude Desktop after modifying the configuration.
534
+
535
+ ### <img src="https://cursor.sh/favicon.ico" width="16" height="16" /> Cursor
536
+
537
+ Cursor supports MCP servers through its settings. Add the server path in Cursor's MCP configuration panel, or edit the configuration file directly:
538
+
539
+ ```json
540
+ {
541
+ "mcp": {
542
+ "servers": {
543
+ "my-repo": {
544
+ "command": "node",
545
+ "args": ["/path/to/server.mjs"]
546
+ }
547
+ }
548
+ }
549
+ }
550
+ ```
551
+
552
+ ### 💻 VS Code with Continue
553
+
554
+ If using the Continue extension for VS Code:
555
+
556
+ ```json
557
+ {
558
+ "models": [...],
559
+ "mcpServers": {
560
+ "my-repo": {
561
+ "command": "node",
562
+ "args": ["/path/to/server.mjs"]
563
+ }
564
+ }
565
+ }
566
+ ```
567
+
568
+ ### 🔌 Other MCP Clients
569
+
570
+ Any MCP-compatible client can use the generated servers. The server communicates over stdio by default, accepting JSON-RPC messages on stdin and responding on stdout.
571
+
572
+ To run manually:
573
+
574
+ ```bash
575
+ node server.mjs
576
+ ```
577
+
578
+ The server will wait for MCP protocol messages on stdin.
579
+
580
+ ---
581
+
582
+ ## 🎮 Interactive Playground
583
+
584
+ The web application includes an interactive playground for testing generated tools:
585
+
586
+ 1. After generating tools from a repository, click **"Open in Playground"**
587
+ 2. Select a tool from the list
588
+ 3. Fill in the required parameters
589
+ 4. Click **"Execute"** to run the tool
590
+ 5. View the JSON response
591
+
592
+ The playground executes tools in a sandboxed environment and displays results in real-time.
593
+
594
+ ### 🔗 Sharing Playground Sessions
595
+
596
+ You can share your generated tools with others:
597
+
598
+ | Parameter | Description |
599
+ |-----------|-------------|
600
+ | `?code=<base64>` | Base64-encoded TypeScript server code |
601
+ | `?gist=<id>` | GitHub Gist ID containing server code |
602
+ | `?name=<name>` | Display name for the server |
603
+
604
+ **Example:**
605
+ ```
606
+ https://github-to-mcp.vercel.app/playground?gist=abc123&name=My%20API
607
+ ```
608
+
609
+ ---
610
+
611
+ ## 📁 Project Structure
612
+
613
+ ```
614
+ github-to-mcp/
615
+ ├── 📂 apps/
616
+ │ ├── 📂 web/ # Next.js web application
617
+ │ │ ├── 📂 app/ # Next.js App Router pages
618
+ │ │ │ ├── 📂 api/ # API routes for conversion
619
+ │ │ │ ├── 📂 convert/ # Conversion page
620
+ │ │ │ ├── 📂 playground/ # Interactive playground
621
+ │ │ │ └── 📂 dashboard/ # User dashboard
622
+ │ │ ├── 📂 components/ # React components
623
+ │ │ ├── 📂 hooks/ # Custom React hooks
624
+ │ │ ├── 📂 lib/ # Utility functions
625
+ │ │ └── 📂 types/ # TypeScript type definitions
626
+ │ └── 📂 vscode/ # VS Code extension (in development)
627
+
628
+ ├── 📂 packages/
629
+ │ ├── 📂 core/ # Main conversion engine
630
+ │ │ └── 📂 src/
631
+ │ │ ├── index.ts # GithubToMcpGenerator class
632
+ │ │ ├── github-client.ts # GitHub API client
633
+ │ │ ├── readme-extractor.ts # README parsing
634
+ │ │ ├── code-extractor.ts # Source code analysis
635
+ │ │ ├── graphql-extractor.ts # GraphQL schema parsing
636
+ │ │ ├── mcp-introspector.ts # Existing MCP server detection
637
+ │ │ ├── python-generator.ts # Python output generation
638
+ │ │ ├── go-generator.ts # Go output generation
639
+ │ │ └── types.ts # Type definitions
640
+ │ │
641
+ │ ├── 📂 openapi-parser/ # OpenAPI specification parser
642
+ │ │ └── 📂 src/
643
+ │ │ ├── parser.ts # OpenAPI parsing logic
644
+ │ │ ├── analyzer.ts # Endpoint analysis
645
+ │ │ ├── transformer.ts # Schema transformation
646
+ │ │ └── generator.ts # Tool generation
647
+ │ │
648
+ │ ├── 📂 mcp-server/ # MCP server utilities
649
+ │ │ └── 📂 src/
650
+ │ │ ├── server.ts # Base MCP server implementation
651
+ │ │ └── tools.ts # Tool registration helpers
652
+ │ │
653
+ │ └── 📂 registry/ # Tool registry management
654
+ │ └── 📂 src/
655
+ │ └── index.ts # Registry operations
656
+
657
+ ├── 📂 mkdocs/ # Documentation site (MkDocs)
658
+ │ ├── 📂 docs/ # Markdown documentation
659
+ │ └── mkdocs.yml # MkDocs configuration
660
+
661
+ ├── 📂 tests/ # Integration tests
662
+ │ ├── 📂 fixtures/ # Test fixture repositories
663
+ │ │ ├── 📂 express-app/ # Express.js test app
664
+ │ │ ├── 📂 fastapi-app/ # FastAPI test app
665
+ │ │ ├── 📂 graphql/ # GraphQL test schemas
666
+ │ │ └── 📂 openapi/ # OpenAPI test specs
667
+ │ └── 📂 integration/ # Integration test files
668
+
669
+ ├── 📂 templates/ # Code generation templates
670
+ │ ├── Dockerfile.python.template
671
+ │ └── Dockerfile.typescript.template
672
+
673
+ ├── package.json # Root package configuration
674
+ ├── pnpm-workspace.yaml # pnpm workspace configuration
675
+ ├── tsconfig.json # TypeScript configuration
676
+ └── vitest.config.ts # Test configuration
677
+ ```
678
+
679
+ ---
680
+
681
+ ## 🔨 Development
682
+
683
+ ### Prerequisites
684
+
685
+ | Requirement | Version |
686
+ |-------------|---------|
687
+ | Node.js | 22.x or later |
688
+ | pnpm | 10.x or later |
689
+ | Git | 2.x or later |
690
+
691
+ ### Local Setup
692
+
693
+ ```bash
694
+ # Clone the repository
695
+ git clone https://github.com/nirholas/github-to-mcp.git
696
+ cd github-to-mcp
697
+
698
+ # Install dependencies
699
+ pnpm install
700
+
701
+ # Build all packages
702
+ pnpm build
703
+
704
+ # Start the development server
705
+ pnpm dev
706
+ ```
707
+
708
+ The web application will be available at `http://localhost:3000`.
709
+
710
+ ### Building
711
+
712
+ ```bash
713
+ # Build all packages
714
+ pnpm build
715
+
716
+ # Build specific package
717
+ pnpm --filter @nirholas/github-to-mcp build
718
+ pnpm --filter @github-to-mcp/openapi-parser build
719
+ pnpm --filter web build
720
+ ```
721
+
722
+ ### Testing
723
+
724
+ ```bash
725
+ # Run all tests
726
+ pnpm test
727
+
728
+ # Run tests in watch mode
729
+ pnpm test:watch
730
+
731
+ # Run tests with coverage
732
+ pnpm test:coverage
733
+
734
+ # Run specific test file
735
+ pnpm test -- tests/integration/openapi-conversion.test.ts
736
+ ```
737
+
738
+ ### Code Quality
739
+
740
+ ```bash
741
+ # Run linting
742
+ pnpm lint
743
+
744
+ # Type checking
745
+ pnpm typecheck
746
+ ```
747
+
748
+ ---
749
+
750
+ ## 🏗️ Architecture Overview
751
+
752
+ The system follows a pipeline architecture:
753
+
754
+ ```
755
+ Input (GitHub URL)
756
+
757
+
758
+ ┌──────────────────┐
759
+ │ GitHub Client │ Fetches repository metadata, files, and README
760
+ └──────────────────┘
761
+
762
+
763
+ ┌──────────────────┐
764
+ │ Classifier │ Determines repository type and structure
765
+ └──────────────────┘
766
+
767
+
768
+ ┌──────────────────┐
769
+ │ Extractors │ Multiple extractors run in parallel:
770
+ │ ├─ OpenAPI │ • Parse API specifications
771
+ │ ├─ GraphQL │ • Parse GraphQL schemas
772
+ │ ├─ README │ • Extract examples from documentation
773
+ │ ├─ Code │ • Analyze source code
774
+ │ └─ MCP │ • Detect existing MCP tools
775
+ └──────────────────┘
776
+
777
+
778
+ ┌──────────────────┐
779
+ │ Deduplicator │ Removes duplicate tools, merges similar ones
780
+ └──────────────────┘
781
+
782
+
783
+ ┌──────────────────┐
784
+ │ Validator │ Validates tool schemas, adds confidence scores
785
+ └──────────────────┘
786
+
787
+
788
+ ┌──────────────────┐
789
+ │ Generator │ Produces output code in target language
790
+ └──────────────────┘
791
+
792
+
793
+ Output (MCP Server Code + Configuration)
794
+ ```
795
+
796
+ Each extractor produces a list of `ExtractedTool` objects with a standardized schema. The deduplicator and validator ensure consistency before the generator produces the final output.
797
+
798
+ ---
799
+
800
+ ## 📥 Supported Input Formats
801
+
802
+ ### API Specifications
803
+
804
+ | Format | File Patterns | Version Support |
805
+ |--------|---------------|-----------------|
806
+ | **OpenAPI** | `openapi.json`, `openapi.yaml`, `swagger.json`, `swagger.yaml`, `api.json`, `api.yaml` | 2.0, 3.0.x, 3.1.x |
807
+ | **GraphQL** | `schema.graphql`, `*.gql`, `schema.json` | June 2018 spec |
808
+ | **gRPC** | `*.proto` | proto3 |
809
+ | **AsyncAPI** | `asyncapi.json`, `asyncapi.yaml` | 2.x |
810
+
811
+ ### Source Code Languages
812
+
813
+ | Language | Framework Detection |
814
+ |----------|---------------------|
815
+ | **TypeScript/JavaScript** | Express, Fastify, Hono, Next.js API routes |
816
+ | **Python** | FastAPI, Flask, Django REST, MCP SDK decorators |
817
+ | **Go** | Gin, Echo, Chi, Fiber, Gorilla Mux |
818
+ | **Java** | Spring Boot, JAX-RS, Micronaut |
819
+ | **Kotlin** | Ktor, Spring Boot |
820
+ | **Rust** | Actix-web, Axum, Rocket |
821
+ | **Ruby** | Rails, Sinatra, Grape |
822
+
823
+ ---
824
+
825
+ ## 📤 Output Formats
826
+
827
+ ### TypeScript Server
828
+
829
+ The default output is a TypeScript MCP server using the official `@modelcontextprotocol/sdk` package:
830
+
831
+ ```typescript
832
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
833
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
834
+
835
+ const server = new Server({
836
+ name: 'generated-server',
837
+ version: '1.0.0',
838
+ }, {
839
+ capabilities: {
840
+ tools: {},
841
+ },
842
+ });
843
+
844
+ server.setRequestHandler(ListToolsRequestSchema, async () => ({
845
+ tools: [/* generated tools */],
846
+ }));
847
+
848
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
849
+ // Tool dispatch logic
850
+ });
851
+
852
+ const transport = new StdioServerTransport();
853
+ await server.connect(transport);
854
+ ```
855
+
856
+ ### Python Server
857
+
858
+ Python output uses the MCP Python SDK:
859
+
860
+ ```python
861
+ from mcp.server import Server
862
+ from mcp.server.stdio import stdio_server
863
+
864
+ server = Server("generated-server")
865
+
866
+ @server.tool()
867
+ async def example_tool(param: str) -> str:
868
+ """Tool description."""
869
+ # Implementation
870
+
871
+ async def main():
872
+ async with stdio_server() as (read_stream, write_stream):
873
+ await server.run(read_stream, write_stream)
874
+
875
+ if __name__ == "__main__":
876
+ import asyncio
877
+ asyncio.run(main())
878
+ ```
879
+
880
+ ### Configuration Files
881
+
882
+ Each generated server includes:
883
+
884
+ | File | Description |
885
+ |------|-------------|
886
+ | `claude_desktop_config.json` | Claude Desktop configuration snippet |
887
+ | `cursor_config.json` | Cursor editor configuration |
888
+ | `package.json` or `requirements.txt` | Dependencies |
889
+ | `Dockerfile` (optional) | Container deployment |
890
+
891
+ ---
892
+
893
+ ## ⚠️ Limitations
894
+
895
+ <details>
896
+ <summary><strong>🔄 GitHub API Rate Limits</strong></summary>
897
+
898
+ - Unauthenticated requests: **60 per hour**
899
+ - Authenticated requests: **5,000 per hour**
900
+ - Large repositories may require multiple API calls
901
+
902
+ Provide a `GITHUB_TOKEN` to increase rate limits.
903
+
904
+ </details>
905
+
906
+ <details>
907
+ <summary><strong>📦 Repository Size</strong></summary>
908
+
909
+ - Very large repositories (>1GB) may time out during analysis
910
+ - Repositories with thousands of files may hit API limits
911
+ - Consider analyzing specific subdirectories for monorepos
912
+
913
+ </details>
914
+
915
+ <details>
916
+ <summary><strong>🎯 Tool Extraction Accuracy</strong></summary>
917
+
918
+ - OpenAPI specs produce the most accurate tools
919
+ - README extraction relies on consistent documentation formatting
920
+ - Source code analysis may miss dynamically defined routes
921
+ - Confidence scores indicate extraction reliability
922
+
923
+ </details>
924
+
925
+ <details>
926
+ <summary><strong>🌍 Language Support</strong></summary>
927
+
928
+ - TypeScript output is the most mature
929
+ - Python output is functional but may require minor edits
930
+ - Go output is experimental
931
+
932
+ </details>
933
+
934
+ ---
935
+
936
+ ## 🔧 Troubleshooting
937
+
938
+ <details>
939
+ <summary><strong>❌ "Rate limit exceeded" errors</strong></summary>
940
+
941
+ Provide a GitHub token:
942
+ ```bash
943
+ export GITHUB_TOKEN=ghp_xxxxxxxxxxxx
944
+ ```
945
+
946
+ </details>
947
+
948
+ <details>
949
+ <summary><strong>❌ "Repository not found" errors</strong></summary>
950
+
951
+ - Verify the URL is correct
952
+ - For private repositories, ensure your token has `repo` scope
953
+ - Check that the repository exists and is accessible
954
+
955
+ </details>
956
+
957
+ <details>
958
+ <summary><strong>❌ "No tools extracted" results</strong></summary>
959
+
960
+ - Verify the repository contains API definitions or documented endpoints
961
+ - Try enabling all extraction sources: `--sources openapi,readme,code,graphql,mcp`
962
+ - Check that specification files follow standard naming conventions
963
+
964
+ </details>
965
+
966
+ <details>
967
+ <summary><strong>❌ Generated server fails to start</strong></summary>
968
+
969
+ - Ensure Node.js 22+ is installed
970
+ - Run `npm install` in the generated directory
971
+ - Check for TypeScript compilation errors with `npx tsc --noEmit`
972
+
973
+ </details>
974
+
975
+ <details>
976
+ <summary><strong>❌ Claude Desktop does not show the server</strong></summary>
977
+
978
+ - Verify the path in `claude_desktop_config.json` is absolute
979
+ - Restart Claude Desktop after configuration changes
980
+ - Check Claude Desktop logs for connection errors
981
+
982
+ </details>
983
+
984
+ ---
985
+
986
+ ## 🤝 Contributing
987
+
988
+ Contributions are welcome! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for detailed guidelines on:
989
+
990
+ - Setting up the development environment
991
+ - Code style and formatting requirements
992
+ - Testing requirements
993
+ - Pull request process
994
+
995
+ ### 🐛 Reporting Issues
996
+
997
+ When reporting issues, please include:
998
+
999
+ - Repository URL that caused the issue (if public)
1000
+ - Error messages or unexpected behavior
1001
+ - Node.js and pnpm versions
1002
+ - Operating system
1003
+
1004
+ ---
1005
+
1006
+ ## 📄 License
1007
+
1008
+ Apache 2.0. See [LICENSE](LICENSE) for details.
1009
+
1010
+ ---
1011
+
1012
+ ## 🔗 Links
1013
+
1014
+ | Resource | URL |
1015
+ |----------|-----|
1016
+ | 📖 Documentation | [docs-github-to-mcp.vercel.app](https://docs-github-to-mcp.vercel.app) |
1017
+ | 🌐 Web App | [github-to-mcp.vercel.app](https://github-to-mcp.vercel.app) |
1018
+ | 📦 npm Package | [npmjs.com/package/@nirholas/github-to-mcp](https://www.npmjs.com/package/@nirholas/github-to-mcp) |
1019
+ | 🔗 MCP Specification | [modelcontextprotocol.io](https://modelcontextprotocol.io) |
1020
+ | 📘 MCP TypeScript SDK | [github.com/modelcontextprotocol/typescript-sdk](https://github.com/modelcontextprotocol/typescript-sdk) |
1021
+ | 🐍 MCP Python SDK | [github.com/modelcontextprotocol/python-sdk](https://github.com/modelcontextprotocol/python-sdk) |
1022
+ | 💬 Discussions | [github.com/nirholas/github-to-mcp/discussions](https://github.com/nirholas/github-to-mcp/discussions) |
1023
+
1024
+ ---
1025
+
1026
+ <p align="center">
1027
+ Built by <a href="https://x.com/nichxbt">nich</a>
1028
+ </p>