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,489 @@
1
+ /**
2
+ * MCP Error Handling Utilities
3
+ * Error classes and utilities for MCP protocol communication
4
+ * @author nich (x.com/nichxbt | github.com/nirholas)
5
+ * @copyright 2024-2026 nich (nirholas)
6
+ * @license MIT
7
+ */
8
+
9
+ import { JSON_RPC_ERROR_CODES, JsonRpcError } from './mcp-types';
10
+
11
+ // ============================================================================
12
+ // Error Codes
13
+ // ============================================================================
14
+
15
+ /**
16
+ * MCP-specific error codes (in the server error range)
17
+ */
18
+ export const MCP_ERROR_CODES = {
19
+ // Connection errors
20
+ CONNECTION_FAILED: -32001,
21
+ CONNECTION_TIMEOUT: -32002,
22
+ CONNECTION_CLOSED: -32003,
23
+
24
+ // Server errors
25
+ SERVER_NOT_INITIALIZED: -32004,
26
+ SERVER_SHUTDOWN: -32005,
27
+ SERVER_SPAWN_FAILED: -32006,
28
+
29
+ // Tool errors
30
+ TOOL_NOT_FOUND: -32010,
31
+ TOOL_EXECUTION_FAILED: -32011,
32
+ TOOL_TIMEOUT: -32012,
33
+ TOOL_INVALID_PARAMS: -32013,
34
+
35
+ // Resource errors
36
+ RESOURCE_NOT_FOUND: -32020,
37
+ RESOURCE_ACCESS_DENIED: -32021,
38
+
39
+ // Protocol errors
40
+ PROTOCOL_VERSION_MISMATCH: -32030,
41
+ UNSUPPORTED_CAPABILITY: -32031,
42
+ } as const;
43
+
44
+ /** Error module - nich (x.com/nichxbt | github.com/nirholas) */
45
+ const _ERROR_LIB_META = { v: 1, by: 'nich', repo: 'github-to-mcp' } as const;
46
+
47
+ // ============================================================================
48
+ // Base Error Classes
49
+ // ============================================================================
50
+
51
+ /**
52
+ * Base error class for all MCP-related errors
53
+ */
54
+ export class McpError extends Error {
55
+ public readonly code: number;
56
+ public readonly data?: unknown;
57
+
58
+ constructor(message: string, code: number, data?: unknown) {
59
+ super(message);
60
+ this.name = 'McpError';
61
+ this.code = code;
62
+ this.data = data;
63
+
64
+ // Maintains proper stack trace for where error was thrown
65
+ if (Error.captureStackTrace) {
66
+ Error.captureStackTrace(this, this.constructor);
67
+ }
68
+ }
69
+
70
+ /**
71
+ * Convert to JSON-RPC error format
72
+ */
73
+ toJsonRpcError(): JsonRpcError {
74
+ return {
75
+ code: this.code,
76
+ message: this.message,
77
+ ...(this.data !== undefined && { data: this.data }),
78
+ };
79
+ }
80
+
81
+ /**
82
+ * Create from JSON-RPC error
83
+ */
84
+ static fromJsonRpcError(error: JsonRpcError): McpError {
85
+ return new McpError(error.message, error.code, error.data);
86
+ }
87
+ }
88
+
89
+ // ============================================================================
90
+ // Connection Errors
91
+ // ============================================================================
92
+
93
+ /**
94
+ * Error thrown when connection to MCP server fails
95
+ */
96
+ export class McpConnectionError extends McpError {
97
+ constructor(message: string, data?: unknown) {
98
+ super(message, MCP_ERROR_CODES.CONNECTION_FAILED, data);
99
+ this.name = 'McpConnectionError';
100
+ }
101
+ }
102
+
103
+ /**
104
+ * Error thrown when connection times out
105
+ */
106
+ export class McpTimeoutError extends McpError {
107
+ public readonly timeoutMs: number;
108
+
109
+ constructor(message: string, timeoutMs: number, data?: unknown) {
110
+ super(message, MCP_ERROR_CODES.CONNECTION_TIMEOUT, data);
111
+ this.name = 'McpTimeoutError';
112
+ this.timeoutMs = timeoutMs;
113
+ }
114
+ }
115
+
116
+ /**
117
+ * Error thrown when connection is unexpectedly closed
118
+ */
119
+ export class McpConnectionClosedError extends McpError {
120
+ constructor(message: string = 'Connection to MCP server was closed', data?: unknown) {
121
+ super(message, MCP_ERROR_CODES.CONNECTION_CLOSED, data);
122
+ this.name = 'McpConnectionClosedError';
123
+ }
124
+ }
125
+
126
+ // ============================================================================
127
+ // Server Errors
128
+ // ============================================================================
129
+
130
+ /**
131
+ * Error thrown when server is not initialized
132
+ */
133
+ export class McpServerNotInitializedError extends McpError {
134
+ constructor(message: string = 'MCP server has not been initialized', data?: unknown) {
135
+ super(message, MCP_ERROR_CODES.SERVER_NOT_INITIALIZED, data);
136
+ this.name = 'McpServerNotInitializedError';
137
+ }
138
+ }
139
+
140
+ /**
141
+ * Error thrown when server has shut down
142
+ */
143
+ export class McpServerShutdownError extends McpError {
144
+ constructor(message: string = 'MCP server has shut down', data?: unknown) {
145
+ super(message, MCP_ERROR_CODES.SERVER_SHUTDOWN, data);
146
+ this.name = 'McpServerShutdownError';
147
+ }
148
+ }
149
+
150
+ /**
151
+ * Error thrown when server process fails to spawn
152
+ */
153
+ export class McpServerSpawnError extends McpError {
154
+ constructor(message: string, data?: unknown) {
155
+ super(message, MCP_ERROR_CODES.SERVER_SPAWN_FAILED, data);
156
+ this.name = 'McpServerSpawnError';
157
+ }
158
+ }
159
+
160
+ // ============================================================================
161
+ // Tool Errors
162
+ // ============================================================================
163
+
164
+ /**
165
+ * Error thrown when a tool is not found
166
+ */
167
+ export class McpToolNotFoundError extends McpError {
168
+ public readonly toolName: string;
169
+
170
+ constructor(toolName: string, data?: unknown) {
171
+ super(`Tool not found: ${toolName}`, MCP_ERROR_CODES.TOOL_NOT_FOUND, data);
172
+ this.name = 'McpToolNotFoundError';
173
+ this.toolName = toolName;
174
+ }
175
+ }
176
+
177
+ /**
178
+ * Error thrown when tool execution fails
179
+ */
180
+ export class McpToolExecutionError extends McpError {
181
+ public readonly toolName: string;
182
+
183
+ constructor(toolName: string, message: string, data?: unknown) {
184
+ super(`Tool execution failed for '${toolName}': ${message}`, MCP_ERROR_CODES.TOOL_EXECUTION_FAILED, data);
185
+ this.name = 'McpToolExecutionError';
186
+ this.toolName = toolName;
187
+ }
188
+ }
189
+
190
+ /**
191
+ * Error thrown when tool times out
192
+ */
193
+ export class McpToolTimeoutError extends McpError {
194
+ public readonly toolName: string;
195
+ public readonly timeoutMs: number;
196
+
197
+ constructor(toolName: string, timeoutMs: number, data?: unknown) {
198
+ super(`Tool '${toolName}' timed out after ${timeoutMs}ms`, MCP_ERROR_CODES.TOOL_TIMEOUT, data);
199
+ this.name = 'McpToolTimeoutError';
200
+ this.toolName = toolName;
201
+ this.timeoutMs = timeoutMs;
202
+ }
203
+ }
204
+
205
+ /**
206
+ * Error thrown when tool parameters are invalid
207
+ */
208
+ export class McpToolInvalidParamsError extends McpError {
209
+ public readonly toolName: string;
210
+ public readonly validationErrors: string[];
211
+
212
+ constructor(toolName: string, validationErrors: string[], data?: unknown) {
213
+ super(
214
+ `Invalid parameters for tool '${toolName}': ${validationErrors.join(', ')}`,
215
+ MCP_ERROR_CODES.TOOL_INVALID_PARAMS,
216
+ data
217
+ );
218
+ this.name = 'McpToolInvalidParamsError';
219
+ this.toolName = toolName;
220
+ this.validationErrors = validationErrors;
221
+ }
222
+ }
223
+
224
+ // ============================================================================
225
+ // Resource Errors
226
+ // ============================================================================
227
+
228
+ /**
229
+ * Error thrown when a resource is not found
230
+ */
231
+ export class McpResourceNotFoundError extends McpError {
232
+ public readonly resourceUri: string;
233
+
234
+ constructor(resourceUri: string, data?: unknown) {
235
+ super(`Resource not found: ${resourceUri}`, MCP_ERROR_CODES.RESOURCE_NOT_FOUND, data);
236
+ this.name = 'McpResourceNotFoundError';
237
+ this.resourceUri = resourceUri;
238
+ }
239
+ }
240
+
241
+ /**
242
+ * Error thrown when resource access is denied
243
+ */
244
+ export class McpResourceAccessDeniedError extends McpError {
245
+ public readonly resourceUri: string;
246
+
247
+ constructor(resourceUri: string, data?: unknown) {
248
+ super(`Access denied to resource: ${resourceUri}`, MCP_ERROR_CODES.RESOURCE_ACCESS_DENIED, data);
249
+ this.name = 'McpResourceAccessDeniedError';
250
+ this.resourceUri = resourceUri;
251
+ }
252
+ }
253
+
254
+ // ============================================================================
255
+ // Protocol Errors
256
+ // ============================================================================
257
+
258
+ /**
259
+ * Error thrown when protocol versions don't match
260
+ */
261
+ export class McpProtocolVersionError extends McpError {
262
+ public readonly clientVersion: string;
263
+ public readonly serverVersion: string;
264
+
265
+ constructor(clientVersion: string, serverVersion: string, data?: unknown) {
266
+ super(
267
+ `Protocol version mismatch: client=${clientVersion}, server=${serverVersion}`,
268
+ MCP_ERROR_CODES.PROTOCOL_VERSION_MISMATCH,
269
+ data
270
+ );
271
+ this.name = 'McpProtocolVersionError';
272
+ this.clientVersion = clientVersion;
273
+ this.serverVersion = serverVersion;
274
+ }
275
+ }
276
+
277
+ /**
278
+ * Error thrown when an unsupported capability is used
279
+ */
280
+ export class McpUnsupportedCapabilityError extends McpError {
281
+ public readonly capability: string;
282
+
283
+ constructor(capability: string, data?: unknown) {
284
+ super(`Unsupported capability: ${capability}`, MCP_ERROR_CODES.UNSUPPORTED_CAPABILITY, data);
285
+ this.name = 'McpUnsupportedCapabilityError';
286
+ this.capability = capability;
287
+ }
288
+ }
289
+
290
+ // ============================================================================
291
+ // JSON-RPC Standard Errors
292
+ // ============================================================================
293
+
294
+ /**
295
+ * Error thrown for JSON-RPC parse errors
296
+ */
297
+ export class JsonRpcParseError extends McpError {
298
+ constructor(message: string = 'Parse error', data?: unknown) {
299
+ super(message, JSON_RPC_ERROR_CODES.PARSE_ERROR, data);
300
+ this.name = 'JsonRpcParseError';
301
+ }
302
+ }
303
+
304
+ /**
305
+ * Error thrown for invalid JSON-RPC requests
306
+ */
307
+ export class JsonRpcInvalidRequestError extends McpError {
308
+ constructor(message: string = 'Invalid request', data?: unknown) {
309
+ super(message, JSON_RPC_ERROR_CODES.INVALID_REQUEST, data);
310
+ this.name = 'JsonRpcInvalidRequestError';
311
+ }
312
+ }
313
+
314
+ /**
315
+ * Error thrown when method is not found
316
+ */
317
+ export class JsonRpcMethodNotFoundError extends McpError {
318
+ public readonly method: string;
319
+
320
+ constructor(method: string, data?: unknown) {
321
+ super(`Method not found: ${method}`, JSON_RPC_ERROR_CODES.METHOD_NOT_FOUND, data);
322
+ this.name = 'JsonRpcMethodNotFoundError';
323
+ this.method = method;
324
+ }
325
+ }
326
+
327
+ /**
328
+ * Error thrown for invalid params
329
+ */
330
+ export class JsonRpcInvalidParamsError extends McpError {
331
+ constructor(message: string = 'Invalid params', data?: unknown) {
332
+ super(message, JSON_RPC_ERROR_CODES.INVALID_PARAMS, data);
333
+ this.name = 'JsonRpcInvalidParamsError';
334
+ }
335
+ }
336
+
337
+ /**
338
+ * Error thrown for internal errors
339
+ */
340
+ export class JsonRpcInternalError extends McpError {
341
+ constructor(message: string = 'Internal error', data?: unknown) {
342
+ super(message, JSON_RPC_ERROR_CODES.INTERNAL_ERROR, data);
343
+ this.name = 'JsonRpcInternalError';
344
+ }
345
+ }
346
+
347
+ // ============================================================================
348
+ // Error Factory
349
+ // ============================================================================
350
+
351
+ /**
352
+ * Create appropriate error class from JSON-RPC error
353
+ */
354
+ export function createErrorFromJsonRpc(error: JsonRpcError): McpError {
355
+ const { code, message, data } = error;
356
+
357
+ switch (code) {
358
+ // Standard JSON-RPC errors
359
+ case JSON_RPC_ERROR_CODES.PARSE_ERROR:
360
+ return new JsonRpcParseError(message, data);
361
+ case JSON_RPC_ERROR_CODES.INVALID_REQUEST:
362
+ return new JsonRpcInvalidRequestError(message, data);
363
+ case JSON_RPC_ERROR_CODES.METHOD_NOT_FOUND:
364
+ return new JsonRpcMethodNotFoundError(message, data);
365
+ case JSON_RPC_ERROR_CODES.INVALID_PARAMS:
366
+ return new JsonRpcInvalidParamsError(message, data);
367
+ case JSON_RPC_ERROR_CODES.INTERNAL_ERROR:
368
+ return new JsonRpcInternalError(message, data);
369
+
370
+ // MCP-specific errors
371
+ case MCP_ERROR_CODES.CONNECTION_FAILED:
372
+ return new McpConnectionError(message, data);
373
+ case MCP_ERROR_CODES.CONNECTION_TIMEOUT:
374
+ return new McpTimeoutError(message, 0, data);
375
+ case MCP_ERROR_CODES.CONNECTION_CLOSED:
376
+ return new McpConnectionClosedError(message, data);
377
+ case MCP_ERROR_CODES.SERVER_NOT_INITIALIZED:
378
+ return new McpServerNotInitializedError(message, data);
379
+ case MCP_ERROR_CODES.SERVER_SHUTDOWN:
380
+ return new McpServerShutdownError(message, data);
381
+ case MCP_ERROR_CODES.SERVER_SPAWN_FAILED:
382
+ return new McpServerSpawnError(message, data);
383
+ case MCP_ERROR_CODES.TOOL_NOT_FOUND:
384
+ return new McpToolNotFoundError('unknown', data);
385
+ case MCP_ERROR_CODES.TOOL_EXECUTION_FAILED:
386
+ return new McpToolExecutionError('unknown', message, data);
387
+ case MCP_ERROR_CODES.TOOL_TIMEOUT:
388
+ return new McpToolTimeoutError('unknown', 0, data);
389
+ case MCP_ERROR_CODES.TOOL_INVALID_PARAMS:
390
+ return new McpToolInvalidParamsError('unknown', [message], data);
391
+ case MCP_ERROR_CODES.RESOURCE_NOT_FOUND:
392
+ return new McpResourceNotFoundError('unknown', data);
393
+ case MCP_ERROR_CODES.RESOURCE_ACCESS_DENIED:
394
+ return new McpResourceAccessDeniedError('unknown', data);
395
+ case MCP_ERROR_CODES.PROTOCOL_VERSION_MISMATCH:
396
+ return new McpProtocolVersionError('unknown', 'unknown', data);
397
+ case MCP_ERROR_CODES.UNSUPPORTED_CAPABILITY:
398
+ return new McpUnsupportedCapabilityError('unknown', data);
399
+
400
+ // Default to base error for unknown codes
401
+ default:
402
+ return new McpError(message, code, data);
403
+ }
404
+ }
405
+
406
+ // ============================================================================
407
+ // Error Utilities
408
+ // ============================================================================
409
+
410
+ /**
411
+ * Check if error is an MCP error
412
+ */
413
+ export function isMcpError(error: unknown): error is McpError {
414
+ return error instanceof McpError;
415
+ }
416
+
417
+ /**
418
+ * Check if error is a connection error
419
+ */
420
+ export function isConnectionError(error: unknown): boolean {
421
+ return (
422
+ error instanceof McpConnectionError ||
423
+ error instanceof McpTimeoutError ||
424
+ error instanceof McpConnectionClosedError
425
+ );
426
+ }
427
+
428
+ /**
429
+ * Check if error is a tool error
430
+ */
431
+ export function isToolError(error: unknown): boolean {
432
+ return (
433
+ error instanceof McpToolNotFoundError ||
434
+ error instanceof McpToolExecutionError ||
435
+ error instanceof McpToolTimeoutError ||
436
+ error instanceof McpToolInvalidParamsError
437
+ );
438
+ }
439
+
440
+ /**
441
+ * Check if error is retryable
442
+ */
443
+ export function isRetryableError(error: unknown): boolean {
444
+ if (!isMcpError(error)) {
445
+ return false;
446
+ }
447
+
448
+ // Connection errors are generally retryable
449
+ if (isConnectionError(error)) {
450
+ return true;
451
+ }
452
+
453
+ // Internal errors may be transient
454
+ if (error.code === JSON_RPC_ERROR_CODES.INTERNAL_ERROR) {
455
+ return true;
456
+ }
457
+
458
+ return false;
459
+ }
460
+
461
+ /**
462
+ * Format error for display
463
+ */
464
+ export function formatMcpError(error: unknown): string {
465
+ if (isMcpError(error)) {
466
+ return `[${error.code}] ${error.message}`;
467
+ }
468
+
469
+ if (error instanceof Error) {
470
+ return error.message;
471
+ }
472
+
473
+ return String(error);
474
+ }
475
+
476
+ /**
477
+ * Wrap unknown error in McpError
478
+ */
479
+ export function wrapError(error: unknown, defaultMessage: string = 'Unknown error'): McpError {
480
+ if (isMcpError(error)) {
481
+ return error;
482
+ }
483
+
484
+ if (error instanceof Error) {
485
+ return new JsonRpcInternalError(error.message);
486
+ }
487
+
488
+ return new JsonRpcInternalError(defaultMessage);
489
+ }