On this page
Exa MCP Server: Setup, OAuth vs API Key, Tools and Safety (Nov 2026)

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:

  1. 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).
  2. 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.
  3. Use a key you can revoke on its own. Exa's sign-in offers a single mcp:tools scope (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_exa for 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_run out: ?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:tools scope, 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_run for 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.

More: MCP security best practices · Search category