On this page
The Exa MCP server is Exa's own hosted server at https://mcp.exa.ai/mcp.
Add that URL to your client and you can search and fetch pages right away, with
no key, at a free rate limit. For real use, sign in with OAuth
(https://mcp.exa.ai/mcp?login) rather than putting a key in the URL. TrustedMCP
grades it A.
What the Exa MCP server does
It gives an agent Exa's web search and page reading. Exa's MCP docs list four tools:
| Tool | On by default? | What it does |
|---|---|---|
web_search_exa |
Yes | Searches the web and returns ready-to-use page content |
web_fetch_exa |
Yes | Reads clean content from one or more URLs you (or the model) give it |
web_search_advanced_exa |
No, opt in | Search with domain, date, category and other filters, summaries, highlights, subpage crawling |
agent_run |
Yes once you sign in or add a key | Multi-step research, list-building and structured output, billed by usage |
The code is open source (MIT) in
exa-labs/exa-mcp-server, and the
same code ships as the exa-mcp-server npm package if you'd rather run it
locally. We read the repo and docs for this guide; we didn't install the package.
One small mismatch: Exa's docs say agent_run is on by default once you're
authenticated, while the README lists it under optional tools. If you don't see
it, add it to the tools list (see below).
Exa MCP setup in Claude Code, Cursor and VS Code
Claude Code. Exa's docs give the plugin install, which adds the hosted
server plus Exa's search and exa-agent skills:
claude plugin install exa@claude-plugins-official
Start a new session afterwards. If you only want the server and not the skills, Claude Code's standard command for a remote server works too (this one is from our Claude Code MCP setup guide, not from Exa's docs):
claude mcp add --transport http exa "https://mcp.exa.ai/mcp?login"
Then type /mcp, pick exa and finish the sign-in in your browser.
Cursor. Use the Cursor marketplace, or add this to ~/.cursor/mcp.json
(copied from Exa's docs):
{
"mcpServers": {
"exa": {
"url": "https://mcp.exa.ai/mcp"
}
}
}
VS Code. Add this to .vscode/mcp.json in your project (also from Exa's
docs):
{
"servers": {
"exa": {
"type": "http",
"url": "https://mcp.exa.ai/mcp"
}
}
}
Claude Desktop and claude.ai use Exa's connector: in a new chat select the plus button, choose Add connector, search for Exa and connect it.
Clients without remote server support can use the mcp-remote bridge or
the local npm package with EXA_API_KEY; both snippets are on Exa's docs page.
If you go local, keep the key out of the config file itself, as shown in
keeping API keys out of your MCP config, and pin
a version (3.4.3 was the latest on 2026-11-05).
Exa MCP API key, OAuth or keyless?
Exa's docs describe three modes:
| Mode | How | Good for |
|---|---|---|
| Keyless | Connect to https://mcp.exa.ai/mcp |
Trying search and fetch at a free rate limit. No agent_run. |
| OAuth | Connect to https://mcp.exa.ai/mcp?login |
Day-to-day use. Usage goes to your Exa team. |
| API key | Send an x-api-key header |
Clients that can't do MCP OAuth |
Our advice, in order:
- Use OAuth for anything beyond a quick try. The keyless mode is fine for a test, but you hit 429 rate-limit errors quickly, and it returns 403 unless you connect directly over IPv4 (Exa's troubleshooting section says so).
- If you need a key, put it in a header, not the URL. Exa's README also
offers
?exaApiKey=…in the URL. A key in a URL ends up in shell history, config files and sometimes logs, and the MCP spec says access tokens "MUST NOT be included in the URI query string". The docs page itself now shows only the header, which is the safer pattern. - Use a key you can revoke on its own. Exa's sign-in offers a single
mcp:toolsscope (we read the server's public OAuth metadata), so a token or key covers everything the server can do on your team. A separate key just for MCP lets you watch its usage and cut it off without breaking other apps.
More on why clients handle this differently in our MCP authentication guide.
Choose which Exa MCP tools your agent sees
The tools URL parameter picks the tool list. It replaces the defaults, so
list every tool you want. To turn everything on:
https://mcp.exa.ai/mcp?tools=web_search_exa,web_fetch_exa,web_search_advanced_exa,agent_run
Two reasons to keep the list short:
- Context. Every tool definition costs tokens before the agent does
anything. Exa itself recommends plain
web_search_exafor ordinary searches because it "gives the model a smaller tool surface". See why MCP servers eat your context. - Spend. If you never want metered research runs, leave
agent_runout:?tools=web_search_exa,web_fetch_exa.
The README also has dynamicHighlights=true (beta), which returns highlights
picked across all results under one shared budget, so less page text reaches
your agent.
Older tool names such as get_code_context_exa, deep_researcher_start and
company_research_exa are still in the code but marked deprecated and off by
default. Exa points you to web_search_exa or web_search_advanced_exa
instead.
What agent_run can cost
agent_run hands a plain-language request to Exa Agent, which searches, reads
sources and returns findings, sources, and a usage and cost summary. Long runs
don't fail: the tool returns status: "running" with an id, and the agent calls
again with that id as runId.
The tool schema in the source has a budget field. maxCostDollars accepts
$1 to $100 and only applies to the auto and ultra effort levels, with
defaults of $5 for auto and $20 for ultra. The default effort is low.
Exa's Agent guide has the prices. If you
let an agent call agent_run on its own, tell it a spend limit in your prompt or
project rules, or keep the tool on "ask" (below).
Is the Exa MCP server safe?
For what it does, yes. It only reads: the fetch tool is marked read-only in the source, and nothing in the tool list writes to your files or accounts. The risks are the ones every search server has.
Fetched pages are untrusted text. web_fetch_exa reads any URL the model
asks for, on Exa's servers, and the page text lands in your agent's context. A
page can carry instructions aimed at your agent. That matters most when the same
session also has tools that can write or send data. Read
MCP prompt injection for the combination to
avoid.
Keep approval on for paid runs. In Claude Code, a rule set like this lets
searches run freely and asks before research runs (server added as exa; see
allowing and denying MCP tools in Claude Code):
{
"permissions": {
"allow": ["mcp__exa__web_search_exa", "mcp__exa__web_fetch_exa"],
"ask": ["mcp__exa__agent_run"]
}
}
Usage analytics. The open-source code reports tool usage to Agnost
(api.agnost.ai), with logging of inputs, outputs and errors turned off in its
settings. That code is shared by the hosted server and the local npm package. We
found no setting to turn it off in the local version. Not a reason to avoid the
server, but worth knowing if your company reviews outbound connections.
For the general process, see the 5-minute safety check.
Why it grades A
Re-checked on 2026-11-05 against the repo, npm, OSV and GitHub's advisory database. Nothing changed the grade.
- Authentication: 18 of 30. OAuth with PKCE is available and preferred, but
the server works anonymously by default, it has one coarse
mcp:toolsscope, and the README still offers the key in the URL. - Maintenance: 25 of 25. Open source, 13 commits in October and early November 2026 from several people, latest release 3.4.3 on 2026-11-03. About 96,000 npm downloads in October 2026.
- Known CVEs: 25 of 25. No advisories in OSV, GitHub's database or the repo.
- Transport: 20 of 20. The hosted server uses HTTPS (plain HTTP redirects, and HSTS is set). Fetching happens on Exa's side, not your machine.
Overall: grade A. Full breakdown on the Exa MCP listing; the method is in how TrustedMCP scores servers.
Exa MCP vs Tavily, Perplexity and Firecrawl
All four are official servers we grade:
- Tavily (A): search plus extract, crawl and map tools. Same sign-in story: use OAuth, not the URL key.
- Perplexity (A): mostly written answers from Perplexity's models (ask, reason, research), plus a plain search tool.
- Firecrawl (B): stronger at crawling and scraping whole sites; it has an open advisory, which costs it the A.
- Exa (A): a small default tool set (search and fetch) you can try with no
account, and
agent_runfor research that needs many searches.
For SEO work specifically, see the best MCP server for SEO.
Building an agent that searches the web for your team and want it set up safely? Get in touch.
Frequently asked questions
What is Exa MCP?
Exa MCP is Exa's official MCP server. It gives an AI agent Exa's web search and
page reading through two default tools, web_search_exa and web_fetch_exa,
plus opt-in advanced search and the metered agent_run research tool. Exa hosts
it at https://mcp.exa.ai/mcp, and the code is open source (MIT).
What is the Exa MCP server URL?
https://mcp.exa.ai/mcp. Add ?login to force the OAuth sign-in, and
?tools=… to choose which tools your client sees.
Is the Exa MCP server free?
The server is free and open source. Search and fetch work without a key at a
free rate limit, and new Exa accounts start with free credits. agent_run is
billed by usage and needs a sign-in or API key. Check Exa's pricing for current
numbers.
Do I need an Exa API key for the MCP server?
No, not to try it. You need OAuth or a key for higher limits and for
agent_run. If your client supports MCP OAuth, sign in instead of using a key.
How do I pass my Exa API key?
Send it in an x-api-key header (the README also accepts
Authorization: Bearer). Avoid the ?exaApiKey= URL form. For the local npm
package, set EXA_API_KEY in the environment.
Why do I get a 429 or 403 error?
429 means you're on the free keyless limit; sign in or add a key. 403 without a key means you're not connecting directly over IPv4, for example through IPv6 or a proxy. Sign in or add a key to fix it.
Why don't I see agent_run?
It needs OAuth or an API key. If you set a tools list in the URL, it replaces
the defaults, so agent_run must be in it.
Where did get_code_context_exa go?
It's deprecated and off by default. Exa's code says to use web_search_exa
instead. You can still name it in the tools list while it exists, but expect it
to go away.
How do I add Exa MCP to Claude Desktop?
Use Exa's connector: in a new chat select the plus button, choose Add connector, search for Exa and connect it. The same works on claude.ai.
Can Exa MCP change anything on my machine?
No. Its tools only search and read web pages, and fetching runs on Exa's servers. The risk is what a fetched page says to your agent, not what the server does to your system.