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,505 @@
|
|
|
1
|
+
# GitHub to MCP - Web Application
|
|
2
|
+
|
|
3
|
+
A modern web interface for converting GitHub repositories into Model Context Protocol (MCP) servers. Built with Next.js 14, React 18, and TypeScript.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
### 🔄 Repository Conversion
|
|
8
|
+
- Convert any GitHub repository to MCP server format
|
|
9
|
+
- Support for OpenAPI specs, GraphQL schemas, and README documentation
|
|
10
|
+
- Real-time progress tracking during conversion
|
|
11
|
+
- Multi-step generation with visual feedback
|
|
12
|
+
|
|
13
|
+
### 🎮 Interactive Playground
|
|
14
|
+
- Test MCP tools in an interactive sandbox
|
|
15
|
+
- Dynamic form generation from tool schemas
|
|
16
|
+
- Resizable split-panel interface
|
|
17
|
+
- Execute tools with custom parameters
|
|
18
|
+
- Copy results with one click
|
|
19
|
+
|
|
20
|
+
### 🎯 Advanced Features
|
|
21
|
+
- **Branch/Tag/Commit Selection**: Choose specific Git references for conversion
|
|
22
|
+
- **Tool Filtering & Search**: Find tools quickly with real-time filtering
|
|
23
|
+
- **Claude Desktop Config Export**: One-click configuration setup with NPX, Local, and Python methods
|
|
24
|
+
- **Source Classification**: Automatic detection of OpenAPI, GraphQL, and README-based tools
|
|
25
|
+
- **Tool Confidence Scoring**: See reliability metrics for each tool
|
|
26
|
+
|
|
27
|
+
### 🎨 Modern UI/UX
|
|
28
|
+
- Glass morphism design with particle effects
|
|
29
|
+
- Smooth animations with Framer Motion
|
|
30
|
+
- Responsive layout for all screen sizes
|
|
31
|
+
- Dark theme optimized for readability
|
|
32
|
+
- Accessibility-focused components
|
|
33
|
+
|
|
34
|
+
## Quick Start
|
|
35
|
+
|
|
36
|
+
### Prerequisites
|
|
37
|
+
|
|
38
|
+
- Node.js 18+ or compatible runtime
|
|
39
|
+
- pnpm 8+ (or npm/yarn)
|
|
40
|
+
- GitHub personal access token (for API access)
|
|
41
|
+
|
|
42
|
+
### Installation
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
# Install dependencies (from repository root)
|
|
46
|
+
pnpm install
|
|
47
|
+
|
|
48
|
+
# Navigate to web app
|
|
49
|
+
cd apps/web
|
|
50
|
+
|
|
51
|
+
# Start development server
|
|
52
|
+
pnpm dev
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
The application will be available at `http://localhost:3000`
|
|
56
|
+
|
|
57
|
+
### Building for Production
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
# Build optimized production bundle
|
|
61
|
+
pnpm build
|
|
62
|
+
|
|
63
|
+
# Start production server
|
|
64
|
+
pnpm start
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### Environment Variables
|
|
68
|
+
|
|
69
|
+
Create a `.env.local` file in `apps/web/`:
|
|
70
|
+
|
|
71
|
+
```env
|
|
72
|
+
# GitHub API access (optional but recommended)
|
|
73
|
+
GITHUB_TOKEN=your_github_personal_access_token
|
|
74
|
+
|
|
75
|
+
# Next.js configuration
|
|
76
|
+
NEXT_PUBLIC_API_URL=http://localhost:3000/api
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## Project Structure
|
|
80
|
+
|
|
81
|
+
```
|
|
82
|
+
apps/web/
|
|
83
|
+
├── app/ # Next.js App Router
|
|
84
|
+
│ ├── convert/ # Conversion page
|
|
85
|
+
│ ├── playground/ # Interactive playground
|
|
86
|
+
│ └── api/ # API routes
|
|
87
|
+
├── components/ # React components
|
|
88
|
+
│ ├── ui/ # Base UI components
|
|
89
|
+
│ ├── convert/ # Conversion-specific
|
|
90
|
+
│ ├── BranchSelector.tsx # Git reference selector
|
|
91
|
+
│ ├── ClaudeConfigExport.tsx # Config export
|
|
92
|
+
│ ├── GenerationProgress.tsx # Progress indicator
|
|
93
|
+
│ ├── Playground.tsx # Main playground
|
|
94
|
+
│ ├── PlaygroundToolTester.tsx # Tool testing
|
|
95
|
+
│ ├── SplitView.tsx # Resizable panels
|
|
96
|
+
│ ├── ToolFilter.tsx # Filter/search UI
|
|
97
|
+
│ └── ToolList.tsx # Tool display
|
|
98
|
+
├── hooks/ # Custom React hooks
|
|
99
|
+
│ ├── use-conversion.ts # Conversion state
|
|
100
|
+
│ ├── use-generation-progress.ts # Progress tracking
|
|
101
|
+
│ ├── use-local-storage.ts # Persistent storage
|
|
102
|
+
│ └── use-streaming-conversion.ts # SSE handling
|
|
103
|
+
├── lib/ # Utilities
|
|
104
|
+
│ ├── constants.ts # App constants
|
|
105
|
+
│ └── utils.ts # Helper functions
|
|
106
|
+
├── types/ # TypeScript definitions
|
|
107
|
+
│ └── index.ts
|
|
108
|
+
└── styles/
|
|
109
|
+
└── globals.css # Global styles
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## Key Components
|
|
113
|
+
|
|
114
|
+
### Playground
|
|
115
|
+
|
|
116
|
+
Interactive testing environment for MCP tools.
|
|
117
|
+
|
|
118
|
+
```typescript
|
|
119
|
+
import Playground from '@/components/Playground';
|
|
120
|
+
|
|
121
|
+
<Playground
|
|
122
|
+
initialResult={conversionResult} // Optional pre-loaded result
|
|
123
|
+
/>
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
Features:
|
|
127
|
+
- Tool search and filtering
|
|
128
|
+
- Dynamic parameter forms
|
|
129
|
+
- Mock execution with JSON responses
|
|
130
|
+
- Resizable split-panel layout
|
|
131
|
+
- Demo mode with sample tools
|
|
132
|
+
|
|
133
|
+
### GenerationProgress
|
|
134
|
+
|
|
135
|
+
Multi-step progress indicator with weighted steps.
|
|
136
|
+
|
|
137
|
+
```typescript
|
|
138
|
+
import GenerationProgress from '@/components/GenerationProgress';
|
|
139
|
+
import { useGenerationProgress } from '@/hooks/use-generation-progress';
|
|
140
|
+
|
|
141
|
+
const progress = useGenerationProgress();
|
|
142
|
+
|
|
143
|
+
<GenerationProgress progress={progress} />
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
Steps:
|
|
147
|
+
1. Fetching Repository (10%)
|
|
148
|
+
2. Classifying Sources (20%)
|
|
149
|
+
3. Extracting Tools (40%)
|
|
150
|
+
4. Generating Server (30%)
|
|
151
|
+
|
|
152
|
+
### BranchSelector
|
|
153
|
+
|
|
154
|
+
GitHub branch, tag, and commit selector with API integration.
|
|
155
|
+
|
|
156
|
+
```typescript
|
|
157
|
+
import BranchSelector, { GitRef } from '@/components/BranchSelector';
|
|
158
|
+
|
|
159
|
+
<BranchSelector
|
|
160
|
+
repoUrl="https://github.com/owner/repo"
|
|
161
|
+
onSelect={(ref: GitRef | null) => console.log(ref)}
|
|
162
|
+
/>
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### ClaudeConfigExport
|
|
166
|
+
|
|
167
|
+
One-click Claude Desktop configuration export.
|
|
168
|
+
|
|
169
|
+
```typescript
|
|
170
|
+
import ClaudeConfigExport from '@/components/ClaudeConfigExport';
|
|
171
|
+
|
|
172
|
+
<ClaudeConfigExport
|
|
173
|
+
repoUrl="https://github.com/owner/repo"
|
|
174
|
+
repoName="owner/repo"
|
|
175
|
+
/>
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
Config types:
|
|
179
|
+
- NPX: Zero-install method
|
|
180
|
+
- Local: Clone and build
|
|
181
|
+
- Python: Python-based server
|
|
182
|
+
|
|
183
|
+
### SplitView
|
|
184
|
+
|
|
185
|
+
Resizable split-panel container.
|
|
186
|
+
|
|
187
|
+
```typescript
|
|
188
|
+
import SplitView from '@/components/SplitView';
|
|
189
|
+
|
|
190
|
+
<SplitView
|
|
191
|
+
left={<LeftPanel />}
|
|
192
|
+
right={<RightPanel />}
|
|
193
|
+
defaultSplit={30}
|
|
194
|
+
minLeftWidth={250}
|
|
195
|
+
minRightWidth={400}
|
|
196
|
+
/>
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
## Hooks
|
|
200
|
+
|
|
201
|
+
### useGenerationProgress
|
|
202
|
+
|
|
203
|
+
Manages conversion progress state.
|
|
204
|
+
|
|
205
|
+
```typescript
|
|
206
|
+
import { useGenerationProgress } from '@/hooks/use-generation-progress';
|
|
207
|
+
|
|
208
|
+
const progress = useGenerationProgress();
|
|
209
|
+
|
|
210
|
+
// Control progress
|
|
211
|
+
progress.startStep('fetching', 'Fetching repository...');
|
|
212
|
+
progress.completeStep('fetching', 'Repository fetched');
|
|
213
|
+
progress.errorStep('extracting', 'Failed to extract tools');
|
|
214
|
+
progress.addToolsFound(5);
|
|
215
|
+
|
|
216
|
+
// Access state
|
|
217
|
+
console.log(progress.progress); // 0-100
|
|
218
|
+
console.log(progress.isComplete); // boolean
|
|
219
|
+
console.log(progress.hasError); // boolean
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
### useLocalStorage
|
|
223
|
+
|
|
224
|
+
Persist state to localStorage with React state sync.
|
|
225
|
+
|
|
226
|
+
```typescript
|
|
227
|
+
import { useLocalStorage } from '@/hooks/use-local-storage';
|
|
228
|
+
|
|
229
|
+
const [value, setValue] = useLocalStorage<T>('key', defaultValue);
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
### useStreamingConversion
|
|
233
|
+
|
|
234
|
+
Handle server-sent events for real-time conversion updates.
|
|
235
|
+
|
|
236
|
+
```typescript
|
|
237
|
+
import { useStreamingConversion } from '@/hooks/use-streaming-conversion';
|
|
238
|
+
|
|
239
|
+
const { convert, status, result, steps, error } = useStreamingConversion();
|
|
240
|
+
|
|
241
|
+
await convert('https://github.com/owner/repo', { type: 'branch', ref: 'main' });
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
## API Routes
|
|
245
|
+
|
|
246
|
+
### POST /api/convert
|
|
247
|
+
|
|
248
|
+
Convert a GitHub repository to MCP format.
|
|
249
|
+
|
|
250
|
+
**Request:**
|
|
251
|
+
```json
|
|
252
|
+
{
|
|
253
|
+
"url": "https://github.com/owner/repo",
|
|
254
|
+
"ref": "main",
|
|
255
|
+
"type": "branch"
|
|
256
|
+
}
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
**Response:**
|
|
260
|
+
Server-sent events (SSE) stream with progress updates:
|
|
261
|
+
```
|
|
262
|
+
data: {"type": "step", "step": "fetch", "status": "in-progress"}
|
|
263
|
+
data: {"type": "step", "step": "fetch", "status": "complete"}
|
|
264
|
+
data: {"type": "result", "data": {...}}
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
## Styling
|
|
268
|
+
|
|
269
|
+
### Design System
|
|
270
|
+
|
|
271
|
+
**Colors:**
|
|
272
|
+
- Background: `bg-neutral-900/50`
|
|
273
|
+
- Borders: `border-neutral-800`
|
|
274
|
+
- Text: White primary, neutral secondary
|
|
275
|
+
- Source Types:
|
|
276
|
+
- OpenAPI: Purple (`bg-purple-500/20`)
|
|
277
|
+
- GraphQL: Pink (`bg-pink-500/20`)
|
|
278
|
+
- README: Cyan (`bg-cyan-500/20`)
|
|
279
|
+
|
|
280
|
+
**Spacing:**
|
|
281
|
+
- Container: `container mx-auto px-4`
|
|
282
|
+
- Section: `py-8` or `py-12`
|
|
283
|
+
- Component: `p-4` or `p-6`
|
|
284
|
+
|
|
285
|
+
**Typography:**
|
|
286
|
+
- Headings: `text-2xl` to `text-5xl`, `font-bold`
|
|
287
|
+
- Body: `text-sm` to `text-base`
|
|
288
|
+
- Labels: `text-xs`, `text-neutral-400`
|
|
289
|
+
|
|
290
|
+
### Tailwind Configuration
|
|
291
|
+
|
|
292
|
+
Custom configuration in `tailwind.config.js`:
|
|
293
|
+
- Extended color palette
|
|
294
|
+
- Custom animation utilities
|
|
295
|
+
- Glass morphism utilities
|
|
296
|
+
- Typography plugin
|
|
297
|
+
|
|
298
|
+
## Development
|
|
299
|
+
|
|
300
|
+
### Scripts
|
|
301
|
+
|
|
302
|
+
```bash
|
|
303
|
+
# Development server with hot reload
|
|
304
|
+
pnpm dev
|
|
305
|
+
|
|
306
|
+
# Type checking
|
|
307
|
+
pnpm typecheck
|
|
308
|
+
|
|
309
|
+
# Linting
|
|
310
|
+
pnpm lint
|
|
311
|
+
|
|
312
|
+
# Build for production
|
|
313
|
+
pnpm build
|
|
314
|
+
|
|
315
|
+
# Start production server
|
|
316
|
+
pnpm start
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
### Code Style
|
|
320
|
+
|
|
321
|
+
- TypeScript strict mode enabled
|
|
322
|
+
- ESLint with Next.js recommended rules
|
|
323
|
+
- Prettier for code formatting
|
|
324
|
+
- Component-first architecture
|
|
325
|
+
- Hooks for state management
|
|
326
|
+
|
|
327
|
+
### Adding New Components
|
|
328
|
+
|
|
329
|
+
1. Create component file in `components/`
|
|
330
|
+
2. Export TypeScript interfaces for props
|
|
331
|
+
3. Use `'use client'` directive for client components
|
|
332
|
+
4. Add JSDoc comments for documentation
|
|
333
|
+
5. Follow existing naming conventions
|
|
334
|
+
|
|
335
|
+
Example:
|
|
336
|
+
|
|
337
|
+
```typescript
|
|
338
|
+
/**
|
|
339
|
+
* MyComponent - Brief description
|
|
340
|
+
* @copyright 2024-2026 nirholas
|
|
341
|
+
* @license MIT
|
|
342
|
+
*/
|
|
343
|
+
|
|
344
|
+
'use client';
|
|
345
|
+
|
|
346
|
+
import { useState } from 'react';
|
|
347
|
+
|
|
348
|
+
interface MyComponentProps {
|
|
349
|
+
title: string;
|
|
350
|
+
onAction?: () => void;
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
export default function MyComponent({ title, onAction }: MyComponentProps) {
|
|
354
|
+
const [state, setState] = useState(false);
|
|
355
|
+
|
|
356
|
+
return (
|
|
357
|
+
<div className="p-4 rounded-lg border border-neutral-800">
|
|
358
|
+
<h2>{title}</h2>
|
|
359
|
+
{/* Component content */}
|
|
360
|
+
</div>
|
|
361
|
+
);
|
|
362
|
+
}
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
## Testing
|
|
366
|
+
|
|
367
|
+
### Manual Testing
|
|
368
|
+
|
|
369
|
+
Navigate through the application flows:
|
|
370
|
+
|
|
371
|
+
1. **Conversion Flow:**
|
|
372
|
+
- Go to Convert page
|
|
373
|
+
- Enter GitHub URL
|
|
374
|
+
- (Optional) Select branch/tag
|
|
375
|
+
- Click Convert
|
|
376
|
+
- Verify progress display
|
|
377
|
+
- Check tool list
|
|
378
|
+
- Test config export
|
|
379
|
+
|
|
380
|
+
2. **Playground Flow:**
|
|
381
|
+
- Navigate to Playground
|
|
382
|
+
- Search for tools
|
|
383
|
+
- Select a tool
|
|
384
|
+
- Fill in parameters
|
|
385
|
+
- Execute tool
|
|
386
|
+
- Verify response
|
|
387
|
+
- Test copy functionality
|
|
388
|
+
|
|
389
|
+
### Browser Compatibility
|
|
390
|
+
|
|
391
|
+
Tested on:
|
|
392
|
+
- Chrome 120+ ✅
|
|
393
|
+
- Edge 120+ ✅
|
|
394
|
+
- Firefox 121+ ⚠️ (needs verification)
|
|
395
|
+
- Safari 17+ ⚠️ (needs verification)
|
|
396
|
+
|
|
397
|
+
## Performance
|
|
398
|
+
|
|
399
|
+
### Optimization Strategies
|
|
400
|
+
|
|
401
|
+
- **Code Splitting:** Automatic with Next.js App Router
|
|
402
|
+
- **Memoization:** `useMemo` for expensive computations
|
|
403
|
+
- **Lazy Loading:** Dynamic imports for heavy components
|
|
404
|
+
- **Streaming:** Server-sent events for real-time updates
|
|
405
|
+
- **Local Storage:** Persistent state without server requests
|
|
406
|
+
|
|
407
|
+
### Metrics
|
|
408
|
+
|
|
409
|
+
- Initial page load: ~2.3s
|
|
410
|
+
- Time to interactive: <3s
|
|
411
|
+
- Tool filtering: <50ms
|
|
412
|
+
- Split view resize: 60fps
|
|
413
|
+
|
|
414
|
+
## Deployment
|
|
415
|
+
|
|
416
|
+
### Vercel (Recommended)
|
|
417
|
+
|
|
418
|
+
```bash
|
|
419
|
+
# Install Vercel CLI
|
|
420
|
+
pnpm add -g vercel
|
|
421
|
+
|
|
422
|
+
# Deploy
|
|
423
|
+
vercel
|
|
424
|
+
```
|
|
425
|
+
|
|
426
|
+
Configuration is in `vercel.json`.
|
|
427
|
+
|
|
428
|
+
### Docker
|
|
429
|
+
|
|
430
|
+
```dockerfile
|
|
431
|
+
FROM node:18-alpine
|
|
432
|
+
WORKDIR /app
|
|
433
|
+
COPY . .
|
|
434
|
+
RUN pnpm install
|
|
435
|
+
RUN pnpm build
|
|
436
|
+
CMD ["pnpm", "start"]
|
|
437
|
+
```
|
|
438
|
+
|
|
439
|
+
### Environment Variables
|
|
440
|
+
|
|
441
|
+
Set these in your deployment platform:
|
|
442
|
+
- `GITHUB_TOKEN` - GitHub API access
|
|
443
|
+
- `NEXT_PUBLIC_API_URL` - API endpoint URL
|
|
444
|
+
|
|
445
|
+
## Troubleshooting
|
|
446
|
+
|
|
447
|
+
### Common Issues
|
|
448
|
+
|
|
449
|
+
**TypeScript Errors:**
|
|
450
|
+
```bash
|
|
451
|
+
# Restart TypeScript server in VS Code
|
|
452
|
+
Cmd/Ctrl + Shift + P → "TypeScript: Restart TS Server"
|
|
453
|
+
```
|
|
454
|
+
|
|
455
|
+
**Build Errors:**
|
|
456
|
+
```bash
|
|
457
|
+
# Clean cache and reinstall
|
|
458
|
+
rm -rf .next node_modules
|
|
459
|
+
pnpm install
|
|
460
|
+
pnpm build
|
|
461
|
+
```
|
|
462
|
+
|
|
463
|
+
**GitHub API Rate Limit:**
|
|
464
|
+
- Add `GITHUB_TOKEN` to environment variables
|
|
465
|
+
- Use authenticated requests (60 → 5000 requests/hour)
|
|
466
|
+
|
|
467
|
+
**Split View Not Resizing:**
|
|
468
|
+
- Ensure parent container has defined height
|
|
469
|
+
- Add `h-full` or specific height class
|
|
470
|
+
|
|
471
|
+
## Contributing
|
|
472
|
+
|
|
473
|
+
See [PLAYGROUND_GUIDE.md](./PLAYGROUND_GUIDE.md) for detailed component documentation and development guidelines.
|
|
474
|
+
|
|
475
|
+
### Pull Request Checklist
|
|
476
|
+
|
|
477
|
+
- [ ] Code follows TypeScript style guide
|
|
478
|
+
- [ ] Components have proper TypeScript types
|
|
479
|
+
- [ ] JSDoc comments added for new functions
|
|
480
|
+
- [ ] Manual testing completed
|
|
481
|
+
- [ ] No TypeScript errors (`pnpm typecheck`)
|
|
482
|
+
- [ ] No ESLint warnings (`pnpm lint`)
|
|
483
|
+
|
|
484
|
+
## Documentation
|
|
485
|
+
|
|
486
|
+
- [Web UI Enhancements Overview](../../WEB_UI_ENHANCEMENTS.md) - Complete feature documentation
|
|
487
|
+
- [Playground Developer Guide](./PLAYGROUND_GUIDE.md) - Component API reference
|
|
488
|
+
- [Root README](../../README.md) - Project overview
|
|
489
|
+
|
|
490
|
+
## License
|
|
491
|
+
|
|
492
|
+
MIT - See [LICENSE](../../LICENSE) for details
|
|
493
|
+
|
|
494
|
+
## Credits
|
|
495
|
+
|
|
496
|
+
- Built with [Next.js](https://nextjs.org/)
|
|
497
|
+
- UI components from [Radix UI](https://www.radix-ui.com/)
|
|
498
|
+
- Icons from [Lucide React](https://lucide.dev/)
|
|
499
|
+
- Animations with [Framer Motion](https://www.framer.com/motion/)
|
|
500
|
+
- Styling with [Tailwind CSS](https://tailwindcss.com/)
|
|
501
|
+
- Inspired by [lyra-web3-playground](https://github.com/nirholas/lyra-web3-playground)
|
|
502
|
+
|
|
503
|
+
---
|
|
504
|
+
|
|
505
|
+
**Need help?** Open an issue on [GitHub](https://github.com/nirholas/github-to-mcp/issues)
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { NextRequest, NextResponse } from 'next/server';
|
|
2
|
+
import { generateFromGithub } from '@nirholas/github-to-mcp';
|
|
3
|
+
|
|
4
|
+
export async function POST(request: NextRequest) {
|
|
5
|
+
try {
|
|
6
|
+
const { url } = await request.json();
|
|
7
|
+
|
|
8
|
+
if (!url || typeof url !== 'string') {
|
|
9
|
+
return NextResponse.json(
|
|
10
|
+
{ error: 'GitHub URL is required' },
|
|
11
|
+
{ status: 400 }
|
|
12
|
+
);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
// Validate GitHub URL
|
|
16
|
+
const githubPattern = /^https?:\/\/(www\.)?github\.com\/[\w-]+\/[\w.-]+/;
|
|
17
|
+
if (!githubPattern.test(url)) {
|
|
18
|
+
return NextResponse.json(
|
|
19
|
+
{ error: 'Invalid GitHub URL format' },
|
|
20
|
+
{ status: 400 }
|
|
21
|
+
);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// Generate MCP tools
|
|
25
|
+
const result = await generateFromGithub(url, {
|
|
26
|
+
sources: ['readme', 'openapi', 'code'],
|
|
27
|
+
githubToken: process.env.GITHUB_TOKEN,
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
// Generate the MCP server code (TypeScript)
|
|
31
|
+
const code = result.generate();
|
|
32
|
+
|
|
33
|
+
// Generate Python MCP server code
|
|
34
|
+
const pythonCode = result.generatePython ? result.generatePython() : '';
|
|
35
|
+
|
|
36
|
+
// Generate config snippets
|
|
37
|
+
const repoName = result.name;
|
|
38
|
+
|
|
39
|
+
const claudeConfig = JSON.stringify({
|
|
40
|
+
mcpServers: {
|
|
41
|
+
[repoName]: {
|
|
42
|
+
command: 'npx',
|
|
43
|
+
args: ['tsx', `${repoName}-mcp/index.ts`],
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
}, null, 2);
|
|
47
|
+
|
|
48
|
+
const cursorConfig = JSON.stringify({
|
|
49
|
+
mcpServers: {
|
|
50
|
+
[repoName]: {
|
|
51
|
+
command: 'npx',
|
|
52
|
+
args: ['tsx', `${repoName}-mcp/index.ts`],
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
}, null, 2);
|
|
56
|
+
|
|
57
|
+
const claudePythonConfig = JSON.stringify({
|
|
58
|
+
mcpServers: {
|
|
59
|
+
[repoName]: {
|
|
60
|
+
command: 'python',
|
|
61
|
+
args: ['-m', `${repoName.replace(/-/g, '_')}_mcp`],
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
}, null, 2);
|
|
65
|
+
|
|
66
|
+
return NextResponse.json({
|
|
67
|
+
name: result.name,
|
|
68
|
+
tools: result.tools.map((t) => ({
|
|
69
|
+
name: t.name,
|
|
70
|
+
description: t.description,
|
|
71
|
+
inputSchema: t.inputSchema,
|
|
72
|
+
source: t.source,
|
|
73
|
+
})),
|
|
74
|
+
sources: result.sources,
|
|
75
|
+
classification: result.classification,
|
|
76
|
+
code,
|
|
77
|
+
pythonCode,
|
|
78
|
+
claudeConfig,
|
|
79
|
+
cursorConfig,
|
|
80
|
+
claudePythonConfig,
|
|
81
|
+
});
|
|
82
|
+
} catch (error) {
|
|
83
|
+
console.error('Conversion error:', error);
|
|
84
|
+
|
|
85
|
+
const message = error instanceof Error ? error.message : 'Conversion failed';
|
|
86
|
+
|
|
87
|
+
// Handle rate limiting
|
|
88
|
+
if (message.includes('rate limit')) {
|
|
89
|
+
return NextResponse.json(
|
|
90
|
+
{ error: 'GitHub API rate limit exceeded. Please try again later or provide a GitHub token.' },
|
|
91
|
+
{ status: 429 }
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
return NextResponse.json(
|
|
96
|
+
{ error: message },
|
|
97
|
+
{ status: 500 }
|
|
98
|
+
);
|
|
99
|
+
}
|
|
100
|
+
}
|