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
package/README.md
ADDED
|
@@ -0,0 +1,1028 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="apps/web/public/logo.svg" alt="GitHub to MCP" width="120" height="120" />
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<h1 align="center">GitHub to MCP</h1>
|
|
6
|
+
|
|
7
|
+
<p align="center">
|
|
8
|
+
<strong>Convert any GitHub repository into an MCP server in seconds</strong>
|
|
9
|
+
</p>
|
|
10
|
+
|
|
11
|
+
<p align="center">
|
|
12
|
+
Give Claude, ChatGPT, Cursor, Windsurf, Cline, and any AI assistant instant access to any codebase.
|
|
13
|
+
</p>
|
|
14
|
+
|
|
15
|
+
<p align="center">
|
|
16
|
+
<a href="https://opensource.org/licenses/Apache-2.0"><img src="https://img.shields.io/badge/License-Apache%202.0-blue.svg" alt="License" /></a>
|
|
17
|
+
<a href="https://www.npmjs.com/package/@nirholas/github-to-mcp"><img src="https://img.shields.io/npm/v/@nirholas/github-to-mcp.svg" alt="npm version" /></a>
|
|
18
|
+
<a href="https://github.com/nirholas/github-to-mcp/stargazers"><img src="https://img.shields.io/github/stars/nirholas/github-to-mcp.svg?style=social" alt="GitHub Stars" /></a>
|
|
19
|
+
</p>
|
|
20
|
+
|
|
21
|
+
<p align="center">
|
|
22
|
+
<a href="https://github-to-mcp.vercel.app">🌐 Web App</a> •
|
|
23
|
+
<a href="#-quick-start">🚀 Quick Start</a> •
|
|
24
|
+
<a href="#-features">✨ Features</a> •
|
|
25
|
+
<a href="https://docs-github-to-mcp.vercel.app">📖 Docs</a>
|
|
26
|
+
</p>
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## 📋 Table of Contents
|
|
31
|
+
|
|
32
|
+
- [Introduction](#-introduction)
|
|
33
|
+
- [What is MCP](#-what-is-mcp)
|
|
34
|
+
- [Quick Start](#-quick-start)
|
|
35
|
+
- [Features](#-features)
|
|
36
|
+
- [Installation](#-installation)
|
|
37
|
+
- [Usage](#-usage)
|
|
38
|
+
- [How It Works](#-how-it-works)
|
|
39
|
+
- [Generated Tools](#-generated-tools)
|
|
40
|
+
- [Configuration](#%EF%B8%8F-configuration)
|
|
41
|
+
- [Integrating with AI Assistants](#-integrating-with-ai-assistants)
|
|
42
|
+
- [Interactive Playground](#-interactive-playground)
|
|
43
|
+
- [Project Structure](#-project-structure)
|
|
44
|
+
- [Development](#-development)
|
|
45
|
+
- [Architecture Overview](#-architecture-overview)
|
|
46
|
+
- [Supported Input Formats](#-supported-input-formats)
|
|
47
|
+
- [Output Formats](#-output-formats)
|
|
48
|
+
- [Limitations](#%EF%B8%8F-limitations)
|
|
49
|
+
- [Troubleshooting](#-troubleshooting)
|
|
50
|
+
- [Contributing](#-contributing)
|
|
51
|
+
- [License](#-license)
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## 📖 Introduction
|
|
56
|
+
|
|
57
|
+
GitHub to MCP bridges the gap between code repositories and AI assistants. Instead of manually describing APIs or copying code snippets into chat windows, this tool generates a standardized interface that allows AI systems to programmatically explore, read, and interact with any GitHub repository.
|
|
58
|
+
|
|
59
|
+
The generated MCP servers provide tools that AI assistants can invoke to read files, search code, list directory structures, and call API endpoints discovered within the repository. This enables AI assistants to have deep, structured access to codebases without requiring manual context management.
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
63
|
+
│ GitHub Repository │
|
|
64
|
+
└─────────────────────────────────────────────────────────────┘
|
|
65
|
+
↓
|
|
66
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
67
|
+
│ 1. Fetch & Classify → Detect repo type (API/CLI/Lib) │
|
|
68
|
+
│ 2. Extract Tools → OpenAPI, GraphQL, Code, README │
|
|
69
|
+
│ 3. Generate Server → TypeScript or Python MCP server │
|
|
70
|
+
│ 4. Bundle Output → Complete package with dependencies │
|
|
71
|
+
└─────────────────────────────────────────────────────────────┘
|
|
72
|
+
↓
|
|
73
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
74
|
+
│ Ready-to-use MCP Server + Config │
|
|
75
|
+
└─────────────────────────────────────────────────────────────┘
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## 🔌 What is MCP
|
|
81
|
+
|
|
82
|
+
The **Model Context Protocol (MCP)** is an open standard developed by Anthropic that defines how AI assistants communicate with external tools and data sources. MCP servers expose "tools" that AI models can invoke, along with "resources" that provide context and "prompts" that guide interactions.
|
|
83
|
+
|
|
84
|
+
When you connect an MCP server to an AI assistant like Claude Desktop, the assistant gains the ability to call the tools defined by that server. For example, a GitHub MCP server might expose tools like `read_file`, `search_code`, or `list_pull_requests`, which the AI can invoke to gather information needed to answer questions or complete tasks.
|
|
85
|
+
|
|
86
|
+
This project generates MCP servers from GitHub repositories, automatically creating tools based on the repository's contents, APIs, and documentation.
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## 🚀 Quick Start
|
|
91
|
+
|
|
92
|
+
### 🌐 Web UI (Easiest)
|
|
93
|
+
|
|
94
|
+
Visit **[github-to-mcp.vercel.app](https://github-to-mcp.vercel.app)** — Paste any GitHub URL, click Generate, download your MCP server.
|
|
95
|
+
|
|
96
|
+
### 💻 CLI (One Command)
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
npx @nirholas/github-to-mcp https://github.com/stripe/stripe-node
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### 📦 Programmatic (For Automation)
|
|
103
|
+
|
|
104
|
+
```typescript
|
|
105
|
+
import { generateFromGithub } from '@nirholas/github-to-mcp';
|
|
106
|
+
|
|
107
|
+
const result = await generateFromGithub('https://github.com/stripe/stripe-node');
|
|
108
|
+
console.log(`Generated ${result.tools.length} tools`);
|
|
109
|
+
await result.save('./my-mcp-server');
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## ✨ Features
|
|
115
|
+
|
|
116
|
+
<table>
|
|
117
|
+
<tr>
|
|
118
|
+
<td width="50%">
|
|
119
|
+
|
|
120
|
+
### 🔬 Repository Analysis
|
|
121
|
+
- Automatic repository type classification (API, library, CLI tool, MCP server, documentation)
|
|
122
|
+
- Detection and parsing of OpenAPI/Swagger specifications
|
|
123
|
+
- GraphQL schema extraction and query/mutation tool generation
|
|
124
|
+
- gRPC/Protobuf service definition parsing
|
|
125
|
+
- AsyncAPI specification support for event-driven APIs
|
|
126
|
+
- Source code analysis for function extraction
|
|
127
|
+
|
|
128
|
+
</td>
|
|
129
|
+
<td width="50%">
|
|
130
|
+
|
|
131
|
+
### 🌍 Multi-Language Support
|
|
132
|
+
|
|
133
|
+
**Input repositories:**
|
|
134
|
+
- TypeScript and JavaScript
|
|
135
|
+
- Python
|
|
136
|
+
- Go
|
|
137
|
+
- Java and Kotlin
|
|
138
|
+
- Rust
|
|
139
|
+
- Ruby
|
|
140
|
+
- C# and F#
|
|
141
|
+
|
|
142
|
+
**Output MCP servers:**
|
|
143
|
+
- TypeScript (using the official MCP SDK)
|
|
144
|
+
- Python (using the MCP Python SDK)
|
|
145
|
+
- Go (using community MCP libraries)
|
|
146
|
+
|
|
147
|
+
</td>
|
|
148
|
+
</tr>
|
|
149
|
+
<tr>
|
|
150
|
+
<td width="50%">
|
|
151
|
+
|
|
152
|
+
### 🔧 Tool Extraction
|
|
153
|
+
- OpenAPI endpoints become callable tools with typed parameters
|
|
154
|
+
- GraphQL queries and mutations become tools with input validation
|
|
155
|
+
- Python functions decorated with `@mcp.tool` are preserved
|
|
156
|
+
- CLI commands documented in READMEs become executable tools
|
|
157
|
+
- HTTP route handlers from popular frameworks are detected
|
|
158
|
+
|
|
159
|
+
</td>
|
|
160
|
+
<td width="50%">
|
|
161
|
+
|
|
162
|
+
### ⚡ Code Generation
|
|
163
|
+
- Complete, runnable MCP server code with all dependencies
|
|
164
|
+
- Configuration files for Claude Desktop, Cursor, and other clients
|
|
165
|
+
- Docker deployment templates
|
|
166
|
+
- TypeScript type definitions for all generated tools
|
|
167
|
+
|
|
168
|
+
</td>
|
|
169
|
+
</tr>
|
|
170
|
+
</table>
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
## 📥 Installation
|
|
175
|
+
|
|
176
|
+
### From Source
|
|
177
|
+
|
|
178
|
+
Clone the repository and install dependencies:
|
|
179
|
+
|
|
180
|
+
```bash
|
|
181
|
+
git clone https://github.com/nirholas/github-to-mcp.git
|
|
182
|
+
cd github-to-mcp
|
|
183
|
+
pnpm install
|
|
184
|
+
pnpm build
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
### Using the Web Interface
|
|
188
|
+
|
|
189
|
+
The web application is deployed at **[github-to-mcp.vercel.app](https://github-to-mcp.vercel.app)**. Use the browser-based interface without any local installation.
|
|
190
|
+
|
|
191
|
+
---
|
|
192
|
+
|
|
193
|
+
## 📖 Usage
|
|
194
|
+
|
|
195
|
+
### 🌐 Web Interface
|
|
196
|
+
|
|
197
|
+
The web interface provides the simplest way to convert repositories:
|
|
198
|
+
|
|
199
|
+
1. Navigate to the web application
|
|
200
|
+
2. Enter a GitHub repository URL (e.g., `https://github.com/owner/repo`)
|
|
201
|
+
3. Optionally configure extraction options
|
|
202
|
+
4. Click "Generate" to analyze the repository
|
|
203
|
+
5. Review the generated tools and code
|
|
204
|
+
6. Download the MCP server package or copy the configuration
|
|
205
|
+
|
|
206
|
+
The web interface also provides an interactive playground where you can test generated tools before downloading.
|
|
207
|
+
|
|
208
|
+
### 💻 Command Line Interface
|
|
209
|
+
|
|
210
|
+
After building the project locally, you can use the CLI:
|
|
211
|
+
|
|
212
|
+
```bash
|
|
213
|
+
# Basic usage
|
|
214
|
+
node packages/core/dist/cli.mjs https://github.com/owner/repo
|
|
215
|
+
|
|
216
|
+
# Specify output directory
|
|
217
|
+
node packages/core/dist/cli.mjs https://github.com/owner/repo --output ./my-mcp-server
|
|
218
|
+
|
|
219
|
+
# Generate Python instead of TypeScript
|
|
220
|
+
node packages/core/dist/cli.mjs https://github.com/owner/repo --language python
|
|
221
|
+
|
|
222
|
+
# Include only specific extraction sources
|
|
223
|
+
node packages/core/dist/cli.mjs https://github.com/owner/repo --sources openapi,readme
|
|
224
|
+
|
|
225
|
+
# Use a GitHub token for private repos or higher rate limits
|
|
226
|
+
GITHUB_TOKEN=ghp_xxx node packages/core/dist/cli.mjs https://github.com/owner/repo
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
### 📦 Programmatic API
|
|
230
|
+
|
|
231
|
+
Import the generator in your own TypeScript or JavaScript code:
|
|
232
|
+
|
|
233
|
+
```typescript
|
|
234
|
+
import { GithubToMcpGenerator } from '@nirholas/github-to-mcp';
|
|
235
|
+
|
|
236
|
+
const generator = new GithubToMcpGenerator({
|
|
237
|
+
githubToken: process.env.GITHUB_TOKEN,
|
|
238
|
+
sources: ['openapi', 'readme', 'code'],
|
|
239
|
+
outputLanguage: 'typescript'
|
|
240
|
+
});
|
|
241
|
+
|
|
242
|
+
const result = await generator.generate('https://github.com/owner/repo');
|
|
243
|
+
|
|
244
|
+
console.log(`Repository: ${result.name}`);
|
|
245
|
+
console.log(`Classification: ${result.classification.type}`);
|
|
246
|
+
console.log(`Generated ${result.tools.length} tools`);
|
|
247
|
+
|
|
248
|
+
// Access the generated code
|
|
249
|
+
console.log(result.code);
|
|
250
|
+
|
|
251
|
+
// Save to disk
|
|
252
|
+
await result.save('./output-directory');
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
<details>
|
|
256
|
+
<summary><strong>📋 Generator Options Interface</strong></summary>
|
|
257
|
+
|
|
258
|
+
```typescript
|
|
259
|
+
interface GithubToMcpOptions {
|
|
260
|
+
// GitHub personal access token for API authentication
|
|
261
|
+
githubToken?: string;
|
|
262
|
+
|
|
263
|
+
// Which sources to extract tools from
|
|
264
|
+
// Default: ['openapi', 'readme', 'code', 'graphql', 'mcp']
|
|
265
|
+
sources?: Array<'openapi' | 'readme' | 'code' | 'graphql' | 'grpc' | 'mcp'>;
|
|
266
|
+
|
|
267
|
+
// Output language for generated server
|
|
268
|
+
// Default: 'typescript'
|
|
269
|
+
outputLanguage?: 'typescript' | 'python' | 'go';
|
|
270
|
+
|
|
271
|
+
// Include universal tools (read_file, list_files, etc.)
|
|
272
|
+
// Default: true
|
|
273
|
+
includeUniversalTools?: boolean;
|
|
274
|
+
|
|
275
|
+
// Maximum number of tools to generate
|
|
276
|
+
// Default: 100
|
|
277
|
+
maxTools?: number;
|
|
278
|
+
|
|
279
|
+
// Specific branch to analyze
|
|
280
|
+
// Default: repository's default branch
|
|
281
|
+
branch?: string;
|
|
282
|
+
}
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
</details>
|
|
286
|
+
|
|
287
|
+
---
|
|
288
|
+
|
|
289
|
+
## ⚙️ How It Works
|
|
290
|
+
|
|
291
|
+
The conversion process follows these stages:
|
|
292
|
+
|
|
293
|
+
### 🏷️ Repository Classification
|
|
294
|
+
|
|
295
|
+
The generator first analyzes the repository to determine its type and structure:
|
|
296
|
+
|
|
297
|
+
1. Fetch repository metadata from the GitHub API
|
|
298
|
+
2. Download and parse the README file
|
|
299
|
+
3. Examine package.json, setup.py, go.mod, or other manifest files
|
|
300
|
+
4. Scan for API specification files (openapi.json, schema.graphql, etc.)
|
|
301
|
+
5. Classify the repository as one of:
|
|
302
|
+
|
|
303
|
+
| Classification | Description |
|
|
304
|
+
|----------------|-------------|
|
|
305
|
+
| `mcp-server` | An existing MCP server implementation |
|
|
306
|
+
| `api-sdk` | A client library for an API |
|
|
307
|
+
| `cli-tool` | A command-line application |
|
|
308
|
+
| `library` | A general-purpose code library |
|
|
309
|
+
| `documentation` | Primarily documentation content |
|
|
310
|
+
| `data` | Data files or datasets |
|
|
311
|
+
| `unknown` | Unclassified repository |
|
|
312
|
+
|
|
313
|
+
Classification influences which extraction strategies are prioritized and how tools are named.
|
|
314
|
+
|
|
315
|
+
### 🔍 Tool Extraction
|
|
316
|
+
|
|
317
|
+
Tools are extracted from multiple sources within the repository:
|
|
318
|
+
|
|
319
|
+
<details>
|
|
320
|
+
<summary><strong>📄 OpenAPI/Swagger Extraction</strong></summary>
|
|
321
|
+
|
|
322
|
+
When an OpenAPI specification is found:
|
|
323
|
+
1. Parse the specification (JSON or YAML, v2 or v3)
|
|
324
|
+
2. Extract each endpoint as a potential tool
|
|
325
|
+
3. Convert path parameters, query parameters, and request bodies to tool input schemas
|
|
326
|
+
4. Generate descriptions from operation summaries and descriptions
|
|
327
|
+
5. Map HTTP methods to appropriate tool semantics
|
|
328
|
+
|
|
329
|
+
</details>
|
|
330
|
+
|
|
331
|
+
<details>
|
|
332
|
+
<summary><strong>🔷 GraphQL Extraction</strong></summary>
|
|
333
|
+
|
|
334
|
+
When GraphQL schemas are found:
|
|
335
|
+
1. Parse .graphql or .gql schema files
|
|
336
|
+
2. Extract Query type fields as read-only tools
|
|
337
|
+
3. Extract Mutation type fields as write tools
|
|
338
|
+
4. Convert GraphQL input types to JSON Schema for tool inputs
|
|
339
|
+
5. Handle nested types and custom scalars
|
|
340
|
+
|
|
341
|
+
</details>
|
|
342
|
+
|
|
343
|
+
<details>
|
|
344
|
+
<summary><strong>📖 README Extraction</strong></summary>
|
|
345
|
+
|
|
346
|
+
The README is analyzed for:
|
|
347
|
+
1. Code blocks showing CLI usage patterns
|
|
348
|
+
2. API endpoint examples with curl or fetch
|
|
349
|
+
3. Function call examples with parameters
|
|
350
|
+
4. Installation and usage instructions
|
|
351
|
+
|
|
352
|
+
Extracted examples become tools with inferred parameter schemas.
|
|
353
|
+
|
|
354
|
+
</details>
|
|
355
|
+
|
|
356
|
+
<details>
|
|
357
|
+
<summary><strong>💻 Source Code Extraction</strong></summary>
|
|
358
|
+
|
|
359
|
+
For supported languages, the source code is analyzed:
|
|
360
|
+
1. **Python**: Functions decorated with `@mcp.tool`, `@server.tool`, or similar
|
|
361
|
+
2. **TypeScript**: Exported functions with JSDoc annotations
|
|
362
|
+
3. **Go**: HTTP handlers from Gin, Echo, Chi, Fiber, or Gorilla Mux
|
|
363
|
+
4. **Java/Kotlin**: Methods annotated with `@GetMapping`, `@PostMapping`, etc.
|
|
364
|
+
5. **Rust**: Route handlers from Actix-web, Axum, or Rocket
|
|
365
|
+
|
|
366
|
+
</details>
|
|
367
|
+
|
|
368
|
+
<details>
|
|
369
|
+
<summary><strong>🔌 MCP Server Introspection</strong></summary>
|
|
370
|
+
|
|
371
|
+
If the repository is already an MCP server:
|
|
372
|
+
1. Detect `server.tool()` definitions
|
|
373
|
+
2. Extract tool names, descriptions, and schemas
|
|
374
|
+
3. Preserve existing tool implementations where possible
|
|
375
|
+
|
|
376
|
+
</details>
|
|
377
|
+
|
|
378
|
+
### 🏗️ Code Generation
|
|
379
|
+
|
|
380
|
+
After tools are extracted, the generator produces:
|
|
381
|
+
|
|
382
|
+
1. A main server file implementing the MCP protocol
|
|
383
|
+
2. Tool handler functions for each extracted tool
|
|
384
|
+
3. Type definitions for all input and output schemas
|
|
385
|
+
4. A package.json or equivalent with required dependencies
|
|
386
|
+
5. Configuration files for popular MCP clients
|
|
387
|
+
6. Optional Docker deployment files
|
|
388
|
+
|
|
389
|
+
The generated code is complete and runnable without modification.
|
|
390
|
+
|
|
391
|
+
---
|
|
392
|
+
|
|
393
|
+
## 🛠️ Generated Tools
|
|
394
|
+
|
|
395
|
+
### 🌐 Universal Tools
|
|
396
|
+
|
|
397
|
+
Every generated MCP server includes these baseline tools for repository exploration:
|
|
398
|
+
|
|
399
|
+
| Tool | Description | Parameters |
|
|
400
|
+
|------|-------------|------------|
|
|
401
|
+
| `get_readme` | Retrieve the repository's README content | None |
|
|
402
|
+
| `list_files` | List files and directories at a given path | `path` (optional, defaults to root) |
|
|
403
|
+
| `read_file` | Read the contents of a specific file | `path` (required) |
|
|
404
|
+
| `search_code` | Search for patterns across the repository | `query` (required), `path` (optional) |
|
|
405
|
+
|
|
406
|
+
These tools ensure that even if no APIs or functions are detected, the AI assistant can still explore and understand the repository.
|
|
407
|
+
|
|
408
|
+
### 🔧 Extracted Tools
|
|
409
|
+
|
|
410
|
+
Additional tools are generated based on repository contents:
|
|
411
|
+
|
|
412
|
+
#### From OpenAPI Specifications
|
|
413
|
+
|
|
414
|
+
Each API endpoint becomes a tool:
|
|
415
|
+
|
|
416
|
+
```
|
|
417
|
+
POST /users → create_user(name: string, email: string)
|
|
418
|
+
GET /users/{id} → get_user(id: string)
|
|
419
|
+
PUT /users/{id} → update_user(id: string, name?: string, email?: string)
|
|
420
|
+
DELETE /users/{id} → delete_user(id: string)
|
|
421
|
+
GET /users → list_users(page?: number, limit?: number)
|
|
422
|
+
```
|
|
423
|
+
|
|
424
|
+
#### From GraphQL Schemas
|
|
425
|
+
|
|
426
|
+
Queries and mutations become tools:
|
|
427
|
+
|
|
428
|
+
```graphql
|
|
429
|
+
type Query {
|
|
430
|
+
user(id: ID!): User → get_user(id: string)
|
|
431
|
+
users(first: Int): [User] → list_users(first?: number)
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
type Mutation {
|
|
435
|
+
createUser(input: CreateUserInput!): User → create_user(input: object)
|
|
436
|
+
}
|
|
437
|
+
```
|
|
438
|
+
|
|
439
|
+
#### From Python Code
|
|
440
|
+
|
|
441
|
+
```python
|
|
442
|
+
@server.tool()
|
|
443
|
+
async def analyze_sentiment(text: str) -> str:
|
|
444
|
+
"""Analyze the sentiment of the given text."""
|
|
445
|
+
# Implementation
|
|
446
|
+
```
|
|
447
|
+
|
|
448
|
+
Becomes: `analyze_sentiment(text: string)` → "Analyze the sentiment of the given text."
|
|
449
|
+
|
|
450
|
+
#### From README Examples
|
|
451
|
+
|
|
452
|
+
CLI commands documented in READMEs:
|
|
453
|
+
|
|
454
|
+
```bash
|
|
455
|
+
# Create a new project
|
|
456
|
+
mycli create --name myproject --template typescript
|
|
457
|
+
```
|
|
458
|
+
|
|
459
|
+
Becomes: `mycli_create(name: string, template?: string)`
|
|
460
|
+
|
|
461
|
+
---
|
|
462
|
+
|
|
463
|
+
## ⚙️ Configuration
|
|
464
|
+
|
|
465
|
+
### 🔐 Environment Variables
|
|
466
|
+
|
|
467
|
+
| Variable | Description | Required |
|
|
468
|
+
|----------|-------------|----------|
|
|
469
|
+
| `GITHUB_TOKEN` | GitHub personal access token for API access | No (but recommended) |
|
|
470
|
+
| `GITHUB_API_URL` | Custom GitHub API URL for Enterprise | No |
|
|
471
|
+
|
|
472
|
+
#### GitHub Token
|
|
473
|
+
|
|
474
|
+
Without a token, GitHub API requests are limited to **60 per hour**. With a token, the limit increases to **5,000 per hour**. For private repositories, a token with appropriate access is required.
|
|
475
|
+
|
|
476
|
+
Create a token at: https://github.com/settings/tokens
|
|
477
|
+
|
|
478
|
+
**Required scopes:**
|
|
479
|
+
- `repo` (for private repositories)
|
|
480
|
+
- `public_repo` (for public repositories only)
|
|
481
|
+
|
|
482
|
+
### 🎛️ Generator Options
|
|
483
|
+
|
|
484
|
+
When using the programmatic API, you can configure:
|
|
485
|
+
|
|
486
|
+
```typescript
|
|
487
|
+
const generator = new GithubToMcpGenerator({
|
|
488
|
+
// Authentication
|
|
489
|
+
githubToken: process.env.GITHUB_TOKEN,
|
|
490
|
+
|
|
491
|
+
// Extraction sources to enable
|
|
492
|
+
sources: ['openapi', 'readme', 'code', 'graphql', 'grpc', 'mcp'],
|
|
493
|
+
|
|
494
|
+
// Output configuration
|
|
495
|
+
outputLanguage: 'typescript', // or 'python', 'go'
|
|
496
|
+
|
|
497
|
+
// Tool filtering
|
|
498
|
+
includeUniversalTools: true,
|
|
499
|
+
maxTools: 100,
|
|
500
|
+
|
|
501
|
+
// Repository options
|
|
502
|
+
branch: 'main', // specific branch to analyze
|
|
503
|
+
});
|
|
504
|
+
```
|
|
505
|
+
|
|
506
|
+
---
|
|
507
|
+
|
|
508
|
+
## 🤖 Integrating with AI Assistants
|
|
509
|
+
|
|
510
|
+
### <img src="https://claude.ai/favicon.ico" width="16" height="16" /> Claude Desktop
|
|
511
|
+
|
|
512
|
+
Add the generated server to your Claude Desktop configuration:
|
|
513
|
+
|
|
514
|
+
| Platform | Config Path |
|
|
515
|
+
|----------|-------------|
|
|
516
|
+
| **macOS** | `~/Library/Application Support/Claude/claude_desktop_config.json` |
|
|
517
|
+
| **Windows** | `%APPDATA%\Claude\claude_desktop_config.json` |
|
|
518
|
+
|
|
519
|
+
```json
|
|
520
|
+
{
|
|
521
|
+
"mcpServers": {
|
|
522
|
+
"my-repo": {
|
|
523
|
+
"command": "node",
|
|
524
|
+
"args": ["/absolute/path/to/generated/server.mjs"],
|
|
525
|
+
"env": {
|
|
526
|
+
"GITHUB_TOKEN": "ghp_xxxx"
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
```
|
|
532
|
+
|
|
533
|
+
> ⚠️ Restart Claude Desktop after modifying the configuration.
|
|
534
|
+
|
|
535
|
+
### <img src="https://cursor.sh/favicon.ico" width="16" height="16" /> Cursor
|
|
536
|
+
|
|
537
|
+
Cursor supports MCP servers through its settings. Add the server path in Cursor's MCP configuration panel, or edit the configuration file directly:
|
|
538
|
+
|
|
539
|
+
```json
|
|
540
|
+
{
|
|
541
|
+
"mcp": {
|
|
542
|
+
"servers": {
|
|
543
|
+
"my-repo": {
|
|
544
|
+
"command": "node",
|
|
545
|
+
"args": ["/path/to/server.mjs"]
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
}
|
|
550
|
+
```
|
|
551
|
+
|
|
552
|
+
### 💻 VS Code with Continue
|
|
553
|
+
|
|
554
|
+
If using the Continue extension for VS Code:
|
|
555
|
+
|
|
556
|
+
```json
|
|
557
|
+
{
|
|
558
|
+
"models": [...],
|
|
559
|
+
"mcpServers": {
|
|
560
|
+
"my-repo": {
|
|
561
|
+
"command": "node",
|
|
562
|
+
"args": ["/path/to/server.mjs"]
|
|
563
|
+
}
|
|
564
|
+
}
|
|
565
|
+
}
|
|
566
|
+
```
|
|
567
|
+
|
|
568
|
+
### 🔌 Other MCP Clients
|
|
569
|
+
|
|
570
|
+
Any MCP-compatible client can use the generated servers. The server communicates over stdio by default, accepting JSON-RPC messages on stdin and responding on stdout.
|
|
571
|
+
|
|
572
|
+
To run manually:
|
|
573
|
+
|
|
574
|
+
```bash
|
|
575
|
+
node server.mjs
|
|
576
|
+
```
|
|
577
|
+
|
|
578
|
+
The server will wait for MCP protocol messages on stdin.
|
|
579
|
+
|
|
580
|
+
---
|
|
581
|
+
|
|
582
|
+
## 🎮 Interactive Playground
|
|
583
|
+
|
|
584
|
+
The web application includes an interactive playground for testing generated tools:
|
|
585
|
+
|
|
586
|
+
1. After generating tools from a repository, click **"Open in Playground"**
|
|
587
|
+
2. Select a tool from the list
|
|
588
|
+
3. Fill in the required parameters
|
|
589
|
+
4. Click **"Execute"** to run the tool
|
|
590
|
+
5. View the JSON response
|
|
591
|
+
|
|
592
|
+
The playground executes tools in a sandboxed environment and displays results in real-time.
|
|
593
|
+
|
|
594
|
+
### 🔗 Sharing Playground Sessions
|
|
595
|
+
|
|
596
|
+
You can share your generated tools with others:
|
|
597
|
+
|
|
598
|
+
| Parameter | Description |
|
|
599
|
+
|-----------|-------------|
|
|
600
|
+
| `?code=<base64>` | Base64-encoded TypeScript server code |
|
|
601
|
+
| `?gist=<id>` | GitHub Gist ID containing server code |
|
|
602
|
+
| `?name=<name>` | Display name for the server |
|
|
603
|
+
|
|
604
|
+
**Example:**
|
|
605
|
+
```
|
|
606
|
+
https://github-to-mcp.vercel.app/playground?gist=abc123&name=My%20API
|
|
607
|
+
```
|
|
608
|
+
|
|
609
|
+
---
|
|
610
|
+
|
|
611
|
+
## 📁 Project Structure
|
|
612
|
+
|
|
613
|
+
```
|
|
614
|
+
github-to-mcp/
|
|
615
|
+
├── 📂 apps/
|
|
616
|
+
│ ├── 📂 web/ # Next.js web application
|
|
617
|
+
│ │ ├── 📂 app/ # Next.js App Router pages
|
|
618
|
+
│ │ │ ├── 📂 api/ # API routes for conversion
|
|
619
|
+
│ │ │ ├── 📂 convert/ # Conversion page
|
|
620
|
+
│ │ │ ├── 📂 playground/ # Interactive playground
|
|
621
|
+
│ │ │ └── 📂 dashboard/ # User dashboard
|
|
622
|
+
│ │ ├── 📂 components/ # React components
|
|
623
|
+
│ │ ├── 📂 hooks/ # Custom React hooks
|
|
624
|
+
│ │ ├── 📂 lib/ # Utility functions
|
|
625
|
+
│ │ └── 📂 types/ # TypeScript type definitions
|
|
626
|
+
│ └── 📂 vscode/ # VS Code extension (in development)
|
|
627
|
+
│
|
|
628
|
+
├── 📂 packages/
|
|
629
|
+
│ ├── 📂 core/ # Main conversion engine
|
|
630
|
+
│ │ └── 📂 src/
|
|
631
|
+
│ │ ├── index.ts # GithubToMcpGenerator class
|
|
632
|
+
│ │ ├── github-client.ts # GitHub API client
|
|
633
|
+
│ │ ├── readme-extractor.ts # README parsing
|
|
634
|
+
│ │ ├── code-extractor.ts # Source code analysis
|
|
635
|
+
│ │ ├── graphql-extractor.ts # GraphQL schema parsing
|
|
636
|
+
│ │ ├── mcp-introspector.ts # Existing MCP server detection
|
|
637
|
+
│ │ ├── python-generator.ts # Python output generation
|
|
638
|
+
│ │ ├── go-generator.ts # Go output generation
|
|
639
|
+
│ │ └── types.ts # Type definitions
|
|
640
|
+
│ │
|
|
641
|
+
│ ├── 📂 openapi-parser/ # OpenAPI specification parser
|
|
642
|
+
│ │ └── 📂 src/
|
|
643
|
+
│ │ ├── parser.ts # OpenAPI parsing logic
|
|
644
|
+
│ │ ├── analyzer.ts # Endpoint analysis
|
|
645
|
+
│ │ ├── transformer.ts # Schema transformation
|
|
646
|
+
│ │ └── generator.ts # Tool generation
|
|
647
|
+
│ │
|
|
648
|
+
│ ├── 📂 mcp-server/ # MCP server utilities
|
|
649
|
+
│ │ └── 📂 src/
|
|
650
|
+
│ │ ├── server.ts # Base MCP server implementation
|
|
651
|
+
│ │ └── tools.ts # Tool registration helpers
|
|
652
|
+
│ │
|
|
653
|
+
│ └── 📂 registry/ # Tool registry management
|
|
654
|
+
│ └── 📂 src/
|
|
655
|
+
│ └── index.ts # Registry operations
|
|
656
|
+
│
|
|
657
|
+
├── 📂 mkdocs/ # Documentation site (MkDocs)
|
|
658
|
+
│ ├── 📂 docs/ # Markdown documentation
|
|
659
|
+
│ └── mkdocs.yml # MkDocs configuration
|
|
660
|
+
│
|
|
661
|
+
├── 📂 tests/ # Integration tests
|
|
662
|
+
│ ├── 📂 fixtures/ # Test fixture repositories
|
|
663
|
+
│ │ ├── 📂 express-app/ # Express.js test app
|
|
664
|
+
│ │ ├── 📂 fastapi-app/ # FastAPI test app
|
|
665
|
+
│ │ ├── 📂 graphql/ # GraphQL test schemas
|
|
666
|
+
│ │ └── 📂 openapi/ # OpenAPI test specs
|
|
667
|
+
│ └── 📂 integration/ # Integration test files
|
|
668
|
+
│
|
|
669
|
+
├── 📂 templates/ # Code generation templates
|
|
670
|
+
│ ├── Dockerfile.python.template
|
|
671
|
+
│ └── Dockerfile.typescript.template
|
|
672
|
+
│
|
|
673
|
+
├── package.json # Root package configuration
|
|
674
|
+
├── pnpm-workspace.yaml # pnpm workspace configuration
|
|
675
|
+
├── tsconfig.json # TypeScript configuration
|
|
676
|
+
└── vitest.config.ts # Test configuration
|
|
677
|
+
```
|
|
678
|
+
|
|
679
|
+
---
|
|
680
|
+
|
|
681
|
+
## 🔨 Development
|
|
682
|
+
|
|
683
|
+
### Prerequisites
|
|
684
|
+
|
|
685
|
+
| Requirement | Version |
|
|
686
|
+
|-------------|---------|
|
|
687
|
+
| Node.js | 22.x or later |
|
|
688
|
+
| pnpm | 10.x or later |
|
|
689
|
+
| Git | 2.x or later |
|
|
690
|
+
|
|
691
|
+
### Local Setup
|
|
692
|
+
|
|
693
|
+
```bash
|
|
694
|
+
# Clone the repository
|
|
695
|
+
git clone https://github.com/nirholas/github-to-mcp.git
|
|
696
|
+
cd github-to-mcp
|
|
697
|
+
|
|
698
|
+
# Install dependencies
|
|
699
|
+
pnpm install
|
|
700
|
+
|
|
701
|
+
# Build all packages
|
|
702
|
+
pnpm build
|
|
703
|
+
|
|
704
|
+
# Start the development server
|
|
705
|
+
pnpm dev
|
|
706
|
+
```
|
|
707
|
+
|
|
708
|
+
The web application will be available at `http://localhost:3000`.
|
|
709
|
+
|
|
710
|
+
### Building
|
|
711
|
+
|
|
712
|
+
```bash
|
|
713
|
+
# Build all packages
|
|
714
|
+
pnpm build
|
|
715
|
+
|
|
716
|
+
# Build specific package
|
|
717
|
+
pnpm --filter @nirholas/github-to-mcp build
|
|
718
|
+
pnpm --filter @github-to-mcp/openapi-parser build
|
|
719
|
+
pnpm --filter web build
|
|
720
|
+
```
|
|
721
|
+
|
|
722
|
+
### Testing
|
|
723
|
+
|
|
724
|
+
```bash
|
|
725
|
+
# Run all tests
|
|
726
|
+
pnpm test
|
|
727
|
+
|
|
728
|
+
# Run tests in watch mode
|
|
729
|
+
pnpm test:watch
|
|
730
|
+
|
|
731
|
+
# Run tests with coverage
|
|
732
|
+
pnpm test:coverage
|
|
733
|
+
|
|
734
|
+
# Run specific test file
|
|
735
|
+
pnpm test -- tests/integration/openapi-conversion.test.ts
|
|
736
|
+
```
|
|
737
|
+
|
|
738
|
+
### Code Quality
|
|
739
|
+
|
|
740
|
+
```bash
|
|
741
|
+
# Run linting
|
|
742
|
+
pnpm lint
|
|
743
|
+
|
|
744
|
+
# Type checking
|
|
745
|
+
pnpm typecheck
|
|
746
|
+
```
|
|
747
|
+
|
|
748
|
+
---
|
|
749
|
+
|
|
750
|
+
## 🏗️ Architecture Overview
|
|
751
|
+
|
|
752
|
+
The system follows a pipeline architecture:
|
|
753
|
+
|
|
754
|
+
```
|
|
755
|
+
Input (GitHub URL)
|
|
756
|
+
│
|
|
757
|
+
▼
|
|
758
|
+
┌──────────────────┐
|
|
759
|
+
│ GitHub Client │ Fetches repository metadata, files, and README
|
|
760
|
+
└──────────────────┘
|
|
761
|
+
│
|
|
762
|
+
▼
|
|
763
|
+
┌──────────────────┐
|
|
764
|
+
│ Classifier │ Determines repository type and structure
|
|
765
|
+
└──────────────────┘
|
|
766
|
+
│
|
|
767
|
+
▼
|
|
768
|
+
┌──────────────────┐
|
|
769
|
+
│ Extractors │ Multiple extractors run in parallel:
|
|
770
|
+
│ ├─ OpenAPI │ • Parse API specifications
|
|
771
|
+
│ ├─ GraphQL │ • Parse GraphQL schemas
|
|
772
|
+
│ ├─ README │ • Extract examples from documentation
|
|
773
|
+
│ ├─ Code │ • Analyze source code
|
|
774
|
+
│ └─ MCP │ • Detect existing MCP tools
|
|
775
|
+
└──────────────────┘
|
|
776
|
+
│
|
|
777
|
+
▼
|
|
778
|
+
┌──────────────────┐
|
|
779
|
+
│ Deduplicator │ Removes duplicate tools, merges similar ones
|
|
780
|
+
└──────────────────┘
|
|
781
|
+
│
|
|
782
|
+
▼
|
|
783
|
+
┌──────────────────┐
|
|
784
|
+
│ Validator │ Validates tool schemas, adds confidence scores
|
|
785
|
+
└──────────────────┘
|
|
786
|
+
│
|
|
787
|
+
▼
|
|
788
|
+
┌──────────────────┐
|
|
789
|
+
│ Generator │ Produces output code in target language
|
|
790
|
+
└──────────────────┘
|
|
791
|
+
│
|
|
792
|
+
▼
|
|
793
|
+
Output (MCP Server Code + Configuration)
|
|
794
|
+
```
|
|
795
|
+
|
|
796
|
+
Each extractor produces a list of `ExtractedTool` objects with a standardized schema. The deduplicator and validator ensure consistency before the generator produces the final output.
|
|
797
|
+
|
|
798
|
+
---
|
|
799
|
+
|
|
800
|
+
## 📥 Supported Input Formats
|
|
801
|
+
|
|
802
|
+
### API Specifications
|
|
803
|
+
|
|
804
|
+
| Format | File Patterns | Version Support |
|
|
805
|
+
|--------|---------------|-----------------|
|
|
806
|
+
| **OpenAPI** | `openapi.json`, `openapi.yaml`, `swagger.json`, `swagger.yaml`, `api.json`, `api.yaml` | 2.0, 3.0.x, 3.1.x |
|
|
807
|
+
| **GraphQL** | `schema.graphql`, `*.gql`, `schema.json` | June 2018 spec |
|
|
808
|
+
| **gRPC** | `*.proto` | proto3 |
|
|
809
|
+
| **AsyncAPI** | `asyncapi.json`, `asyncapi.yaml` | 2.x |
|
|
810
|
+
|
|
811
|
+
### Source Code Languages
|
|
812
|
+
|
|
813
|
+
| Language | Framework Detection |
|
|
814
|
+
|----------|---------------------|
|
|
815
|
+
| **TypeScript/JavaScript** | Express, Fastify, Hono, Next.js API routes |
|
|
816
|
+
| **Python** | FastAPI, Flask, Django REST, MCP SDK decorators |
|
|
817
|
+
| **Go** | Gin, Echo, Chi, Fiber, Gorilla Mux |
|
|
818
|
+
| **Java** | Spring Boot, JAX-RS, Micronaut |
|
|
819
|
+
| **Kotlin** | Ktor, Spring Boot |
|
|
820
|
+
| **Rust** | Actix-web, Axum, Rocket |
|
|
821
|
+
| **Ruby** | Rails, Sinatra, Grape |
|
|
822
|
+
|
|
823
|
+
---
|
|
824
|
+
|
|
825
|
+
## 📤 Output Formats
|
|
826
|
+
|
|
827
|
+
### TypeScript Server
|
|
828
|
+
|
|
829
|
+
The default output is a TypeScript MCP server using the official `@modelcontextprotocol/sdk` package:
|
|
830
|
+
|
|
831
|
+
```typescript
|
|
832
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
833
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
834
|
+
|
|
835
|
+
const server = new Server({
|
|
836
|
+
name: 'generated-server',
|
|
837
|
+
version: '1.0.0',
|
|
838
|
+
}, {
|
|
839
|
+
capabilities: {
|
|
840
|
+
tools: {},
|
|
841
|
+
},
|
|
842
|
+
});
|
|
843
|
+
|
|
844
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
845
|
+
tools: [/* generated tools */],
|
|
846
|
+
}));
|
|
847
|
+
|
|
848
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
849
|
+
// Tool dispatch logic
|
|
850
|
+
});
|
|
851
|
+
|
|
852
|
+
const transport = new StdioServerTransport();
|
|
853
|
+
await server.connect(transport);
|
|
854
|
+
```
|
|
855
|
+
|
|
856
|
+
### Python Server
|
|
857
|
+
|
|
858
|
+
Python output uses the MCP Python SDK:
|
|
859
|
+
|
|
860
|
+
```python
|
|
861
|
+
from mcp.server import Server
|
|
862
|
+
from mcp.server.stdio import stdio_server
|
|
863
|
+
|
|
864
|
+
server = Server("generated-server")
|
|
865
|
+
|
|
866
|
+
@server.tool()
|
|
867
|
+
async def example_tool(param: str) -> str:
|
|
868
|
+
"""Tool description."""
|
|
869
|
+
# Implementation
|
|
870
|
+
|
|
871
|
+
async def main():
|
|
872
|
+
async with stdio_server() as (read_stream, write_stream):
|
|
873
|
+
await server.run(read_stream, write_stream)
|
|
874
|
+
|
|
875
|
+
if __name__ == "__main__":
|
|
876
|
+
import asyncio
|
|
877
|
+
asyncio.run(main())
|
|
878
|
+
```
|
|
879
|
+
|
|
880
|
+
### Configuration Files
|
|
881
|
+
|
|
882
|
+
Each generated server includes:
|
|
883
|
+
|
|
884
|
+
| File | Description |
|
|
885
|
+
|------|-------------|
|
|
886
|
+
| `claude_desktop_config.json` | Claude Desktop configuration snippet |
|
|
887
|
+
| `cursor_config.json` | Cursor editor configuration |
|
|
888
|
+
| `package.json` or `requirements.txt` | Dependencies |
|
|
889
|
+
| `Dockerfile` (optional) | Container deployment |
|
|
890
|
+
|
|
891
|
+
---
|
|
892
|
+
|
|
893
|
+
## ⚠️ Limitations
|
|
894
|
+
|
|
895
|
+
<details>
|
|
896
|
+
<summary><strong>🔄 GitHub API Rate Limits</strong></summary>
|
|
897
|
+
|
|
898
|
+
- Unauthenticated requests: **60 per hour**
|
|
899
|
+
- Authenticated requests: **5,000 per hour**
|
|
900
|
+
- Large repositories may require multiple API calls
|
|
901
|
+
|
|
902
|
+
Provide a `GITHUB_TOKEN` to increase rate limits.
|
|
903
|
+
|
|
904
|
+
</details>
|
|
905
|
+
|
|
906
|
+
<details>
|
|
907
|
+
<summary><strong>📦 Repository Size</strong></summary>
|
|
908
|
+
|
|
909
|
+
- Very large repositories (>1GB) may time out during analysis
|
|
910
|
+
- Repositories with thousands of files may hit API limits
|
|
911
|
+
- Consider analyzing specific subdirectories for monorepos
|
|
912
|
+
|
|
913
|
+
</details>
|
|
914
|
+
|
|
915
|
+
<details>
|
|
916
|
+
<summary><strong>🎯 Tool Extraction Accuracy</strong></summary>
|
|
917
|
+
|
|
918
|
+
- OpenAPI specs produce the most accurate tools
|
|
919
|
+
- README extraction relies on consistent documentation formatting
|
|
920
|
+
- Source code analysis may miss dynamically defined routes
|
|
921
|
+
- Confidence scores indicate extraction reliability
|
|
922
|
+
|
|
923
|
+
</details>
|
|
924
|
+
|
|
925
|
+
<details>
|
|
926
|
+
<summary><strong>🌍 Language Support</strong></summary>
|
|
927
|
+
|
|
928
|
+
- TypeScript output is the most mature
|
|
929
|
+
- Python output is functional but may require minor edits
|
|
930
|
+
- Go output is experimental
|
|
931
|
+
|
|
932
|
+
</details>
|
|
933
|
+
|
|
934
|
+
---
|
|
935
|
+
|
|
936
|
+
## 🔧 Troubleshooting
|
|
937
|
+
|
|
938
|
+
<details>
|
|
939
|
+
<summary><strong>❌ "Rate limit exceeded" errors</strong></summary>
|
|
940
|
+
|
|
941
|
+
Provide a GitHub token:
|
|
942
|
+
```bash
|
|
943
|
+
export GITHUB_TOKEN=ghp_xxxxxxxxxxxx
|
|
944
|
+
```
|
|
945
|
+
|
|
946
|
+
</details>
|
|
947
|
+
|
|
948
|
+
<details>
|
|
949
|
+
<summary><strong>❌ "Repository not found" errors</strong></summary>
|
|
950
|
+
|
|
951
|
+
- Verify the URL is correct
|
|
952
|
+
- For private repositories, ensure your token has `repo` scope
|
|
953
|
+
- Check that the repository exists and is accessible
|
|
954
|
+
|
|
955
|
+
</details>
|
|
956
|
+
|
|
957
|
+
<details>
|
|
958
|
+
<summary><strong>❌ "No tools extracted" results</strong></summary>
|
|
959
|
+
|
|
960
|
+
- Verify the repository contains API definitions or documented endpoints
|
|
961
|
+
- Try enabling all extraction sources: `--sources openapi,readme,code,graphql,mcp`
|
|
962
|
+
- Check that specification files follow standard naming conventions
|
|
963
|
+
|
|
964
|
+
</details>
|
|
965
|
+
|
|
966
|
+
<details>
|
|
967
|
+
<summary><strong>❌ Generated server fails to start</strong></summary>
|
|
968
|
+
|
|
969
|
+
- Ensure Node.js 22+ is installed
|
|
970
|
+
- Run `npm install` in the generated directory
|
|
971
|
+
- Check for TypeScript compilation errors with `npx tsc --noEmit`
|
|
972
|
+
|
|
973
|
+
</details>
|
|
974
|
+
|
|
975
|
+
<details>
|
|
976
|
+
<summary><strong>❌ Claude Desktop does not show the server</strong></summary>
|
|
977
|
+
|
|
978
|
+
- Verify the path in `claude_desktop_config.json` is absolute
|
|
979
|
+
- Restart Claude Desktop after configuration changes
|
|
980
|
+
- Check Claude Desktop logs for connection errors
|
|
981
|
+
|
|
982
|
+
</details>
|
|
983
|
+
|
|
984
|
+
---
|
|
985
|
+
|
|
986
|
+
## 🤝 Contributing
|
|
987
|
+
|
|
988
|
+
Contributions are welcome! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for detailed guidelines on:
|
|
989
|
+
|
|
990
|
+
- Setting up the development environment
|
|
991
|
+
- Code style and formatting requirements
|
|
992
|
+
- Testing requirements
|
|
993
|
+
- Pull request process
|
|
994
|
+
|
|
995
|
+
### 🐛 Reporting Issues
|
|
996
|
+
|
|
997
|
+
When reporting issues, please include:
|
|
998
|
+
|
|
999
|
+
- Repository URL that caused the issue (if public)
|
|
1000
|
+
- Error messages or unexpected behavior
|
|
1001
|
+
- Node.js and pnpm versions
|
|
1002
|
+
- Operating system
|
|
1003
|
+
|
|
1004
|
+
---
|
|
1005
|
+
|
|
1006
|
+
## 📄 License
|
|
1007
|
+
|
|
1008
|
+
Apache 2.0. See [LICENSE](LICENSE) for details.
|
|
1009
|
+
|
|
1010
|
+
---
|
|
1011
|
+
|
|
1012
|
+
## 🔗 Links
|
|
1013
|
+
|
|
1014
|
+
| Resource | URL |
|
|
1015
|
+
|----------|-----|
|
|
1016
|
+
| 📖 Documentation | [docs-github-to-mcp.vercel.app](https://docs-github-to-mcp.vercel.app) |
|
|
1017
|
+
| 🌐 Web App | [github-to-mcp.vercel.app](https://github-to-mcp.vercel.app) |
|
|
1018
|
+
| 📦 npm Package | [npmjs.com/package/@nirholas/github-to-mcp](https://www.npmjs.com/package/@nirholas/github-to-mcp) |
|
|
1019
|
+
| 🔗 MCP Specification | [modelcontextprotocol.io](https://modelcontextprotocol.io) |
|
|
1020
|
+
| 📘 MCP TypeScript SDK | [github.com/modelcontextprotocol/typescript-sdk](https://github.com/modelcontextprotocol/typescript-sdk) |
|
|
1021
|
+
| 🐍 MCP Python SDK | [github.com/modelcontextprotocol/python-sdk](https://github.com/modelcontextprotocol/python-sdk) |
|
|
1022
|
+
| 💬 Discussions | [github.com/nirholas/github-to-mcp/discussions](https://github.com/nirholas/github-to-mcp/discussions) |
|
|
1023
|
+
|
|
1024
|
+
---
|
|
1025
|
+
|
|
1026
|
+
<p align="center">
|
|
1027
|
+
Built by <a href="https://x.com/nichxbt">nich</a>
|
|
1028
|
+
</p>
|