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,123 @@
|
|
|
1
|
+
import type { Config } from 'tailwindcss';
|
|
2
|
+
|
|
3
|
+
const config: Config = {
|
|
4
|
+
darkMode: 'class',
|
|
5
|
+
content: [
|
|
6
|
+
'./pages/**/*.{js,ts,jsx,tsx,mdx}',
|
|
7
|
+
'./components/**/*.{js,ts,jsx,tsx,mdx}',
|
|
8
|
+
'./app/**/*.{js,ts,jsx,tsx,mdx}',
|
|
9
|
+
],
|
|
10
|
+
theme: {
|
|
11
|
+
extend: {
|
|
12
|
+
colors: {
|
|
13
|
+
border: 'hsl(var(--border))',
|
|
14
|
+
input: 'hsl(var(--input))',
|
|
15
|
+
ring: 'hsl(var(--ring))',
|
|
16
|
+
background: 'hsl(var(--background))',
|
|
17
|
+
foreground: 'hsl(var(--foreground))',
|
|
18
|
+
primary: {
|
|
19
|
+
DEFAULT: 'hsl(var(--primary))',
|
|
20
|
+
foreground: 'hsl(var(--primary-foreground))',
|
|
21
|
+
},
|
|
22
|
+
secondary: {
|
|
23
|
+
DEFAULT: 'hsl(var(--secondary))',
|
|
24
|
+
foreground: 'hsl(var(--secondary-foreground))',
|
|
25
|
+
},
|
|
26
|
+
destructive: {
|
|
27
|
+
DEFAULT: 'hsl(var(--destructive))',
|
|
28
|
+
foreground: 'hsl(var(--destructive-foreground))',
|
|
29
|
+
},
|
|
30
|
+
muted: {
|
|
31
|
+
DEFAULT: 'hsl(var(--muted))',
|
|
32
|
+
foreground: 'hsl(var(--muted-foreground))',
|
|
33
|
+
},
|
|
34
|
+
accent: {
|
|
35
|
+
DEFAULT: 'hsl(var(--accent))',
|
|
36
|
+
foreground: 'hsl(var(--accent-foreground))',
|
|
37
|
+
},
|
|
38
|
+
popover: {
|
|
39
|
+
DEFAULT: 'hsl(var(--popover))',
|
|
40
|
+
foreground: 'hsl(var(--popover-foreground))',
|
|
41
|
+
},
|
|
42
|
+
card: {
|
|
43
|
+
DEFAULT: 'hsl(var(--card))',
|
|
44
|
+
foreground: 'hsl(var(--card-foreground))',
|
|
45
|
+
},
|
|
46
|
+
dark: {
|
|
47
|
+
900: '#000000',
|
|
48
|
+
800: '#0a0a0a',
|
|
49
|
+
700: '#171717',
|
|
50
|
+
600: '#262626',
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
borderRadius: {
|
|
54
|
+
lg: 'var(--radius)',
|
|
55
|
+
md: 'calc(var(--radius) - 2px)',
|
|
56
|
+
sm: 'calc(var(--radius) - 4px)',
|
|
57
|
+
},
|
|
58
|
+
fontFamily: {
|
|
59
|
+
sans: ['Inter', 'var(--font-geist-sans)', 'system-ui', '-apple-system', 'sans-serif'],
|
|
60
|
+
mono: ['JetBrains Mono', 'var(--font-geist-mono)', 'Menlo', 'monospace'],
|
|
61
|
+
},
|
|
62
|
+
fontSize: {
|
|
63
|
+
'2xs': ['0.625rem', { lineHeight: '1rem' }],
|
|
64
|
+
},
|
|
65
|
+
animation: {
|
|
66
|
+
'fade-in': 'fadeIn 0.3s ease-out',
|
|
67
|
+
'slide-up': 'slideUp 0.3s ease-out',
|
|
68
|
+
'slide-down': 'slideDown 0.2s ease-out',
|
|
69
|
+
'slide-in-from-right': 'slideInFromRight 0.2s ease-out',
|
|
70
|
+
'pulse-slow': 'pulse 3s cubic-bezier(0.4, 0, 0.6, 1) infinite',
|
|
71
|
+
shimmer: 'shimmer 2s infinite linear',
|
|
72
|
+
'glow': 'glow 2s ease-in-out infinite alternate',
|
|
73
|
+
'float': 'float 6s ease-in-out infinite',
|
|
74
|
+
'gradient': 'gradient 8s ease infinite',
|
|
75
|
+
},
|
|
76
|
+
keyframes: {
|
|
77
|
+
fadeIn: {
|
|
78
|
+
'0%': { opacity: '0' },
|
|
79
|
+
'100%': { opacity: '1' },
|
|
80
|
+
},
|
|
81
|
+
slideUp: {
|
|
82
|
+
'0%': { opacity: '0', transform: 'translateY(8px)' },
|
|
83
|
+
'100%': { opacity: '1', transform: 'translateY(0)' },
|
|
84
|
+
},
|
|
85
|
+
slideDown: {
|
|
86
|
+
'0%': { opacity: '0', transform: 'translateY(-8px)' },
|
|
87
|
+
'100%': { opacity: '1', transform: 'translateY(0)' },
|
|
88
|
+
},
|
|
89
|
+
slideInFromRight: {
|
|
90
|
+
'0%': { transform: 'translateX(100%)' },
|
|
91
|
+
'100%': { transform: 'translateX(0)' },
|
|
92
|
+
},
|
|
93
|
+
shimmer: {
|
|
94
|
+
'0%': { backgroundPosition: '-200% 0' },
|
|
95
|
+
'100%': { backgroundPosition: '200% 0' },
|
|
96
|
+
},
|
|
97
|
+
glow: {
|
|
98
|
+
'0%': { boxShadow: '0 0 5px #00ff88, 0 0 10px #00ff88, 0 0 15px #00ff88' },
|
|
99
|
+
'100%': { boxShadow: '0 0 10px #00d4ff, 0 0 20px #00d4ff, 0 0 30px #00d4ff' },
|
|
100
|
+
},
|
|
101
|
+
float: {
|
|
102
|
+
'0%, 100%': { transform: 'translateY(0px)' },
|
|
103
|
+
'50%': { transform: 'translateY(-20px)' },
|
|
104
|
+
},
|
|
105
|
+
gradient: {
|
|
106
|
+
'0%, 100%': { backgroundPosition: '0% 50%' },
|
|
107
|
+
'50%': { backgroundPosition: '100% 50%' },
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
boxShadow: {
|
|
111
|
+
'glow': '0 0 40px -10px hsl(var(--primary) / 0.3)',
|
|
112
|
+
'glow-sm': '0 0 20px -5px hsl(var(--primary) / 0.2)',
|
|
113
|
+
},
|
|
114
|
+
},
|
|
115
|
+
},
|
|
116
|
+
plugins: [
|
|
117
|
+
require('@tailwindcss/forms'),
|
|
118
|
+
require('@tailwindcss/typography'),
|
|
119
|
+
require('tailwindcss-animate'),
|
|
120
|
+
],
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
export default config;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"extends": "../../tsconfig.json",
|
|
3
|
+
"compilerOptions": {
|
|
4
|
+
"lib": ["dom", "dom.iterable", "esnext"],
|
|
5
|
+
"allowJs": true,
|
|
6
|
+
"noEmit": true,
|
|
7
|
+
"incremental": true,
|
|
8
|
+
"module": "esnext",
|
|
9
|
+
"moduleResolution": "bundler",
|
|
10
|
+
"resolveJsonModule": true,
|
|
11
|
+
"isolatedModules": true,
|
|
12
|
+
"jsx": "preserve",
|
|
13
|
+
"plugins": [{ "name": "next" }],
|
|
14
|
+
"paths": {
|
|
15
|
+
"@/*": ["./*"]
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
|
|
19
|
+
"exclude": ["node_modules"]
|
|
20
|
+
}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deploy Types - Cloud-hosted MCP Server infrastructure
|
|
3
|
+
* @copyright 2024-2026 nirholas
|
|
4
|
+
* @license MIT
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
export interface DeployedServer {
|
|
8
|
+
id: string;
|
|
9
|
+
name: string;
|
|
10
|
+
description: string;
|
|
11
|
+
|
|
12
|
+
// Server configuration
|
|
13
|
+
tools: DeployedTool[];
|
|
14
|
+
code: string;
|
|
15
|
+
language: 'typescript' | 'python';
|
|
16
|
+
|
|
17
|
+
// Deployment info
|
|
18
|
+
endpoint: string;
|
|
19
|
+
status: 'active' | 'paused' | 'error';
|
|
20
|
+
region: string;
|
|
21
|
+
createdAt: string;
|
|
22
|
+
updatedAt: string;
|
|
23
|
+
|
|
24
|
+
// Source info
|
|
25
|
+
sourceRepo?: string;
|
|
26
|
+
sourceUrl?: string;
|
|
27
|
+
|
|
28
|
+
// Auth & Security
|
|
29
|
+
apiKeyHash?: string;
|
|
30
|
+
allowedOrigins?: string[];
|
|
31
|
+
rateLimit: RateLimitConfig;
|
|
32
|
+
|
|
33
|
+
// Usage tracking
|
|
34
|
+
usage: UsageStats;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export interface DeployedTool {
|
|
38
|
+
name: string;
|
|
39
|
+
description: string;
|
|
40
|
+
inputSchema: object;
|
|
41
|
+
enabled: boolean;
|
|
42
|
+
callCount: number;
|
|
43
|
+
lastUsed?: string;
|
|
44
|
+
avgLatencyMs?: number;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export interface RateLimitConfig {
|
|
48
|
+
requestsPerMinute: number;
|
|
49
|
+
requestsPerDay: number;
|
|
50
|
+
enabled: boolean;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export interface UsageStats {
|
|
54
|
+
totalCalls: number;
|
|
55
|
+
totalCallsToday: number;
|
|
56
|
+
totalCallsThisMonth: number;
|
|
57
|
+
successRate: number;
|
|
58
|
+
avgLatencyMs: number;
|
|
59
|
+
lastUsed?: string;
|
|
60
|
+
callsByTool: Record<string, number>;
|
|
61
|
+
callsByDay: DailyUsage[];
|
|
62
|
+
errors: ErrorLog[];
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export interface DailyUsage {
|
|
66
|
+
date: string;
|
|
67
|
+
calls: number;
|
|
68
|
+
errors: number;
|
|
69
|
+
avgLatencyMs: number;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export interface ErrorLog {
|
|
73
|
+
timestamp: string;
|
|
74
|
+
tool: string;
|
|
75
|
+
error: string;
|
|
76
|
+
input?: object;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export interface DeployRequest {
|
|
80
|
+
name: string;
|
|
81
|
+
description?: string;
|
|
82
|
+
code: string;
|
|
83
|
+
tools: Array<{
|
|
84
|
+
name: string;
|
|
85
|
+
description: string;
|
|
86
|
+
inputSchema: object;
|
|
87
|
+
}>;
|
|
88
|
+
sourceRepo?: string;
|
|
89
|
+
envVars?: Record<string, string>;
|
|
90
|
+
rateLimit?: Partial<RateLimitConfig>;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export interface DeployResponse {
|
|
94
|
+
success: boolean;
|
|
95
|
+
server?: DeployedServer;
|
|
96
|
+
error?: string;
|
|
97
|
+
endpoint?: string;
|
|
98
|
+
apiKey?: string; // Only returned on creation
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export interface ServerListResponse {
|
|
102
|
+
servers: DeployedServer[];
|
|
103
|
+
total: number;
|
|
104
|
+
hasMore: boolean;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// MCP Protocol Types for HTTP/SSE transport
|
|
108
|
+
export interface McpRequest {
|
|
109
|
+
jsonrpc: '2.0';
|
|
110
|
+
id: string | number;
|
|
111
|
+
method: string;
|
|
112
|
+
params?: object;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
export interface McpResponse {
|
|
116
|
+
jsonrpc: '2.0';
|
|
117
|
+
id: string | number;
|
|
118
|
+
result?: object;
|
|
119
|
+
error?: {
|
|
120
|
+
code: number;
|
|
121
|
+
message: string;
|
|
122
|
+
data?: object;
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
export interface McpToolCallRequest {
|
|
127
|
+
name: string;
|
|
128
|
+
arguments: Record<string, unknown>;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
export interface McpToolCallResponse {
|
|
132
|
+
content: Array<{
|
|
133
|
+
type: 'text' | 'image' | 'resource';
|
|
134
|
+
text?: string;
|
|
135
|
+
data?: string;
|
|
136
|
+
mimeType?: string;
|
|
137
|
+
}>;
|
|
138
|
+
isError?: boolean;
|
|
139
|
+
}
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitHub to MCP Converter - Type Definitions
|
|
3
|
+
* @copyright 2024-2026 nirholas
|
|
4
|
+
* @license MIT
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
export interface Tool {
|
|
8
|
+
name: string;
|
|
9
|
+
description: string;
|
|
10
|
+
inputSchema: {
|
|
11
|
+
type: string;
|
|
12
|
+
properties?: Record<string, {
|
|
13
|
+
type: string;
|
|
14
|
+
description?: string;
|
|
15
|
+
enum?: string[];
|
|
16
|
+
default?: unknown;
|
|
17
|
+
}>;
|
|
18
|
+
required?: string[];
|
|
19
|
+
};
|
|
20
|
+
source: {
|
|
21
|
+
type: SourceType;
|
|
22
|
+
file: string;
|
|
23
|
+
line?: number;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export type SourceType =
|
|
28
|
+
| 'readme'
|
|
29
|
+
| 'code'
|
|
30
|
+
| 'openapi'
|
|
31
|
+
| 'graphql'
|
|
32
|
+
| 'mcp-introspect'
|
|
33
|
+
| 'universal'
|
|
34
|
+
| 'mcp-decorator'
|
|
35
|
+
| 'python-mcp';
|
|
36
|
+
|
|
37
|
+
export type RepoClassificationType =
|
|
38
|
+
| 'mcp-server'
|
|
39
|
+
| 'api-sdk'
|
|
40
|
+
| 'cli-tool'
|
|
41
|
+
| 'library'
|
|
42
|
+
| 'documentation'
|
|
43
|
+
| 'data'
|
|
44
|
+
| 'unknown';
|
|
45
|
+
|
|
46
|
+
export interface RepoClassification {
|
|
47
|
+
type: RepoClassificationType;
|
|
48
|
+
confidence: number;
|
|
49
|
+
indicators: string[];
|
|
50
|
+
metadata?: {
|
|
51
|
+
language?: string;
|
|
52
|
+
framework?: string;
|
|
53
|
+
hasOpenAPI?: boolean;
|
|
54
|
+
hasMcpManifest?: boolean;
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export interface ConversionResult {
|
|
59
|
+
name: string;
|
|
60
|
+
description: string;
|
|
61
|
+
version: string;
|
|
62
|
+
tools: Tool[];
|
|
63
|
+
sources: SourceBreakdown[];
|
|
64
|
+
classification: RepoClassification;
|
|
65
|
+
code: string;
|
|
66
|
+
pythonCode?: string;
|
|
67
|
+
claudeConfig: string;
|
|
68
|
+
cursorConfig: string;
|
|
69
|
+
claudePythonConfig?: string;
|
|
70
|
+
openaiConfig?: string;
|
|
71
|
+
stats: ConversionStats;
|
|
72
|
+
repository: RepositoryInfo;
|
|
73
|
+
generatedAt: string;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export interface SourceBreakdown {
|
|
77
|
+
type: SourceType;
|
|
78
|
+
count: number;
|
|
79
|
+
files: string[];
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export interface ConversionStats {
|
|
83
|
+
totalTools: number;
|
|
84
|
+
filesAnalyzed: number;
|
|
85
|
+
processingTimeMs: number;
|
|
86
|
+
cacheHit: boolean;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export interface RepositoryInfo {
|
|
90
|
+
owner: string;
|
|
91
|
+
name: string;
|
|
92
|
+
fullName: string;
|
|
93
|
+
url: string;
|
|
94
|
+
description?: string;
|
|
95
|
+
stars?: number;
|
|
96
|
+
language?: string;
|
|
97
|
+
topics?: string[];
|
|
98
|
+
lastUpdated?: string;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export interface ConversionRequest {
|
|
102
|
+
url: string;
|
|
103
|
+
options?: ConversionOptions;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export interface ConversionOptions {
|
|
107
|
+
includeUniversalTools?: boolean;
|
|
108
|
+
maxTools?: number;
|
|
109
|
+
targetPlatform?: 'claude' | 'cursor' | 'openai' | 'all';
|
|
110
|
+
customName?: string;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
export interface ConversionHistory {
|
|
114
|
+
id: string;
|
|
115
|
+
url: string;
|
|
116
|
+
name: string;
|
|
117
|
+
toolCount: number;
|
|
118
|
+
classification: RepoClassificationType;
|
|
119
|
+
convertedAt: string;
|
|
120
|
+
result?: ConversionResult;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
export interface ApiError {
|
|
124
|
+
error: string;
|
|
125
|
+
code: string;
|
|
126
|
+
details?: string;
|
|
127
|
+
retryAfter?: number;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
export type ConversionStatus = 'idle' | 'loading' | 'success' | 'error';
|
|
131
|
+
|
|
132
|
+
// ===== Streaming Types =====
|
|
133
|
+
export interface StreamingEvent {
|
|
134
|
+
type: 'progress' | 'tool' | 'complete' | 'error';
|
|
135
|
+
data: StreamingProgressData | StreamingToolData | StreamingCompleteData | StreamingErrorData;
|
|
136
|
+
timestamp: string;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
export interface StreamingProgressData {
|
|
140
|
+
step: string;
|
|
141
|
+
description: string;
|
|
142
|
+
progress: number; // 0-100
|
|
143
|
+
details?: string;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
export interface StreamingToolData {
|
|
147
|
+
tool: Tool;
|
|
148
|
+
index: number;
|
|
149
|
+
total: number;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
export interface StreamingCompleteData {
|
|
153
|
+
result: ConversionResult;
|
|
154
|
+
totalTime: number;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
export interface StreamingErrorData {
|
|
158
|
+
error: string;
|
|
159
|
+
code: string;
|
|
160
|
+
details?: string;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
export type StreamingStatus = 'idle' | 'connecting' | 'streaming' | 'complete' | 'error';
|
|
164
|
+
|
|
165
|
+
// ===== Docker Types =====
|
|
166
|
+
export interface DockerConfig {
|
|
167
|
+
dockerfile: string;
|
|
168
|
+
dockerCompose: string;
|
|
169
|
+
envExample: string;
|
|
170
|
+
buildCommand: string;
|
|
171
|
+
runCommand: string;
|
|
172
|
+
serverName: string;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
export interface DockerExportOptions {
|
|
176
|
+
baseImage: string;
|
|
177
|
+
port: number;
|
|
178
|
+
exposePorts: number[];
|
|
179
|
+
envVars: Record<string, string>;
|
|
180
|
+
volumes: string[];
|
|
181
|
+
healthCheck: boolean;
|
|
182
|
+
multiStage: boolean;
|
|
183
|
+
runAsNonRoot: boolean;
|
|
184
|
+
labels: boolean;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
// ===== Batch Conversion Types =====
|
|
188
|
+
export interface BatchConversionItem {
|
|
189
|
+
id: string;
|
|
190
|
+
url: string;
|
|
191
|
+
status: 'pending' | 'converting' | 'success' | 'error';
|
|
192
|
+
result?: ConversionResult;
|
|
193
|
+
error?: ApiError;
|
|
194
|
+
progress?: number;
|
|
195
|
+
startedAt?: string;
|
|
196
|
+
completedAt?: string;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
export type BatchConversionState = 'idle' | 'running' | 'paused' | 'complete';
|
|
200
|
+
|
|
201
|
+
export interface BatchConversionStats {
|
|
202
|
+
items: BatchConversionItem[];
|
|
203
|
+
status: BatchConversionState;
|
|
204
|
+
totalCount: number;
|
|
205
|
+
completedCount: number;
|
|
206
|
+
errorCount: number;
|
|
207
|
+
startedAt?: string;
|
|
208
|
+
completedAt?: string;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
// ===== One-Click Install Types =====
|
|
212
|
+
export type InstallPlatform = 'macos' | 'windows' | 'linux' | 'docker';
|
|
213
|
+
|
|
214
|
+
export interface InstallInstructions {
|
|
215
|
+
platform: InstallPlatform;
|
|
216
|
+
title: string;
|
|
217
|
+
description: string;
|
|
218
|
+
prerequisites: string[];
|
|
219
|
+
steps: InstallStep[];
|
|
220
|
+
estimatedTime: string;
|
|
221
|
+
requirements?: string[];
|
|
222
|
+
notes?: string[];
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
export interface InstallStep {
|
|
226
|
+
title: string;
|
|
227
|
+
description: string;
|
|
228
|
+
command: string;
|
|
229
|
+
isOptional: boolean;
|
|
230
|
+
warning?: string;
|
|
231
|
+
note?: string;
|
|
232
|
+
link?: string;
|
|
233
|
+
code?: string;
|
|
234
|
+
language?: string;
|
|
235
|
+
isManual?: boolean;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
export interface PlatformDetection {
|
|
239
|
+
os: InstallPlatform;
|
|
240
|
+
arch: 'x64' | 'arm64';
|
|
241
|
+
nodeVersion?: string;
|
|
242
|
+
npmVersion?: string;
|
|
243
|
+
hasDocker?: boolean;
|
|
244
|
+
hasPython?: boolean;
|
|
245
|
+
pythonVersion?: string;
|
|
246
|
+
}
|
|
247
|
+
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://openapi.vercel.sh/vercel.json",
|
|
3
|
+
"buildCommand": "cd ../.. && pip install -q -r mkdocs/python-deps.txt && cd mkdocs && python -m mkdocs build --site-dir ../apps/web/public/docs && cd ../apps/web && pnpm run build:packages && pnpm build",
|
|
4
|
+
"installCommand": "cd ../.. && pnpm install",
|
|
5
|
+
"framework": "nextjs",
|
|
6
|
+
"outputDirectory": ".next",
|
|
7
|
+
"headers": [
|
|
8
|
+
{
|
|
9
|
+
"source": "/docs/:path*",
|
|
10
|
+
"headers": [
|
|
11
|
+
{
|
|
12
|
+
"key": "Cache-Control",
|
|
13
|
+
"value": "public, max-age=3600, stale-while-revalidate=86400"
|
|
14
|
+
}
|
|
15
|
+
]
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"source": "/api/edge",
|
|
19
|
+
"headers": [
|
|
20
|
+
{
|
|
21
|
+
"key": "Cache-Control",
|
|
22
|
+
"value": "public, s-maxage=60, stale-while-revalidate=300"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"key": "Access-Control-Allow-Origin",
|
|
26
|
+
"value": "*"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"key": "Access-Control-Allow-Methods",
|
|
30
|
+
"value": "GET, POST, OPTIONS"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"key": "Access-Control-Allow-Headers",
|
|
34
|
+
"value": "Content-Type, Authorization"
|
|
35
|
+
}
|
|
36
|
+
]
|
|
37
|
+
}
|
|
38
|
+
]
|
|
39
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import js from '@eslint/js';
|
|
2
|
+
import tseslint from 'typescript-eslint';
|
|
3
|
+
|
|
4
|
+
export default tseslint.config(
|
|
5
|
+
js.configs.recommended,
|
|
6
|
+
...tseslint.configs.recommended,
|
|
7
|
+
{
|
|
8
|
+
ignores: [
|
|
9
|
+
'**/dist/**',
|
|
10
|
+
'**/node_modules/**',
|
|
11
|
+
'**/.next/**',
|
|
12
|
+
'**/coverage/**',
|
|
13
|
+
'_archive/**',
|
|
14
|
+
],
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
rules: {
|
|
18
|
+
'@typescript-eslint/no-unused-vars': ['warn', { argsIgnorePattern: '^_' }],
|
|
19
|
+
'@typescript-eslint/no-explicit-any': 'warn',
|
|
20
|
+
'@typescript-eslint/no-require-imports': 'off',
|
|
21
|
+
},
|
|
22
|
+
}
|
|
23
|
+
);
|
package/llms.txt
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# GitHub to MCP
|
|
2
|
+
|
|
3
|
+
> Convert any GitHub repository into an MCP server for AI assistants
|
|
4
|
+
|
|
5
|
+
## Summary
|
|
6
|
+
|
|
7
|
+
GitHub to MCP is a tool that automatically generates Model Context Protocol (MCP) servers from GitHub repositories. It enables AI assistants like Claude, ChatGPT, Cursor, and Cline to interact with any codebase through standardized tools.
|
|
8
|
+
|
|
9
|
+
## What This Project Does
|
|
10
|
+
|
|
11
|
+
- Takes a GitHub repository URL as input
|
|
12
|
+
- Analyzes the repository structure and content
|
|
13
|
+
- Extracts tools from OpenAPI specs, GraphQL schemas, Python decorators, and documentation
|
|
14
|
+
- Generates a complete MCP server (TypeScript or Python) with all dependencies
|
|
15
|
+
- Provides universal tools: read_file, list_files, search_code, get_readme
|
|
16
|
+
|
|
17
|
+
## Key Concepts
|
|
18
|
+
|
|
19
|
+
**MCP (Model Context Protocol)**: An open standard by Anthropic that allows AI models to securely connect to external tools and data sources.
|
|
20
|
+
|
|
21
|
+
**MCP Server**: A program that exposes tools to AI assistants. Tools are functions the AI can call to read files, query APIs, execute commands, etc.
|
|
22
|
+
|
|
23
|
+
**Tool Extraction**: The process of analyzing code and documentation to automatically identify functions that should become MCP tools.
|
|
24
|
+
|
|
25
|
+
## Usage
|
|
26
|
+
|
|
27
|
+
### Web UI
|
|
28
|
+
Visit https://github-to-mcp.vercel.app and paste any GitHub URL.
|
|
29
|
+
|
|
30
|
+
### CLI
|
|
31
|
+
```bash
|
|
32
|
+
npx @nirholas/github-to-mcp https://github.com/owner/repo
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### Programmatic
|
|
36
|
+
```typescript
|
|
37
|
+
import { generateFromGithub } from '@nirholas/github-to-mcp';
|
|
38
|
+
const result = await generateFromGithub('https://github.com/owner/repo');
|
|
39
|
+
await result.save('./output');
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Project Structure
|
|
43
|
+
|
|
44
|
+
- `packages/core/` - Main conversion engine (npm: @nirholas/github-to-mcp)
|
|
45
|
+
- `packages/openapi-parser/` - OpenAPI and GraphQL parsing
|
|
46
|
+
- `apps/web/` - Next.js web interface
|
|
47
|
+
- `apps/docs/` - Documentation site
|
|
48
|
+
|
|
49
|
+
## Key Files
|
|
50
|
+
|
|
51
|
+
- `packages/core/src/index.ts` - Main API exports
|
|
52
|
+
- `packages/core/src/github-client.ts` - GitHub API interaction
|
|
53
|
+
- `packages/core/src/code-extractor.ts` - Extract tools from Python/TypeScript code
|
|
54
|
+
- `packages/core/src/readme-extractor.ts` - Extract tools from documentation
|
|
55
|
+
- `packages/openapi-parser/src/parser.ts` - OpenAPI spec parsing
|
|
56
|
+
|
|
57
|
+
## Supported Extraction Sources
|
|
58
|
+
|
|
59
|
+
1. **OpenAPI/Swagger specs** - REST API endpoints become tools
|
|
60
|
+
2. **GraphQL schemas** - Queries and mutations become tools
|
|
61
|
+
3. **Python code** - Functions with `@mcp.tool` decorators
|
|
62
|
+
4. **TypeScript code** - `server.tool()` registrations
|
|
63
|
+
5. **README documentation** - Command and function patterns
|
|
64
|
+
|
|
65
|
+
## API Reference
|
|
66
|
+
|
|
67
|
+
### generateFromGithub(url: string, options?: Options)
|
|
68
|
+
|
|
69
|
+
Main function to convert a repository.
|
|
70
|
+
|
|
71
|
+
**Parameters:**
|
|
72
|
+
- `url` - GitHub repository URL
|
|
73
|
+
- `options.token` - GitHub token for private repos
|
|
74
|
+
- `options.outputFormat` - 'typescript' or 'python'
|
|
75
|
+
|
|
76
|
+
**Returns:**
|
|
77
|
+
- `tools` - Array of extracted tools
|
|
78
|
+
- `classification` - Detected repo type
|
|
79
|
+
- `save(path)` - Save generated server to disk
|
|
80
|
+
- `generate()` - Get generated code as string
|
|
81
|
+
|
|
82
|
+
## Common Tasks
|
|
83
|
+
|
|
84
|
+
### Give an AI access to a codebase
|
|
85
|
+
1. Run: `npx @nirholas/github-to-mcp https://github.com/owner/repo`
|
|
86
|
+
2. Add the generated server to Claude Desktop config
|
|
87
|
+
3. The AI can now read files and search code
|
|
88
|
+
|
|
89
|
+
### Convert a REST API to MCP tools
|
|
90
|
+
1. Find a repo with an OpenAPI/Swagger spec
|
|
91
|
+
2. Run the converter - API endpoints become callable tools
|
|
92
|
+
3. AI assistants can now query the API
|
|
93
|
+
|
|
94
|
+
### Access private repositories
|
|
95
|
+
Set GITHUB_TOKEN environment variable with a token that has repo access.
|
|
96
|
+
|
|
97
|
+
## Links
|
|
98
|
+
|
|
99
|
+
- Website: https://github-to-mcp.vercel.app
|
|
100
|
+
- npm: https://www.npmjs.com/package/@nirholas/github-to-mcp
|
|
101
|
+
- GitHub: https://github.com/nirholas/github-to-mcp
|
|
102
|
+
- MCP Protocol: https://modelcontextprotocol.io
|