
qsearch
io.github.theYahiaPublished by GitHub account theYahiav0.4.0Updated Oct 24, 2026
Multi-engine search for AI agents. Trust scoring, local corpus, MCP-native. Self-hostable, BYOK.
Overview
qsearch is a self-hostable, multi-engine web search layer that gives an assistant full page content, per-URL engine provenance and trust scores from a local, MQ
- What you can do
- Search the web through Brave or SearXNG, with corpus-first, trust-weighted re-ranking and optional news search and deep page extraction (Brave key required for the latter two). Run batch research sweeps with multi-engine attribution, priority tiers and general, scholarly or Russian-language routing. Search peer-reviewed literature across arxiv, PubMed and Semantic Scholar. Extract page content with a local LLM and check whether a cited URL actually supports a claim, returning Supported, Partial, Unsupported or Fabricated. Index local markdown files or crawl URLs into a persistent corpus, then read trust scores, top URLs, corpus stats and a cost report.
- When to use it
- Useful when an assistant does research and you want full page content and cross-engine agreement signals instead of short snippets, and you are willing to run the stack yourself. Also fits citation-checking and building a private, accumulating research corpus.
- Requirements
- The MCP server is not published as a package; it runs from source over Streamable HTTP on port 8081, and the REST API on port 8080 must be running first. Needs Node.js 20 or newer, Docker for Meilisearch, Qdrant and SearXNG, and optionally Ollama models for cleaning and embeddings. A Brave Search API key is needed for focused and critical tiers, news and context; the broad tier and academic search need no key.
Installation
In SourceWeft
- Open qsearch in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.
Use with an agent
Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.
Read https://sourceweft.com/mcp/io.github.theYahia%2Fqsearch/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.Other MCP clients
Add this to your client's mcpServers config.
{
"mcpServers": {
"qsearch": {
"type": "http",
"url": "https://qsearch.pro/mcp"
}
}
}README
qsearch
I built this for my own daily research. After running 100+ research sprints, my agent kept hallucinating because it read 200-char snippets. qsearch gives it full content with multi-engine provenance — running locally, owned by me.
[License: Apache-2.0] [CI] [Status: v0.4.0 live] [Demo: qsearch.pro] [MCP] [MCP Registry]
AI agents lose 17–33% of facts to hallucination because they read 200-character snippets, not full pages (Stanford 2024). Existing search APIs hide which engines agreed on a result. Existing knowledge graphs are enterprise-priced or vendor-locked.
qsearch is the open-source search layer that gives agents full content with multi-engine provenance — running on your machine, owned by you, ready for MCP today.
✅ v0.4.0 live at qsearch.pro. Multi-engine attribution, trust corpus with per-URL provenance (
engines[],sweep_count,trust_score), corpus viewer at/ui, MCP-over-HTTP for Claude Code and any spec-compliant client. 📖 Architecture: ARCHITECTURE.md · Vision: docs/VISION.md · Technical spec: docs/TRUST_MESH.md · Federation deep-dive: docs/FEDERATION_ARCHITECTURE.md
Demo
[qsearch terminal demo — quickstart, multi-engine search, citation verify]
60-second tour:
/health(it's up, local) →/sweep(multi-engineengines[]attribution) →/verify(does the cited source actually support the claim?). Reproduce it locally withbash scripts/record-demo.shafternpm start— see docs/launch/README-demo-embed.md.
Quick start
Run it in 5 minutes — free tier, no API key:
The broad sweep tier runs on self-hosted SearXNG and costs nothing. Add a Brave key only when you want the focused/critical tiers. Full setup (Brave key, Ollama, MCP server) below.
Full setup — Brave BYOK + local LLM + MCP server
BYOK design: Brave key + SearXNG + Ollama all stay on your machine. No data exfiltration.
How I use it daily
Every research sprint I run a dual sweep:
After 10+ sprints on the same domain, /corpus/top?min_engines=3 shows which URLs survived multiple independent search engines across multiple sessions. Those are the ones I actually trust.
Why qsearch exists
Every AI agent today hits the same broken loop:
Three failures:
-
Snippets aren't enough. Stanford's 2024 production RAG audit measured 17–33% hallucination on Lexis+ AI and Westlaw despite "hallucination-free" claims. On Wikipedia QA, full content beats snippet-RAG by +7.3pp (arxiv 2501.01880).
-
No trust signal. Search APIs return ranked lists without telling you which engines agreed. SEO-spam at position 3 looks identical to authoritative source at position 4.
-
No memory. Every search starts from zero. The same trash gets surfaced again. The same authority goes unrecognized.
qsearch addresses all three:
- Full content fetched and cleaned, not just snippets.
engines[]field per result — Google + DDG + Brave + Qwant + Startpage attribution exposed (via SearXNG aggregation).- Local corpus accumulates — every URL grows a trust profile across sweeps.
How it works
The yellow node is your private corpus. URLs found by 5 engines + 3 sweeps + 4 topics get a trust score that emerges naturally — no human ranking, no centralized authority, no cloud round-trip.
How qsearch compares
API — v0.4.0
Search endpoints
/search accepts: query, n_results (1–20), freshness (pd/pw/pm/py), search_lang, country, corpus_first (default true), corpus_only (default false).
/sweep accepts text/plain body with one query per line in the format label|query[|priority][|domain]:
- priority ∈
broad(default, SearXNG, $0) /focused(Brave, ~$0.005) /critical(Brave + LLM Context, ~$0.01) - domain ∈
general(default) /scholarly(arxiv+PubMed+S2, $0) /ru(SearXNG withlanguage=ru-RUbias, $0)
Auto-indexes results into Meilisearch with engines[] and engine_count filterable.
/academic_search accepts JSON: { query, n_results (1-20), sources?: ["arxiv","pubmed","semanticscholar"] }. Fans out to all three in parallel, dedupes by DOI/title, returns interleaved top-N.
Multi-engine attribution example
Output excerpt (parsed_snippets.md):
URL #1 has engine_count=4 — found by 4 independent engines. URL #2 has engine_count=1 — found by only one. The trust signal is built into the data, not bolted on.
Filter by trust in Meilisearch
Returns only URLs found by 3+ engines — your high-trust subset.
MCP integration
The MCP server lives in this repo — there is no npm package for it. Run it from source:
Claude Code
Add to ~/.claude/settings.json:
Available tools:
mcp__qsearch__web_search— web search via Brave or SearXNGmcp__qsearch__sweep— batch research sweep with multi-engine attributionmcp__qsearch__academic_search— peer-reviewed papers via arxiv + PubMed + Semantic Scholarmcp__qsearch__sweep_context— Phase 3 local LLM page extraction (free, Ollama)mcp__qsearch__verify_citation— does the cited URL actually support the claim? (Supported/Partial/Unsupported/Fabricated)mcp__qsearch__economy_report— cost breakdown vs all-Brave baselinemcp__qsearch__index_research— index local.mdfiles by globmcp__qsearch__news_search— news search (Brave key required)mcp__qsearch__context_search— deep page content (Brave key required)
Other MCP-over-HTTP clients
qsearch publishes Streamable HTTP transport at / on port :8081. Compatible with Claude Desktop (HTTP mode), OpenClaw, and any spec-compliant MCP client.
Stack
Roadmap
See docs/VISION.md for the full picture and why federation is research-direction-only until we can ship it without overpromise.
Honest trade-offs
- Cold start. First sweep takes 5–10 seconds (engine fan-out + corpus indexing). Best run as long-lived daemon.
- Vector search Windows-blocked. Qdrant requires bare-runtime; not all platforms supported. Full-text Meilisearch works everywhere.
- SearXNG rate limits. Self-host required — public instances get blocked by Google. Our docker-compose handles this.
engines[]requires SearXNG. Pure-Brave mode still works but loses the multi-engine signal.- Full content has latency cost. ~31s vs ~3s naive snippet retrieval (Bidirectional RAG study). qsearch makes this opt-in via
/contextendpoint.
Follow
- 🌐 Live demo: qsearch.pro
- ⭐ Star: github.com/theYahia/qsearch
- 🐦 X: @TheTieTieTies
License
Apache-2.0 — see LICENSE. Independent. BYOK. Self-hostable. No vendor lock-in.
Source: README.md at commit cb43c2a
Tools
0Version history
1- v0.4.0LatestSep 16, 2026
Score
85% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 daysRequired25 pts
- Auth declaredRequired10 pts
- Tools listedRequired15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts