loading…
Search for a command to run...
loading…
A smart router that helps users discover the most relevant tools from an MCP catalog using natural language queries and AI-driven reranking. It utilizes hybrid
A smart router that helps users discover the most relevant tools from an MCP catalog using natural language queries and AI-driven reranking. It utilizes hybrid search and intent analysis to select the best tool for a given task and explains the reasoning behind each choice.
I built this project to solve a simple problem: I have too many MCP tools and I don't know which one to use.
Instead of manually searching through documentation or guessing which server has the right tool, I created this "router". I just ask it a question in plain English, and it tells me exactly which tool to use.
When I ask a question like "Scan my docker images for security issues", here is what happens behind the scenes:
mcpfinder.sqlite) using two methods:I keep it simple. My data lives in a CSV file, and the app reads from a fast SQLite database.
db.csvmcpfinder.sqlitemcp_suggester/load_mcp_csv_to_sqlite.py handles this conversion.I need Python installed. Then I install the dependencies:
pip install -r requirements.txt
I need to tell the app where my database is and give it an OpenAI key (for the "smart" parts like understanding meaning and reranking).
$env:MCP_CATALOG_DB = ""
$env:OPENAI_API_KEY = "sk-..."
I can run the server directly to test it:
python -m mcp_suggester.server
If you want a visual interface to test queries, you can use the Streamlit app:
streamlit run ui_app.py
This opens a browser window where you can:
No need to run the server separately—the UI app calls the logic directly.
This is the best part. I connect this "router" to Cursor so I can use it while I code.
commandpython-m mcp_suggester.serverPYTHONPATH, MCP_CATALOG_DB, and OPENAI_API_KEY.Now, in Cursor Chat, I just type:
"Find a tool to deploy this app to Kubernetes"
And it responds with the exact tool I need (e.g., Helm -> deploy_application).
mcp_suggester/: The core logic.server.py: The entry point that Cursor talks to.scoring.py: The math that ranks tools.intent.py: The logic that figures out what I want.db.csv: My list of tools.mcpfinder.sqlite: The database the app actually reads.I don't just guess if the search is working. I have a test suite in the evaluation/ folder to prove it.
eval_dataset.csv: This is my "exam" for the system. It contains 27 real-world questions (like "Find a tool to deploy to Kubernetes") and the exact tool that should be the top answer.evaluate.py: This script runs those questions through three different strategies to see which one wins.When I run the benchmark (python evaluation/evaluate.py), here is what I typically see:
You might wonder, "Why do I need an LLM? Can't I just search?"
When the system finds 20 possible tools, it sends the top 3-5 to the LLM (GPT-4o-mini) with a very specific prompt. The LLM is not just summarizing. It is acting as a judge.
Here is exactly what it does for every single query:
This last step is crucial. It turns a raw database search into a helpful assistant that explains its thinking.
Here is a snapshot of what the evaluation script outputs. You can see how the "Hybrid + LLM" strategy beats the others:
Lexical-only (TF-IDF)
---------------------
Precision@1: 0.593
Precision@3: 0.667
Recall@3: 0.611
MRR: 0.668
Hybrid (Lexical + Embedding + Intent)
-------------------------------------
Precision@1: 0.519
Precision@3: 0.667
Recall@3: 0.648
MRR: 0.599
Hybrid + LLM Rerank
-------------------
Precision@1: 0.700
Precision@3: 0.741
Recall@3: 0.725
MRR: 0.704
Watch the demo video to see MCP Finder in action:
View Demo Video (Click to download/view)
Note: GitHub markdown doesn't support inline video playback. The link above will allow you to download and view the video.
Right now, this is a solid prototype. But to make it "Enterprise Ready" and suitable for industry production, here is my plan:
Currently, I edit a CSV file manually. In a real production environment, I would move this to PostgreSQL with pgvector.
I shouldn't have to manually add tools. I want to build a crawler that watches GitHub repositories or MCP registries.
README.md and tool definitions.I need a UI to see what's happening.
The system should learn from usage.
Добавь это в claude_desktop_config.json и перезапусти Claude Desktop.
{
"mcpServers": {
"mcp-finder": {
"command": "npx",
"args": []
}
}
}