MCP Orchestrator

by rupinder2

Not rated
GitHub

About

Aggregates tools from multiple MCP servers with unified BM25/regex search and deferred loading

Details

Author
rupinder2
Categories
Developer Tools, Automation, Search, AI

Setup

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

Repository: https://github.com/rupinder2/mcp-orchestrator

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

A central hub that connects to multiple downstream MCP servers, aggregates their tools, and provides unified access with powerful tool search capabilities.

Built arounddeferred tool loading— search across all your servers without blowing Claude's context window.

- Config-based Server Registration: Add downstream MCP servers via JSON config file
- Tool Namespacing: Automaticserver_name__tool_nameformat
- Tool Search: Unified BM25/regex search with deferred loading support
- Flexible Authentication: Static saved headers or token forwarding
- Multiple Transports: stdio or HTTP
- Tool Definition Caching: Cached definitions, raw result passthrough
- Storage Backends: In-memory (development) or Redis (production)

# Run as stdio MCP server (for Claude Desktop, Cursor, etc.) mcp-orchestrator # Or run with Python directly python -m mcp_orchestrator.main
ORCHESTRATOR_TRANSPORT=http ORCHESTRATOR_PORT=8080 python -m mcp_orchestrator.main

This starts the server onhttp://localhost:8080/mcpwith CORS enabled.

Add downstream MCP servers inserver_config.json:

{ "servers": [ { "name": "my-server", "url": "http://localhost:8080/mcp", "transport": "http", "auth_type": "static", "auth_headers": { "Authorization": "Bearer my-token" } }, { "name": "my-stdio-server", "url": "server.py", "transport": "stdio", "command": "uv", "args": ["run", "python", "server.py"] } ] }

The orchestrator provides unified tool search (BM25 by default, regex optional):

# BM25 search (default - natural language) results = await mcp_client.call_tool("tool_search", { "query": "get weather information", "max_results": 3 }) # Regex search (set use_regex=true) results = await mcp_client.call_tool("tool_search", { "query": "weather|forecast", "use_regex": true, "max_results": 3 })
┌─────────────────────────────────────────────────────┐ │ MCP Orchestrator │ │ │ │ ┌──────────────────────────────────────────────┐ │ │ │ FastMCP Server │ │ │ │ ┌─────────────┐ ┌──────────────────┐ │ │ │ │ │ tool_search │ │ call_remote_tool │ │ │ │ │ └─────────────┘ └──────────────────┘ │ │ │ └──────────────────────────────────────────────┘ │ │ │ │ ┌──────────┐ ┌──────────┐ ┌──────────────┐ │ │ │ Server │ │ Tool │ │ Storage │ │ │ │ Registry │ │ Search │ │(Memory/Redis)│ │ │ └──────────┘ └──────────┘ └──────────────┘ │ └─────────────────────────────────────────────────────┘ │ ┌───────────────────┼───────────────────┐ ▼ ▼ ▼ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ MCP Svr │ │ MCP Svr │ │ MCP Svr │ │ #1 │ │ #2 │ │ #N │ └─────────┘ └─────────┘ └─────────┘

Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json):

{ "mcpServers": { "mcp-orchestrator": { "command": "mcp-orchestrator", "env": { "STORAGE_BACKEND": "memory", "ORCHESTRATOR_LOG_LEVEL": "INFO" } } } }

Search for tools using BM25 relevance ranking or regex pattern matching.

@mcp.tool() async def tool_search( query: str, max_results: int = 3, use_regex: bool = False, ) -> dict: """Search for tools using BM25 or regex. By default uses BM25 natural language search. Set use_regex=True to search using Python regex patterns instead. """

Discover tools from a registered downstream server.

@mcp.tool() async def discover_tools( server_name: str, ) -> dict: """Discover tools from a registered server and index them for search. Returns the list of discovered tools with their schemas. """

Call a tool directly on a downstream MCP server.

@mcp.tool() async def call_remote_tool( tool_name: str, arguments: Optional[dict] = None, auth_header: Optional[str] = None, ) -> Any: """Call a tool on a downstream server. Args: tool_name: Namespaced tool name (server_name__tool_name) arguments: Tool arguments auth_header: Optional auth header to override server's configured auth """

The search tools return results in the format expected by Claude's tool search system:

{ "success": true, "tool_references": [ { "type": "tool_reference", "tool_name": "server_name__tool_name" } ], "total_matches": 5, "query": "weather" }
mcp-orchestrator/ ├── src/mcp_orchestrator/ │ ├── __init__.py │ ├── main.py # Entry point │ ├── models.py # Pydantic models │ ├── mcp_server.py # FastMCP server │ ├── config_loader.py # Config file loader │ ├── server/ │ │ └── registry.py # Server registry │ ├── tools/ │ │ ├── router.py # Tool router │ │ └── search.py # Tool search service │ └── storage/ │ ├── base.py # Storage interface │ ├── memory.py # In-memory backend │ └── redis.py # Redis backend ├── tests/ │ ├── test_registry.py │ ├── test_search.py │ ├── test_storage.py │ ├── test_models.py │ └── test_integration.py ├── server_config.json # Pre-configured downstream servers ├── pyproject.toml ├── README.md └── .env # Environment variables (not committed)

Contributions are welcome! Please seeCONTRIBUTING.mdfor guidelines.

This is a web browser that enables your coding agent, such as Claude Code, to visit websites on your behalf and assist you in identifying bugs or creating UI test cases.

What Shopify did for ecommerce, Chipp does for AI agents. Build, deploy, and monetize AI agents for your business — no engineering team required.

CodeVF MCP lets AI hand off problems to real engineers instantly, so your workflows don’t stall when models hit their limits.

Client implementation for Mastra, providing seamless integration with MCP-compatible AI models and tools.

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

On-demand access to 150+ specialist AI agent templates — search, browse, and spawn agents. 150x reduction in context usage vs loading agents locally.

AgentChatBus is a persistent AI communication bus that lets multiple independent AI Agents chat, collaborate, and delegate tasks — across terminals, across IDEs, and across frameworks.

Remote MCP server (Streamable HTTP) at https://mcp.agenticrail.nz/ — deterministic step-order enforcement for AI agents. evaluate_step returns ALLOW or DENY before a step runs; verify_receipt proves a sequence's Ed25519-signed, hash-chained receipt chain is intact. No auth required: omit the bearer token and calls run on the public demo key. That first clause matters — the form has no "remote/hosted" field, and putting the endpoint in the description is the convention on that list ("Fully REMOTE! Just use…"). The rest mirrors your own server card verbatim, so the listing and the card can't drift.

An AI Agent with optional Human-in-the-Loop Safety and Model Context Protocol (MCP) integration.

Agent Mail Rooms is a paid remote MCP endpoint for OpenAI Codex agent coordination MCP. It exposes structured JSON tools, a public server card, token-based access, usage receipts, and audit-

MCP bridge that lets Claude Code delegate heavy tasks to the Antigravity CLI (agy) — purpose-built tools, model routing with fallback, session continuity, and output truncation to save Claude's context and tokens.

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.