Exa
Exa MCP Server

Connect AI agents to Exa for web search, content fetching, and multi-step research.

Install in Cursor Install in VS Code Install Claude Plugin Install Codex/ChatGPT Plugin

Documentation  ·  NPM Package  ·  Get your API key

## Installation Connect to Exa's hosted MCP server: ``` https://mcp.exa.ai/mcp ``` Or use a plugin when your client supports one. ### Agent Plugin This repository is an [Agent Plugin](https://agent-plugins.org). Install it with any [compatible client](https://agent-plugins.org/compatible-clients). ### Claude Install from the [Claude Plugin Marketplace](https://claude.com/plugins/exa), or run: ```bash claude plugin install exa@claude-plugins-official ``` ### Codex / ChatGPT Install via [Plugins in ChatGPT](https://chatgpt.com/plugins/exa), or run: ```bash codex mcp add exa --url https://mcp.exa.ai/mcp ``` ### Other MCP Clients Most clients can be configured manually with the standard `mcpServers` shape: ```json { "mcpServers": { "exa": { "type": "streamable-http", "url": "https://mcp.exa.ai/mcp", } } } ```
Client-specific configs Exa MCP works with most other clients, point them at `https://mcp.exa.ai/mcp`. | Client | Where to add it | | --- | --- | | Kiro | Use the [Kiro power](https://github.com/exa-labs/kiro-power-exa), or add manually to `~/.kiro/settings/mcp.json` | | LM Studio | [Add to LM Studio](https://lmstudio.ai/install-mcp?name=exa&config=eyJ1cmwiOiJodHRwczovL21jcC5leGEuYWkvbWNwIn0%3D), or add manually to `mcp.json` | | Replit | [Add to Replit](https://replit.com/integrations?mcp=) | | Grok Build | `/marketplace` → install **Exa**, then `/mcp` to sign in | | Gemini CLI | Add manually to `~/.gemini/settings.json` | | OpenCode | Add manually to `opencode.json` | | Windsurf | Add manually to `~/.codeium/windsurf/mcp_config.json` | | Google Antigravity | Add manually to `mcp_config.json` | | Zed | Add manually to `settings.json` under `context_servers` | | Warp | [Settings → Agents → MCP servers](warp://settings/mcp) | | v0 by Vercel | [Settings → MCP connections](https://v0.app/settings/mcp-connections) |
## Available Tools ### Default Tools | Tool | Description | | --- | --- | | `web_search_exa` | Search the web for any topic and get clean, ready-to-use content | | `web_fetch_exa` | Read a webpage's full content as clean markdown from one or more URLs | ### Optional Tools (enable via the `tools` parameter) | Tool | Description | | --- | --- | | `agent_run` | Run an [Exa Agent](https://docs.exa.ai/reference/agent-api-guide) for multi-step research, list-building, enrichment, and structured output | | `web_search_advanced_exa` | Advanced search with filters, domains, dates, highlights, summaries, and subpage crawling | Enable tools by appending them to the MCP URL (this will replace the defaults, so include all you want): ``` https://mcp.exa.ai/mcp?tools=web_search_advanced_exa https://mcp.exa.ai/mcp?tools=web_search_exa,web_fetch_exa,agent_run ``` Exa Agent requires authentication (OAuth or an [API key](https://dashboard.exa.ai/api-keys)). ## Agent Skills Skills live in [`skills/`](./skills/) and load with Agent Plugin / Claude plugin installs. | Skill | Path | Use when | | --- | --- | --- | | `search` | [`skills/search/`](./skills/search/SKILL.md) | Deep research, lead gen, competitive analysis, multi-step web investigation | | `exa-agent` | [`skills/exa-agent/`](./skills/exa-agent/SKILL.md) | Exa Agent runs, enrichment, structured output, Connect providers | Invoke from your client's skill UI (or `/skill-name` where supported). MCP-only setups still get the tools; skills add orchestration on top. ## Authentication The hosted MCP server works anonymously with rate limits. For higher limits and access to Exa Agent, use either OAuth or an API key. **OAuth** is preferred: most clients prompt you to sign in to Exa. To force the login flow (useful for shared connectors and plugins), use `https://mcp.exa.ai/mcp?login` or `https://mcp.exa.ai/mcp/oauth`. If you prefer, you can get an API key from the [dashboard](https://dashboard.exa.ai/api-keys) and pass it on the URL as `?exaApiKey=…`. You can also send it as a `Authorization: Bearer …` header or an `x-api-key` header. Built with ❤️ by Exa