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,362 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Export Docker configuration tool for MCP server
|
|
3
|
+
* @copyright Copyright (c) 2024-2026 nirholas
|
|
4
|
+
* @license MIT
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { TextContent, Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Docker configuration templates
|
|
11
|
+
*/
|
|
12
|
+
const DOCKER_TEMPLATES = {
|
|
13
|
+
typescript: {
|
|
14
|
+
dockerfile: `# TypeScript MCP Server Dockerfile
|
|
15
|
+
FROM node:20-slim
|
|
16
|
+
|
|
17
|
+
WORKDIR /app
|
|
18
|
+
|
|
19
|
+
# Install dependencies
|
|
20
|
+
COPY package*.json ./
|
|
21
|
+
RUN npm ci --only=production
|
|
22
|
+
|
|
23
|
+
# Copy source
|
|
24
|
+
COPY . .
|
|
25
|
+
|
|
26
|
+
# Build TypeScript
|
|
27
|
+
RUN npm run build
|
|
28
|
+
|
|
29
|
+
# Run the server
|
|
30
|
+
CMD ["node", "dist/index.js"]
|
|
31
|
+
`,
|
|
32
|
+
dockerCompose: `version: '3.8'
|
|
33
|
+
|
|
34
|
+
services:
|
|
35
|
+
mcp-server:
|
|
36
|
+
build: .
|
|
37
|
+
environment:
|
|
38
|
+
- NODE_ENV=production
|
|
39
|
+
volumes:
|
|
40
|
+
- ./config:/app/config:ro
|
|
41
|
+
restart: unless-stopped
|
|
42
|
+
logging:
|
|
43
|
+
driver: json-file
|
|
44
|
+
options:
|
|
45
|
+
max-size: "10m"
|
|
46
|
+
max-file: "3"
|
|
47
|
+
`,
|
|
48
|
+
dockerignore: `node_modules
|
|
49
|
+
npm-debug.log
|
|
50
|
+
.git
|
|
51
|
+
.gitignore
|
|
52
|
+
.env
|
|
53
|
+
*.md
|
|
54
|
+
dist
|
|
55
|
+
coverage
|
|
56
|
+
.nyc_output
|
|
57
|
+
*.test.ts
|
|
58
|
+
*.spec.ts
|
|
59
|
+
__tests__
|
|
60
|
+
`,
|
|
61
|
+
},
|
|
62
|
+
python: {
|
|
63
|
+
dockerfile: `# Python MCP Server Dockerfile
|
|
64
|
+
FROM python:3.11-slim
|
|
65
|
+
|
|
66
|
+
WORKDIR /app
|
|
67
|
+
|
|
68
|
+
# Install system dependencies
|
|
69
|
+
RUN apt-get update && apt-get install -y --no-install-recommends \\
|
|
70
|
+
build-essential \\
|
|
71
|
+
&& rm -rf /var/lib/apt/lists/*
|
|
72
|
+
|
|
73
|
+
# Install Python dependencies
|
|
74
|
+
COPY requirements.txt ./
|
|
75
|
+
RUN pip install --no-cache-dir -r requirements.txt
|
|
76
|
+
|
|
77
|
+
# Copy source
|
|
78
|
+
COPY . .
|
|
79
|
+
|
|
80
|
+
# Run the server
|
|
81
|
+
CMD ["python", "-m", "mcp_server"]
|
|
82
|
+
`,
|
|
83
|
+
dockerCompose: `version: '3.8'
|
|
84
|
+
|
|
85
|
+
services:
|
|
86
|
+
mcp-server:
|
|
87
|
+
build: .
|
|
88
|
+
environment:
|
|
89
|
+
- PYTHONUNBUFFERED=1
|
|
90
|
+
volumes:
|
|
91
|
+
- ./config:/app/config:ro
|
|
92
|
+
restart: unless-stopped
|
|
93
|
+
logging:
|
|
94
|
+
driver: json-file
|
|
95
|
+
options:
|
|
96
|
+
max-size: "10m"
|
|
97
|
+
max-file: "3"
|
|
98
|
+
`,
|
|
99
|
+
dockerignore: `__pycache__
|
|
100
|
+
*.py[cod]
|
|
101
|
+
*$py.class
|
|
102
|
+
*.so
|
|
103
|
+
.Python
|
|
104
|
+
.git
|
|
105
|
+
.gitignore
|
|
106
|
+
.env
|
|
107
|
+
venv/
|
|
108
|
+
ENV/
|
|
109
|
+
*.md
|
|
110
|
+
.pytest_cache/
|
|
111
|
+
.coverage
|
|
112
|
+
htmlcov/
|
|
113
|
+
dist/
|
|
114
|
+
build/
|
|
115
|
+
*.egg-info/
|
|
116
|
+
`,
|
|
117
|
+
},
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Tool definition for exporting Docker configuration
|
|
122
|
+
*/
|
|
123
|
+
export const exportDockerTool: Tool = {
|
|
124
|
+
name: 'export_docker',
|
|
125
|
+
description: `Generate Docker configuration files for an MCP server.
|
|
126
|
+
|
|
127
|
+
Creates:
|
|
128
|
+
- Dockerfile optimized for MCP servers
|
|
129
|
+
- docker-compose.yml for easy deployment
|
|
130
|
+
- .dockerignore for efficient builds
|
|
131
|
+
|
|
132
|
+
Supports TypeScript and Python MCP servers with best practices for:
|
|
133
|
+
- Multi-stage builds (TypeScript)
|
|
134
|
+
- Minimal image size
|
|
135
|
+
- Proper caching
|
|
136
|
+
- Security hardening
|
|
137
|
+
- Logging configuration
|
|
138
|
+
|
|
139
|
+
The generated configuration can be customized with server name, port, and environment variables.`,
|
|
140
|
+
inputSchema: {
|
|
141
|
+
type: 'object',
|
|
142
|
+
properties: {
|
|
143
|
+
language: {
|
|
144
|
+
type: 'string',
|
|
145
|
+
enum: ['typescript', 'python'],
|
|
146
|
+
description: 'The programming language of the MCP server',
|
|
147
|
+
},
|
|
148
|
+
server_name: {
|
|
149
|
+
type: 'string',
|
|
150
|
+
description: 'Name for the Docker service',
|
|
151
|
+
},
|
|
152
|
+
port: {
|
|
153
|
+
type: 'number',
|
|
154
|
+
description: 'Port to expose (optional, MCP uses stdio by default)',
|
|
155
|
+
},
|
|
156
|
+
env_vars: {
|
|
157
|
+
type: 'object',
|
|
158
|
+
additionalProperties: { type: 'string' },
|
|
159
|
+
description: 'Environment variables to include',
|
|
160
|
+
},
|
|
161
|
+
include_healthcheck: {
|
|
162
|
+
type: 'boolean',
|
|
163
|
+
default: false,
|
|
164
|
+
description: 'Include a health check endpoint',
|
|
165
|
+
},
|
|
166
|
+
multi_stage: {
|
|
167
|
+
type: 'boolean',
|
|
168
|
+
default: true,
|
|
169
|
+
description: 'Use multi-stage build for smaller images (TypeScript only)',
|
|
170
|
+
},
|
|
171
|
+
},
|
|
172
|
+
required: ['language'],
|
|
173
|
+
},
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* Handler for export_docker tool
|
|
178
|
+
*/
|
|
179
|
+
export async function handleExportDocker(args: {
|
|
180
|
+
language: 'typescript' | 'python';
|
|
181
|
+
server_name?: string;
|
|
182
|
+
port?: number;
|
|
183
|
+
env_vars?: Record<string, string>;
|
|
184
|
+
include_healthcheck?: boolean;
|
|
185
|
+
multi_stage?: boolean;
|
|
186
|
+
}): Promise<TextContent> {
|
|
187
|
+
try {
|
|
188
|
+
const { language, server_name, port, env_vars, include_healthcheck, multi_stage } = args;
|
|
189
|
+
const template = DOCKER_TEMPLATES[language];
|
|
190
|
+
const serviceName = server_name || 'mcp-server';
|
|
191
|
+
|
|
192
|
+
let dockerfile = template.dockerfile;
|
|
193
|
+
let dockerCompose = template.dockerCompose;
|
|
194
|
+
|
|
195
|
+
// Customize Dockerfile
|
|
196
|
+
if (language === 'typescript' && multi_stage !== false) {
|
|
197
|
+
dockerfile = `# TypeScript MCP Server Dockerfile (Multi-stage)
|
|
198
|
+
FROM node:20-slim AS builder
|
|
199
|
+
|
|
200
|
+
WORKDIR /app
|
|
201
|
+
|
|
202
|
+
# Install dependencies
|
|
203
|
+
COPY package*.json ./
|
|
204
|
+
RUN npm ci
|
|
205
|
+
|
|
206
|
+
# Copy source and build
|
|
207
|
+
COPY . .
|
|
208
|
+
RUN npm run build
|
|
209
|
+
|
|
210
|
+
# Production image
|
|
211
|
+
FROM node:20-slim
|
|
212
|
+
|
|
213
|
+
WORKDIR /app
|
|
214
|
+
|
|
215
|
+
# Copy built files and production dependencies
|
|
216
|
+
COPY --from=builder /app/dist ./dist
|
|
217
|
+
COPY --from=builder /app/package*.json ./
|
|
218
|
+
RUN npm ci --only=production
|
|
219
|
+
|
|
220
|
+
# Security: Run as non-root user
|
|
221
|
+
USER node
|
|
222
|
+
|
|
223
|
+
${include_healthcheck ? `# Health check
|
|
224
|
+
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \\
|
|
225
|
+
CMD node -e "console.log('healthy')" || exit 1
|
|
226
|
+
` : ''}
|
|
227
|
+
# Run the server
|
|
228
|
+
CMD ["node", "dist/index.js"]
|
|
229
|
+
`;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
if (include_healthcheck && language === 'python') {
|
|
233
|
+
dockerfile = dockerfile.replace(
|
|
234
|
+
'CMD ["python", "-m", "mcp_server"]',
|
|
235
|
+
`# Health check
|
|
236
|
+
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \\
|
|
237
|
+
CMD python -c "print('healthy')" || exit 1
|
|
238
|
+
|
|
239
|
+
# Run the server
|
|
240
|
+
CMD ["python", "-m", "mcp_server"]`
|
|
241
|
+
);
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
// Customize docker-compose.yml
|
|
245
|
+
dockerCompose = dockerCompose.replace('mcp-server:', `${serviceName}:`);
|
|
246
|
+
|
|
247
|
+
if (port) {
|
|
248
|
+
dockerCompose = dockerCompose.replace(
|
|
249
|
+
'restart: unless-stopped',
|
|
250
|
+
`ports:
|
|
251
|
+
- "${port}:${port}"
|
|
252
|
+
restart: unless-stopped`
|
|
253
|
+
);
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
if (env_vars && Object.keys(env_vars).length > 0) {
|
|
257
|
+
const envEntries = Object.entries(env_vars)
|
|
258
|
+
.map(([key, value]) => ` - ${key}=${value}`)
|
|
259
|
+
.join('\n');
|
|
260
|
+
|
|
261
|
+
dockerCompose = dockerCompose.replace(
|
|
262
|
+
/environment:\n(.*?\n)+/m,
|
|
263
|
+
`environment:\n${envEntries}\n`
|
|
264
|
+
);
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
// Generate shell script for building and running
|
|
268
|
+
const shellScript = language === 'typescript' ? `#!/bin/bash
|
|
269
|
+
# Build and run the MCP server in Docker
|
|
270
|
+
|
|
271
|
+
# Build the image
|
|
272
|
+
docker build -t ${serviceName} .
|
|
273
|
+
|
|
274
|
+
# Run with stdio (typical MCP usage)
|
|
275
|
+
docker run -it --rm ${serviceName}
|
|
276
|
+
|
|
277
|
+
# Or run with docker-compose
|
|
278
|
+
# docker-compose up -d
|
|
279
|
+
` : `#!/bin/bash
|
|
280
|
+
# Build and run the MCP server in Docker
|
|
281
|
+
|
|
282
|
+
# Build the image
|
|
283
|
+
docker build -t ${serviceName} .
|
|
284
|
+
|
|
285
|
+
# Run with stdio (typical MCP usage)
|
|
286
|
+
docker run -it --rm ${serviceName}
|
|
287
|
+
|
|
288
|
+
# Or run with docker-compose
|
|
289
|
+
# docker-compose up -d
|
|
290
|
+
`;
|
|
291
|
+
|
|
292
|
+
const output = `# Docker Configuration for ${serviceName}
|
|
293
|
+
|
|
294
|
+
## Dockerfile
|
|
295
|
+
|
|
296
|
+
\`\`\`dockerfile
|
|
297
|
+
${dockerfile}
|
|
298
|
+
\`\`\`
|
|
299
|
+
|
|
300
|
+
## docker-compose.yml
|
|
301
|
+
|
|
302
|
+
\`\`\`yaml
|
|
303
|
+
${dockerCompose}
|
|
304
|
+
\`\`\`
|
|
305
|
+
|
|
306
|
+
## .dockerignore
|
|
307
|
+
|
|
308
|
+
\`\`\`
|
|
309
|
+
${template.dockerignore}
|
|
310
|
+
\`\`\`
|
|
311
|
+
|
|
312
|
+
## Build and Run Script (build.sh)
|
|
313
|
+
|
|
314
|
+
\`\`\`bash
|
|
315
|
+
${shellScript}
|
|
316
|
+
\`\`\`
|
|
317
|
+
|
|
318
|
+
## Usage Instructions
|
|
319
|
+
|
|
320
|
+
1. Save the Dockerfile to your project root
|
|
321
|
+
2. Save docker-compose.yml to your project root
|
|
322
|
+
3. Save .dockerignore to your project root
|
|
323
|
+
4. Build the image:
|
|
324
|
+
\`\`\`bash
|
|
325
|
+
docker build -t ${serviceName} .
|
|
326
|
+
\`\`\`
|
|
327
|
+
5. Run the container:
|
|
328
|
+
\`\`\`bash
|
|
329
|
+
# For stdio-based MCP (typical)
|
|
330
|
+
docker run -it --rm ${serviceName}
|
|
331
|
+
|
|
332
|
+
# With docker-compose
|
|
333
|
+
docker-compose up -d
|
|
334
|
+
\`\`\`
|
|
335
|
+
|
|
336
|
+
## Integration with Claude Desktop
|
|
337
|
+
|
|
338
|
+
Add to your Claude Desktop config:
|
|
339
|
+
|
|
340
|
+
\`\`\`json
|
|
341
|
+
{
|
|
342
|
+
"mcpServers": {
|
|
343
|
+
"${serviceName}": {
|
|
344
|
+
"command": "docker",
|
|
345
|
+
"args": ["run", "-i", "--rm", "${serviceName}"]
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
\`\`\`
|
|
350
|
+
`;
|
|
351
|
+
|
|
352
|
+
return {
|
|
353
|
+
type: 'text',
|
|
354
|
+
text: output,
|
|
355
|
+
};
|
|
356
|
+
} catch (error) {
|
|
357
|
+
return {
|
|
358
|
+
type: 'text',
|
|
359
|
+
text: `Error generating Docker config: ${error instanceof Error ? error.message : String(error)}`,
|
|
360
|
+
};
|
|
361
|
+
}
|
|
362
|
+
}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Generate OpenAPI spec tool for MCP server
|
|
3
|
+
* @copyright Copyright (c) 2024-2026 nirholas
|
|
4
|
+
* @license Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { TextContent, Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
8
|
+
import { generateOpenApiFromCodeWithDetails, FileContent, GeneratorOptions } from '@github-to-mcp/openapi-parser';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Tool definition for generating OpenAPI spec from code
|
|
12
|
+
*/
|
|
13
|
+
export const generateOpenApiTool: Tool = {
|
|
14
|
+
name: 'generate_openapi_spec',
|
|
15
|
+
description: `Generate an OpenAPI 3.1 specification from source code files.
|
|
16
|
+
|
|
17
|
+
Analyzes source code to extract API routes and generates a complete OpenAPI specification.
|
|
18
|
+
|
|
19
|
+
Supported frameworks:
|
|
20
|
+
- Express.js (Node.js)
|
|
21
|
+
- FastAPI/Flask (Python)
|
|
22
|
+
- Next.js API routes (app/api and pages/api)
|
|
23
|
+
|
|
24
|
+
The tool detects the framework automatically and extracts:
|
|
25
|
+
- Routes and HTTP methods
|
|
26
|
+
- Path, query, and header parameters
|
|
27
|
+
- Request body schemas
|
|
28
|
+
- Response schemas
|
|
29
|
+
- Security schemes
|
|
30
|
+
- Tags for grouping
|
|
31
|
+
|
|
32
|
+
Returns the generated OpenAPI spec in both JSON and YAML formats.`,
|
|
33
|
+
inputSchema: {
|
|
34
|
+
type: 'object',
|
|
35
|
+
properties: {
|
|
36
|
+
files: {
|
|
37
|
+
type: 'array',
|
|
38
|
+
items: {
|
|
39
|
+
type: 'object',
|
|
40
|
+
properties: {
|
|
41
|
+
path: {
|
|
42
|
+
type: 'string',
|
|
43
|
+
description: 'File path (relative or absolute)',
|
|
44
|
+
},
|
|
45
|
+
content: {
|
|
46
|
+
type: 'string',
|
|
47
|
+
description: 'File content',
|
|
48
|
+
},
|
|
49
|
+
language: {
|
|
50
|
+
type: 'string',
|
|
51
|
+
enum: ['typescript', 'javascript', 'python'],
|
|
52
|
+
description: 'Programming language (auto-detected if not provided)',
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
required: ['path', 'content'],
|
|
56
|
+
},
|
|
57
|
+
description: 'Array of source code files to analyze',
|
|
58
|
+
},
|
|
59
|
+
options: {
|
|
60
|
+
type: 'object',
|
|
61
|
+
properties: {
|
|
62
|
+
title: {
|
|
63
|
+
type: 'string',
|
|
64
|
+
description: 'API title for the spec',
|
|
65
|
+
},
|
|
66
|
+
description: {
|
|
67
|
+
type: 'string',
|
|
68
|
+
description: 'API description',
|
|
69
|
+
},
|
|
70
|
+
version: {
|
|
71
|
+
type: 'string',
|
|
72
|
+
description: 'API version (e.g., "1.0.0")',
|
|
73
|
+
},
|
|
74
|
+
baseUrl: {
|
|
75
|
+
type: 'string',
|
|
76
|
+
description: 'Base URL for the API',
|
|
77
|
+
},
|
|
78
|
+
includeExamples: {
|
|
79
|
+
type: 'boolean',
|
|
80
|
+
description: 'Whether to include examples in the spec',
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
description: 'Generation options',
|
|
84
|
+
},
|
|
85
|
+
format: {
|
|
86
|
+
type: 'string',
|
|
87
|
+
enum: ['json', 'yaml', 'both'],
|
|
88
|
+
default: 'json',
|
|
89
|
+
description: 'Output format',
|
|
90
|
+
},
|
|
91
|
+
},
|
|
92
|
+
required: ['files'],
|
|
93
|
+
},
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Handler for generate_openapi_spec tool
|
|
98
|
+
*/
|
|
99
|
+
export async function handleGenerateOpenApi(args: {
|
|
100
|
+
files: Array<{ path: string; content: string; language?: string }>;
|
|
101
|
+
options?: GeneratorOptions;
|
|
102
|
+
format?: 'json' | 'yaml' | 'both';
|
|
103
|
+
}): Promise<TextContent> {
|
|
104
|
+
try {
|
|
105
|
+
const files: FileContent[] = args.files.map(f => ({
|
|
106
|
+
path: f.path,
|
|
107
|
+
content: f.content,
|
|
108
|
+
language: f.language as FileContent['language'],
|
|
109
|
+
}));
|
|
110
|
+
|
|
111
|
+
const result = await generateOpenApiFromCodeWithDetails(files, args.options || {});
|
|
112
|
+
|
|
113
|
+
const format = args.format || 'json';
|
|
114
|
+
let output: string;
|
|
115
|
+
|
|
116
|
+
if (format === 'both') {
|
|
117
|
+
output = `# Generated OpenAPI Specification
|
|
118
|
+
|
|
119
|
+
## Analysis Summary
|
|
120
|
+
|
|
121
|
+
- **Framework Detected:** ${result.analysis.framework}
|
|
122
|
+
- **Routes Found:** ${result.analysis.routes.length}
|
|
123
|
+
- **Schemas Extracted:** ${Object.keys(result.analysis.schemas).length}
|
|
124
|
+
- **Security Schemes:** ${Object.keys(result.analysis.securitySchemes).length}
|
|
125
|
+
- **Files Analyzed:** ${result.analysis.filesAnalyzed.length}
|
|
126
|
+
|
|
127
|
+
${result.analysis.warnings.length > 0 ? `### Warnings\n${result.analysis.warnings.map(w => `- ${w}`).join('\n')}\n` : ''}
|
|
128
|
+
${result.analysis.errors.length > 0 ? `### Errors\n${result.analysis.errors.map(e => `- ${e}`).join('\n')}\n` : ''}
|
|
129
|
+
|
|
130
|
+
## Routes
|
|
131
|
+
|
|
132
|
+
${result.analysis.routes.map(r => `- \`${r.method.toUpperCase()} ${r.openApiPath}\` - ${r.summary || r.operationId}`).join('\n')}
|
|
133
|
+
|
|
134
|
+
## JSON Format
|
|
135
|
+
|
|
136
|
+
\`\`\`json
|
|
137
|
+
${result.json}
|
|
138
|
+
\`\`\`
|
|
139
|
+
|
|
140
|
+
## YAML Format
|
|
141
|
+
|
|
142
|
+
\`\`\`yaml
|
|
143
|
+
${result.yaml}
|
|
144
|
+
\`\`\`
|
|
145
|
+
`;
|
|
146
|
+
} else if (format === 'yaml') {
|
|
147
|
+
output = result.yaml;
|
|
148
|
+
} else {
|
|
149
|
+
output = result.json;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
return {
|
|
153
|
+
type: 'text',
|
|
154
|
+
text: output,
|
|
155
|
+
};
|
|
156
|
+
} catch (error) {
|
|
157
|
+
return {
|
|
158
|
+
type: 'text',
|
|
159
|
+
text: `Error generating OpenAPI spec: ${error instanceof Error ? error.message : String(error)}`,
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
}
|