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,428 @@
1
+ /**
2
+ * MCP Logger - Pluggable logging interface for MCP client
3
+ * @copyright 2024-2026 nirholas
4
+ * @license MIT
5
+ */
6
+
7
+ // ============================================================================
8
+ // Log Levels
9
+ // ============================================================================
10
+
11
+ /**
12
+ * Log level enumeration with numeric values for comparison
13
+ */
14
+ export enum LogLevel {
15
+ /** No logging */
16
+ None = 0,
17
+ /** Error messages only */
18
+ Error = 1,
19
+ /** Warnings and errors */
20
+ Warn = 2,
21
+ /** Informational messages */
22
+ Info = 3,
23
+ /** Debug information */
24
+ Debug = 4,
25
+ /** Verbose tracing */
26
+ Trace = 5,
27
+ }
28
+
29
+ /**
30
+ * Log level string type for configuration
31
+ */
32
+ export type LogLevelName = 'none' | 'error' | 'warn' | 'info' | 'debug' | 'trace';
33
+
34
+ /**
35
+ * Convert log level name to enum value
36
+ */
37
+ export function parseLogLevel(level: LogLevelName): LogLevel {
38
+ const levelMap: Record<LogLevelName, LogLevel> = {
39
+ none: LogLevel.None,
40
+ error: LogLevel.Error,
41
+ warn: LogLevel.Warn,
42
+ info: LogLevel.Info,
43
+ debug: LogLevel.Debug,
44
+ trace: LogLevel.Trace,
45
+ };
46
+ return levelMap[level] ?? LogLevel.Info;
47
+ }
48
+
49
+ // ============================================================================
50
+ // Logger Interface
51
+ // ============================================================================
52
+
53
+ /**
54
+ * Log entry metadata
55
+ */
56
+ export interface LogContext {
57
+ /** Timestamp of the log entry */
58
+ readonly timestamp: Date;
59
+ /** Logger name/namespace */
60
+ readonly logger: string;
61
+ /** Log level */
62
+ readonly level: LogLevel;
63
+ /** Additional structured data */
64
+ readonly data?: Readonly<Record<string, unknown>>;
65
+ /** Error object if applicable */
66
+ readonly error?: Error;
67
+ /** Request/operation ID for correlation */
68
+ readonly requestId?: string;
69
+ /** Session ID if applicable */
70
+ readonly sessionId?: string;
71
+ }
72
+
73
+ /**
74
+ * Logger interface that all loggers must implement
75
+ */
76
+ export interface Logger {
77
+ /** Current log level */
78
+ readonly level: LogLevel;
79
+
80
+ /**
81
+ * Log an error message
82
+ * @param message - Error message
83
+ * @param context - Optional context data
84
+ */
85
+ error(message: string, context?: Partial<LogContext>): void;
86
+
87
+ /**
88
+ * Log a warning message
89
+ * @param message - Warning message
90
+ * @param context - Optional context data
91
+ */
92
+ warn(message: string, context?: Partial<LogContext>): void;
93
+
94
+ /**
95
+ * Log an informational message
96
+ * @param message - Info message
97
+ * @param context - Optional context data
98
+ */
99
+ info(message: string, context?: Partial<LogContext>): void;
100
+
101
+ /**
102
+ * Log a debug message
103
+ * @param message - Debug message
104
+ * @param context - Optional context data
105
+ */
106
+ debug(message: string, context?: Partial<LogContext>): void;
107
+
108
+ /**
109
+ * Log a trace message
110
+ * @param message - Trace message
111
+ * @param context - Optional context data
112
+ */
113
+ trace(message: string, context?: Partial<LogContext>): void;
114
+
115
+ /**
116
+ * Create a child logger with a sub-namespace
117
+ * @param namespace - Child namespace
118
+ * @returns Child logger instance
119
+ */
120
+ child(namespace: string): Logger;
121
+
122
+ /**
123
+ * Create a logger with bound context
124
+ * @param context - Context to bind
125
+ * @returns Logger with bound context
126
+ */
127
+ withContext(context: Partial<LogContext>): Logger;
128
+ }
129
+
130
+ // ============================================================================
131
+ // Console Logger Implementation
132
+ // ============================================================================
133
+
134
+ /**
135
+ * Console logger configuration
136
+ */
137
+ export interface ConsoleLoggerOptions {
138
+ /** Minimum log level to output */
139
+ level?: LogLevel;
140
+ /** Logger namespace */
141
+ namespace?: string;
142
+ /** Whether to include timestamps */
143
+ timestamps?: boolean;
144
+ /** Whether to colorize output (for terminals) */
145
+ colors?: boolean;
146
+ /** Custom formatter function */
147
+ formatter?: (entry: LogEntry) => string;
148
+ }
149
+
150
+ /**
151
+ * Log entry for formatting
152
+ */
153
+ export interface LogEntry {
154
+ readonly timestamp: Date;
155
+ readonly level: LogLevel;
156
+ readonly levelName: string;
157
+ readonly namespace: string;
158
+ readonly message: string;
159
+ readonly context?: Partial<LogContext>;
160
+ }
161
+
162
+ /**
163
+ * ANSI color codes for terminal output
164
+ */
165
+ const COLORS = {
166
+ reset: '\x1b[0m',
167
+ red: '\x1b[31m',
168
+ yellow: '\x1b[33m',
169
+ blue: '\x1b[34m',
170
+ gray: '\x1b[90m',
171
+ cyan: '\x1b[36m',
172
+ white: '\x1b[37m',
173
+ } as const;
174
+
175
+ /**
176
+ * Level to color mapping
177
+ */
178
+ const LEVEL_COLORS: Record<LogLevel, string> = {
179
+ [LogLevel.None]: COLORS.white,
180
+ [LogLevel.Error]: COLORS.red,
181
+ [LogLevel.Warn]: COLORS.yellow,
182
+ [LogLevel.Info]: COLORS.blue,
183
+ [LogLevel.Debug]: COLORS.cyan,
184
+ [LogLevel.Trace]: COLORS.gray,
185
+ };
186
+
187
+ /**
188
+ * Level to name mapping
189
+ */
190
+ const LEVEL_NAMES: Record<LogLevel, string> = {
191
+ [LogLevel.None]: 'NONE',
192
+ [LogLevel.Error]: 'ERROR',
193
+ [LogLevel.Warn]: 'WARN',
194
+ [LogLevel.Info]: 'INFO',
195
+ [LogLevel.Debug]: 'DEBUG',
196
+ [LogLevel.Trace]: 'TRACE',
197
+ };
198
+
199
+ /**
200
+ * Default log formatter
201
+ */
202
+ function defaultFormatter(entry: LogEntry, colors: boolean): string {
203
+ const timestamp = entry.timestamp.toISOString();
204
+ const levelName = entry.levelName.padEnd(5);
205
+ const namespace = entry.namespace ? `[${entry.namespace}]` : '';
206
+
207
+ let contextStr = '';
208
+ if (entry.context) {
209
+ const { timestamp: _, level: __, logger: ___, ...rest } = entry.context;
210
+ if (Object.keys(rest).length > 0) {
211
+ if (rest.error instanceof Error) {
212
+ contextStr = ` ${rest.error.message}`;
213
+ if (rest.error.stack) {
214
+ contextStr += `\n${rest.error.stack}`;
215
+ }
216
+ } else {
217
+ contextStr = ` ${JSON.stringify(rest)}`;
218
+ }
219
+ }
220
+ }
221
+
222
+ if (colors) {
223
+ const color = LEVEL_COLORS[entry.level] || COLORS.white;
224
+ return `${COLORS.gray}${timestamp}${COLORS.reset} ${color}${levelName}${COLORS.reset} ${COLORS.cyan}${namespace}${COLORS.reset} ${entry.message}${contextStr}`;
225
+ }
226
+
227
+ return `${timestamp} ${levelName} ${namespace} ${entry.message}${contextStr}`;
228
+ }
229
+
230
+ /**
231
+ * Console-based logger implementation
232
+ */
233
+ export class ConsoleLogger implements Logger {
234
+ readonly level: LogLevel;
235
+ private readonly _namespace: string;
236
+ private readonly _timestamps: boolean;
237
+ private readonly _colors: boolean;
238
+ private readonly _formatter: (entry: LogEntry) => string;
239
+ private readonly _boundContext: Partial<LogContext>;
240
+
241
+ constructor(options: ConsoleLoggerOptions = {}) {
242
+ this.level = options.level ?? LogLevel.Info;
243
+ this._namespace = options.namespace ?? 'mcp';
244
+ this._timestamps = options.timestamps ?? true;
245
+ this._colors = options.colors ?? (typeof process !== 'undefined' && process.stdout?.isTTY === true);
246
+ this._formatter = options.formatter ?? ((entry) => defaultFormatter(entry, this._colors));
247
+ this._boundContext = {};
248
+ }
249
+
250
+ /**
251
+ * Private constructor for creating child loggers
252
+ */
253
+ private static _createChild(
254
+ level: LogLevel,
255
+ namespace: string,
256
+ timestamps: boolean,
257
+ colors: boolean,
258
+ formatter: (entry: LogEntry) => string,
259
+ boundContext: Partial<LogContext>
260
+ ): ConsoleLogger {
261
+ const logger = Object.create(ConsoleLogger.prototype) as ConsoleLogger;
262
+ // Use Object.defineProperty to set readonly properties
263
+ Object.defineProperty(logger, 'level', { value: level, writable: false });
264
+ Object.defineProperty(logger, '_namespace', { value: namespace, writable: false });
265
+ Object.defineProperty(logger, '_timestamps', { value: timestamps, writable: false });
266
+ Object.defineProperty(logger, '_colors', { value: colors, writable: false });
267
+ Object.defineProperty(logger, '_formatter', { value: formatter, writable: false });
268
+ Object.defineProperty(logger, '_boundContext', { value: boundContext, writable: false });
269
+ return logger;
270
+ }
271
+
272
+ private _log(level: LogLevel, message: string, context?: Partial<LogContext>): void {
273
+ if (level > this.level) return;
274
+
275
+ const entry: LogEntry = {
276
+ timestamp: new Date(),
277
+ level,
278
+ levelName: LEVEL_NAMES[level],
279
+ namespace: this._namespace,
280
+ message,
281
+ context: { ...this._boundContext, ...context },
282
+ };
283
+
284
+ const formatted = this._formatter(entry);
285
+
286
+ switch (level) {
287
+ case LogLevel.Error:
288
+ console.error(formatted);
289
+ break;
290
+ case LogLevel.Warn:
291
+ console.warn(formatted);
292
+ break;
293
+ case LogLevel.Info:
294
+ console.info(formatted);
295
+ break;
296
+ case LogLevel.Debug:
297
+ case LogLevel.Trace:
298
+ console.debug(formatted);
299
+ break;
300
+ }
301
+ }
302
+
303
+ error(message: string, context?: Partial<LogContext>): void {
304
+ this._log(LogLevel.Error, message, context);
305
+ }
306
+
307
+ warn(message: string, context?: Partial<LogContext>): void {
308
+ this._log(LogLevel.Warn, message, context);
309
+ }
310
+
311
+ info(message: string, context?: Partial<LogContext>): void {
312
+ this._log(LogLevel.Info, message, context);
313
+ }
314
+
315
+ debug(message: string, context?: Partial<LogContext>): void {
316
+ this._log(LogLevel.Debug, message, context);
317
+ }
318
+
319
+ trace(message: string, context?: Partial<LogContext>): void {
320
+ this._log(LogLevel.Trace, message, context);
321
+ }
322
+
323
+ child(namespace: string): Logger {
324
+ const childNamespace = this._namespace ? `${this._namespace}:${namespace}` : namespace;
325
+ return ConsoleLogger._createChild(
326
+ this.level,
327
+ childNamespace,
328
+ this._timestamps,
329
+ this._colors,
330
+ this._formatter,
331
+ { ...this._boundContext }
332
+ );
333
+ }
334
+
335
+ withContext(context: Partial<LogContext>): Logger {
336
+ return ConsoleLogger._createChild(
337
+ this.level,
338
+ this._namespace,
339
+ this._timestamps,
340
+ this._colors,
341
+ this._formatter,
342
+ { ...this._boundContext, ...context }
343
+ );
344
+ }
345
+ }
346
+
347
+ // ============================================================================
348
+ // Noop Logger Implementation
349
+ // ============================================================================
350
+
351
+ /**
352
+ * No-operation logger that discards all log messages
353
+ * Useful for testing or when logging should be completely disabled
354
+ */
355
+ export class NoopLogger implements Logger {
356
+ readonly level = LogLevel.None;
357
+
358
+ error(_message: string, _context?: Partial<LogContext>): void {
359
+ // No-op
360
+ }
361
+
362
+ warn(_message: string, _context?: Partial<LogContext>): void {
363
+ // No-op
364
+ }
365
+
366
+ info(_message: string, _context?: Partial<LogContext>): void {
367
+ // No-op
368
+ }
369
+
370
+ debug(_message: string, _context?: Partial<LogContext>): void {
371
+ // No-op
372
+ }
373
+
374
+ trace(_message: string, _context?: Partial<LogContext>): void {
375
+ // No-op
376
+ }
377
+
378
+ child(_namespace: string): Logger {
379
+ return this;
380
+ }
381
+
382
+ withContext(_context: Partial<LogContext>): Logger {
383
+ return this;
384
+ }
385
+ }
386
+
387
+ // ============================================================================
388
+ // Logger Factory
389
+ // ============================================================================
390
+
391
+ /** Global default logger instance */
392
+ let globalLogger: Logger = new ConsoleLogger({ level: LogLevel.Warn });
393
+
394
+ /**
395
+ * Get the global logger instance
396
+ */
397
+ export function getLogger(): Logger {
398
+ return globalLogger;
399
+ }
400
+
401
+ /**
402
+ * Set the global logger instance
403
+ */
404
+ export function setLogger(logger: Logger): void {
405
+ globalLogger = logger;
406
+ }
407
+
408
+ /**
409
+ * Create a new console logger
410
+ */
411
+ export function createConsoleLogger(options?: ConsoleLoggerOptions): Logger {
412
+ return new ConsoleLogger(options);
413
+ }
414
+
415
+ /**
416
+ * Create a no-op logger
417
+ */
418
+ export function createNoopLogger(): Logger {
419
+ return new NoopLogger();
420
+ }
421
+
422
+ /**
423
+ * Create a logger with the specified level
424
+ */
425
+ export function createLogger(level: LogLevel | LogLevelName, namespace?: string): Logger {
426
+ const numericLevel = typeof level === 'string' ? parseLogLevel(level) : level;
427
+ return new ConsoleLogger({ level: numericLevel, namespace });
428
+ }