A Cognitive Dispatcher that routes tasks between internal MCP tools and external AI providers, with Claude-first bias and self-learning capabilities.
Match tasks to tools via capability tags, not exact names. Decouples task from implementation.
Prefer Anthropic Claude for external calls with 1.5x weight. Fallback to other providers when needed.
Try local MCP tools before external providers. Lower latency, no costs, more control.
Exponential backoff with automatic fallback chains. Resilient to transient failures.
LanceDB for semantic similarity, Neo4j for relationships. Improves tool selection over time.
Prometheus metrics, Grafana dashboards, JSON structured logs. Complete visibility.
Multi-provider routing for OpenAI, Gemini, and Claude with health monitoring and feedback collection. 189 tests.
Route tasks to external MCP servers (browser-mcp, paaf, research-agent) with unified tool discovery. 226 tests.
Full visibility into system behavior with real-time monitoring and historical analysis.
MCP Overview, M5 Learning Layer, API Endpoints, and Logs Explorer. Real-time metrics and visualizations.
Monitor LanceDB embeddings and Neo4j graph nodes in real-time. See tool success rates and relationships grow.
15+ custom metrics for learning layer health, vector store stats, and graph store relationships.
/learning/stats and /learning/health endpoints for programmatic access to learning layer statistics.
Connect your systems to the orchestrator via REST API or integrate with existing frameworks.
Works with SPINE multi-agent orchestration framework for Plan→Execute→Verify→Commit workflows.
Routes to any MCP server: browser-mcp, paaf, research-agent, filesystem, and custom servers.
FastAPI-based dashboard with OpenAPI docs. Call /execute, /tools, /config, and /learning endpoints.
from mcp_core.orchestrator import Orchestrator orchestrator = Orchestrator(auto_configure=True) orchestrator.configure_anthropic(api_key="sk-...") # Ask for code generation - automatically routes to Claude response = await orchestrator.execute_task( task="Write a Fibonacci function", capabilities=["code_generation"], ) print(response.tool_used) # claude_code_generation print(response.provider) # anthropic