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,123 @@
1
+ import type { Config } from 'tailwindcss';
2
+
3
+ const config: Config = {
4
+ darkMode: 'class',
5
+ content: [
6
+ './pages/**/*.{js,ts,jsx,tsx,mdx}',
7
+ './components/**/*.{js,ts,jsx,tsx,mdx}',
8
+ './app/**/*.{js,ts,jsx,tsx,mdx}',
9
+ ],
10
+ theme: {
11
+ extend: {
12
+ colors: {
13
+ border: 'hsl(var(--border))',
14
+ input: 'hsl(var(--input))',
15
+ ring: 'hsl(var(--ring))',
16
+ background: 'hsl(var(--background))',
17
+ foreground: 'hsl(var(--foreground))',
18
+ primary: {
19
+ DEFAULT: 'hsl(var(--primary))',
20
+ foreground: 'hsl(var(--primary-foreground))',
21
+ },
22
+ secondary: {
23
+ DEFAULT: 'hsl(var(--secondary))',
24
+ foreground: 'hsl(var(--secondary-foreground))',
25
+ },
26
+ destructive: {
27
+ DEFAULT: 'hsl(var(--destructive))',
28
+ foreground: 'hsl(var(--destructive-foreground))',
29
+ },
30
+ muted: {
31
+ DEFAULT: 'hsl(var(--muted))',
32
+ foreground: 'hsl(var(--muted-foreground))',
33
+ },
34
+ accent: {
35
+ DEFAULT: 'hsl(var(--accent))',
36
+ foreground: 'hsl(var(--accent-foreground))',
37
+ },
38
+ popover: {
39
+ DEFAULT: 'hsl(var(--popover))',
40
+ foreground: 'hsl(var(--popover-foreground))',
41
+ },
42
+ card: {
43
+ DEFAULT: 'hsl(var(--card))',
44
+ foreground: 'hsl(var(--card-foreground))',
45
+ },
46
+ dark: {
47
+ 900: '#000000',
48
+ 800: '#0a0a0a',
49
+ 700: '#171717',
50
+ 600: '#262626',
51
+ },
52
+ },
53
+ borderRadius: {
54
+ lg: 'var(--radius)',
55
+ md: 'calc(var(--radius) - 2px)',
56
+ sm: 'calc(var(--radius) - 4px)',
57
+ },
58
+ fontFamily: {
59
+ sans: ['Inter', 'var(--font-geist-sans)', 'system-ui', '-apple-system', 'sans-serif'],
60
+ mono: ['JetBrains Mono', 'var(--font-geist-mono)', 'Menlo', 'monospace'],
61
+ },
62
+ fontSize: {
63
+ '2xs': ['0.625rem', { lineHeight: '1rem' }],
64
+ },
65
+ animation: {
66
+ 'fade-in': 'fadeIn 0.3s ease-out',
67
+ 'slide-up': 'slideUp 0.3s ease-out',
68
+ 'slide-down': 'slideDown 0.2s ease-out',
69
+ 'slide-in-from-right': 'slideInFromRight 0.2s ease-out',
70
+ 'pulse-slow': 'pulse 3s cubic-bezier(0.4, 0, 0.6, 1) infinite',
71
+ shimmer: 'shimmer 2s infinite linear',
72
+ 'glow': 'glow 2s ease-in-out infinite alternate',
73
+ 'float': 'float 6s ease-in-out infinite',
74
+ 'gradient': 'gradient 8s ease infinite',
75
+ },
76
+ keyframes: {
77
+ fadeIn: {
78
+ '0%': { opacity: '0' },
79
+ '100%': { opacity: '1' },
80
+ },
81
+ slideUp: {
82
+ '0%': { opacity: '0', transform: 'translateY(8px)' },
83
+ '100%': { opacity: '1', transform: 'translateY(0)' },
84
+ },
85
+ slideDown: {
86
+ '0%': { opacity: '0', transform: 'translateY(-8px)' },
87
+ '100%': { opacity: '1', transform: 'translateY(0)' },
88
+ },
89
+ slideInFromRight: {
90
+ '0%': { transform: 'translateX(100%)' },
91
+ '100%': { transform: 'translateX(0)' },
92
+ },
93
+ shimmer: {
94
+ '0%': { backgroundPosition: '-200% 0' },
95
+ '100%': { backgroundPosition: '200% 0' },
96
+ },
97
+ glow: {
98
+ '0%': { boxShadow: '0 0 5px #00ff88, 0 0 10px #00ff88, 0 0 15px #00ff88' },
99
+ '100%': { boxShadow: '0 0 10px #00d4ff, 0 0 20px #00d4ff, 0 0 30px #00d4ff' },
100
+ },
101
+ float: {
102
+ '0%, 100%': { transform: 'translateY(0px)' },
103
+ '50%': { transform: 'translateY(-20px)' },
104
+ },
105
+ gradient: {
106
+ '0%, 100%': { backgroundPosition: '0% 50%' },
107
+ '50%': { backgroundPosition: '100% 50%' },
108
+ },
109
+ },
110
+ boxShadow: {
111
+ 'glow': '0 0 40px -10px hsl(var(--primary) / 0.3)',
112
+ 'glow-sm': '0 0 20px -5px hsl(var(--primary) / 0.2)',
113
+ },
114
+ },
115
+ },
116
+ plugins: [
117
+ require('@tailwindcss/forms'),
118
+ require('@tailwindcss/typography'),
119
+ require('tailwindcss-animate'),
120
+ ],
121
+ };
122
+
123
+ export default config;
@@ -0,0 +1,20 @@
1
+ {
2
+ "extends": "../../tsconfig.json",
3
+ "compilerOptions": {
4
+ "lib": ["dom", "dom.iterable", "esnext"],
5
+ "allowJs": true,
6
+ "noEmit": true,
7
+ "incremental": true,
8
+ "module": "esnext",
9
+ "moduleResolution": "bundler",
10
+ "resolveJsonModule": true,
11
+ "isolatedModules": true,
12
+ "jsx": "preserve",
13
+ "plugins": [{ "name": "next" }],
14
+ "paths": {
15
+ "@/*": ["./*"]
16
+ }
17
+ },
18
+ "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
19
+ "exclude": ["node_modules"]
20
+ }
@@ -0,0 +1,139 @@
1
+ /**
2
+ * Deploy Types - Cloud-hosted MCP Server infrastructure
3
+ * @copyright 2024-2026 nirholas
4
+ * @license MIT
5
+ */
6
+
7
+ export interface DeployedServer {
8
+ id: string;
9
+ name: string;
10
+ description: string;
11
+
12
+ // Server configuration
13
+ tools: DeployedTool[];
14
+ code: string;
15
+ language: 'typescript' | 'python';
16
+
17
+ // Deployment info
18
+ endpoint: string;
19
+ status: 'active' | 'paused' | 'error';
20
+ region: string;
21
+ createdAt: string;
22
+ updatedAt: string;
23
+
24
+ // Source info
25
+ sourceRepo?: string;
26
+ sourceUrl?: string;
27
+
28
+ // Auth & Security
29
+ apiKeyHash?: string;
30
+ allowedOrigins?: string[];
31
+ rateLimit: RateLimitConfig;
32
+
33
+ // Usage tracking
34
+ usage: UsageStats;
35
+ }
36
+
37
+ export interface DeployedTool {
38
+ name: string;
39
+ description: string;
40
+ inputSchema: object;
41
+ enabled: boolean;
42
+ callCount: number;
43
+ lastUsed?: string;
44
+ avgLatencyMs?: number;
45
+ }
46
+
47
+ export interface RateLimitConfig {
48
+ requestsPerMinute: number;
49
+ requestsPerDay: number;
50
+ enabled: boolean;
51
+ }
52
+
53
+ export interface UsageStats {
54
+ totalCalls: number;
55
+ totalCallsToday: number;
56
+ totalCallsThisMonth: number;
57
+ successRate: number;
58
+ avgLatencyMs: number;
59
+ lastUsed?: string;
60
+ callsByTool: Record<string, number>;
61
+ callsByDay: DailyUsage[];
62
+ errors: ErrorLog[];
63
+ }
64
+
65
+ export interface DailyUsage {
66
+ date: string;
67
+ calls: number;
68
+ errors: number;
69
+ avgLatencyMs: number;
70
+ }
71
+
72
+ export interface ErrorLog {
73
+ timestamp: string;
74
+ tool: string;
75
+ error: string;
76
+ input?: object;
77
+ }
78
+
79
+ export interface DeployRequest {
80
+ name: string;
81
+ description?: string;
82
+ code: string;
83
+ tools: Array<{
84
+ name: string;
85
+ description: string;
86
+ inputSchema: object;
87
+ }>;
88
+ sourceRepo?: string;
89
+ envVars?: Record<string, string>;
90
+ rateLimit?: Partial<RateLimitConfig>;
91
+ }
92
+
93
+ export interface DeployResponse {
94
+ success: boolean;
95
+ server?: DeployedServer;
96
+ error?: string;
97
+ endpoint?: string;
98
+ apiKey?: string; // Only returned on creation
99
+ }
100
+
101
+ export interface ServerListResponse {
102
+ servers: DeployedServer[];
103
+ total: number;
104
+ hasMore: boolean;
105
+ }
106
+
107
+ // MCP Protocol Types for HTTP/SSE transport
108
+ export interface McpRequest {
109
+ jsonrpc: '2.0';
110
+ id: string | number;
111
+ method: string;
112
+ params?: object;
113
+ }
114
+
115
+ export interface McpResponse {
116
+ jsonrpc: '2.0';
117
+ id: string | number;
118
+ result?: object;
119
+ error?: {
120
+ code: number;
121
+ message: string;
122
+ data?: object;
123
+ };
124
+ }
125
+
126
+ export interface McpToolCallRequest {
127
+ name: string;
128
+ arguments: Record<string, unknown>;
129
+ }
130
+
131
+ export interface McpToolCallResponse {
132
+ content: Array<{
133
+ type: 'text' | 'image' | 'resource';
134
+ text?: string;
135
+ data?: string;
136
+ mimeType?: string;
137
+ }>;
138
+ isError?: boolean;
139
+ }
@@ -0,0 +1,247 @@
1
+ /**
2
+ * GitHub to MCP Converter - Type Definitions
3
+ * @copyright 2024-2026 nirholas
4
+ * @license MIT
5
+ */
6
+
7
+ export interface Tool {
8
+ name: string;
9
+ description: string;
10
+ inputSchema: {
11
+ type: string;
12
+ properties?: Record<string, {
13
+ type: string;
14
+ description?: string;
15
+ enum?: string[];
16
+ default?: unknown;
17
+ }>;
18
+ required?: string[];
19
+ };
20
+ source: {
21
+ type: SourceType;
22
+ file: string;
23
+ line?: number;
24
+ };
25
+ }
26
+
27
+ export type SourceType =
28
+ | 'readme'
29
+ | 'code'
30
+ | 'openapi'
31
+ | 'graphql'
32
+ | 'mcp-introspect'
33
+ | 'universal'
34
+ | 'mcp-decorator'
35
+ | 'python-mcp';
36
+
37
+ export type RepoClassificationType =
38
+ | 'mcp-server'
39
+ | 'api-sdk'
40
+ | 'cli-tool'
41
+ | 'library'
42
+ | 'documentation'
43
+ | 'data'
44
+ | 'unknown';
45
+
46
+ export interface RepoClassification {
47
+ type: RepoClassificationType;
48
+ confidence: number;
49
+ indicators: string[];
50
+ metadata?: {
51
+ language?: string;
52
+ framework?: string;
53
+ hasOpenAPI?: boolean;
54
+ hasMcpManifest?: boolean;
55
+ };
56
+ }
57
+
58
+ export interface ConversionResult {
59
+ name: string;
60
+ description: string;
61
+ version: string;
62
+ tools: Tool[];
63
+ sources: SourceBreakdown[];
64
+ classification: RepoClassification;
65
+ code: string;
66
+ pythonCode?: string;
67
+ claudeConfig: string;
68
+ cursorConfig: string;
69
+ claudePythonConfig?: string;
70
+ openaiConfig?: string;
71
+ stats: ConversionStats;
72
+ repository: RepositoryInfo;
73
+ generatedAt: string;
74
+ }
75
+
76
+ export interface SourceBreakdown {
77
+ type: SourceType;
78
+ count: number;
79
+ files: string[];
80
+ }
81
+
82
+ export interface ConversionStats {
83
+ totalTools: number;
84
+ filesAnalyzed: number;
85
+ processingTimeMs: number;
86
+ cacheHit: boolean;
87
+ }
88
+
89
+ export interface RepositoryInfo {
90
+ owner: string;
91
+ name: string;
92
+ fullName: string;
93
+ url: string;
94
+ description?: string;
95
+ stars?: number;
96
+ language?: string;
97
+ topics?: string[];
98
+ lastUpdated?: string;
99
+ }
100
+
101
+ export interface ConversionRequest {
102
+ url: string;
103
+ options?: ConversionOptions;
104
+ }
105
+
106
+ export interface ConversionOptions {
107
+ includeUniversalTools?: boolean;
108
+ maxTools?: number;
109
+ targetPlatform?: 'claude' | 'cursor' | 'openai' | 'all';
110
+ customName?: string;
111
+ }
112
+
113
+ export interface ConversionHistory {
114
+ id: string;
115
+ url: string;
116
+ name: string;
117
+ toolCount: number;
118
+ classification: RepoClassificationType;
119
+ convertedAt: string;
120
+ result?: ConversionResult;
121
+ }
122
+
123
+ export interface ApiError {
124
+ error: string;
125
+ code: string;
126
+ details?: string;
127
+ retryAfter?: number;
128
+ }
129
+
130
+ export type ConversionStatus = 'idle' | 'loading' | 'success' | 'error';
131
+
132
+ // ===== Streaming Types =====
133
+ export interface StreamingEvent {
134
+ type: 'progress' | 'tool' | 'complete' | 'error';
135
+ data: StreamingProgressData | StreamingToolData | StreamingCompleteData | StreamingErrorData;
136
+ timestamp: string;
137
+ }
138
+
139
+ export interface StreamingProgressData {
140
+ step: string;
141
+ description: string;
142
+ progress: number; // 0-100
143
+ details?: string;
144
+ }
145
+
146
+ export interface StreamingToolData {
147
+ tool: Tool;
148
+ index: number;
149
+ total: number;
150
+ }
151
+
152
+ export interface StreamingCompleteData {
153
+ result: ConversionResult;
154
+ totalTime: number;
155
+ }
156
+
157
+ export interface StreamingErrorData {
158
+ error: string;
159
+ code: string;
160
+ details?: string;
161
+ }
162
+
163
+ export type StreamingStatus = 'idle' | 'connecting' | 'streaming' | 'complete' | 'error';
164
+
165
+ // ===== Docker Types =====
166
+ export interface DockerConfig {
167
+ dockerfile: string;
168
+ dockerCompose: string;
169
+ envExample: string;
170
+ buildCommand: string;
171
+ runCommand: string;
172
+ serverName: string;
173
+ }
174
+
175
+ export interface DockerExportOptions {
176
+ baseImage: string;
177
+ port: number;
178
+ exposePorts: number[];
179
+ envVars: Record<string, string>;
180
+ volumes: string[];
181
+ healthCheck: boolean;
182
+ multiStage: boolean;
183
+ runAsNonRoot: boolean;
184
+ labels: boolean;
185
+ }
186
+
187
+ // ===== Batch Conversion Types =====
188
+ export interface BatchConversionItem {
189
+ id: string;
190
+ url: string;
191
+ status: 'pending' | 'converting' | 'success' | 'error';
192
+ result?: ConversionResult;
193
+ error?: ApiError;
194
+ progress?: number;
195
+ startedAt?: string;
196
+ completedAt?: string;
197
+ }
198
+
199
+ export type BatchConversionState = 'idle' | 'running' | 'paused' | 'complete';
200
+
201
+ export interface BatchConversionStats {
202
+ items: BatchConversionItem[];
203
+ status: BatchConversionState;
204
+ totalCount: number;
205
+ completedCount: number;
206
+ errorCount: number;
207
+ startedAt?: string;
208
+ completedAt?: string;
209
+ }
210
+
211
+ // ===== One-Click Install Types =====
212
+ export type InstallPlatform = 'macos' | 'windows' | 'linux' | 'docker';
213
+
214
+ export interface InstallInstructions {
215
+ platform: InstallPlatform;
216
+ title: string;
217
+ description: string;
218
+ prerequisites: string[];
219
+ steps: InstallStep[];
220
+ estimatedTime: string;
221
+ requirements?: string[];
222
+ notes?: string[];
223
+ }
224
+
225
+ export interface InstallStep {
226
+ title: string;
227
+ description: string;
228
+ command: string;
229
+ isOptional: boolean;
230
+ warning?: string;
231
+ note?: string;
232
+ link?: string;
233
+ code?: string;
234
+ language?: string;
235
+ isManual?: boolean;
236
+ }
237
+
238
+ export interface PlatformDetection {
239
+ os: InstallPlatform;
240
+ arch: 'x64' | 'arm64';
241
+ nodeVersion?: string;
242
+ npmVersion?: string;
243
+ hasDocker?: boolean;
244
+ hasPython?: boolean;
245
+ pythonVersion?: string;
246
+ }
247
+
@@ -0,0 +1,39 @@
1
+ {
2
+ "$schema": "https://openapi.vercel.sh/vercel.json",
3
+ "buildCommand": "cd ../.. && pip install -q -r mkdocs/python-deps.txt && cd mkdocs && python -m mkdocs build --site-dir ../apps/web/public/docs && cd ../apps/web && pnpm run build:packages && pnpm build",
4
+ "installCommand": "cd ../.. && pnpm install",
5
+ "framework": "nextjs",
6
+ "outputDirectory": ".next",
7
+ "headers": [
8
+ {
9
+ "source": "/docs/:path*",
10
+ "headers": [
11
+ {
12
+ "key": "Cache-Control",
13
+ "value": "public, max-age=3600, stale-while-revalidate=86400"
14
+ }
15
+ ]
16
+ },
17
+ {
18
+ "source": "/api/edge",
19
+ "headers": [
20
+ {
21
+ "key": "Cache-Control",
22
+ "value": "public, s-maxage=60, stale-while-revalidate=300"
23
+ },
24
+ {
25
+ "key": "Access-Control-Allow-Origin",
26
+ "value": "*"
27
+ },
28
+ {
29
+ "key": "Access-Control-Allow-Methods",
30
+ "value": "GET, POST, OPTIONS"
31
+ },
32
+ {
33
+ "key": "Access-Control-Allow-Headers",
34
+ "value": "Content-Type, Authorization"
35
+ }
36
+ ]
37
+ }
38
+ ]
39
+ }
@@ -0,0 +1,23 @@
1
+ import js from '@eslint/js';
2
+ import tseslint from 'typescript-eslint';
3
+
4
+ export default tseslint.config(
5
+ js.configs.recommended,
6
+ ...tseslint.configs.recommended,
7
+ {
8
+ ignores: [
9
+ '**/dist/**',
10
+ '**/node_modules/**',
11
+ '**/.next/**',
12
+ '**/coverage/**',
13
+ '_archive/**',
14
+ ],
15
+ },
16
+ {
17
+ rules: {
18
+ '@typescript-eslint/no-unused-vars': ['warn', { argsIgnorePattern: '^_' }],
19
+ '@typescript-eslint/no-explicit-any': 'warn',
20
+ '@typescript-eslint/no-require-imports': 'off',
21
+ },
22
+ }
23
+ );
package/llms.txt ADDED
@@ -0,0 +1,102 @@
1
+ # GitHub to MCP
2
+
3
+ > Convert any GitHub repository into an MCP server for AI assistants
4
+
5
+ ## Summary
6
+
7
+ GitHub to MCP is a tool that automatically generates Model Context Protocol (MCP) servers from GitHub repositories. It enables AI assistants like Claude, ChatGPT, Cursor, and Cline to interact with any codebase through standardized tools.
8
+
9
+ ## What This Project Does
10
+
11
+ - Takes a GitHub repository URL as input
12
+ - Analyzes the repository structure and content
13
+ - Extracts tools from OpenAPI specs, GraphQL schemas, Python decorators, and documentation
14
+ - Generates a complete MCP server (TypeScript or Python) with all dependencies
15
+ - Provides universal tools: read_file, list_files, search_code, get_readme
16
+
17
+ ## Key Concepts
18
+
19
+ **MCP (Model Context Protocol)**: An open standard by Anthropic that allows AI models to securely connect to external tools and data sources.
20
+
21
+ **MCP Server**: A program that exposes tools to AI assistants. Tools are functions the AI can call to read files, query APIs, execute commands, etc.
22
+
23
+ **Tool Extraction**: The process of analyzing code and documentation to automatically identify functions that should become MCP tools.
24
+
25
+ ## Usage
26
+
27
+ ### Web UI
28
+ Visit https://github-to-mcp.vercel.app and paste any GitHub URL.
29
+
30
+ ### CLI
31
+ ```bash
32
+ npx @nirholas/github-to-mcp https://github.com/owner/repo
33
+ ```
34
+
35
+ ### Programmatic
36
+ ```typescript
37
+ import { generateFromGithub } from '@nirholas/github-to-mcp';
38
+ const result = await generateFromGithub('https://github.com/owner/repo');
39
+ await result.save('./output');
40
+ ```
41
+
42
+ ## Project Structure
43
+
44
+ - `packages/core/` - Main conversion engine (npm: @nirholas/github-to-mcp)
45
+ - `packages/openapi-parser/` - OpenAPI and GraphQL parsing
46
+ - `apps/web/` - Next.js web interface
47
+ - `apps/docs/` - Documentation site
48
+
49
+ ## Key Files
50
+
51
+ - `packages/core/src/index.ts` - Main API exports
52
+ - `packages/core/src/github-client.ts` - GitHub API interaction
53
+ - `packages/core/src/code-extractor.ts` - Extract tools from Python/TypeScript code
54
+ - `packages/core/src/readme-extractor.ts` - Extract tools from documentation
55
+ - `packages/openapi-parser/src/parser.ts` - OpenAPI spec parsing
56
+
57
+ ## Supported Extraction Sources
58
+
59
+ 1. **OpenAPI/Swagger specs** - REST API endpoints become tools
60
+ 2. **GraphQL schemas** - Queries and mutations become tools
61
+ 3. **Python code** - Functions with `@mcp.tool` decorators
62
+ 4. **TypeScript code** - `server.tool()` registrations
63
+ 5. **README documentation** - Command and function patterns
64
+
65
+ ## API Reference
66
+
67
+ ### generateFromGithub(url: string, options?: Options)
68
+
69
+ Main function to convert a repository.
70
+
71
+ **Parameters:**
72
+ - `url` - GitHub repository URL
73
+ - `options.token` - GitHub token for private repos
74
+ - `options.outputFormat` - 'typescript' or 'python'
75
+
76
+ **Returns:**
77
+ - `tools` - Array of extracted tools
78
+ - `classification` - Detected repo type
79
+ - `save(path)` - Save generated server to disk
80
+ - `generate()` - Get generated code as string
81
+
82
+ ## Common Tasks
83
+
84
+ ### Give an AI access to a codebase
85
+ 1. Run: `npx @nirholas/github-to-mcp https://github.com/owner/repo`
86
+ 2. Add the generated server to Claude Desktop config
87
+ 3. The AI can now read files and search code
88
+
89
+ ### Convert a REST API to MCP tools
90
+ 1. Find a repo with an OpenAPI/Swagger spec
91
+ 2. Run the converter - API endpoints become callable tools
92
+ 3. AI assistants can now query the API
93
+
94
+ ### Access private repositories
95
+ Set GITHUB_TOKEN environment variable with a token that has repo access.
96
+
97
+ ## Links
98
+
99
+ - Website: https://github-to-mcp.vercel.app
100
+ - npm: https://www.npmjs.com/package/@nirholas/github-to-mcp
101
+ - GitHub: https://github.com/nirholas/github-to-mcp
102
+ - MCP Protocol: https://modelcontextprotocol.io