Overview
Smart Routing is MCPHub’s intelligent tool discovery system that uses vector semantic search to automatically find the most relevant tools for any given task. Instead of manually specifying which tools to use, AI clients can describe what they want to accomplish, and Smart Routing will identify and provide access to the most appropriate tools.How Smart Routing Works
1. Tool Indexing
When servers start up, Smart Routing automatically:- Discovers all available tools from MCP servers
- Extracts tool metadata (names, descriptions, parameters)
- Converts tool information to vector embeddings
- Stores embeddings in PostgreSQL with pgvector
2. Semantic Search
When a query is made:- User queries are converted to vector embeddings
- Similarity search finds matching tools using cosine similarity
- Dynamic thresholds filter out irrelevant results
- Results are ranked by relevance score
3. Intelligent Filtering
Smart Routing applies several filters:- Relevance Threshold: Only returns tools above similarity threshold
- Context Awareness: Considers conversation context
- Tool Availability: Ensures tools are currently accessible
- Permission Filtering: Respects user access permissions
4. Tool Execution
Found tools can be directly executed:- Parameter validation ensures correct tool usage
- Error handling provides helpful feedback
- Response formatting maintains consistency
- Logging tracks tool usage for analytics
Prerequisites
Smart Routing requires additional setup compared to basic MCPHub usage:Required Components
- PostgreSQL with pgvector: Vector database for embeddings storage
- Embedding Service: OpenAI API or compatible service
- Environment Configuration: Proper configuration variables
Using Smart Routing
Smart Routing Endpoint
Access Smart Routing through the special$smart endpoint:
- HTTP MCP
- SSE (Legacy)
Group-Scoped Smart Routing
Smart Routing now supports group-scoped searches, allowing you to limit tool discovery to servers within a specific group:Using Group-Scoped Smart Routing
Using Group-Scoped Smart Routing
Connect your AI client to a group-specific Smart Routing endpoint:This endpoint will only search for tools within servers that belong to the “production” group.Benefits:
- Focused Results: Only tools from relevant servers are returned
- Better Performance: Reduced search space for faster queries
- Environment Isolation: Keep development, staging, and production tools separate
- Access Control: Limit tool discovery based on user permissions
Example: Environment-Based Groups
Example: Environment-Based Groups
Create groups for different environments:Each endpoint will only return tools from servers in that specific environment group.
Example: Team-Based Groups
Example: Team-Based Groups
Organize tools by team or department:This enables teams to have focused access to their relevant toolsets.
How It Works
How It Works
When using
$smart/{group}:- The system identifies the specified group
- Retrieves all servers belonging to that group
- Filters the tool search to only those servers
- Returns results scoped to the group’s servers
Pinned Tools
A$smart/{group} endpoint lists only the meta-tools, so even a tool the model calls in nearly every session costs a search_tools round trip first. Pin such tools on the group’s server entry and the endpoint lists their full definitions next to the meta-tools:
- Pins use the bare tool name, like the
toolsselection. A pin only takes effect for a tool the group selects and that is enabled; other pins are ignored. - A pinned tool is listed exactly as on the direct
/mcp/{group}endpoint — under the server’s exposed name, with its description override — and is called directly by that name. It stays in the search index and keeps working throughsearch_tools,describe_toolandcall_tool. - The global
$smartendpoint has no group and never lists pinned tools. A group without pins lists exactly the meta-tools, as before. - A pinned tool whose listed name equals a meta-tool name (
search_tools,describe_tool,call_tool, e.g. aliasdescribe+ separator_+ tooltool) is not listed, in any mode: calls to those names always go to the meta-tool. - The Smart Routing footprint shown for a group includes the definition cost of its pinned tools.
- Deselecting a tool, in the dashboard or through
PUT /api/groups/:id/server-configs/:serverName/tools, also removes its pin. - On
$smart/{group}, a pinned tool keeps its MCP Apps metadata (_meta.ui) for a client that declares MCP Apps support, so its widget renders, and the server’sui://resources and app-only helper tools are reachable from that widget. A client without MCP Apps support gets the metadata stripped, as before. Only pinned tools carry a widget: a tool reached throughsearch_toolsandcall_toolhas no descriptor of its own for the host to attach a widget to, so pin the tools whose widgets you want. The global$smartendpoint is never an MCP Apps route.
Progressive Disclosure Mode
Progressive Disclosure is an optimization feature that reduces token usage when working with Smart Routing. When enabled, the tool discovery workflow changes from a 2-step to a 3-step process.What is Progressive Disclosure?
What is Progressive Disclosure?
By default, Smart Routing returns full tool information including complete parameter schemas in
search_tools results. This can consume significant tokens when dealing with tools that have complex input schemas.Progressive Disclosure changes this behavior:search_toolsreturns only tool names and descriptions (minimal info)- A new
describe_toolendpoint provides full parameter schema on demand call_toolexecutes the tool as before
- Working with many tools with complex schemas
- Token usage optimization is important
- AI clients need to browse many tools before selecting one
Enabling Progressive Disclosure
Enabling Progressive Disclosure
Enable Progressive Disclosure through the Settings page or environment variable:Via Settings UI:
- Navigate to Settings → Smart Routing
- Enable the “Progressive Disclosure” toggle
- The change takes effect immediately
Including Server Descriptions in search_tools
Including Server Descriptions in search_tools
By default, Use
search_tools lists only server names in its tool description. To include each server’s description (or upstream instructions) alongside the name, set:names (default) to keep the legacy compact list.The list names the servers search_tools actually searches: enabled servers that are
connected or start on demand. An on-demand server stays listed while it is not connected,
whether it shut down after idle or failed to start, since call_tool starts it; any other
server that failed to connect is left out until it reconnects. Upstream instructions only
arrive on connect, so in full mode a server that has not connected yet shows its
configured description, or just its name.Embedding Task Prefixes
Embedding Task Prefixes
Asymmetric retrieval models are trained with different task prefixes for queries and
documents, and score noticeably worse on raw text. Set the prefixes your model expects
in Settings → Smart Routing or via environment variables:Both are empty by default, which embeds raw text as before. Prefixes are used verbatim,
so keep the trailing space. Changing the document prefix re-embeds every server’s tools;
changing the query prefix takes effect on the next search.Prefixes shift the similarity scores (for EmbeddingGemma, weak matches drop more than
strong ones), so a threshold tuned on raw text may need recalibrating after you enable them (see
Search Results below; each hit reports its
score). A prefix also counts toward the
embedding token limit (EMBEDDING_MAX_TOKENS or the model default): it is kept and the
tool text is truncated that many tokens earlier.Search Results: Scores, Threshold and Schema Budget
Search Results: Scores, Threshold and Schema Budget
Every All three can also be set in Settings → Smart Routing → Search Results, and none of
them re-embeds anything. The fields left out by default are meant for clients rather
than models and can be large: an upstream server may ship base64
search_tools hit carries a score: the cosine similarity between the query and
the tool (0-1, two decimals), the same value the threshold is compared with. Results are
ordered by relevance, which also weighs how well the tool’s server matches the query.icons or a long
outputSchema with every tool, and in a search result they would only cost tokens.
The inputSchema is always sent, with its $schema key removed. When no tool clears the threshold, the response says so, names the
threshold and lists the servers that were searched, so the model can tell the user the
capability is not available instead of calling the nearest unrelated tool.Standard Mode (Default)
Standard Mode (Default)
When Progressive Disclosure is disabled (default), Smart Routing provides two tools:Workflow:
search_tools → call_toolThis mode is simpler but uses more tokens due to full schemas in search results.
SMART_ROUTING_FULL_SCHEMA_TOP_N caps that cost: only the top N hits carry a schema,
and describe_tool is listed for the rest.Progressive Disclosure Mode
Progressive Disclosure Mode
When Progressive Disclosure is enabled, Smart Routing provides three tools:Workflow:
search_tools → describe_tool → call_toolExample workflow:
- AI calls
search_toolswith query “file operations” - Results show tool names and descriptions (minimal tokens)
- AI calls
describe_toolfor a specific tool to get fullinputSchema - AI calls
call_toolwith the correct arguments
Response Format Comparison
Response Format Comparison
Standard Mode search_tools response:Progressive Disclosure Mode search_tools response:describe_tool response:
Troubleshooting
Database Connection Issues
Database Connection Issues
Symptoms:
- Smart Routing not available
- Database connection errors
- Embedding storage failures
- Verify PostgreSQL is running
- Check DB_URL format
- Ensure pgvector extension is installed
- Test connection manually:
Embedding Service Problems
Embedding Service Problems
Symptoms:
- Tool indexing failures
- Query processing errors
- API rate limit errors
- Verify API key validity
- Check network connectivity
- Monitor rate limits
- Test embedding service:
Poor Search Results
Poor Search Results
Symptoms:
- Irrelevant tools returned
- Low relevance scores
- Missing expected tools
- Adjust the similarity threshold (
SMART_ROUTING_SIMILARITY_THRESHOLD), using thescoreof each hit to pick a value - Re-index tools with better descriptions
- Use more specific queries
- Check tool metadata quality
Performance Issues
Performance Issues
Symptoms:
- Slow query responses
- High database load
- Memory usage spikes
- Optimize database configuration
- Increase cache sizes
- Reduce batch sizes
- Monitor system resources
Authentication Errors Despite a Valid Dashboard Key
Authentication Errors Despite a Valid Dashboard Key
Symptoms:
- Tool indexing fails with an authentication (401/403) error
- A valid key is saved in the dashboard, yet requests keep being rejected
- Look for
OPENAI_API_KEY/AZURE_OPENAI_API_KEYin.env*files, your shell profile, or the container/service definition - Remove the stale variable and restart, then re-index if the provider or model also changed
- Confirm the key actually in use with a manual request:
Best Practices
Query Writing
Tool Descriptions
System Maintenance
Regular Re-indexing: Periodically re-index tools to ensure embedding quality.
Monitor Performance: Track query patterns and optimize based on usage.
Update Models: Consider updating to newer embedding models as they become available.
Next Steps
Authentication
User management and access control
Monitoring
System monitoring and analytics
API Reference
Complete Smart Routing API documentation
Configuration
Advanced configuration options