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,594 @@
1
+ /**
2
+ * Mock Session Manager
3
+ *
4
+ * Temporary mock implementation for MCP session management.
5
+ * TODO: Replace with actual MCP client integration when ready.
6
+ */
7
+
8
+ import type {
9
+ McpCapabilities,
10
+ McpServerInfo,
11
+ McpTool,
12
+ McpResource,
13
+ McpResourceTemplate,
14
+ McpResourceContents,
15
+ McpPrompt,
16
+ McpPromptMessage,
17
+ McpToolResult,
18
+ SessionInfo,
19
+ } from './types';
20
+ import type { TransportConfig } from './validation';
21
+
22
+ // ============================================================================
23
+ // Types
24
+ // ============================================================================
25
+
26
+ interface InternalSession {
27
+ id: string;
28
+ transport: TransportConfig;
29
+ capabilities: McpCapabilities;
30
+ serverInfo: McpServerInfo;
31
+ tools: McpTool[];
32
+ resources: McpResource[];
33
+ resourceTemplates: McpResourceTemplate[];
34
+ prompts: McpPrompt[];
35
+ createdAt: Date;
36
+ lastActivityAt: Date;
37
+ status: 'active' | 'disconnected' | 'error';
38
+ }
39
+
40
+ interface CreateSessionResult {
41
+ id: string;
42
+ capabilities: McpCapabilities;
43
+ serverInfo: McpServerInfo;
44
+ tools: McpTool[];
45
+ }
46
+
47
+ interface ToolExecutionResult {
48
+ result: McpToolResult;
49
+ logs: string[];
50
+ }
51
+
52
+ interface PromptResult {
53
+ description?: string;
54
+ messages: McpPromptMessage[];
55
+ }
56
+
57
+ // ============================================================================
58
+ // Mock Data
59
+ // ============================================================================
60
+
61
+ const MOCK_TOOLS: McpTool[] = [
62
+ {
63
+ name: 'echo',
64
+ description: 'Echoes the input message',
65
+ inputSchema: {
66
+ type: 'object',
67
+ properties: {
68
+ message: {
69
+ type: 'string',
70
+ description: 'The message to echo',
71
+ },
72
+ },
73
+ required: ['message'],
74
+ },
75
+ },
76
+ {
77
+ name: 'add',
78
+ description: 'Adds two numbers together',
79
+ inputSchema: {
80
+ type: 'object',
81
+ properties: {
82
+ a: {
83
+ type: 'number',
84
+ description: 'First number',
85
+ },
86
+ b: {
87
+ type: 'number',
88
+ description: 'Second number',
89
+ },
90
+ },
91
+ required: ['a', 'b'],
92
+ },
93
+ },
94
+ {
95
+ name: 'get_weather',
96
+ description: 'Gets the current weather for a location',
97
+ inputSchema: {
98
+ type: 'object',
99
+ properties: {
100
+ location: {
101
+ type: 'string',
102
+ description: 'City name or coordinates',
103
+ },
104
+ units: {
105
+ type: 'string',
106
+ enum: ['celsius', 'fahrenheit'],
107
+ description: 'Temperature units',
108
+ default: 'celsius',
109
+ },
110
+ },
111
+ required: ['location'],
112
+ },
113
+ },
114
+ ];
115
+
116
+ const MOCK_RESOURCES: McpResource[] = [
117
+ {
118
+ uri: 'file:///config.json',
119
+ name: 'Configuration',
120
+ description: 'Application configuration file',
121
+ mimeType: 'application/json',
122
+ },
123
+ {
124
+ uri: 'file:///readme.md',
125
+ name: 'README',
126
+ description: 'Project documentation',
127
+ mimeType: 'text/markdown',
128
+ },
129
+ {
130
+ uri: 'db://users/schema',
131
+ name: 'Users Schema',
132
+ description: 'Database schema for users table',
133
+ mimeType: 'application/json',
134
+ },
135
+ ];
136
+
137
+ const MOCK_RESOURCE_TEMPLATES: McpResourceTemplate[] = [
138
+ {
139
+ uriTemplate: 'file:///{path}',
140
+ name: 'File',
141
+ description: 'Read any file by path',
142
+ },
143
+ {
144
+ uriTemplate: 'db://{table}/schema',
145
+ name: 'Database Schema',
146
+ description: 'Get schema for a database table',
147
+ },
148
+ ];
149
+
150
+ const MOCK_PROMPTS: McpPrompt[] = [
151
+ {
152
+ name: 'greeting',
153
+ description: 'Generates a personalized greeting',
154
+ arguments: [
155
+ { name: 'name', description: 'The name of the person to greet', required: true },
156
+ { name: 'style', description: 'Greeting style: formal or casual', required: false },
157
+ ],
158
+ },
159
+ {
160
+ name: 'summarize',
161
+ description: 'Creates a summary of the provided text',
162
+ arguments: [
163
+ { name: 'text', description: 'The text to summarize', required: true },
164
+ { name: 'maxLength', description: 'Maximum length in words', required: false },
165
+ ],
166
+ },
167
+ {
168
+ name: 'code_review',
169
+ description: 'Reviews code and provides feedback',
170
+ arguments: [
171
+ { name: 'code', description: 'The code to review', required: true },
172
+ { name: 'language', description: 'Programming language', required: false },
173
+ { name: 'focus', description: 'Area to focus on', required: false },
174
+ ],
175
+ },
176
+ ];
177
+
178
+ // ============================================================================
179
+ // Session Storage
180
+ // ============================================================================
181
+
182
+ const sessions = new Map<string, InternalSession>();
183
+ const serverStartTime = Date.now();
184
+
185
+ // Session cleanup interval (5 minutes)
186
+ const SESSION_TIMEOUT = 30 * 60 * 1000; // 30 minutes
187
+ const CLEANUP_INTERVAL = 5 * 60 * 1000; // 5 minutes
188
+
189
+ let cleanupTimer: NodeJS.Timeout | null = null;
190
+
191
+ function startCleanupTimer(): void {
192
+ if (cleanupTimer) return;
193
+
194
+ cleanupTimer = setInterval(() => {
195
+ const now = Date.now();
196
+ for (const [id, session] of sessions.entries()) {
197
+ if (now - session.lastActivityAt.getTime() > SESSION_TIMEOUT) {
198
+ sessions.delete(id);
199
+ console.log(`[SessionManager] Cleaned up expired session: ${id}`);
200
+ }
201
+ }
202
+ }, CLEANUP_INTERVAL);
203
+
204
+ // Don't block process exit
205
+ if (cleanupTimer.unref) {
206
+ cleanupTimer.unref();
207
+ }
208
+ }
209
+
210
+ // ============================================================================
211
+ // Session Manager Implementation
212
+ // ============================================================================
213
+
214
+ class SessionManagerImpl {
215
+ private static instance: SessionManagerImpl;
216
+
217
+ private constructor() {
218
+ startCleanupTimer();
219
+ }
220
+
221
+ static getInstance(): SessionManagerImpl {
222
+ if (!SessionManagerImpl.instance) {
223
+ SessionManagerImpl.instance = new SessionManagerImpl();
224
+ }
225
+ return SessionManagerImpl.instance;
226
+ }
227
+
228
+ /**
229
+ * Creates a new session with the given transport configuration
230
+ */
231
+ async createSession(
232
+ transport: TransportConfig,
233
+ _generatedCode?: string
234
+ ): Promise<CreateSessionResult> {
235
+ // Simulate connection delay
236
+ await this.delay(50 + Math.random() * 100);
237
+
238
+ const sessionId = `session_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;
239
+
240
+ const capabilities: McpCapabilities = {
241
+ tools: { listChanged: true },
242
+ resources: { subscribe: false, listChanged: true },
243
+ prompts: { listChanged: true },
244
+ };
245
+
246
+ const serverInfo: McpServerInfo = {
247
+ name: `mock-${transport.type}-server`,
248
+ version: '1.0.0',
249
+ protocolVersion: '2024-11-05',
250
+ };
251
+
252
+ const session: InternalSession = {
253
+ id: sessionId,
254
+ transport,
255
+ capabilities,
256
+ serverInfo,
257
+ tools: MOCK_TOOLS,
258
+ resources: MOCK_RESOURCES,
259
+ resourceTemplates: MOCK_RESOURCE_TEMPLATES,
260
+ prompts: MOCK_PROMPTS,
261
+ createdAt: new Date(),
262
+ lastActivityAt: new Date(),
263
+ status: 'active',
264
+ };
265
+
266
+ sessions.set(sessionId, session);
267
+
268
+ return {
269
+ id: sessionId,
270
+ capabilities,
271
+ serverInfo,
272
+ tools: MOCK_TOOLS,
273
+ };
274
+ }
275
+
276
+ /**
277
+ * Gets a session by ID
278
+ */
279
+ async getSession(sessionId: string): Promise<InternalSession | null> {
280
+ const session = sessions.get(sessionId);
281
+ if (session) {
282
+ session.lastActivityAt = new Date();
283
+ }
284
+ return session || null;
285
+ }
286
+
287
+ /**
288
+ * Deletes a session
289
+ */
290
+ async deleteSession(sessionId: string): Promise<boolean> {
291
+ await this.delay(20);
292
+ return sessions.delete(sessionId);
293
+ }
294
+
295
+ /**
296
+ * Lists all active sessions
297
+ */
298
+ async listSessions(): Promise<SessionInfo[]> {
299
+ await this.delay(20);
300
+ return Array.from(sessions.values()).map((s) => ({
301
+ id: s.id,
302
+ transport: s.transport,
303
+ capabilities: s.capabilities,
304
+ serverInfo: s.serverInfo,
305
+ createdAt: s.createdAt.toISOString(),
306
+ lastActivityAt: s.lastActivityAt.toISOString(),
307
+ status: s.status,
308
+ toolCount: s.tools.length,
309
+ resourceCount: s.resources.length,
310
+ promptCount: s.prompts.length,
311
+ }));
312
+ }
313
+
314
+ /**
315
+ * Deletes all sessions
316
+ */
317
+ async deleteAllSessions(): Promise<number> {
318
+ await this.delay(20);
319
+ const count = sessions.size;
320
+ sessions.clear();
321
+ return count;
322
+ }
323
+
324
+ /**
325
+ * Gets the number of active sessions
326
+ */
327
+ async getActiveSessionCount(): Promise<number> {
328
+ return sessions.size;
329
+ }
330
+
331
+ /**
332
+ * Lists tools for a session
333
+ */
334
+ async listTools(sessionId: string): Promise<McpTool[]> {
335
+ const session = await this.getSession(sessionId);
336
+ if (!session) {
337
+ throw new Error(`Session not found: ${sessionId}`);
338
+ }
339
+ await this.delay(30);
340
+ return session.tools;
341
+ }
342
+
343
+ /**
344
+ * Executes a tool
345
+ */
346
+ async executeTool(
347
+ sessionId: string,
348
+ toolName: string,
349
+ params: Record<string, unknown>
350
+ ): Promise<ToolExecutionResult> {
351
+ const session = await this.getSession(sessionId);
352
+ if (!session) {
353
+ throw new Error(`Session not found: ${sessionId}`);
354
+ }
355
+
356
+ const tool = session.tools.find((t) => t.name === toolName);
357
+ if (!tool) {
358
+ throw new Error(`Tool not found: ${toolName}`);
359
+ }
360
+
361
+ // Simulate execution delay
362
+ await this.delay(100 + Math.random() * 200);
363
+
364
+ const logs: string[] = [
365
+ `[${new Date().toISOString()}] Executing tool: ${toolName}`,
366
+ `[${new Date().toISOString()}] Parameters: ${JSON.stringify(params)}`,
367
+ ];
368
+
369
+ let result: McpToolResult;
370
+
371
+ switch (toolName) {
372
+ case 'echo': {
373
+ const message = String(params.message || '');
374
+ logs.push(`[${new Date().toISOString()}] Echo complete`);
375
+ result = { content: [{ type: 'text', text: message }] };
376
+ break;
377
+ }
378
+ case 'add': {
379
+ const a = Number(params.a) || 0;
380
+ const b = Number(params.b) || 0;
381
+ const sum = a + b;
382
+ logs.push(`[${new Date().toISOString()}] Calculation: ${a} + ${b} = ${sum}`);
383
+ result = { content: [{ type: 'text', text: String(sum) }] };
384
+ break;
385
+ }
386
+ case 'get_weather': {
387
+ const location = String(params.location || 'Unknown');
388
+ const units = String(params.units || 'celsius');
389
+ const temp = units === 'celsius' ? 22 : 72;
390
+ logs.push(`[${new Date().toISOString()}] Fetched weather for: ${location}`);
391
+ result = {
392
+ content: [
393
+ {
394
+ type: 'text',
395
+ text: JSON.stringify({
396
+ location,
397
+ temperature: temp,
398
+ units,
399
+ condition: 'Sunny',
400
+ humidity: 45,
401
+ }),
402
+ },
403
+ ],
404
+ };
405
+ break;
406
+ }
407
+ default:
408
+ throw new Error(`Unknown tool: ${toolName}`);
409
+ }
410
+
411
+ logs.push(`[${new Date().toISOString()}] Execution complete`);
412
+ return { result, logs };
413
+ }
414
+
415
+ /**
416
+ * Lists resources for a session
417
+ */
418
+ async listResources(
419
+ sessionId: string
420
+ ): Promise<{ resources: McpResource[]; resourceTemplates: McpResourceTemplate[] }> {
421
+ const session = await this.getSession(sessionId);
422
+ if (!session) {
423
+ throw new Error(`Session not found: ${sessionId}`);
424
+ }
425
+ await this.delay(30);
426
+ return {
427
+ resources: session.resources,
428
+ resourceTemplates: session.resourceTemplates,
429
+ };
430
+ }
431
+
432
+ /**
433
+ * Reads a resource
434
+ */
435
+ async readResource(sessionId: string, uri: string): Promise<McpResourceContents[]> {
436
+ const session = await this.getSession(sessionId);
437
+ if (!session) {
438
+ throw new Error(`Session not found: ${sessionId}`);
439
+ }
440
+
441
+ await this.delay(50 + Math.random() * 100);
442
+
443
+ switch (uri) {
444
+ case 'file:///config.json':
445
+ return [
446
+ {
447
+ uri,
448
+ mimeType: 'application/json',
449
+ text: JSON.stringify(
450
+ {
451
+ name: 'my-app',
452
+ version: '1.0.0',
453
+ settings: { debug: true, maxConnections: 100 },
454
+ },
455
+ null,
456
+ 2
457
+ ),
458
+ },
459
+ ];
460
+ case 'file:///readme.md':
461
+ return [
462
+ {
463
+ uri,
464
+ mimeType: 'text/markdown',
465
+ text: '# My Application\n\nThis is a sample application.\n\n## Features\n\n- Feature 1\n- Feature 2\n- Feature 3\n',
466
+ },
467
+ ];
468
+ case 'db://users/schema':
469
+ return [
470
+ {
471
+ uri,
472
+ mimeType: 'application/json',
473
+ text: JSON.stringify(
474
+ {
475
+ table: 'users',
476
+ columns: [
477
+ { name: 'id', type: 'integer', primaryKey: true },
478
+ { name: 'email', type: 'varchar(255)', unique: true },
479
+ { name: 'name', type: 'varchar(100)' },
480
+ { name: 'created_at', type: 'timestamp' },
481
+ ],
482
+ },
483
+ null,
484
+ 2
485
+ ),
486
+ },
487
+ ];
488
+ default:
489
+ throw new Error(`Resource not found: ${uri}`);
490
+ }
491
+ }
492
+
493
+ /**
494
+ * Lists prompts for a session
495
+ */
496
+ async listPrompts(sessionId: string): Promise<McpPrompt[]> {
497
+ const session = await this.getSession(sessionId);
498
+ if (!session) {
499
+ throw new Error(`Session not found: ${sessionId}`);
500
+ }
501
+ await this.delay(30);
502
+ return session.prompts;
503
+ }
504
+
505
+ /**
506
+ * Gets a prompt with arguments
507
+ */
508
+ async getPrompt(
509
+ sessionId: string,
510
+ name: string,
511
+ args?: Record<string, string>
512
+ ): Promise<PromptResult> {
513
+ const session = await this.getSession(sessionId);
514
+ if (!session) {
515
+ throw new Error(`Session not found: ${sessionId}`);
516
+ }
517
+
518
+ const prompt = session.prompts.find((p) => p.name === name);
519
+ if (!prompt) {
520
+ throw new Error(`Prompt not found: ${name}`);
521
+ }
522
+
523
+ await this.delay(50 + Math.random() * 100);
524
+
525
+ switch (name) {
526
+ case 'greeting': {
527
+ const personName = args?.name || 'Friend';
528
+ const style = args?.style || 'casual';
529
+ const greetingText =
530
+ style === 'formal'
531
+ ? `Good day, ${personName}. I hope this message finds you well.`
532
+ : `Hey ${personName}! How's it going?`;
533
+
534
+ return {
535
+ description: 'A personalized greeting message',
536
+ messages: [
537
+ { role: 'user', content: { type: 'text', text: `Generate a ${style} greeting for ${personName}` } },
538
+ { role: 'assistant', content: { type: 'text', text: greetingText } },
539
+ ],
540
+ };
541
+ }
542
+ case 'summarize': {
543
+ const text = args?.text || 'No text provided';
544
+ const maxLength = args?.maxLength || '100';
545
+ return {
546
+ description: 'Summarize the provided text',
547
+ messages: [
548
+ {
549
+ role: 'user',
550
+ content: {
551
+ type: 'text',
552
+ text: `Please summarize the following text in at most ${maxLength} words:\n\n${text}`,
553
+ },
554
+ },
555
+ ],
556
+ };
557
+ }
558
+ case 'code_review': {
559
+ const code = args?.code || '// No code provided';
560
+ const language = args?.language || 'unknown';
561
+ const focus = args?.focus || 'general';
562
+ return {
563
+ description: 'Code review prompt',
564
+ messages: [
565
+ {
566
+ role: 'user',
567
+ content: {
568
+ type: 'text',
569
+ text: `Please review the following ${language} code with a focus on ${focus}:\n\n\`\`\`${language}\n${code}\n\`\`\``,
570
+ },
571
+ },
572
+ ],
573
+ };
574
+ }
575
+ default:
576
+ throw new Error(`Unknown prompt: ${name}`);
577
+ }
578
+ }
579
+
580
+ /**
581
+ * Gets server uptime in seconds
582
+ */
583
+ getUptime(): number {
584
+ return Math.floor((Date.now() - serverStartTime) / 1000);
585
+ }
586
+
587
+ private delay(ms: number): Promise<void> {
588
+ return new Promise((resolve) => setTimeout(resolve, ms));
589
+ }
590
+ }
591
+
592
+ // Export singleton
593
+ export const SessionManager = SessionManagerImpl;
594
+ export type { CreateSessionResult, ToolExecutionResult, PromptResult, InternalSession };