Automatic MCP Discovery

by nirholas

Not rated
GitHub

About

AI powered automation toolkit which acts as an agent that discovers MCP servers for you. Point it at GitHub/npm/configure your own discovery, let GPT or Claude analyze the API or MCP or any tool, get ready-to-ship plugin configs. Zero manual work.

Details

Author
nirholas
Categories
Web Scraping, AI, Other, Automation, API

Setup

Install Automatic MCP Discovery in your MCP client (Claude Desktop, Cursor, Windsurf, and others).

Repository: https://github.com/nirholas/lyra-tool-discovery

Follow the installation instructions in the repository README, then restart your MCP client.

AI-powered tool discovery for the MCP ecosystem

Documentation·CLI Reference·Examples·Contributing

Lyra Tool Discoveryis an AI-powered automation tool designed specifically for thecrypto, DeFi, blockchain, and web3 ecosystem. It solves the painful problem of manually discovering, evaluating, and integrating MCP (Model Context Protocol) servers into your crypto-focused applications. Instead of spending hours searching GitHub, reading READMEs, and figuring out the right integration approach, Lyra does it for you in seconds.

The tool crawls multiple sources—GitHub and npm—to find crypto-related MCP servers, APIs, and plugins. It filters results to focus exclusively onblockchain, DeFi, web3, and cryptocurrency tooling(including Ethereum, Solana, Bitcoin, wallets, tokens, NFTs, DEXs, staking, bridges, and more). Lyra then leverages state-of-the-art AI (OpenAI GPT-4o or Anthropic Claude) to analyze each discovered tool and automatically generates ready-to-use plugin configurations.

Lyra is optimized for discovering tools related to:

- Blockchain Networks— Ethereum, Solana, Bitcoin, Layer 2s, bridges
- DeFi Protocols— DEXs, lending, staking, yield farming, liquidity
- Web3 Infrastructure— Wallets, RPC providers, indexers, oracles
- Token Standards— ERC-20, ERC-721, NFTs, token swaps
- Smart Contracts— Development, auditing, deployment tools
- On-chain Data— Analytics, explorers, transaction tracking

Lyra is built forcrypto MCP ecosystem developerswho need to rapidly onboard new tools,plugin marketplace operatorslike plugin.delivery who curate crypto plugins, andautomation engineersbuilding CI/CD pipelines for DeFi tool discovery and deployment.

This tool is a critical piece of the discovery-to-deployment pipeline:lyra-tool-discoverygithub-to-mcpplugin.deliverySperaxOS users. By automating the discovery and classification phase, Lyra enables fully automated plugin onboarding with minimal human intervention.

- OpenAI— GPT-4o, GPT-4-turbo, GPT-3.5-turbo
- Anthropic— Claude Sonnet 4, Claude Opus
- Auto-detection from environment variables
- Custom model selection via CLI or config
- Intelligent fallback between providers

- mcp-http— Remote MCP servers (HTTP/SSE)
- mcp-stdio— Local MCP servers (stdio)
- openapi— REST API integrations
- standalone— Full React applications
- markdown— Rich text/documentation
- default— Configurable plugins
- settings— User preference plugins
- basic— Simple function plugins

- GitHub— Search repos, topics, READMEs
- npm— Package registry search
- 🔜 Smithery (MCP directory)
- 🔜 OpenAPI Directory
- 🔜 RapidAPI

-

Keywords— crypto, defi, blockchain, web3

Protocols— wallet, token, nft, dex, staking

Age Filter— Only repos updated within 12 months

Smart Validation— AI validates crypto relevance

- Full-featured command-line interface
- Node.js/TypeScript SDK for automation
- JSON output for CI/CD pipelines
- Dry-run mode for testing
- Progress indicators and rich output

- --dry-runmode for safe testing
- List discovered tools without AI calls
- Validate configurations before deployment
- Debug logging for troubleshooting

- Structured JSON for piping to other tools
- Quick Import format for SperaxOS
- Plugin manifests for plugin.delivery
- Console output with rich formatting

Lyra automatically filters discovery results to focus on crypto/DeFi/blockchain/web3 tools. The following keywords are used for both search queries and result validation:

Tools that don't match any of these keywords are automatically filtered out, ensuring you only discover crypto-relevant MCP servers.

By default, Lyra only discovers tools that have been updated within thelast 12 months. This ensures you're finding actively maintained projects. Use--max-ageto adjust:

# Only tools updated in the last 6 months lyra-discover discover --max-age 6 # Only tools updated in the last 3 months (bleeding edge) lyra-discover discover --max-age 3 # Tools up to 24 months old lyra-discover discover --max-age 24
# Global install (recommended for CLI usage) pnpm add -g @nirholas/lyra-tool-discovery # Or with npm npm install -g @nirholas/lyra-tool-discovery # Or as a project dependency pnpm add @nirholas/lyra-tool-discovery # Or run directly with npx (no install) npx @nirholas/lyra-tool-discovery discover --help
# Using OpenAI (default when both keys present) export OPENAI_API_KEY="sk-..." # Or using Anthropic export ANTHROPIC_API_KEY="sk-ant-..." # Optional: Force a specific provider export AI_PROVIDER="anthropic" # or "openai" # Optional: Specify a model export AI_MODEL="claude-sonnet-4-20250514" # Optional: GitHub token for higher rate limits export GITHUB_TOKEN="ghp_..."
# Discover MCP servers from GitHub and npm lyra-discover discover --sources github,npm --limit 10 # Run in dry-run mode (no AI calls) lyra-discover discover --dry-run --limit 20 # Analyze a specific GitHub repository lyra-discover analyze-repo anthropics claude-mcp # Analyze an npm package lyra-discover analyze-npm @modelcontextprotocol/server-github # Check available AI providers lyra-discover providers # View all plugin templates lyra-discover templates

Search for MCP tools and APIs across configured sources.

# Discover crypto MCP tools from GitHub only, limit 10 results lyra-discover discover --sources github --limit 10 # Find tools updated in the last 6 months only lyra-discover discover --max-age 6 --limit 20 # Dry run to preview what would be analyzed lyra-discover discover --dry-run --sources npm --limit 20 # Use Anthropic Claude for analysis lyra-discover discover --provider anthropic --model claude-sonnet-4-20250514 # Use OpenAI GPT-4o for analysis lyra-discover discover --provider openai --model gpt-4o
🔍 Discovering crypto/DeFi/web3 tools from: github, npm 📅 Max age: 12 months Found 5 from github Found 3 from npm 📊 Total discovered: 8 tools 🪙 Crypto-related: 6 tools 🔌 MCP-compatible: 5 tools 🤖 Analyzing: mcp-server-ethereum... Template: mcp-stdio Reasoning: Has MCP SDK dependency and bin entry for local execution ✅ Analyzed 5 tools 📦 Generated Configs: --- mcp-server-ethereum --- Template: mcp-stdio Config: { "identifier": "mcp-server-ethereum", "customParams": { "mcp": { "type": "stdio", "command": "npx", "args": ["-y", "mcp-server-ethereum"] } } }
lyra-discover analyze-repo <owner> <repo> [options]
# Analyze the official MCP GitHub server lyra-discover analyze-repo modelcontextprotocol servers # Analyze with specific model lyra-discover analyze-repo anthropics claude-mcp --model gpt-4o # Analyze a community MCP server lyra-discover analyze-repo punkpeye mcp-server-obsidian
🔍 Fetching modelcontextprotocol/servers... 🤖 Analyzing... ✅ Analysis complete: Template: mcp-stdio Reasoning: Repository contains multiple MCP servers with bin entries, using @modelcontextprotocol/sdk 📋 Quick Import JSON: { "mcpServers": { "github": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-github"] } } }
lyra-discover analyze-npm <package> [options]
# Analyze official MCP server packages lyra-discover analyze-npm @modelcontextprotocol/server-github lyra-discover analyze-npm @modelcontextprotocol/server-filesystem lyra-discover analyze-npm @modelcontextprotocol/server-slack # Analyze community packages lyra-discover analyze-npm mcp-server-sqlite

Show available AI providers based on configured environment variables.

🤖 AI Provider Configuration Available providers (based on env vars): ✅ openai ✅ anthropic Override with env vars or CLI flags: AI_PROVIDER=openai|anthropic AI_MODEL=gpt-4o|claude-sonnet-4-20250514|etc. --provider openai --model gpt-4o
🤖 AI Provider Configuration Available providers (based on env vars): ⚠️ No API keys found! Set one of these environment variables: - OPENAI_API_KEY → Use OpenAI (gpt-4o, gpt-4-turbo, etc.) - ANTHROPIC_API_KEY → Use Anthropic (claude-sonnet-4-20250514, etc.)

Display all available plugin templates with descriptions.

╔═══════════════════════════════════════════════════════════════════════════════╗ ║ plugin.delivery Plugin Templates ║ ╠════════════╦════════════╦═══════════════════════════════════════════════════════╣ ║ Template ║ Type ║ Description ║ Use Case ║ ╠════════════╬════════════╬═══════════════════════════════╬════════════════════╣ ║ basic ║ Default ║ Standard plugin with API ║ Simple data lookups║ ║ default ║ Default ║ Plugin with settings UI ║ Configurable tools ║ ║ markdown ║ Markdown ║ Rich text output ║ Formatted reports ║ ║ openapi ║ OpenAPI ║ Auto-generated from spec ║ Existing APIs ║ ║ settings ║ Default ║ Plugin with user preferences ║ Personalized tools ║ ║ standalone ║ Standalone ║ Full React application ║ Interactive UIs ║ ╠════════════╬════════════╬═══════════════════════════════╬════════════════════╣ ║ mcp-http ║ MCP ║ Streamable HTTP MCP server ║ Remote MCP tools ║ ║ mcp-stdio ║ MCP ║ STDIO-based MCP server ║ Local npm MCP ║ ╚════════════╩════════════╩═══════════════════════════════╩════════════════════╝

Use Lyra as a library in your Node.js/TypeScript projects:

import { ToolDiscovery, GitHubSource, NpmSource, AIAnalyzer } from '@nirholas/lyra-tool-discovery'; // Initialize with default settings (auto-detect AI provider) const discovery = new ToolDiscovery(); // Or with specific configuration const discovery = new ToolDiscovery({ provider: 'anthropic', model: 'claude-sonnet-4-20250514', apiKey: process.env.ANTHROPIC_API_KEY // Optional, uses env var by default }); // Discover from all sources const results = await discovery.discover({ sources: ['github', 'npm'], limit: 20, dryRun: false }); // Process results for (const result of results) { console.log(Tool: ${result.tool.name}); console.log(Template: ${result.decision.template}); console.log(Config:, result.generated.pluginConfig); } // Analyze a specific GitHub repo const repoResult = await discovery.analyzeGitHubRepo('owner', 'repo'); console.log(repoResult?.decision.template); // Analyze a specific npm package const npmResult = await discovery.analyzeNpmPackage('@scope/package-name'); console.log(npmResult?.decision.template);
import { GitHubSource, NpmSource, AIAnalyzer } from '@nirholas/lyra-tool-discovery'; // Use GitHub source directly const github = new GitHubSource(process.env.GITHUB_TOKEN); const mcpTools = await github.searchMCPServers(10); const openApiTools = await github.searchOpenAPISpecs(10); const specificRepo = await github.getRepo('owner', 'repo'); // Use npm source directly const npm = new NpmSource(); const npmTools = await npm.searchMCPServers(10); const specificPackage = await npm.getPackageAsTool('@modelcontextprotocol/server-github'); // Use AI analyzer directly const ai = new AIAnalyzer({ provider: 'openai', model: 'gpt-4o' }); const decision = await ai.analyzeAndDecide(discoveredTool); const quickImport = ai.generateQuickImport(decision);
import type { // Discovery types DiscoveredTool, DiscoveryResult, DiscoverySource, // Template types PluginTemplate, TemplateDecision, // MCP types MCPConnection, MCPHttpConnection, MCPStdioConnection, MCPAuthConfig, // Plugin types CustomPlugin, PluginManifest, PluginIndexEntry, MCPQuickImportConfig } from '@nirholas/lyra-tool-discovery';
┌─────────────────────────────────────────────────────────────────────────────┐ │ LYRA TOOL DISCOVERY │ ├─────────────────────────────────────────────────────────────────────────────┤ │ │ │ ┌────────────────┐ ┌────────────────┐ ┌────────────────────────┐ │ │ │ Sources │ │ AI Analyzer │ │ Template Engine │ │ │ ├────────────────┤ ├────────────────┤ ├────────────────────────┤ │ │ │ │ │ │ │ │ │ │ │ • GitHub API │────▶│ • OpenAI │────▶│ • basic │ │ │ │ - Repos │ │ - GPT-4o │ │ • default │ │ │ │ - Topics │ │ - GPT-4-turbo│ │ • markdown │ │ │ │ - READMEs │ │ │ │ • openapi │ │ │ │ │ │ • Anthropic │ │ • settings │ │ │ │ • npm Registry │ │ - Claude │ │ • standalone │ │ │ │ - Packages │ │ - Sonnet │ │ • mcp-http │ │ │ │ - Keywords │ │ - Opus │ │ • mcp-stdio │ │ │ │ │ │ │ │ │ │ │ └────────────────┘ └────────────────┘ └────────────────────────┘ │ │ │ │ │ │ │ │ │ │ │ │ ▼ ▼ ▼ │ │ ┌─────────────────────────────────────────────────────────────────────┐ │ │ │ Discovery Result │ │ │ ├─────────────────────────────────────────────────────────────────────┤ │ │ │ { │ │ │ │ tool: DiscoveredTool, // Source metadata │ │ │ │ decision: TemplateDecision, // AI analysis result │ │ │ │ generated: { │ │ │ │ pluginConfig: CustomPlugin | PluginIndexEntry │ │ │ │ } │ │ │ │ } │ │ │ └─────────────────────────────────────────────────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌───────────────────────────────┐ │ │ │ Output Formats │ │ │ ├───────────────────────────────┤ │ │ │ • JSON (for pipelines) │ │ │ │ • Quick Import (SperaxOS) │ │ │ │ • Plugin Manifests │ │ │ │ • Console (human-readable) │ │ │ └───────────────────────────────┘ │ └─────────────────────────────────────────────────────────────────────────────┘

Lyra analyzes tools and automatically selects from 8 plugin templates:

The AI follows this priority order when selecting templates:
- MCP Detection→ If tool uses@modelcontextprotocol/sdk:

- Has HTTP server →mcp-http
- Has bin entry →mcp-stdio

Lyra Tool Discovery is part of a larger automation toolchain for the SperaxOS ecosystem:

┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ │ │ │ │ │ │ │ │ lyra-discover │────▶│ github-to-mcp │────▶│ plugin.delivery │────▶│ SperaxOS │ │ │ │ │ │ │ │ │ │ Discovery & │ │ Conversion │ │ Marketplace │ │ End Users │ │ Analysis │ │ │ │ │ │ │ └─────────────────┘ └─────────────────┘ └─────────────────┘ └─────────────────┘

- Discovery(this tool) — Finds tools on GitHub/npm, analyzes with AI, generates configs
- Conversiongithub-to-mcpconverts repos to MCP servers
- Registry
plugin.deliveryhosts the plugin marketplace
- Consumption— SperaxOS users discover and install plugins

You can set up a GitHub Action to automate the entire pipeline:

# .github/workflows/discover-tools.yml name: Discover New Tools on: schedule: - cron: '0 0   *' # Daily at midnight workflow_dispatch: jobs: discover: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '20' - name: Install Lyra run: npm install -g @nirholas/lyra-tool-discovery - name: Discover new MCP servers env: OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | lyra-discover discover \ --sources github,npm \ --limit 50 \ > discovered-tools.json - name: Create PR with new tools uses: peter-evans/create-pull-request@v5 with: title: '🔮 New tools discovered by Lyra' body: 'Automated discovery run found new MCP servers and APIs.' branch: lyra/discovered-tools
{ "sources": { "github": { "enabled": true, "searchQueries": [ "mcp server in:name,description", "modelcontextprotocol in:readme", "@modelcontextprotocol in:readme" ], "minStars": 10 }, "npm": { "enabled": true, "keywords": ["mcp", "model-context-protocol", "mcp-server"], "scopes": ["@modelcontextprotocol"] } }, "ai": { "provider": "anthropic", "model": "claude-sonnet-4-20250514", "maxTokens": 4096 }, "output": { "format": "json", "path": "./data/discovered-tools.json", "includeMetadata": true }, "filters": { "requireMCPSupport": true, "requireLicense": true, "excludeArchived": true } }
# Discover tools and save to file lyra-discover discover --sources github,npm --limit 20 > tools.json # Parse with jq cat tools.json | jq '.[] | {name: .tool.name, template: .decision.template}'
# Create a list of repos to analyze repos=( "modelcontextprotocol/servers" "anthropics/claude-mcp" "punkpeye/mcp-server-obsidian" ) # Analyze each repo for repo in "${repos[@]}"; do owner=$(echo $repo | cut -d'/' -f1) name=$(echo $repo | cut -d'/' -f2) lyra-discover analyze-repo $owner $name echo "---" done
// scripts/analyze-packages.ts import { ToolDiscovery } from '@nirholas/lyra-tool-discovery'; const packages = [ '@modelcontextprotocol/server-github', '@modelcontextprotocol/server-filesystem', '@modelcontextprotocol/server-slack', ]; async function main() { const discovery = new ToolDiscovery({ provider: 'openai' }); for (const pkg of packages) { const result = await discovery.analyzeNpmPackage(pkg); if (result) { console.log(JSON.stringify({ package: pkg, template: result.decision.template, config: result.generated.pluginConfig }, null, 2)); } } } main();
import { AIAnalyzer, type DiscoveredTool } from '@nirholas/lyra-tool-discovery'; // Create a custom discovered tool const customTool: DiscoveredTool = { id: 'custom:my-tool', name: 'my-custom-mcp-server', description: 'A custom MCP server for my application', source: 'github', sourceUrl: 'https://github.com/myorg/my-tool', hasMCPSupport: true, hasNpmPackage: true, readme: '# My Tool\n\nAn MCP server that does X, Y, Z...', packageJson: { name: 'my-custom-mcp-server', bin: { 'my-mcp': './dist/cli.js' }, dependencies: { '@modelcontextprotocol/sdk': '^1.0.0' } } }; // Analyze with AI const ai = new AIAnalyzer({ provider: 'anthropic' }); const decision = await ai.analyzeAndDecide(customTool); console.log(Template: ${decision.template}); console.log(Reasoning: ${decision.reasoning});
# Discover in dry-run mode to see what would be analyzed lyra-discover discover --dry-run --sources github --limit 50 # Output: # [DRY RUN] Would analyze: mcp-server-github # Source: github # URL: https://github.com/modelcontextprotocol/servers # MCP: Yes # [DRY RUN] Would analyze: claude-mcp # Source: github # URL: https://github.com/anthropics/claude-mcp # MCP: Yes # ...

Example 6: Generate Quick Import for SperaxOS

import { ToolDiscovery } from '@nirholas/lyra-tool-discovery'; const discovery = new ToolDiscovery(); const result = await discovery.analyzeNpmPackage('@modelcontextprotocol/server-github'); // The quick import format can be directly pasted into SperaxOS console.log(Add this to your MCP configuration:); console.log(JSON.stringify({ mcpServers: { [result.tool.name]: result.decision.config.customParams?.mcp } }, null, 2));

We welcome contributions! Here's how to get started:

# Clone the repository git clone https://github.com/nirholas/lyra-tool-discovery.git cd lyra-tool-discovery # Install dependencies pnpm install # Set up environment cp .env.example .env # Edit .env with your API keys # Run in development mode pnpm dev discover --dry-run # Build pnpm build # Run tests pnpm test

- We useTypeScriptwith strict mode
- ESLintfor linting
- Prettierfor formatting
- WriteJSDoc commentsfor public APIs
- Followconventional commitsfor commit messages
- Fork the repository
- Create a feature branch:git checkout -b feature/amazing-feature
- Make your changes
- Add tests if applicable
- Runpnpm buildandpnpm test
- Commit with conventional commit message:feat: add amazing feature
- Push to your fork:git push origin feature/amazing-feature
- Open a Pull Request

- 🔌New Sources— Add support for Smithery, OpenAPI Directory, RapidAPI
- 🤖AI Providers— Add support for Gemini, Mistral, local models
- 📝Documentation— Improve examples, add tutorials
- 🧪Testing— Add unit tests, integration tests
- 🐛Bug Fixes— Check the issues tab

MIT License Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

- made by nichModel Context Protocolecosystem
- Powered by
OpenAIandAnthropic
- Inspired by the need to automate plugin discovery for SperaxOS

Full documentation site:https://nirholas.github.io/lyra-tool-discovery/

- Getting startedcovers install and first run.
-
Exampleshas copy-paste snippets.

Apigene MCP Gateway is the runtime layer that connects AI agents to APIs and MCP servers via Model Context Protocol.

One MCP server for AI agents to use any tools reliably at any scale

Magica is your all-in-one AI platform, offering 2500+ cutting-edge tools under a single subscription.

One API key, dozens of capabilities for your AI agent. Zero provider auth.

Dynamically search and call tools using UnifAI Network

Agent-native developer Q&A API with MCP + A2A endpoints for citations, job pickup, and answer submission.

Intelligent rate limiting for agent-to-agent communication — per-agent quotas, sliding window throttling, burst allowances, and fair-use enforcement across multi-agent MCP deployments.

Unified MCP & skill management gateway with progressive disclosure. Manages multiple MCP servers as Agent Apps, loading tool schemas on demand for 99% context token savings. Shared across Claude Code, Codex, OpenCode and more.

Self-hosted MCP platform with multiple tools, multi-agent orchestration, web UI, and ML capabilities

65+ AI tools as an MCP server. Research, write, code, scrape, translate, analyze, agent memory, workflows. Pay per call from $0.006.

No reviews yet — be the first

Sign in to leave a review

Use Google, GitHub, or an email account so ratings stay tied to real people.

Email sign in

No reviews posted yet.