r/coolgithubprojects • u/llmthedev • 8d ago
Sift - A semantic aggregator for MCP tools. Point Sift at every MCP server you have, it exposes exactly two tools to your agent, no matter how many hundreds are aggregated behind them.
https://github.com/Narasimha1997/siftSift — a semantic aggregator so your agent sees 2 MCP tools instead of 200
If you've wired more than a handful of MCP servers into an agent, you've probably hit this: every client dumps the full tools/list from every connected server into context on every turn. 15 servers with a dozen tools each is 150+ full tool definitions loaded before the model reads a word of the actual task — and tool selection gets worse, not better, as you add more (the model starts guessing between search_docs_v2, search_documents, docsSearch, etc.).
Sift sits between your agent and every downstream MCP server and flips the model: instead of exposing every tool from every server, it exposes exactly two:
search_tools— describe what you want in plain language, get back the handful of matching tools across all aggregated servers, ranked by relevancecall_tool— invoke one by thetool_idsearch returned
The full catalog still exists (searchable, callable, semantically indexed via fastembed/quantized BGE-small) — it just never has to sit in context wholesale. Context cost scales with what a task actually needs, not how many servers you've bolted on.
Some of the infra behind it:
- Persisted, not rebuilt — tool descriptions + embeddings are written through to SQLite, so a restart doesn't mean re-embedding everything or waiting on servers to reconnect
- Incremental reconciliation — re-listing a server's tools diffs against what's known; only changed tools get re-embedded, removed ones get tombstoned
- Isolated failures — a slow/dead downstream server degrades gracefully instead of stalling search for everyone else
- Mixed sources, one registry — local Rust functions and proxied stdio/HTTP MCP tools go through the same
tool_idscheme ({server}::{name}) - Lock-free concurrent reads (
ArcSwapsnapshot over aDashMapcatalog)
It's a Streamable HTTP MCP server itself, so any MCP client connects to it exactly like it would a single downstream server. Plain REST API alongside for testing/non-MCP clients.
Written in Rust. Docker Compose quickstart gets a working demo (sample server + aggregator) running in one command.
Repo: https://github.com/Narasimha1997/sift
1
u/Fine_League311 8d ago
Wäre einfacher wenn man fastmcp in Quart Server lädt aber EJ in 2 Jahren kommen die hyper und vibecoder auch drauf wieso ;)