Skip to content
MCP Servers
MCP

search

Ships with free-search-mcp: Music: “Ethereal Space (cdk Mix)” by cdk, ccmixter.org/files/cdk/34151, licensed CC BY 3.0. free-search-mcp is a local-first Model Context Protocol server that needs no API key.

From plugin
free-search-mcp
1761 skill1 agent1 MCP

Claude Code

> /plugin marketplace add sweetcornna/free-search-mcp
> /plugin install free-search@free-search-mcp

From the README

What can you do with search?

  • A search that names no engines asks a small keyless pool

    duckduckgo,

  • category= routes to sources that index that kind of thing (papers,

  • An engine that serves a CAPTCHA, a login wall or an off-topic page is

Security report

Info

Not enough data

  • Known flaws

    Not published

  • Signed build

    Not published

  • Maintained

    Oct 31, 2026

    Last push

  • Licence

    MIT

  • Runs as

    Local process

    On your machine

  • Deprecated

    Not published

Signals from public registries, not an audit. Checked Nov 15, 2026.

free-search-mcp README

free-search-mcp

https://github.com/user-attachments/assets/354b522a-ef6b-4547-bb07-c80c6268a5e8

License Python MCP

free-search-mcp is a local-first Model Context Protocol server that needs no API key. It lets any LLM (Claude, GPT, a local Ollama model, …) search the web, fetch and clean up pages, and read documents, and you never sign up for a search API.

It combines ideas from several open-source MCP servers in one Python package, and adds the output shaping for LLMs and the reliability work that each of them lacked.

research("how does reciprocal rank fusion work", depth=3)
   ↓
# Research brief: how does reciprocal rank fusion work
_engines: duckduckgo, bing, yahoojp, anysearch · sources: 3 · ~3,400 tokens_

## Sources
- [1] Reciprocal rank fusion | Elasticsearch Reference — <https://…>
- [2] Hybrid Search Scoring (RRF) | Microsoft Learn — <https://…>
- [3] RRF explained in 4 mins — Medium — <https://…>

## Documents
…full Markdown bodies of each page, ready for the LLM to read…

That was one tool call. It returned three sources with their full text, and no API key was involved.

Quick start

You need uv and nothing else: no sign-up, no API key, no clone.

In Claude Code, inside a session:

/plugin marketplace add sweetcornna/free-search-mcp
/plugin install free-search@free-search-mcp

In Codex:

codex plugin marketplace add sweetcornna/free-search-mcp
codex plugin add free-search@free-search-mcp

(In Codex, a [mcp_servers.search] entry left in ~/.codex/config.toml by an earlier codex mcp add silently shadows the plugin's server. Remove it with codex mcp remove search.)

The plugin brings the 11 tools, the verified-research skill (how to check a snippet against its page and its date) and, in Claude Code, the free-search:quick-search agent, all pinned to one version. /plugin update free-search moves to the next release.

Optionally, install Chromium once for the browser-rendered engines (brave, zhihu, …) and JavaScript-heavy pages. Everything else works without it, and a call that needs it returns this command as its error:

uvx --from free-search-mcp playwright install chromium

Claude Desktop, other clients, a source checkout and Docker are under Install.

Why this exists

Multi-engineNo API keySmart fallbackPDF/DOCXFTS5 cacheFiltersTrafilaturaLLM-tuned
nickclyde/duckduckgo-mcp-server✗✓✗✗✗✗✗~
mrkrsl/web-search-mcp✓✓✓✗✗✗✗~
Aas-ee/open-webSearch✓✓~✗✗✗✗~
VincentKaufmann/noapi-google-search-mcp✗✓✓✓✓✗✗~
free-search-mcp✓✓✓✓✓✓✓✓

"LLM-tuned" means Markdown-first output with token estimates, errors that name the next step, and a research() that turns a search and its fetches into one call. docs/HOW_IT_WORKS.md explains the less obvious columns.

Tools (11)

ToolDescription
search(query, ...filters)Parallel multi-engine search, RRF-merged, title-fuzzy + host-canonical deduped, with optional extractive lead_snippet
research(question, depth?, ...filters)One-shot: search + fetch top N + return Markdown brief
paper_graph(paper, direction?, limit?)Walk one paper's citation graph: references, citing works ranked by influence, and Crossref retraction/correction notices. Takes a DOI, an OpenAlex ID, an exact title, or an arXiv reference (arXiv:1706.03762, an arxiv.org/abs/… URL, a 10.48550/arXiv.… DOI, or a bare id such as 1706.03762, 2401.12345v3 or hep-th/9901001 when it is the whole input)
compare(question, urls=[2..5])Concurrent fetch of 2-5 URLs, side-by-side excerpts keyed by question
fetch(url, render?, inline?, ...)Fetch any resource: reader-mode Markdown for pages, parsed text for documents, or a description (type/size/dimensions/sha256) for images and binaries. inline=True returns the image itself for vision models
fetch_batch(urls, ...)Concurrent multi-URL fetch (max 20 per call)
read_doc(source, start?, length?, ...)Parse PDF / DOCX / XLSX / PPTX / EPUB / CSV / code / zip-tar / HTML / TXT / MD with pagination
extract_structured(url, ...)Pull JSON-LD / OpenGraph / Twitter cards / microdata via extruct. Long prose fields (articleBody and the like) are clipped, and the result says so in trimmed. This tool returns metadata; use fetch for the text
cache_search(query, limit?, ...)FTS5 search across previously fetched pages
engines(group?)The source tree (group, then sub-group, then engine), one line each. group is an enum of the groups that own engines, so a typo fails schema validation
download(url, ...)Save a file to ${SEARCH_MCP_CACHE_DIR}/downloads by default; files auto-delete after 24h. Set SEARCH_MCP_DOWNLOAD_ENABLED=false to disable it.

There are also 5 MCP prompts and 2 resource templates (cache://page/{url}, cache://search/{query_hash}). A twelfth tool, ask, appears only when an answer backend is configured (see Delegating a lookup).

search and research take these filters:

ParamValuesEffect
freshnessday / week / month / yearOnly results from the last N. Results with no date are kept, and freshness_note says when that is most of them. day / week also add googlenews
include_domains["python.org", "djangoproject.com"]Restrict to these domains
exclude_domains["pinterest.com"]Remove these
categorya group (paper, finance, news, software, security, weather, …) or a sub-group (paper.biomed, finance.filings, finance.fx, software.python, dataset.ml, …)Routes to the sources that natively index that kind of thing; the enum in the tool schema lists every value
include_text"async"Substring required in title/snippet
exclude_text"beginner"Substring forbidden
max_age_hours24Accept a cached answer only if it is younger than this. Default 7 days; the tightest of this, the freshness window's TTL, the 6-hour news cap and the category's own cap (weather, finance.fx 1 hour; software, security 6 hours) wins

Output is Markdown by default, with provenance and a token estimate in the header. format="json" returns structured data.

How a search runs

  • A search that names no engines asks a small keyless pool: duckduckgo, bing, yahoojp (Yahoo! JAPAN, the keyless route to Google's index) and anysearch. googlenews joins when recency is asked for, so360 and quark when the query is written in Chinese, naver when it is written in Korean. Sources that only served a CAPTCHA or an empty shell (mojeek, google, startpage, searx, sogou) were removed rather than left to fail on every fresh process.
  • category= routes to sources that index that kind of thing (papers, filings, datasets, packages, CVEs, …). Record sources such as pypi, nvd or openmeteo also join by themselves when the question is one they can answer directly.
  • An engine that serves a CAPTCHA, a login wall or an off-topic page is benched, a reserve takes its seat, and the response says what happened. A proxy (SEARCH_MCP_PROXY) is the fix for IP gating.
  • Once you have signed in to codex, it searches beside those engines on every such search and its results join the same ranking (the agent lane). The links never wait more than 6 s for it.
  • With an answer backend configured (SEARCH_MCP_AGENT_BACKEND=api, claude-code or codex), search also runs the answer agent beside the engines from the same result set and puts a short sourced answer above the links. SEARCH_MCP_AGENT_IN_SEARCH=false turns that off; ask stays available either way.
  • Every result says how old it is and where its date came from, so the agent can tell a lead from a checked fact.
  • engines() prints the whole source tree. engines=["so360", "baidu"] runs exactly the engines named.

No engine that a search reaches by itself needs a key. The details, with measurements, are in docs/HOW_IT_WORKS.md; walls and proxies in docs/PROXY_AND_GATES.md; a tour of the tools with examples in docs/USAGE.md.

Install

The plugin in Quick start is the recommended path, because the server is pinned to the plugin's version and updates with it. The other routes run the same server:

WhereHow
Claude Desktopopen free-search-mcp-<version>.mcpb from the latest release
MCP Registryio.github.sweetcornna/free-search-mcp
Claude Code, without the pluginclaude mcp add search -s user -- uvx free-search-mcp
Codex, without the plugincodex mcp add search -- uvx free-search-mcp
Hermes Agent (the plugin)hermes plugins install sweetcornna/free-search-mcp/plugins/free-search --enable
Any other MCP clientthe stdio command uvx free-search-mcp
Dockerdocker compose build, then docker compose run --rm search-mcp

A source checkout with Chromium, a smoke test and client registration in one step:

curl -LsSf https://raw.githubusercontent.com/sweetcornna/free-search-mcp/main/scripts/install.sh | bash -s -- --client claude-code

Over HTTP, uvx free-search-mcp --transport streamable-http --port 8000 serves http://127.0.0.1:8000/mcp. That endpoint has no authentication and fetches any URL for whoever reaches it, so keep it on loopback or put an authenticating proxy in front.

The JSON for Claude Desktop, Cursor, Cline, Continue and Zed, the installer's options and the plugin's token cost are in docs/INSTALL.md. Operating rules for agents are in docs/AGENT_USAGE.md.

Search on your own account: codex and antigravity

Two opt-in engines search on an account you sign in with instead of an API key. Neither is in any pool or route, and nothing changes for anyone who never signs in. Once you sign in to codex, it searches beside the keyless engines on every automatic search (the agent lane); antigravity runs only when a call or SEARCH_MCP_AGENT_ENGINES names it.

codexantigravity
Searches withOpenAI's web search, the one Codex usesGoogle Search, run by a Gemini model
Accounta ChatGPT plan that includes Codexa Google account with Antigravity
Each search counts againstthe plan's Codex usagethe account's Antigravity quota
The provider allows ityesno, see the warning below
Opens a sign-in page by itselfon first use, over stdio on a desktopnever
Full guide, with 中文速览docs/CODEX_SEARCH.mddocs/ANTIGRAVITY_SEARCH.md

Warning: Google's Antigravity terms forbid using its sign-in from third-party tools and name suspension of the Antigravity and Gemini CLI accounts as the consequence, and Google has suspended accounts for it. Sign in to antigravity only with an account you accept that risk for.

@sweetcornna
Ships withfree-search-mcp
1761 skill1 agent1 MCP
Get the whole plugin

Stars on GitHub

Momentum

stars in total
176
Star history of sweetcornna/free-search-mcp on GitHub, a chart by star-history.com

More MCP servers from other plugins.

gitnexus

gitnexus

MCP

Ships with gitnexus: GitNexus indexes a codebase into a knowledge graph of symbols, calls, dependencies and execution flows. Use…

gitnexustoday49k
@abhigyanpatwari@abhigyanpatwariInstall MCP
mcp-use-docs

mcp-use-docs

MCP

Ships with mcp-use: The fullstack MCP framework to develop MCP Apps for ChatGPT / Claude & MCP Servers for AI Agents.

mcp-use1d11k
@mcp-use@mcp-useInstall MCP
cloudwatch

cloudwatch

MCP

Amazon's monitoring service that collects metrics, logs and alarms across AWS infrastructure and apps.

mcp1d9.9k
@awslabs@awslabsInstall MCP
treg

treg

MCP

Ships with treg: OpenRouter, but for agent tools instead of models. Point an agent at one base URL with one token and it can do…

treg1d7.9k
@superdesigndev@superdesigndevInstall MCP

Questions about search.

Which coding agents can use search?
search works in any agent that reads an MCP config file: Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf. Each agent reads it from its own file; this page names the file for each one.
How do I add search to Claude Code?
Run these in order, one at a time. 1. In Claude Code: /plugin marketplace add sweetcornna/free-search-mcp 2. In Claude Code: /plugin install free-search@free-search-mcp