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,150 @@
1
+ /**
2
+ * CapabilityTabs Component - Tab navigation for MCP capabilities
3
+ * @copyright 2024-2026 nirholas
4
+ * @license MIT
5
+ */
6
+
7
+ 'use client';
8
+
9
+ import * as React from 'react';
10
+ import { motion } from 'framer-motion';
11
+ import { Wrench, FileText, MessageSquare } from 'lucide-react';
12
+ import { cn } from '@/lib/utils';
13
+ import type { CapabilityTab, McpCapabilities } from './types';
14
+
15
+ export interface CapabilityTabsProps {
16
+ /** Currently active tab */
17
+ activeTab: CapabilityTab;
18
+ /** Callback when tab changes */
19
+ onTabChange: (tab: CapabilityTab) => void;
20
+ /** Server capabilities - determines which tabs are enabled */
21
+ capabilities?: McpCapabilities | null;
22
+ /** Counts for each capability */
23
+ counts?: { tools: number; resources: number; prompts: number };
24
+ /** Additional CSS classes */
25
+ className?: string;
26
+ }
27
+
28
+ interface TabConfig {
29
+ id: CapabilityTab;
30
+ label: string;
31
+ icon: React.ReactNode;
32
+ capabilityKey: keyof McpCapabilities;
33
+ }
34
+
35
+ const TABS: TabConfig[] = [
36
+ {
37
+ id: 'tools',
38
+ label: 'Tools',
39
+ icon: <Wrench className="w-4 h-4" />,
40
+ capabilityKey: 'tools',
41
+ },
42
+ {
43
+ id: 'resources',
44
+ label: 'Resources',
45
+ icon: <FileText className="w-4 h-4" />,
46
+ capabilityKey: 'resources',
47
+ },
48
+ {
49
+ id: 'prompts',
50
+ label: 'Prompts',
51
+ icon: <MessageSquare className="w-4 h-4" />,
52
+ capabilityKey: 'prompts',
53
+ },
54
+ ];
55
+
56
+ /**
57
+ * CapabilityTabs - Tab navigation for MCP server capabilities
58
+ */
59
+ export default function CapabilityTabs({
60
+ activeTab,
61
+ onTabChange,
62
+ capabilities,
63
+ counts,
64
+ className = '',
65
+ }: CapabilityTabsProps) {
66
+ // Check if a capability is available
67
+ const isCapabilityAvailable = (capKey: keyof McpCapabilities): boolean => {
68
+ if (!capabilities) return true; // If no capabilities info, assume all available
69
+ const value = capabilities[capKey];
70
+ return value === true || (typeof value === 'object' && value !== null);
71
+ };
72
+
73
+ // Get count for a tab
74
+ const getCount = (tabId: CapabilityTab): number | undefined => {
75
+ if (!counts) return undefined;
76
+ return counts[tabId];
77
+ };
78
+
79
+ return (
80
+ <div className={cn('relative', className)}>
81
+ <div className="flex items-center gap-1 p-1 rounded-lg bg-neutral-900/50 border border-neutral-800">
82
+ {TABS.map((tab) => {
83
+ const isActive = activeTab === tab.id;
84
+ const isEnabled = isCapabilityAvailable(tab.capabilityKey);
85
+ const count = getCount(tab.id);
86
+
87
+ return (
88
+ <button
89
+ key={tab.id}
90
+ onClick={() => isEnabled && onTabChange(tab.id)}
91
+ disabled={!isEnabled}
92
+ className={cn(
93
+ 'relative flex items-center gap-2 px-4 py-2 rounded-md text-sm font-medium transition-colors',
94
+ isActive
95
+ ? 'text-white'
96
+ : isEnabled
97
+ ? 'text-neutral-400 hover:text-neutral-300'
98
+ : 'text-neutral-600 cursor-not-allowed'
99
+ )}
100
+ >
101
+ {/* Active tab background */}
102
+ {isActive && (
103
+ <motion.div
104
+ layoutId="activeTab"
105
+ className="absolute inset-0 bg-white/10 rounded-md"
106
+ transition={{ type: 'spring', duration: 0.3, bounce: 0.2 }}
107
+ />
108
+ )}
109
+
110
+ {/* Tab content */}
111
+ <span className="relative flex items-center gap-2">
112
+ {tab.icon}
113
+ <span>{tab.label}</span>
114
+ {count !== undefined && count > 0 && (
115
+ <span
116
+ className={cn(
117
+ 'min-w-[20px] h-5 flex items-center justify-center px-1.5 rounded-full text-xs font-medium',
118
+ isActive
119
+ ? 'bg-white/20 text-white'
120
+ : 'bg-neutral-800 text-neutral-400'
121
+ )}
122
+ >
123
+ {count}
124
+ </span>
125
+ )}
126
+ </span>
127
+ </button>
128
+ );
129
+ })}
130
+ </div>
131
+
132
+ {/* Disabled capability hint */}
133
+ {capabilities && (
134
+ <div className="mt-2 flex items-center gap-2">
135
+ {TABS.filter((tab) => !isCapabilityAvailable(tab.capabilityKey)).map(
136
+ (tab) => (
137
+ <span
138
+ key={tab.id}
139
+ className="text-xs text-neutral-600 flex items-center gap-1"
140
+ >
141
+ {tab.icon}
142
+ {tab.label} not supported
143
+ </span>
144
+ )
145
+ )}
146
+ </div>
147
+ )}
148
+ </div>
149
+ );
150
+ }
@@ -0,0 +1,322 @@
1
+ /**
2
+ * ConnectionStatus Component - Display MCP connection state
3
+ * @copyright 2024-2026 nirholas
4
+ * @license MIT
5
+ */
6
+
7
+ 'use client';
8
+
9
+ import * as React from 'react';
10
+ import { useState, useCallback } from 'react';
11
+ import { motion, AnimatePresence } from 'framer-motion';
12
+ import {
13
+ Wifi,
14
+ WifiOff,
15
+ Loader2,
16
+ Power,
17
+ AlertTriangle,
18
+ Copy,
19
+ Check,
20
+ X,
21
+ Server,
22
+ Wrench,
23
+ FileText,
24
+ MessageSquare,
25
+ } from 'lucide-react';
26
+ import { Button } from '@/components/ui/button';
27
+ import { Badge } from '@/components/ui/badge';
28
+ import { cn } from '@/lib/utils';
29
+ import type { ConnectionStatus as ConnectionStatusType, McpCapabilities, ServerInfo } from './types';
30
+
31
+ export interface ConnectionStatusProps {
32
+ /** Current connection status */
33
+ status: ConnectionStatusType;
34
+ /** Session ID when connected */
35
+ sessionId?: string | null;
36
+ /** Server information when connected */
37
+ serverInfo?: ServerInfo | null;
38
+ /** Server capabilities when connected */
39
+ capabilities?: McpCapabilities | null;
40
+ /** Error message if in error state */
41
+ error?: string | null;
42
+ /** Callback to initiate connection */
43
+ onConnect?: () => void;
44
+ /** Callback to disconnect */
45
+ onDisconnect?: () => void;
46
+ /** Callback to dismiss error */
47
+ onDismissError?: () => void;
48
+ /** Additional CSS classes */
49
+ className?: string;
50
+ }
51
+
52
+ const STATUS_CONFIG: Record<ConnectionStatusType, {
53
+ color: string;
54
+ bgColor: string;
55
+ borderColor: string;
56
+ icon: React.ReactNode;
57
+ label: string;
58
+ }> = {
59
+ disconnected: {
60
+ color: 'text-neutral-400',
61
+ bgColor: 'bg-neutral-500/10',
62
+ borderColor: 'border-neutral-700',
63
+ icon: <WifiOff className="w-4 h-4" />,
64
+ label: 'Disconnected',
65
+ },
66
+ connecting: {
67
+ color: 'text-yellow-400',
68
+ bgColor: 'bg-yellow-500/10',
69
+ borderColor: 'border-yellow-500/30',
70
+ icon: <Loader2 className="w-4 h-4 animate-spin" />,
71
+ label: 'Connecting...',
72
+ },
73
+ connected: {
74
+ color: 'text-green-400',
75
+ bgColor: 'bg-green-500/10',
76
+ borderColor: 'border-green-500/30',
77
+ icon: <Wifi className="w-4 h-4" />,
78
+ label: 'Connected',
79
+ },
80
+ error: {
81
+ color: 'text-red-400',
82
+ bgColor: 'bg-red-500/10',
83
+ borderColor: 'border-red-500/30',
84
+ icon: <AlertTriangle className="w-4 h-4" />,
85
+ label: 'Error',
86
+ },
87
+ };
88
+
89
+ /**
90
+ * ConnectionStatus - Display MCP connection state with actions
91
+ */
92
+ export default function ConnectionStatus({
93
+ status,
94
+ sessionId,
95
+ serverInfo,
96
+ capabilities,
97
+ error,
98
+ onConnect,
99
+ onDisconnect,
100
+ onDismissError,
101
+ className = '',
102
+ }: ConnectionStatusProps) {
103
+ const [copiedSessionId, setCopiedSessionId] = useState(false);
104
+ const config = STATUS_CONFIG[status];
105
+
106
+ // Copy session ID to clipboard
107
+ const copySessionId = useCallback(async () => {
108
+ if (!sessionId) return;
109
+ try {
110
+ await navigator.clipboard.writeText(sessionId);
111
+ setCopiedSessionId(true);
112
+ setTimeout(() => setCopiedSessionId(false), 2000);
113
+ } catch {
114
+ // Ignore copy errors
115
+ }
116
+ }, [sessionId]);
117
+
118
+ // Truncate session ID for display
119
+ const displaySessionId = sessionId
120
+ ? `${sessionId.substring(0, 8)}...${sessionId.substring(sessionId.length - 4)}`
121
+ : null;
122
+
123
+ // Check if a capability is available
124
+ const hasCapability = (cap: keyof McpCapabilities): boolean => {
125
+ if (!capabilities) return false;
126
+ const value = capabilities[cap];
127
+ return value === true || (typeof value === 'object' && value !== null);
128
+ };
129
+
130
+ return (
131
+ <div
132
+ className={cn(
133
+ 'rounded-xl border p-4 transition-all',
134
+ config.bgColor,
135
+ config.borderColor,
136
+ className
137
+ )}
138
+ >
139
+ <div className="flex items-center justify-between gap-4">
140
+ {/* Status Indicator */}
141
+ <div className="flex items-center gap-3">
142
+ <div className={cn('flex items-center gap-2', config.color)}>
143
+ {config.icon}
144
+ <span className="text-sm font-medium">{config.label}</span>
145
+ </div>
146
+
147
+ {/* Server Info */}
148
+ <AnimatePresence>
149
+ {status === 'connected' && serverInfo && (
150
+ <motion.div
151
+ initial={{ opacity: 0, x: -10 }}
152
+ animate={{ opacity: 1, x: 0 }}
153
+ exit={{ opacity: 0, x: -10 }}
154
+ className="flex items-center gap-2"
155
+ >
156
+ <Server className="w-3.5 h-3.5 text-neutral-500" />
157
+ <span className="text-sm text-neutral-400">
158
+ {serverInfo.name}
159
+ <span className="text-neutral-600 ml-1">v{serverInfo.version}</span>
160
+ </span>
161
+ </motion.div>
162
+ )}
163
+ </AnimatePresence>
164
+
165
+ {/* Session ID */}
166
+ <AnimatePresence>
167
+ {status === 'connected' && displaySessionId && (
168
+ <motion.button
169
+ initial={{ opacity: 0, x: -10 }}
170
+ animate={{ opacity: 1, x: 0 }}
171
+ exit={{ opacity: 0, x: -10 }}
172
+ onClick={copySessionId}
173
+ className="flex items-center gap-1.5 text-xs text-neutral-500 hover:text-neutral-400 transition-colors"
174
+ title="Click to copy session ID"
175
+ >
176
+ <span className="font-mono">{displaySessionId}</span>
177
+ {copiedSessionId ? (
178
+ <Check className="w-3 h-3 text-green-400" />
179
+ ) : (
180
+ <Copy className="w-3 h-3" />
181
+ )}
182
+ </motion.button>
183
+ )}
184
+ </AnimatePresence>
185
+ </div>
186
+
187
+ {/* Actions */}
188
+ <div className="flex items-center gap-2">
189
+ {/* Capability Badges */}
190
+ <AnimatePresence>
191
+ {status === 'connected' && capabilities && (
192
+ <motion.div
193
+ initial={{ opacity: 0, scale: 0.9 }}
194
+ animate={{ opacity: 1, scale: 1 }}
195
+ exit={{ opacity: 0, scale: 0.9 }}
196
+ className="hidden sm:flex items-center gap-1.5"
197
+ >
198
+ {hasCapability('tools') && (
199
+ <Badge variant="secondary" className="gap-1">
200
+ <Wrench className="w-3 h-3" />
201
+ Tools
202
+ </Badge>
203
+ )}
204
+ {hasCapability('resources') && (
205
+ <Badge variant="secondary" className="gap-1">
206
+ <FileText className="w-3 h-3" />
207
+ Resources
208
+ </Badge>
209
+ )}
210
+ {hasCapability('prompts') && (
211
+ <Badge variant="secondary" className="gap-1">
212
+ <MessageSquare className="w-3 h-3" />
213
+ Prompts
214
+ </Badge>
215
+ )}
216
+ </motion.div>
217
+ )}
218
+ </AnimatePresence>
219
+
220
+ {/* Connect/Disconnect Button */}
221
+ {status === 'disconnected' && onConnect && (
222
+ <Button
223
+ variant="success"
224
+ size="sm"
225
+ onClick={onConnect}
226
+ leftIcon={<Power className="w-3.5 h-3.5" />}
227
+ >
228
+ Connect
229
+ </Button>
230
+ )}
231
+
232
+ {status === 'connecting' && (
233
+ <Button variant="secondary" size="sm" disabled>
234
+ <Loader2 className="w-3.5 h-3.5 animate-spin" />
235
+ Connecting
236
+ </Button>
237
+ )}
238
+
239
+ {status === 'connected' && onDisconnect && (
240
+ <Button
241
+ variant="outline"
242
+ size="sm"
243
+ onClick={onDisconnect}
244
+ leftIcon={<Power className="w-3.5 h-3.5" />}
245
+ >
246
+ Disconnect
247
+ </Button>
248
+ )}
249
+
250
+ {status === 'error' && onConnect && (
251
+ <Button
252
+ variant="secondary"
253
+ size="sm"
254
+ onClick={onConnect}
255
+ leftIcon={<Power className="w-3.5 h-3.5" />}
256
+ >
257
+ Retry
258
+ </Button>
259
+ )}
260
+ </div>
261
+ </div>
262
+
263
+ {/* Error Message */}
264
+ <AnimatePresence>
265
+ {status === 'error' && error && (
266
+ <motion.div
267
+ initial={{ opacity: 0, height: 0 }}
268
+ animate={{ opacity: 1, height: 'auto' }}
269
+ exit={{ opacity: 0, height: 0 }}
270
+ className="mt-3 pt-3 border-t border-red-500/20"
271
+ >
272
+ <div className="flex items-start justify-between gap-3">
273
+ <p className="text-sm text-red-300 flex-1">{error}</p>
274
+ {onDismissError && (
275
+ <button
276
+ onClick={onDismissError}
277
+ className="text-red-400 hover:text-red-300 transition-colors"
278
+ >
279
+ <X className="w-4 h-4" />
280
+ </button>
281
+ )}
282
+ </div>
283
+ </motion.div>
284
+ )}
285
+ </AnimatePresence>
286
+
287
+ {/* Capabilities detail on mobile */}
288
+ <AnimatePresence>
289
+ {status === 'connected' && capabilities && (
290
+ <motion.div
291
+ initial={{ opacity: 0, height: 0 }}
292
+ animate={{ opacity: 1, height: 'auto' }}
293
+ exit={{ opacity: 0, height: 0 }}
294
+ className="mt-3 pt-3 border-t border-green-500/20 sm:hidden"
295
+ >
296
+ <div className="flex items-center gap-1.5 flex-wrap">
297
+ <span className="text-xs text-neutral-500 mr-1">Capabilities:</span>
298
+ {hasCapability('tools') && (
299
+ <Badge variant="secondary" className="gap-1 text-xs">
300
+ <Wrench className="w-2.5 h-2.5" />
301
+ Tools
302
+ </Badge>
303
+ )}
304
+ {hasCapability('resources') && (
305
+ <Badge variant="secondary" className="gap-1 text-xs">
306
+ <FileText className="w-2.5 h-2.5" />
307
+ Resources
308
+ </Badge>
309
+ )}
310
+ {hasCapability('prompts') && (
311
+ <Badge variant="secondary" className="gap-1 text-xs">
312
+ <MessageSquare className="w-2.5 h-2.5" />
313
+ Prompts
314
+ </Badge>
315
+ )}
316
+ </div>
317
+ </motion.div>
318
+ )}
319
+ </AnimatePresence>
320
+ </div>
321
+ );
322
+ }