> ## Documentation Index
> Fetch the complete documentation index at: https://exa.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Exa MCP

> Connect ChatGPT, Codex, Claude, Grok, Cursor, and any other MCP client to Exa's web search, page fetching, Exa Agent, and Exa Connect tools.

Use Exa MCP to improve the built-in web search in ChatGPT, Claude, and MCP-compatible tools with Exa's search capabilities, including web search, code search, [Exa Agent](/docs/agent/quickstart), and [Exa Connect](/docs/agent/connect/overview).

Exa offers a hosted server that works in any MCP client:

```
https://mcp.exa.ai/mcp
```

No API key is required to get started. Exa MCP is open source and available on [GitHub](https://github.com/exa-labs/exa-mcp-server).

## Install

<div className="docs-tabs">
  <Tabs>
    <Tab title="ChatGPT & Codex" icon="https://mintcdn.com/exa-52/Una64IRjof2yadw_/images/mcp-clients/chatgpt.svg?fit=max&auto=format&n=Una64IRjof2yadw_&q=85&s=877edee72e2a7a4f7b9c7c936c6d4316" width="24" height="24" data-path="images/mcp-clients/chatgpt.svg">
      Exa is an official plugin in OpenAI's plugin directory, which includes the hosted MCP server plus Exa's `search` and `exa-agent` skills.

      <Steps>
        <Step title="Open the plugin">
          Go to [chatgpt.com/plugins/exa](https://chatgpt.com/plugins/exa?open_in_app). It opens **Exa** in OpenAI's plugin directory, which is the same directory for ChatGPT and for Codex.
        </Step>

        <Step title="Install it">
          Select the plus button to install. Sign in to Exa when prompted, either during install or the first time Codex or ChatGPT uses it.

          <Frame caption="Opening Plugins in Codex, adding Exa, and authorizing access">
            <img src="https://mintcdn.com/exa-52/Una64IRjof2yadw_/images/integrations/chatgpt-codex/install-codex.gif?s=170c67f79603bc3a0dc470266a3f29f7" alt="Opening Plugins in Codex, viewing the Exa plugin, and authorizing access" style={{width: "100%", height: "auto"}} width="1100" height="825" data-path="images/integrations/chatgpt-codex/install-codex.gif" />
          </Frame>
        </Step>

        <Step title="Start a new session">
          Skills load in chats and CLI sessions started after the install, so open a fresh one and ask for something that needs the web.
        </Step>
      </Steps>

      That's it. The plugin includes both Exa's MCP integration and skills, so there's no separate MCP or skill setup required.

      See [Exa in Codex and ChatGPT](/docs/integrations/chatgpt-codex) for the full setup and workflow guide.
    </Tab>

    <Tab title="Claude" icon="https://mintcdn.com/exa-52/Una64IRjof2yadw_/images/mcp-clients/claude.svg?fit=max&auto=format&n=Una64IRjof2yadw_&q=85&s=443a9b17d5b63c875f924a4aecc01e56" width="24" height="24" data-path="images/mcp-clients/claude.svg">
      ### Claude Code CLI

      <Steps>
        <Step title="Install the plugin">
          Install Exa from the terminal:

          ```bash theme={null}
          claude plugin install exa@claude-plugins-official
          ```

          You can also type `/plugin` in Claude Code, search for **Exa**, and install it.
        </Step>

        <Step title="Use Exa">
          Start a new Claude Code session and ask for something that needs the web.
        </Step>
      </Steps>

      ### Desktop, Web & Cowork

      Claude Desktop, Web, and Cowork all use Exa's official connector.

      <Steps>
        <Step title="Open the connector directory">
          Select the plus button in a new chat, choose **Add connector**, and search for **Exa**.
        </Step>

        <Step title="Connect Exa">
          Open Exa, select **Connect to Claude**, and authorize access when prompted.

          <Frame caption="Opening the connector directory in Claude, finding Exa, connecting it, and authorizing access">
            <img src="https://mintcdn.com/exa-52/Una64IRjof2yadw_/images/integrations/claude-web-desktop/install-claude.gif?s=259e8d897252e7f8435b94dc6ceeae5d" alt="Opening the connector directory in Claude, finding Exa, connecting it, and authorizing access" style={{width: "100%", height: "auto"}} width="800" height="596" data-path="images/integrations/claude-web-desktop/install-claude.gif" />
          </Frame>
        </Step>

        <Step title="Use Exa">
          Start a new chat and ask for something that needs current information from the web.
        </Step>
      </Steps>

      See [Exa in Claude Code, Web, and Desktop](/docs/integrations/claude-web-desktop) for the full setup and workflow guide.

      Claude Team and Enterprise admins can provision the connector for everyone through their identity provider instead: see [Enterprise Managed Auth](/docs/admin/mcp-enterprise-managed-auth).
    </Tab>

    <Tab title="Grok Build" icon="https://mintcdn.com/exa-52/Una64IRjof2yadw_/images/mcp-clients/grok.svg?fit=max&auto=format&n=Una64IRjof2yadw_&q=85&s=52ce55e129bd951b5c96471cf21153e7" width="400" height="400" data-path="images/mcp-clients/grok.svg">
      Exa is available on the [Grok Build](https://docs.x.ai/build/overview) marketplace.

      <Steps>
        <Step title="Open the marketplace">
          In Grok Build, run `/marketplace`.
        </Step>

        <Step title="Install Exa">
          Find **exa** in the list and press `i`.
        </Step>

        <Step title="Sign in">
          Run `/mcp`, select **exa**, and press `i` to sign in to your Exa account in the browser.
        </Step>
      </Steps>

      New accounts get free credits at signup.
    </Tab>

    <Tab title="Cursor" icon="https://mintcdn.com/exa-52/Una64IRjof2yadw_/images/mcp-clients/cursor.svg?fit=max&auto=format&n=Una64IRjof2yadw_&q=85&s=2df7fb1b4be985ad431617e4dfe7a42f" width="24" height="24" data-path="images/mcp-clients/cursor.svg">
      Install Exa MCP from the [Cursor marketplace](https://cursor.com/marketplace/exa), or add it to `~/.cursor/mcp.json`:

      ```json theme={null}
      {
        "mcpServers": {
          "exa": {
            "url": "https://mcp.exa.ai/mcp"
          }
        }
      }
      ```
    </Tab>

    <Tab title="VS Code" icon="https://mintcdn.com/exa-52/Una64IRjof2yadw_/images/mcp-clients/vscode.svg?fit=max&auto=format&n=Una64IRjof2yadw_&q=85&s=9828a7b963d47467df217a38c716fea2" width="24" height="24" data-path="images/mcp-clients/vscode.svg">
      Use the [one-click install](https://vscode.dev/redirect/mcp/install?name=exa\&config=%7B%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fmcp.exa.ai%2Fmcp%22%7D), or add it to `.vscode/mcp.json` in your project:

      ```json theme={null}
      {
        "servers": {
          "exa": {
            "type": "http",
            "url": "https://mcp.exa.ai/mcp"
          }
        }
      }
      ```
    </Tab>

    <Tab title="Other clients" icon="https://mintcdn.com/exa-52/Una64IRjof2yadw_/images/mcp-clients/other-clients.svg?fit=max&auto=format&n=Una64IRjof2yadw_&q=85&s=187e423022b8fc3ed950a967a10ff700" width="24" height="24" data-path="images/mcp-clients/other-clients.svg">
      Most clients use the standard `mcpServers` shape:

      ```json theme={null}
      {
        "mcpServers": {
          "exa": {
            "url": "https://mcp.exa.ai/mcp"
          }
        }
      }
      ```

      Where the config lives and what the URL key is called varies by client:

      | Client                                  | Where to add it                                                                                    | URL key                |
      | --------------------------------------- | -------------------------------------------------------------------------------------------------- | ---------------------- |
      | [fx by Vercel](/docs/integrations/vercel/fx) | `/mcp add --transport http exa https://mcp.exa.ai/mcp` in the fx shell (saved to `~/.fx/mcp.json`) | `url`                  |
      | OpenCode                                | `opencode.json` (under `mcp`, with `"type": "remote"`)                                             | `url`                  |
      | Kiro                                    | `~/.kiro/settings/mcp.json` (under `mcpServers`)                                                   | `url`                  |
      | Windsurf                                | `~/.codeium/windsurf/mcp_config.json` (under `mcpServers`)                                         | `serverUrl`            |
      | Google Antigravity                      | Agent panel → Manage MCP Servers → View Raw config (under `mcpServers`)                            | `serverUrl`            |
      | Zed                                     | Zed `settings.json` (under `context_servers`)                                                      | `url`                  |
      | Gemini CLI                              | `~/.gemini/settings.json` (under `mcpServers`)                                                     | `httpUrl`              |
      | Warp                                    | Settings → MCP Servers → Add MCP Server (top-level `exa`)                                          | `url`                  |
      | v0 by Vercel                            | Prompt Tools → Add MCP                                                                             | paste the URL directly |

      If your client doesn't support remote MCP servers, use the `mcp-remote` bridge:

      ```json theme={null}
      {
        "mcpServers": {
          "exa": {
            "command": "npx",
            "args": ["-y", "mcp-remote", "https://mcp.exa.ai/mcp"]
          }
        }
      }
      ```

      Or run the local [npm package](https://www.npmjs.com/package/exa-mcp-server) with your [Exa API key](https://dashboard.exa.ai/api-keys):

      ```json theme={null}
      {
        "mcpServers": {
          "exa": {
            "command": "npx",
            "args": ["-y", "exa-mcp-server"],
            "env": {
              "EXA_API_KEY": "your_api_key"
            }
          }
        }
      }
      ```
    </Tab>
  </Tabs>
</div>

## Authentication

Exa MCP supports three authentication modes:

| Mode    | Use it for                                                  | Setup                                                                                                       |
| ------- | ----------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
| Keyless | Free rate-limited usage without sign-in or API key          | Connect to `https://mcp.exa.ai/mcp`                                                                         |
| OAuth   | Interactive clients, marketplace installs, production usage | Connect to `https://mcp.exa.ai/mcp?login` to sign in to Exa in the browser. Usage belongs to your Exa team. |
| API key | Clients without MCP OAuth                                   | Connect to `https://mcp.exa.ai/mcp` with the `x-api-key` header set to your API key                         |

### Sign in with OAuth

ChatGPT, Claude, and other marketplace installs prompt you to sign in when needed. In any client that supports MCP OAuth, you can request the same flow by connecting to:

```text theme={null}
https://mcp.exa.ai/mcp?login
```

Your client discovers Exa's authorization server, opens the browser sign-in, and manages access.

### Use an API key

<Card title="Get your Exa API key" icon="key" horizontal href="https://dashboard.exa.ai/api-keys">
  Create a key in the dashboard. New accounts start with free credits.
</Card>

Add the `x-api-key` header to the MCP server configuration:

```text theme={null}
x-api-key: YOUR_EXA_API_KEY
```

## Available Tools

| Tool                      | Availability                    | Use it for                                                                |
| ------------------------- | ------------------------------- | ------------------------------------------------------------------------- |
| `web_search_exa`          | Enabled by default              | Search the web and return relevant, ready-to-use content                  |
| `web_fetch_exa`           | Enabled by default              | Read clean content from one or more known URLs                            |
| `web_search_advanced_exa` | Availiable when opted in        | Configure web search with advanced filters and controls                   |
| `agent_run`               | Available with OAuth or API key | Run multi-step research, list-building, enrichment, and structured output |

Use the `tools` URL parameter to choose what your client sees. For example, to enable all tools:

```text theme={null}
https://mcp.exa.ai/mcp?tools=web_search_exa,web_fetch_exa,web_search_advanced_exa,agent_run
```

<Tip>
  An explicit `tools` list replaces the defaults, so include every tool you want enabled including web search and fetch.
</Tip>

## Exa Agent

Use [Exa Agent](/docs/agent/quickstart) for research that takes more than one search—for example, building a list, checking each item against criteria, or returning structured results.

Agent runs are usage-based, so `agent_run` requires OAuth or an API key. This URL starts OAuth and adds Agent alongside the default tools:

```text theme={null}
https://mcp.exa.ai/mcp?login&tools=web_search_exa,web_fetch_exa,agent_run
```

If you use an API key, omit `login` and add the key as described in [Authentication](#authentication).

<Steps>
  <Step title="Describe what you need">
    Ask for the research in plain language. Your assistant passes the request to `agent_run` with a `query`, and Exa Agent works out what to search, reads the sources, and checks what it finds against the request.

    Ask your Agent to provide an `outputSchema` only when your application needs the findings in a consistent JSON format. You can share one with your assistant in the system prompt, or have it generate one for you.
  </Step>

  <Step title="Get the result">
    When the research completes, the tool call hands your assistant the full research package:

    * The written findings
    * The sources behind them
    * Validated JSON if you provided `outputSchema`
    * Usage and cost

    Your assistant writes its reply from this package, so tell it what you want done with the output. You can ask it to summarize the findings, compare them, save them to a file, or anything else.
  </Step>

  <Step title="Continue if it needs more time">
    Research that outlasts a single MCP call doesn't fail: the tool reports `status: "running"` with an `id` while the run continues on Exa. Your assistant calls `agent_run` again with that `id` as `runId` to pick the same run back up.
  </Step>
</Steps>

<Accordion title="Optional controls" icon="sliders-horizontal">
  | Field             | Use it to                                                       |
  | ----------------- | --------------------------------------------------------------- |
  | `systemPrompt`    | Give Agent extra guidance for researching or judging results    |
  | `outputSchema`    | Return the answer in a specific JSON format                     |
  | `input.data`      | Enrich rows or entities you already have                        |
  | `input.exclusion` | Skip results you already know about                             |
  | `dataSources`     | Add up to five [Exa Connect](/docs/agent/connect/overview) providers |
  | `previousRunId`   | Build a new request on completed research                       |
  | `effort`          | Choose how much research Agent should do                        |
</Accordion>

<Tip>
  Use `runId` to keep waiting on current work. Use `previousRunId` to ask a new follow-up based on finished work.
</Tip>

See the [Exa Agent guide](/docs/agent/quickstart) for output schema patterns, effort modes, data sources, and pricing.

## Advanced search

Use `web_search_advanced_exa` when the request needs explicit category or domain filters, date ranges, text constraints, geo-targeting, query expansion, summaries, highlights, freshness control, or subpage crawling. For ordinary searches, keep `web_search_exa`; it gives the model a smaller tool surface and requires less configuration.

Advanced Search does not require authentication, although authenticated connections use your own plan and rate limits. Enable it alongside the default tools with:

```text theme={null}
https://mcp.exa.ai/mcp?tools=web_search_exa,web_fetch_exa,web_search_advanced_exa
```

The MCP tool presents common [Search API](/docs/reference/search) controls as tool-friendly fields such as `includeDomains`, `startPublishedDate`, `enableHighlights`, and `maxAgeHours`. Read the tool schema in your client for the exact field names.

## Troubleshooting

<AccordionGroup>
  <Accordion title="Rate limit error (429)">
    The connection is using Exa's free rate limits. Sign in with OAuth or add your own API key, then reconnect so requests use your team's plan and limits.

    <Card title="Get your Exa API key" icon="key" horizontal href="https://dashboard.exa.ai/api-keys">
      Create a key in the dashboard. New accounts start with free credits.
    </Card>
  </Accordion>

  <Accordion title="Agent is missing or asks for authentication">
    `agent_run` is not enabled by default and cannot use the free rate limits. Add it to the `tools` URL parameter, then connect with `?login` or configure an API key. See [Exa Agent](#exa-agent) for the complete URL.
  </Accordion>

  <Accordion title="OAuth sign-in does not open">
    Confirm that your client supports MCP OAuth and connect to `https://mcp.exa.ai/mcp?login`. Restart the client after changing the URL. If the client cannot complete MCP OAuth, use an API key instead.
  </Accordion>

  <Accordion title="Tools not appearing">
    An explicit `tools` parameter replaces the default tool list. Check that every tool you want is present in the URL, then restart your MCP client so it fetches the tool list again.
  </Accordion>

  <Accordion title="Claude desktop not connecting">
    Use the built-in connector: select **+** (or **Add connectors**) → **Connectors** tab → search for **Exa** → select **+**.
  </Accordion>

  <Accordion title="Config file not found">
    Common config locations:

    * Cursor: `~/.cursor/mcp.json`
    * fx: `~/.fx/mcp.json`
    * VS Code: `.vscode/mcp.json` (in project root)
    * Claude desktop (macOS): `~/Library/Application Support/Claude/claude_desktop_config.json`
    * Claude desktop (Windows): `%APPDATA%\Claude\claude_desktop_config.json`
  </Accordion>
</AccordionGroup>

## Resources

<Columns cols={2}>
  <Card title="GitHub" icon="git-branch" href="https://github.com/exa-labs/exa-mcp-server" cta="View source" arrow="true">
    Exa MCP source code.
  </Card>

  <Card title="npm" icon="package" href="https://www.npmjs.com/package/exa-mcp-server" cta="Open package" arrow="true">
    Run Exa MCP locally with the npm package.
  </Card>

  <Card title="Agent skills" icon="wrench" href="/docs/get-started/agent-skills/overview" cta="Browse skills" arrow="true">
    Portable skills that pair with Exa MCP.
  </Card>

  <Card title="Exa in Codex and ChatGPT" icon="messages-square" href="/docs/integrations/chatgpt-codex" cta="Open guide" arrow="true">
    Full setup and workflow guide for the Exa plugin.
  </Card>
</Columns>
