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.
- package/.env.example +8 -0
- package/.github/CODEOWNERS +6 -0
- package/.husky/pre-commit +1 -0
- package/.nvmrc +1 -0
- package/.prettierignore +5 -0
- package/.prettierrc +7 -0
- package/.vscode/settings.json +4 -0
- package/ARCHITECTURE.md +1429 -0
- package/CHANGELOG.md +167 -0
- package/CONTRIBUTING.md +327 -0
- package/LICENSE +201 -0
- package/README.md +1028 -0
- package/SECURITY.md +248 -0
- package/VISUAL_GUIDE.md +437 -0
- package/apps/vscode/IMPLEMENTATION.md +480 -0
- package/apps/vscode/README.md +248 -0
- package/apps/vscode/package.json +381 -0
- package/apps/vscode/resources/icon.png +0 -0
- package/apps/vscode/resources/icon.svg +5 -0
- package/apps/vscode/src/commands/browseRegistry.ts +211 -0
- package/apps/vscode/src/commands/configureClaudeDesktop.ts +332 -0
- package/apps/vscode/src/commands/convert.ts +82 -0
- package/apps/vscode/src/commands/convertCurrentRepo.ts +109 -0
- package/apps/vscode/src/commands/convertFromUrl.ts +138 -0
- package/apps/vscode/src/commands/index.ts +121 -0
- package/apps/vscode/src/commands/validate.ts +197 -0
- package/apps/vscode/src/extension.ts +464 -0
- package/apps/vscode/src/global.d.ts +36 -0
- package/apps/vscode/src/test/extension.test.ts +73 -0
- package/apps/vscode/src/utils/file-generator.ts +529 -0
- package/apps/vscode/src/utils/github-api.ts +335 -0
- package/apps/vscode/src/utils/index.ts +29 -0
- package/apps/vscode/src/utils/mcp-config.ts +334 -0
- package/apps/vscode/src/utils/storage.ts +87 -0
- package/apps/vscode/src/views/McpServersTreeView.ts +160 -0
- package/apps/vscode/src/views/OutputChannelView.ts +195 -0
- package/apps/vscode/src/views/StatusBarItem.ts +251 -0
- package/apps/vscode/src/views/ToolsExplorerView.ts +314 -0
- package/apps/vscode/src/views/historyProvider.ts +75 -0
- package/apps/vscode/src/views/index.ts +12 -0
- package/apps/vscode/src/views/resultsPanel.ts +330 -0
- package/apps/vscode/src/webviews/ConversionPanel.ts +350 -0
- package/apps/vscode/src/webviews/ToolDetailsPanel.ts +448 -0
- package/apps/vscode/src/webviews/index.ts +9 -0
- package/apps/vscode/src/webviews/webview-ui/styles.ts +492 -0
- package/apps/vscode/tsconfig.json +20 -0
- package/apps/web/PLAYGROUND_GUIDE.md +499 -0
- package/apps/web/README.md +505 -0
- package/apps/web/app/api/convert/route.ts +100 -0
- package/apps/web/app/api/convert/stream/route.ts +198 -0
- package/apps/web/app/api/deploy/route.ts +157 -0
- package/apps/web/app/api/edge/route.ts +308 -0
- package/apps/web/app/api/export-docker/route.ts +284 -0
- package/apps/web/app/api/generate-openapi/route.ts +119 -0
- package/apps/web/app/api/mcp/[serverId]/route.ts +263 -0
- package/apps/web/app/api/playground/connect/route.ts +143 -0
- package/apps/web/app/api/playground/disconnect/route.ts +78 -0
- package/apps/web/app/api/playground/execute/route.ts +135 -0
- package/apps/web/app/api/playground/sessions/route.ts +103 -0
- package/apps/web/app/api/playground/tools/route.ts +117 -0
- package/apps/web/app/api/playground/v2/connect/route.ts +96 -0
- package/apps/web/app/api/playground/v2/disconnect/route.ts +88 -0
- package/apps/web/app/api/playground/v2/health/route.ts +80 -0
- package/apps/web/app/api/playground/v2/prompts/route.ts +160 -0
- package/apps/web/app/api/playground/v2/resources/route.ts +159 -0
- package/apps/web/app/api/playground/v2/sessions/route.ts +184 -0
- package/apps/web/app/api/playground/v2/tools/route.ts +167 -0
- package/apps/web/app/api/stream/route.ts +232 -0
- package/apps/web/app/batch/BatchConvertClient.tsx +190 -0
- package/apps/web/app/batch/page.tsx +37 -0
- package/apps/web/app/convert/page.tsx +269 -0
- package/apps/web/app/dashboard/page.tsx +380 -0
- package/apps/web/app/globals.css +622 -0
- package/apps/web/app/layout.tsx +120 -0
- package/apps/web/app/manifest.ts +31 -0
- package/apps/web/app/opengraph-image.tsx +112 -0
- package/apps/web/app/page.old.tsx +924 -0
- package/apps/web/app/page.tsx +77 -0
- package/apps/web/app/playground/page.tsx +306 -0
- package/apps/web/app/playground/v2/error.tsx +163 -0
- package/apps/web/app/playground/v2/layout.tsx +58 -0
- package/apps/web/app/playground/v2/loading.tsx +152 -0
- package/apps/web/app/playground/v2/page.tsx +644 -0
- package/apps/web/app/playground/v2/providers.tsx +214 -0
- package/apps/web/app/playground/v2/use-shortcuts.ts +209 -0
- package/apps/web/app/playground/v2/use-url-state.ts +296 -0
- package/apps/web/app/providers.tsx +22 -0
- package/apps/web/app/sitemap.ts +32 -0
- package/apps/web/app/twitter-image.tsx +112 -0
- package/apps/web/components/BranchSelector.tsx +401 -0
- package/apps/web/components/ClaudeConfigExport.tsx +226 -0
- package/apps/web/components/Features.tsx +84 -0
- package/apps/web/components/Footer.tsx +119 -0
- package/apps/web/components/GenerationProgress.tsx +248 -0
- package/apps/web/components/GithubUrlInput.tsx +483 -0
- package/apps/web/components/Header.tsx +175 -0
- package/apps/web/components/Hero.tsx +117 -0
- package/apps/web/components/HowItWorks.tsx +119 -0
- package/apps/web/components/InstallBanner.tsx +158 -0
- package/apps/web/components/Logo.tsx +116 -0
- package/apps/web/components/ParticleBackground.tsx +105 -0
- package/apps/web/components/Playground.tsx +472 -0
- package/apps/web/components/PlaygroundToolTester.tsx +410 -0
- package/apps/web/components/ProductCards.tsx +179 -0
- package/apps/web/components/SplitView.tsx +194 -0
- package/apps/web/components/ToolFilter.tsx +260 -0
- package/apps/web/components/ToolList.tsx +325 -0
- package/apps/web/components/batch/BatchConvert.tsx +785 -0
- package/apps/web/components/batch/index.ts +7 -0
- package/apps/web/components/convert/ConfigTabs.tsx +230 -0
- package/apps/web/components/convert/ConversionResult.tsx +482 -0
- package/apps/web/components/convert/InlinePlayground.tsx +259 -0
- package/apps/web/components/convert/LoadingSteps.tsx +311 -0
- package/apps/web/components/convert/OneClickInstall.tsx +224 -0
- package/apps/web/components/convert/ToolCard.tsx +189 -0
- package/apps/web/components/convert/TryInPlayground.tsx +242 -0
- package/apps/web/components/convert/index.ts +12 -0
- package/apps/web/components/deploy/DeployButton.tsx +369 -0
- package/apps/web/components/deploy/index.ts +7 -0
- package/apps/web/components/docker/DockerExport.tsx +690 -0
- package/apps/web/components/docker/index.ts +7 -0
- package/apps/web/components/install/OneClickInstall.tsx +676 -0
- package/apps/web/components/install/index.ts +7 -0
- package/apps/web/components/playground/CapabilityTabs.tsx +150 -0
- package/apps/web/components/playground/ConnectionStatusV2.tsx +322 -0
- package/apps/web/components/playground/EmptyStates.tsx +305 -0
- package/apps/web/components/playground/ExecutionLog.tsx +260 -0
- package/apps/web/components/playground/ExecutionLogV2.tsx +378 -0
- package/apps/web/components/playground/JsonViewer.tsx +388 -0
- package/apps/web/components/playground/PlaygroundLayout.tsx +244 -0
- package/apps/web/components/playground/PromptsPanel.tsx +385 -0
- package/apps/web/components/playground/ResourcesPanel.tsx +378 -0
- package/apps/web/components/playground/SchemaForm.tsx +477 -0
- package/apps/web/components/playground/ServerStatus.tsx +151 -0
- package/apps/web/components/playground/ShareButton.tsx +239 -0
- package/apps/web/components/playground/ToolsPanel.tsx +309 -0
- package/apps/web/components/playground/TransportConfigurator.tsx +563 -0
- package/apps/web/components/playground/index.ts +74 -0
- package/apps/web/components/playground/types.ts +202 -0
- package/apps/web/components/streaming/StreamingProgress.tsx +441 -0
- package/apps/web/components/streaming/index.ts +7 -0
- package/apps/web/components/ui/badge.tsx +42 -0
- package/apps/web/components/ui/button.tsx +88 -0
- package/apps/web/components/ui/card.tsx +75 -0
- package/apps/web/components/ui/code-block.tsx +122 -0
- package/apps/web/components/ui/index.ts +12 -0
- package/apps/web/components/ui/input.tsx +55 -0
- package/apps/web/components/ui/tabs.tsx +61 -0
- package/apps/web/hooks/index.ts +85 -0
- package/apps/web/hooks/types.ts +1173 -0
- package/apps/web/hooks/use-conversion.ts +133 -0
- package/apps/web/hooks/use-execution-history.ts +376 -0
- package/apps/web/hooks/use-generation-progress.ts +147 -0
- package/apps/web/hooks/use-local-storage.ts +88 -0
- package/apps/web/hooks/use-mcp-client.ts +623 -0
- package/apps/web/hooks/use-mcp-connection.ts +500 -0
- package/apps/web/hooks/use-mcp-execution.ts +282 -0
- package/apps/web/hooks/use-mcp-prompts.ts +441 -0
- package/apps/web/hooks/use-mcp-resources.ts +430 -0
- package/apps/web/hooks/use-mcp-tools.ts +540 -0
- package/apps/web/hooks/use-playground-store.ts +299 -0
- package/apps/web/hooks/use-playground.ts +184 -0
- package/apps/web/hooks/use-streaming-conversion.ts +227 -0
- package/apps/web/hooks/useBatchConversion.ts +271 -0
- package/apps/web/hooks/useDockerConfig.ts +161 -0
- package/apps/web/hooks/usePlatformDetection.ts +80 -0
- package/apps/web/hooks/useStreaming.ts +199 -0
- package/apps/web/lib/api/errors.ts +386 -0
- package/apps/web/lib/api/index.ts +137 -0
- package/apps/web/lib/api/logger.ts +187 -0
- package/apps/web/lib/api/middleware.ts +364 -0
- package/apps/web/lib/api/openapi.ts +977 -0
- package/apps/web/lib/api/session-manager.ts +594 -0
- package/apps/web/lib/api/types.ts +433 -0
- package/apps/web/lib/api/validation.ts +523 -0
- package/apps/web/lib/constants.ts +114 -0
- package/apps/web/lib/mcp/client.ts +1137 -0
- package/apps/web/lib/mcp/events.ts +651 -0
- package/apps/web/lib/mcp/index.ts +347 -0
- package/apps/web/lib/mcp/logger.ts +428 -0
- package/apps/web/lib/mcp/metrics.ts +703 -0
- package/apps/web/lib/mcp/retry.ts +616 -0
- package/apps/web/lib/mcp/session-manager.ts +779 -0
- package/apps/web/lib/mcp/transports.ts +988 -0
- package/apps/web/lib/mcp/types.ts +594 -0
- package/apps/web/lib/mcp-client-enhanced.ts +871 -0
- package/apps/web/lib/mcp-client.ts +778 -0
- package/apps/web/lib/mcp-errors.ts +489 -0
- package/apps/web/lib/mcp-sandbox.ts +593 -0
- package/apps/web/lib/mcp-testing.ts +428 -0
- package/apps/web/lib/mcp-types.ts +448 -0
- package/apps/web/lib/playground-store.tsx +1147 -0
- package/apps/web/lib/utils.ts +439 -0
- package/apps/web/next-env.d.ts +5 -0
- package/apps/web/next.config.js +23 -0
- package/apps/web/package.json +55 -0
- package/apps/web/postcss.config.js +6 -0
- package/apps/web/public/.well-known/ai-plugin.json +17 -0
- package/apps/web/public/logo.svg +6 -0
- package/apps/web/public/robots.txt +22 -0
- package/apps/web/public/schema.json +27 -0
- package/apps/web/tailwind.config.js +26 -0
- package/apps/web/tailwind.config.ts +123 -0
- package/apps/web/tsconfig.json +20 -0
- package/apps/web/types/deploy.ts +139 -0
- package/apps/web/types/index.ts +247 -0
- package/apps/web/vercel.json +39 -0
- package/eslint.config.mjs +23 -0
- package/llms.txt +102 -0
- package/mkdocs/docs/api/core.md +318 -0
- package/mkdocs/docs/api/index.md +128 -0
- package/mkdocs/docs/api/mcp-server.md +301 -0
- package/mkdocs/docs/api/openapi-parser.md +254 -0
- package/mkdocs/docs/assets/logo.svg +7 -0
- package/mkdocs/docs/changelog.md +118 -0
- package/mkdocs/docs/cli/generate.md +148 -0
- package/mkdocs/docs/cli/index.md +52 -0
- package/mkdocs/docs/cli/inspect.md +164 -0
- package/mkdocs/docs/cli/serve.md +136 -0
- package/mkdocs/docs/concepts/classification.md +254 -0
- package/mkdocs/docs/concepts/how-it-works.md +299 -0
- package/mkdocs/docs/concepts/index.md +77 -0
- package/mkdocs/docs/concepts/mcp-protocol.md +362 -0
- package/mkdocs/docs/concepts/tool-types.md +382 -0
- package/mkdocs/docs/contributing/architecture.md +262 -0
- package/mkdocs/docs/contributing/development.md +245 -0
- package/mkdocs/docs/contributing/index.md +73 -0
- package/mkdocs/docs/contributing/testing.md +320 -0
- package/mkdocs/docs/getting-started/configuration.md +235 -0
- package/mkdocs/docs/getting-started/index.md +54 -0
- package/mkdocs/docs/getting-started/installation.md +145 -0
- package/mkdocs/docs/getting-started/quickstart.md +160 -0
- package/mkdocs/docs/guides/batch.md +375 -0
- package/mkdocs/docs/guides/claude-desktop.md +227 -0
- package/mkdocs/docs/guides/cursor.md +188 -0
- package/mkdocs/docs/guides/custom-tools.md +367 -0
- package/mkdocs/docs/guides/index.md +78 -0
- package/mkdocs/docs/guides/private-repos.md +221 -0
- package/mkdocs/docs/guides/vscode.md +247 -0
- package/mkdocs/docs/index.md +175 -0
- package/mkdocs/docs/reference/config.md +223 -0
- package/mkdocs/docs/reference/env.md +192 -0
- package/mkdocs/docs/reference/index.md +102 -0
- package/mkdocs/docs/reference/tools.md +309 -0
- package/mkdocs/docs/stylesheets/extra.css +231 -0
- package/mkdocs/mkdocs.yml +204 -0
- package/mkdocs/overrides/.gitkeep +1 -0
- package/mkdocs/overrides/main.html +7 -0
- package/mkdocs/python-deps.txt +7 -0
- package/mkdocs/vercel.json +11 -0
- package/package.json +63 -0
- package/packages/core/package.json +61 -0
- package/packages/core/src/__tests__/bitbucket-client.test.ts +366 -0
- package/packages/core/src/__tests__/cli.test.ts +235 -0
- package/packages/core/src/__tests__/code-extractor.test.ts +378 -0
- package/packages/core/src/__tests__/docker-generator.test.ts +255 -0
- package/packages/core/src/__tests__/github-client.test.ts +390 -0
- package/packages/core/src/__tests__/gitlab-client.test.ts +319 -0
- package/packages/core/src/__tests__/go-extractor.test.ts +351 -0
- package/packages/core/src/__tests__/graphql-extractor.test.ts +330 -0
- package/packages/core/src/__tests__/java-extractor.test.ts +497 -0
- package/packages/core/src/__tests__/plugins.test.ts +467 -0
- package/packages/core/src/__tests__/readme-extractor.test.ts +258 -0
- package/packages/core/src/__tests__/redis-cache.test.ts +307 -0
- package/packages/core/src/__tests__/rust-extractor.test.ts +252 -0
- package/packages/core/src/__tests__/streaming.test.ts +251 -0
- package/packages/core/src/additional-extractors.ts +333 -0
- package/packages/core/src/cache/cache-interface.ts +179 -0
- package/packages/core/src/cache/index.ts +210 -0
- package/packages/core/src/cache/redis-cache.ts +291 -0
- package/packages/core/src/cache/upstash-cache.ts +379 -0
- package/packages/core/src/cache.ts +251 -0
- package/packages/core/src/cli.ts +822 -0
- package/packages/core/src/code-extractor.ts +696 -0
- package/packages/core/src/docker-generator.ts +470 -0
- package/packages/core/src/edge-compatible.ts +491 -0
- package/packages/core/src/extractors/go-extractor.ts +791 -0
- package/packages/core/src/extractors/index.ts +9 -0
- package/packages/core/src/extractors/java-extractor.ts +937 -0
- package/packages/core/src/extractors/rust-extractor.ts +744 -0
- package/packages/core/src/github-client.ts +319 -0
- package/packages/core/src/go-generator.ts +356 -0
- package/packages/core/src/graphql-extractor.ts +358 -0
- package/packages/core/src/index.ts +797 -0
- package/packages/core/src/langchain-exporter.ts +617 -0
- package/packages/core/src/language-parsers.ts +1114 -0
- package/packages/core/src/mcp-introspector.ts +279 -0
- package/packages/core/src/monorepo-detector.ts +378 -0
- package/packages/core/src/plugins/index.ts +370 -0
- package/packages/core/src/plugins/registry.ts +404 -0
- package/packages/core/src/plugins/types.ts +215 -0
- package/packages/core/src/providers/base-provider.ts +246 -0
- package/packages/core/src/providers/bitbucket-client.ts +464 -0
- package/packages/core/src/providers/gitlab-client.ts +388 -0
- package/packages/core/src/providers/index.ts +176 -0
- package/packages/core/src/python-generator.ts +260 -0
- package/packages/core/src/queue/index.ts +100 -0
- package/packages/core/src/queue/memory-queue.ts +445 -0
- package/packages/core/src/queue/redis-queue.ts +578 -0
- package/packages/core/src/queue/types.ts +251 -0
- package/packages/core/src/readme-extractor.ts +409 -0
- package/packages/core/src/schema-generator.ts +638 -0
- package/packages/core/src/streaming.ts +999 -0
- package/packages/core/src/types.ts +289 -0
- package/packages/core/tsconfig.json +9 -0
- package/packages/core/tsup.config.ts +25 -0
- package/packages/mcp-server/README.md +297 -0
- package/packages/mcp-server/package.json +55 -0
- package/packages/mcp-server/src/__tests__/mcp-server.test.ts +177 -0
- package/packages/mcp-server/src/__tests__/tools.test.ts +217 -0
- package/packages/mcp-server/src/index.ts +1206 -0
- package/packages/mcp-server/src/prompts/index.ts +601 -0
- package/packages/mcp-server/src/tools/export-docker.ts +362 -0
- package/packages/mcp-server/src/tools/generate-openapi.ts +162 -0
- package/packages/mcp-server/src/tools/monitor-mcp-server.ts +448 -0
- package/packages/mcp-server/src/tools/stream-convert.ts +398 -0
- package/packages/mcp-server/src/tools/test-mcp-tool.ts +531 -0
- package/packages/mcp-server/tsconfig.json +12 -0
- package/packages/mcp-server/tsup.config.ts +14 -0
- package/packages/openapi-parser/package-lock.json +3028 -0
- package/packages/openapi-parser/package.json +41 -0
- package/packages/openapi-parser/src/analyzer.ts +700 -0
- package/packages/openapi-parser/src/asyncapi-parser.ts +475 -0
- package/packages/openapi-parser/src/cli.ts +302 -0
- package/packages/openapi-parser/src/generator.ts +570 -0
- package/packages/openapi-parser/src/generators/express-analyzer.ts +649 -0
- package/packages/openapi-parser/src/generators/fastapi-analyzer.ts +960 -0
- package/packages/openapi-parser/src/generators/index.ts +200 -0
- package/packages/openapi-parser/src/generators/nextjs-analyzer.ts +768 -0
- package/packages/openapi-parser/src/generators/openapi-builder.ts +527 -0
- package/packages/openapi-parser/src/generators/types.ts +298 -0
- package/packages/openapi-parser/src/graphql-parser.ts +462 -0
- package/packages/openapi-parser/src/grpc-parser.ts +649 -0
- package/packages/openapi-parser/src/har-parser.ts +723 -0
- package/packages/openapi-parser/src/index.ts +635 -0
- package/packages/openapi-parser/src/insomnia-parser.ts +614 -0
- package/packages/openapi-parser/src/parser.ts +231 -0
- package/packages/openapi-parser/src/postman-parser.ts +611 -0
- package/packages/openapi-parser/src/ref-resolver.ts +313 -0
- package/packages/openapi-parser/src/transformer.ts +459 -0
- package/packages/openapi-parser/tests/generators/express.test.ts +209 -0
- package/packages/openapi-parser/tests/generators/fastapi.test.ts +236 -0
- package/packages/openapi-parser/tests/generators/nextjs.test.ts +273 -0
- package/packages/openapi-parser/tests/parsers.test.ts +847 -0
- package/packages/openapi-parser/tsconfig.json +9 -0
- package/packages/openapi-parser/tsup.config.ts +11 -0
- package/packages/registry/package.json +59 -0
- package/packages/registry/src/cli.ts +456 -0
- package/packages/registry/src/index.ts +44 -0
- package/packages/registry/src/popular/github.json +47 -0
- package/packages/registry/src/popular/index.ts +55 -0
- package/packages/registry/src/popular/linear.json +42 -0
- package/packages/registry/src/popular/notion.json +42 -0
- package/packages/registry/src/popular/openai.json +40 -0
- package/packages/registry/src/popular/resend.json +38 -0
- package/packages/registry/src/popular/slack.json +42 -0
- package/packages/registry/src/popular/stripe.json +163 -0
- package/packages/registry/src/popular/supabase.json +42 -0
- package/packages/registry/src/popular/twilio.json +40 -0
- package/packages/registry/src/popular/vercel.json +40 -0
- package/packages/registry/src/registry.ts +492 -0
- package/packages/registry/src/storage.ts +334 -0
- package/packages/registry/src/types.ts +275 -0
- package/packages/registry/src/updater.ts +208 -0
- package/packages/registry/tsconfig.json +10 -0
- package/packages/registry/tsup.config.ts +11 -0
- package/pnpm-workspace.yaml +3 -0
- package/scripts/build-docs.sh +16 -0
- package/server.json +9 -0
- package/templates/Dockerfile.python.template +60 -0
- package/templates/Dockerfile.typescript.template +60 -0
- package/templates/docker-compose.template.yml +68 -0
- package/tests/fixtures/express-app/index.js +34 -0
- package/tests/fixtures/express-app/routes/posts.js +43 -0
- package/tests/fixtures/express-app/routes/users.js +58 -0
- package/tests/fixtures/fastapi-app/main.py +125 -0
- package/tests/fixtures/fastapi-app/routes/admin.py +42 -0
- package/tests/fixtures/graphql/simple-schema.graphql +65 -0
- package/tests/fixtures/mocks/github-api-responses.json +63 -0
- package/tests/fixtures/nextjs-app/app/api/posts/route.ts +55 -0
- package/tests/fixtures/nextjs-app/app/api/users/[id]/route.ts +63 -0
- package/tests/fixtures/nextjs-app/app/api/users/route.ts +44 -0
- package/tests/fixtures/nextjs-app/pages/api/health.ts +28 -0
- package/tests/fixtures/openapi/petstore.yaml +179 -0
- package/tests/integration/langchain-export.test.ts +405 -0
- package/tests/integration/openapi-conversion.test.ts +221 -0
- package/tsconfig.json +18 -0
- 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
|
+
}
|