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,362 @@
1
+ /**
2
+ * @fileoverview Export Docker configuration tool for MCP server
3
+ * @copyright Copyright (c) 2024-2026 nirholas
4
+ * @license MIT
5
+ */
6
+
7
+ import { TextContent, Tool } from '@modelcontextprotocol/sdk/types.js';
8
+
9
+ /**
10
+ * Docker configuration templates
11
+ */
12
+ const DOCKER_TEMPLATES = {
13
+ typescript: {
14
+ dockerfile: `# TypeScript MCP Server Dockerfile
15
+ FROM node:20-slim
16
+
17
+ WORKDIR /app
18
+
19
+ # Install dependencies
20
+ COPY package*.json ./
21
+ RUN npm ci --only=production
22
+
23
+ # Copy source
24
+ COPY . .
25
+
26
+ # Build TypeScript
27
+ RUN npm run build
28
+
29
+ # Run the server
30
+ CMD ["node", "dist/index.js"]
31
+ `,
32
+ dockerCompose: `version: '3.8'
33
+
34
+ services:
35
+ mcp-server:
36
+ build: .
37
+ environment:
38
+ - NODE_ENV=production
39
+ volumes:
40
+ - ./config:/app/config:ro
41
+ restart: unless-stopped
42
+ logging:
43
+ driver: json-file
44
+ options:
45
+ max-size: "10m"
46
+ max-file: "3"
47
+ `,
48
+ dockerignore: `node_modules
49
+ npm-debug.log
50
+ .git
51
+ .gitignore
52
+ .env
53
+ *.md
54
+ dist
55
+ coverage
56
+ .nyc_output
57
+ *.test.ts
58
+ *.spec.ts
59
+ __tests__
60
+ `,
61
+ },
62
+ python: {
63
+ dockerfile: `# Python MCP Server Dockerfile
64
+ FROM python:3.11-slim
65
+
66
+ WORKDIR /app
67
+
68
+ # Install system dependencies
69
+ RUN apt-get update && apt-get install -y --no-install-recommends \\
70
+ build-essential \\
71
+ && rm -rf /var/lib/apt/lists/*
72
+
73
+ # Install Python dependencies
74
+ COPY requirements.txt ./
75
+ RUN pip install --no-cache-dir -r requirements.txt
76
+
77
+ # Copy source
78
+ COPY . .
79
+
80
+ # Run the server
81
+ CMD ["python", "-m", "mcp_server"]
82
+ `,
83
+ dockerCompose: `version: '3.8'
84
+
85
+ services:
86
+ mcp-server:
87
+ build: .
88
+ environment:
89
+ - PYTHONUNBUFFERED=1
90
+ volumes:
91
+ - ./config:/app/config:ro
92
+ restart: unless-stopped
93
+ logging:
94
+ driver: json-file
95
+ options:
96
+ max-size: "10m"
97
+ max-file: "3"
98
+ `,
99
+ dockerignore: `__pycache__
100
+ *.py[cod]
101
+ *$py.class
102
+ *.so
103
+ .Python
104
+ .git
105
+ .gitignore
106
+ .env
107
+ venv/
108
+ ENV/
109
+ *.md
110
+ .pytest_cache/
111
+ .coverage
112
+ htmlcov/
113
+ dist/
114
+ build/
115
+ *.egg-info/
116
+ `,
117
+ },
118
+ };
119
+
120
+ /**
121
+ * Tool definition for exporting Docker configuration
122
+ */
123
+ export const exportDockerTool: Tool = {
124
+ name: 'export_docker',
125
+ description: `Generate Docker configuration files for an MCP server.
126
+
127
+ Creates:
128
+ - Dockerfile optimized for MCP servers
129
+ - docker-compose.yml for easy deployment
130
+ - .dockerignore for efficient builds
131
+
132
+ Supports TypeScript and Python MCP servers with best practices for:
133
+ - Multi-stage builds (TypeScript)
134
+ - Minimal image size
135
+ - Proper caching
136
+ - Security hardening
137
+ - Logging configuration
138
+
139
+ The generated configuration can be customized with server name, port, and environment variables.`,
140
+ inputSchema: {
141
+ type: 'object',
142
+ properties: {
143
+ language: {
144
+ type: 'string',
145
+ enum: ['typescript', 'python'],
146
+ description: 'The programming language of the MCP server',
147
+ },
148
+ server_name: {
149
+ type: 'string',
150
+ description: 'Name for the Docker service',
151
+ },
152
+ port: {
153
+ type: 'number',
154
+ description: 'Port to expose (optional, MCP uses stdio by default)',
155
+ },
156
+ env_vars: {
157
+ type: 'object',
158
+ additionalProperties: { type: 'string' },
159
+ description: 'Environment variables to include',
160
+ },
161
+ include_healthcheck: {
162
+ type: 'boolean',
163
+ default: false,
164
+ description: 'Include a health check endpoint',
165
+ },
166
+ multi_stage: {
167
+ type: 'boolean',
168
+ default: true,
169
+ description: 'Use multi-stage build for smaller images (TypeScript only)',
170
+ },
171
+ },
172
+ required: ['language'],
173
+ },
174
+ };
175
+
176
+ /**
177
+ * Handler for export_docker tool
178
+ */
179
+ export async function handleExportDocker(args: {
180
+ language: 'typescript' | 'python';
181
+ server_name?: string;
182
+ port?: number;
183
+ env_vars?: Record<string, string>;
184
+ include_healthcheck?: boolean;
185
+ multi_stage?: boolean;
186
+ }): Promise<TextContent> {
187
+ try {
188
+ const { language, server_name, port, env_vars, include_healthcheck, multi_stage } = args;
189
+ const template = DOCKER_TEMPLATES[language];
190
+ const serviceName = server_name || 'mcp-server';
191
+
192
+ let dockerfile = template.dockerfile;
193
+ let dockerCompose = template.dockerCompose;
194
+
195
+ // Customize Dockerfile
196
+ if (language === 'typescript' && multi_stage !== false) {
197
+ dockerfile = `# TypeScript MCP Server Dockerfile (Multi-stage)
198
+ FROM node:20-slim AS builder
199
+
200
+ WORKDIR /app
201
+
202
+ # Install dependencies
203
+ COPY package*.json ./
204
+ RUN npm ci
205
+
206
+ # Copy source and build
207
+ COPY . .
208
+ RUN npm run build
209
+
210
+ # Production image
211
+ FROM node:20-slim
212
+
213
+ WORKDIR /app
214
+
215
+ # Copy built files and production dependencies
216
+ COPY --from=builder /app/dist ./dist
217
+ COPY --from=builder /app/package*.json ./
218
+ RUN npm ci --only=production
219
+
220
+ # Security: Run as non-root user
221
+ USER node
222
+
223
+ ${include_healthcheck ? `# Health check
224
+ HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \\
225
+ CMD node -e "console.log('healthy')" || exit 1
226
+ ` : ''}
227
+ # Run the server
228
+ CMD ["node", "dist/index.js"]
229
+ `;
230
+ }
231
+
232
+ if (include_healthcheck && language === 'python') {
233
+ dockerfile = dockerfile.replace(
234
+ 'CMD ["python", "-m", "mcp_server"]',
235
+ `# Health check
236
+ HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \\
237
+ CMD python -c "print('healthy')" || exit 1
238
+
239
+ # Run the server
240
+ CMD ["python", "-m", "mcp_server"]`
241
+ );
242
+ }
243
+
244
+ // Customize docker-compose.yml
245
+ dockerCompose = dockerCompose.replace('mcp-server:', `${serviceName}:`);
246
+
247
+ if (port) {
248
+ dockerCompose = dockerCompose.replace(
249
+ 'restart: unless-stopped',
250
+ `ports:
251
+ - "${port}:${port}"
252
+ restart: unless-stopped`
253
+ );
254
+ }
255
+
256
+ if (env_vars && Object.keys(env_vars).length > 0) {
257
+ const envEntries = Object.entries(env_vars)
258
+ .map(([key, value]) => ` - ${key}=${value}`)
259
+ .join('\n');
260
+
261
+ dockerCompose = dockerCompose.replace(
262
+ /environment:\n(.*?\n)+/m,
263
+ `environment:\n${envEntries}\n`
264
+ );
265
+ }
266
+
267
+ // Generate shell script for building and running
268
+ const shellScript = language === 'typescript' ? `#!/bin/bash
269
+ # Build and run the MCP server in Docker
270
+
271
+ # Build the image
272
+ docker build -t ${serviceName} .
273
+
274
+ # Run with stdio (typical MCP usage)
275
+ docker run -it --rm ${serviceName}
276
+
277
+ # Or run with docker-compose
278
+ # docker-compose up -d
279
+ ` : `#!/bin/bash
280
+ # Build and run the MCP server in Docker
281
+
282
+ # Build the image
283
+ docker build -t ${serviceName} .
284
+
285
+ # Run with stdio (typical MCP usage)
286
+ docker run -it --rm ${serviceName}
287
+
288
+ # Or run with docker-compose
289
+ # docker-compose up -d
290
+ `;
291
+
292
+ const output = `# Docker Configuration for ${serviceName}
293
+
294
+ ## Dockerfile
295
+
296
+ \`\`\`dockerfile
297
+ ${dockerfile}
298
+ \`\`\`
299
+
300
+ ## docker-compose.yml
301
+
302
+ \`\`\`yaml
303
+ ${dockerCompose}
304
+ \`\`\`
305
+
306
+ ## .dockerignore
307
+
308
+ \`\`\`
309
+ ${template.dockerignore}
310
+ \`\`\`
311
+
312
+ ## Build and Run Script (build.sh)
313
+
314
+ \`\`\`bash
315
+ ${shellScript}
316
+ \`\`\`
317
+
318
+ ## Usage Instructions
319
+
320
+ 1. Save the Dockerfile to your project root
321
+ 2. Save docker-compose.yml to your project root
322
+ 3. Save .dockerignore to your project root
323
+ 4. Build the image:
324
+ \`\`\`bash
325
+ docker build -t ${serviceName} .
326
+ \`\`\`
327
+ 5. Run the container:
328
+ \`\`\`bash
329
+ # For stdio-based MCP (typical)
330
+ docker run -it --rm ${serviceName}
331
+
332
+ # With docker-compose
333
+ docker-compose up -d
334
+ \`\`\`
335
+
336
+ ## Integration with Claude Desktop
337
+
338
+ Add to your Claude Desktop config:
339
+
340
+ \`\`\`json
341
+ {
342
+ "mcpServers": {
343
+ "${serviceName}": {
344
+ "command": "docker",
345
+ "args": ["run", "-i", "--rm", "${serviceName}"]
346
+ }
347
+ }
348
+ }
349
+ \`\`\`
350
+ `;
351
+
352
+ return {
353
+ type: 'text',
354
+ text: output,
355
+ };
356
+ } catch (error) {
357
+ return {
358
+ type: 'text',
359
+ text: `Error generating Docker config: ${error instanceof Error ? error.message : String(error)}`,
360
+ };
361
+ }
362
+ }
@@ -0,0 +1,162 @@
1
+ /**
2
+ * @fileoverview Generate OpenAPI spec tool for MCP server
3
+ * @copyright Copyright (c) 2024-2026 nirholas
4
+ * @license Apache-2.0
5
+ */
6
+
7
+ import { TextContent, Tool } from '@modelcontextprotocol/sdk/types.js';
8
+ import { generateOpenApiFromCodeWithDetails, FileContent, GeneratorOptions } from '@github-to-mcp/openapi-parser';
9
+
10
+ /**
11
+ * Tool definition for generating OpenAPI spec from code
12
+ */
13
+ export const generateOpenApiTool: Tool = {
14
+ name: 'generate_openapi_spec',
15
+ description: `Generate an OpenAPI 3.1 specification from source code files.
16
+
17
+ Analyzes source code to extract API routes and generates a complete OpenAPI specification.
18
+
19
+ Supported frameworks:
20
+ - Express.js (Node.js)
21
+ - FastAPI/Flask (Python)
22
+ - Next.js API routes (app/api and pages/api)
23
+
24
+ The tool detects the framework automatically and extracts:
25
+ - Routes and HTTP methods
26
+ - Path, query, and header parameters
27
+ - Request body schemas
28
+ - Response schemas
29
+ - Security schemes
30
+ - Tags for grouping
31
+
32
+ Returns the generated OpenAPI spec in both JSON and YAML formats.`,
33
+ inputSchema: {
34
+ type: 'object',
35
+ properties: {
36
+ files: {
37
+ type: 'array',
38
+ items: {
39
+ type: 'object',
40
+ properties: {
41
+ path: {
42
+ type: 'string',
43
+ description: 'File path (relative or absolute)',
44
+ },
45
+ content: {
46
+ type: 'string',
47
+ description: 'File content',
48
+ },
49
+ language: {
50
+ type: 'string',
51
+ enum: ['typescript', 'javascript', 'python'],
52
+ description: 'Programming language (auto-detected if not provided)',
53
+ },
54
+ },
55
+ required: ['path', 'content'],
56
+ },
57
+ description: 'Array of source code files to analyze',
58
+ },
59
+ options: {
60
+ type: 'object',
61
+ properties: {
62
+ title: {
63
+ type: 'string',
64
+ description: 'API title for the spec',
65
+ },
66
+ description: {
67
+ type: 'string',
68
+ description: 'API description',
69
+ },
70
+ version: {
71
+ type: 'string',
72
+ description: 'API version (e.g., "1.0.0")',
73
+ },
74
+ baseUrl: {
75
+ type: 'string',
76
+ description: 'Base URL for the API',
77
+ },
78
+ includeExamples: {
79
+ type: 'boolean',
80
+ description: 'Whether to include examples in the spec',
81
+ },
82
+ },
83
+ description: 'Generation options',
84
+ },
85
+ format: {
86
+ type: 'string',
87
+ enum: ['json', 'yaml', 'both'],
88
+ default: 'json',
89
+ description: 'Output format',
90
+ },
91
+ },
92
+ required: ['files'],
93
+ },
94
+ };
95
+
96
+ /**
97
+ * Handler for generate_openapi_spec tool
98
+ */
99
+ export async function handleGenerateOpenApi(args: {
100
+ files: Array<{ path: string; content: string; language?: string }>;
101
+ options?: GeneratorOptions;
102
+ format?: 'json' | 'yaml' | 'both';
103
+ }): Promise<TextContent> {
104
+ try {
105
+ const files: FileContent[] = args.files.map(f => ({
106
+ path: f.path,
107
+ content: f.content,
108
+ language: f.language as FileContent['language'],
109
+ }));
110
+
111
+ const result = await generateOpenApiFromCodeWithDetails(files, args.options || {});
112
+
113
+ const format = args.format || 'json';
114
+ let output: string;
115
+
116
+ if (format === 'both') {
117
+ output = `# Generated OpenAPI Specification
118
+
119
+ ## Analysis Summary
120
+
121
+ - **Framework Detected:** ${result.analysis.framework}
122
+ - **Routes Found:** ${result.analysis.routes.length}
123
+ - **Schemas Extracted:** ${Object.keys(result.analysis.schemas).length}
124
+ - **Security Schemes:** ${Object.keys(result.analysis.securitySchemes).length}
125
+ - **Files Analyzed:** ${result.analysis.filesAnalyzed.length}
126
+
127
+ ${result.analysis.warnings.length > 0 ? `### Warnings\n${result.analysis.warnings.map(w => `- ${w}`).join('\n')}\n` : ''}
128
+ ${result.analysis.errors.length > 0 ? `### Errors\n${result.analysis.errors.map(e => `- ${e}`).join('\n')}\n` : ''}
129
+
130
+ ## Routes
131
+
132
+ ${result.analysis.routes.map(r => `- \`${r.method.toUpperCase()} ${r.openApiPath}\` - ${r.summary || r.operationId}`).join('\n')}
133
+
134
+ ## JSON Format
135
+
136
+ \`\`\`json
137
+ ${result.json}
138
+ \`\`\`
139
+
140
+ ## YAML Format
141
+
142
+ \`\`\`yaml
143
+ ${result.yaml}
144
+ \`\`\`
145
+ `;
146
+ } else if (format === 'yaml') {
147
+ output = result.yaml;
148
+ } else {
149
+ output = result.json;
150
+ }
151
+
152
+ return {
153
+ type: 'text',
154
+ text: output,
155
+ };
156
+ } catch (error) {
157
+ return {
158
+ type: 'text',
159
+ text: `Error generating OpenAPI spec: ${error instanceof Error ? error.message : String(error)}`,
160
+ };
161
+ }
162
+ }