Exa
Exa is a search MCP server from Exa Labs that gives an agent two things: a web search backed by Exa's neural index, and a fetch tool that pulls a single URL's contents back as text. It runs over stdio from npx, identifies itself as exa-search-server, and needs an Exa API key.
How we started it
npx -y exa-mcp-serverUse it if you want your agent to search the live web and you're fine paying Exa for the index. Two tools, both obvious, and the whole tools/list came back at roughly 534 tokens (chars/4 estimate, measured 2026-08-19), which is about as cheap as a useful server gets. The reason against is the bill and the lock-in: the search quality you're buying is Exa's index, not a protocol feature, and a key that runs out turns both tools into error messages your model will keep retrying.
Use it if
Skip it if
The bill for your context window
| Tool | Est. tokens | Described? | Required params |
|---|---|---|---|
| web_search_exa | ~325 | yes (566 chars) | 1 |
| web_fetch_exa | ~209 | yes (270 chars) | 1 |
This is the shape you want. The full tools/list payload was 2,139 bytes, about 534 tokens by the chars/4 estimate, and the split is sensible: web_search_exa carries roughly 325 of them and web_fetch_exa roughly 209, each with one required parameter. Nothing is spent on option catalogues or enum walls. Against the heaviest server in this batch, a two-tool search surface at this weight is close to free, and it stayed well under the median context tax we measured across the batch. You could run it alongside three other servers and still not notice it in the prompt.
Setup reality
npx -y exa-mcp-server, stdio transport, and an Exa API key in the environment. Our probe runs every server as an unprivileged user with a clean env and no secrets, and this one still completed initialize and answered tools/list, resources/list and prompts/list without a key, so the credential check happens at call time rather than at boot. That's convenient for testing and a small trap in production: a missing or expired key looks like a working server until the first search comes back empty. Version 3.4.1 spoke protocol 2025-06-18 to us. No env hints were scraped from stderr because nothing was written there.
Questions people ask
Does the Exa MCP server work without an API key?
It starts and lists its tools without one, which is how we measured it. The key is checked when a tool is actually called, so a keyless install boots cleanly and then fails at the first search.
How many tools does it add to my context?
Two: web_search_exa and web_fetch_exa. Together their definitions came to roughly 534 tokens by our chars/4 estimate when we booted it on 2026-08-19.
Is it slow to start?
Initialize took 12,959 ms on our box, and nearly all of that is npx resolving and downloading the package on first run. Pin it locally or cache the download if cold-start latency matters to you.
Does it replace a scraper?
Only for simple pages. web_fetch_exa returns one URL's contents and takes one required parameter; it isn't a crawler, and it won't drive a browser for JavaScript-rendered sites.
Other search servers we started
| Server | Vendor | Boots | Context tax |
|---|---|---|---|
| Brave Search (archived) | Anthropic (archived) | ✗ | ~0 tokens |
| DuckDuckGo Search | community | ✗ | ~0 tokens |
| Tavily | Tavily | ✓ | ~1,924 tokens |
How this page is made: the server is spawned as an unprivileged user with a clean environment and no credentials, then asked for its tools, resources and prompts over stdio. Token figures are estimates at four characters per token, not a tokenizer count. One run, one machine. Corrections: contact the desk.