# Exa MCP connector

The Exa connector brings live web search, page contents, cited answers, deep research tasks, and monitors into Claude, ChatGPT, Cursor, and any MCP client, so your team can research the web from the tool they already use.

Source: https://elaichi.ai/connectors/exa/

## Facts

| | |
| --- | --- |
| Application | Exa |
| Category | Default |
| AI tools | 56 |
| Authentication | Connects with an API key |
| Needs your own OAuth app | No |
| MCP endpoint | https://api.elaichi.ai/mcp |
| Works with | Claude, ChatGPT, Cursor, any MCP client, and the Elaichi Agent |
| Tools advertised by name | No. 56 tools is past the 30-tool threshold, so clients use `search_tools` and `execute_tool` |

## What you can ask once Exa is connected

- Summarize the last 20 Exa agent runs for me.
- Draft an Exa answer on competitor pricing changes this week.
- List Exa contents saved for the launch research brief.

## Connect Exa in Elaichi

This happens once for the organization, before any client is involved.

1. Open Connections, choose Add connection, and pick Exa.
2. Optionally set Share with, then press Connect.
3. Paste an Exa API key. One person generates a token in Exa and pastes it once. Everyone else works through Share with, and never sees it.

Credentials are vaulted and nobody, including the AI, reads them back. The connection becomes a toolbox immediately, so you can curate which Exa tools are exposed, rename them, or freeze arguments before anyone points a client at it.

## Connect Exa to Claude

Endpoint: https://api.elaichi.ai/mcp

1. Open Customize, then Connectors.
2. Press Add.
3. Name it, paste the MCP server URL, then Continue.
4. Sign in and approve.

On Team and Enterprise, an Owner adds it once. Everyone else turns it on for themselves.

## Connect Exa to ChatGPT

Endpoint: https://api.elaichi.ai/mcp

1. Open Plugins, then press the + button.
2. Name it and paste the endpoint into Server URL.
3. Leave Authentication on OAuth, then tick the risk acknowledgement.
4. Press Create, then sign in and approve.

Works on the web today. The plugin directory lives at chatgpt.com/plugins.

## Connect Exa to Cursor

Endpoint: https://api.elaichi.ai/mcp

1. Open `~/.cursor/mcp.json`.
2. Add the endpoint under `mcpServers`.
3. Reload Cursor, then sign in and approve.

Set up per machine, so repeat it on each computer you work from.

## Connect Exa to any MCP client

Endpoint: https://api.elaichi.ai/mcp

1. Add the endpoint as a remote MCP server.
2. Sign in and approve.

The Elaichi Agent already has these tools, with nothing to set up.

## What the consent screen decides

Only Read is granted by default, which is not enough to call a Exa tool. Over MCP there is no trusted place to confirm a write in the moment, so the consent screen is the standing approval rather than a formality. Grant Read and Run tools. Think hard before granting Delete, which reaches into connected apps and cannot be undone.

## What teams do with Exa through Elaichi

### Research a prospect before the first call

Sales. Ask for a company's recent news, funding, leadership changes, and what its own site says, then walk in with a briefing instead of a browser full of tabs.

### Watch competitors for new launches and pricing

Marketing. Set up an Exa monitor on a competitor's product pages and announcements, and check the latest monitor runs for what changed since last week.

### Run a deep research task on a question

Research. Hand Exa a hard question, let the research task gather sources across the web, and get back a written answer with the pages it drew from.

### Build a shortlist of candidates and companies

Recruiting. Search for people and organizations that match a role, pull the full text of their public profiles and company pages, and keep the list in one place.

### Pull the text of documentation and reviews

Product. Fetch the contents of docs, changelogs, and review pages for tools you are evaluating, then ask for a summary of the differences.

### Get a cited answer to a market question

Leadership. Ask how large a market is or who the main players are, and get an answer with links to the sources behind every claim.

## Frequently asked questions

### How do I connect Exa to Claude?

First connect Exa in Elaichi by pasting your Exa API key, which you copy from your Exa dashboard. There is no OAuth application to register and no client ID or secret to generate. Then in Claude open Customize, then Connectors, then Add, and paste the endpoint https://api.elaichi.ai/mcp. Sign in to Elaichi when Claude asks and Exa search, contents, answers, research tasks, and monitors are available in your conversation.

### Does Exa work with ChatGPT and Cursor as well as Claude?

Yes. Once Exa is connected in Elaichi, the same endpoint, https://api.elaichi.ai/mcp, works in Claude, ChatGPT, Cursor, any MCP client, and the Elaichi Agent. You connect Exa once and every client you use picks it up.

### What can an AI agent actually do with Exa?

With Exa connected, an AI agent can search the web for pages, people, and companies, fetch the full text of a page, and give a cited answer to a direct question. It can also start a deep research task on a hard question, create monitors that watch for new results on a topic, and read back what those monitors found. Because Exa offers many actions, short concrete asks such as "find the pricing page for Acme" work better than long paragraphs.

### Does connecting Exa give the AI my whole Exa account?

The AI can only do what the Exa account behind the connected API key can do, and every call is tied to the Elaichi user who made it. Elaichi can narrow that further, for example allowing search and page contents but not creating monitors or research tasks, and it never widens access beyond what the Exa key already permits.

### Can my team share one Exa connection?

Yes. One person connects Exa with the API key and shares the connection with a team in Elaichi, and nobody else on the team ever sees or handles the key. Each teammate still signs in to Elaichi as themselves, so the audit log records which person ran each Exa search, research task, or monitor change.

### Can I stop an agent from deleting or changing things in Exa?

Yes. Restrictions in Elaichi work per action, so you can allow Exa search and page contents while blocking the actions that create, update, or delete monitors, runs, and research tasks. A blocked action is never shown to Claude, ChatGPT, Cursor, or any other client, so no prompt, however worded, can reach it.

### What happens to an Exa connection when someone leaves?

When a person is offboarded in Elaichi, their access to Exa through every connected client ends at once. If they were using a shared Exa connection, it keeps working for everyone else on the team, and if they were the one who connected Exa, an admin can reassign it. Disconnecting Exa once in Elaichi removes it from Claude, ChatGPT, Cursor, and every other client at the same time.

## All 56 Exa tools

Every tool below is callable through https://api.elaichi.ai/mcp once Exa is connected, subject to the toolbox it is in and the restrictions on the caller.

- **Create a Exa nevermined purchase** (Create). Purchase an Exa API key with $7 of credits via Nevermined x402 card delegation. For a first-time payer, provisions a new key; for a returning payer, adds $7 of credits to the existing key. Returns: status, apiKey, expiresAt.
- **Delete a Exa agent run by ID** (Delete). Delete an exa agent run by id. Returns an empty 204 response on success. Required: id.
- **Get single Exa agent run by ID** (Get). Retrieve an exa agent run by id. Poll this endpoint until the run reaches a terminal state. Returns: id, status (one of queued, running, completed, failed, cancelled). Required: id.
- **Create a Exa agent run** (Create). Create a new exa agent run. Returns: id, status reflecting the initial state of the newly created run.
- **List all Exa agent runs** (List). List all exa agent runs. Returns: id, status per run.
- **Create a Exa run** (Create). Create an asynchronous Exa Agent run with a natural-language query. Returns: id, query, status, createdAt. Required: query. Optionally provide outputSchema for validated structured JSON output, input.data or input.exclusion to control row processing, or previousRunId to continue from a completed prior run.
- **List all Exa runs** (List). List Exa Agent runs for your team, ordered newest to oldest. Returns: id, query, status, createdAt.
- **List all Exa run events** (List). List stored Exa agent run events for a given run, returned as a paginated JSON array. Returns event records including id, type, and data for each stored event in the run. Required: run_id.
- **Create a Exa answer** (Create). Submit a question to exa's answer endpoint, which performs an Exa search and uses an LLM to generate either a direct answer (e.g. factual queries) or a detailed summary with citations (e.g. open-ended queries). Returns: answer, citations. Supports token streaming via stream and structured JSON output via outputSchema. Required: query.
- **Create a Exa content** (Create). Extract clean, LLM-ready content from one or more URLs using the exa Contents API. Returns: title, url, id, text, highlights, summary, publishedDate, author, image, favicon. Required: urls.
- **Get single Exa content by ID** (Get). Get full page content, highlights, or summaries for one or more known URLs using exa. Returns: title, url, id, text, highlights, summary, publishedDate, author, image, favicon. Required: urls.
- **List all Exa contents** (List). List extracted content results for multiple URLs via the exa Contents API. Returns: title, url, id, text, highlights, summary, publishedDate, author, image, favicon. Required: urls.
- **Create a Exa context** (Create). Search exa for relevant code snippets and examples from open-source repositories, GitHub repos, docs pages, and Stack Overflow posts. Returns: requestId, query, response (formatted code snippets and contextual examples), resultsCount, costDollars, searchTime, and outputTokens. Required: query.
- **Exa monitors bulk update** (Update). Perform a batch action (delete, pause, or unpause) on Exa monitors matching the provided filters. Returns: data, has_more. Required: action. Use dry_run: true (the default) to preview which monitors would be affected before committing; repeat requests until has_more is false to process all matches.
- **Create a Exa monitor** (Create). Create a new Exa monitor that runs recurring searches on a schedule and delivers results to a webhook endpoint with automatic deduplication. Returns: id, search, trigger, status, webhookSecret. Store webhookSecret securely — it is returned only once at creation time.
- **Delete a Exa monitor by ID** (Delete). Delete an Exa monitor by id. This action cannot be undone. Returns an empty 204 response on success. Required: id.
- **Get single Exa monitor by ID** (Get). Get a single Exa monitor by id. Returns: id, search, trigger, status. Required: id.
- **List all Exa monitors** (List). List all Exa monitors for the authenticated team. Returns: id, search, trigger, status. Supports filtering by status; results use cursor-based pagination.
- **Update a Exa monitor by ID** (Update). Update an existing Exa monitor by id. All body fields are optional; for search, send only the fields to change. Set trigger to null to remove the schedule. Returns: id, search, trigger, status. Required: id.
- **Get single Exa monitor run by ID** (Get). Get a single exa monitor run by its ID, including the full output when the run has completed. Returns: id, output. Required: monitor_id, id.
- **List all Exa monitor runs** (List). List all runs for an exa monitor in reverse chronological order using cursor-based pagination. Returns: id, output. Required: monitor_id.
- **Create a Exa research task** (Create). Create an asynchronous exa research task that explores the web, gathers sources, synthesizes findings, and returns results with citations. Returns: researchId for polling completion status. Providing an outputSchema generates structured JSON; omitting it produces a detailed markdown report. Deprecated May 1, 2026 — migrate to /search with type "deep-reasoning".
- **List all Exa research tasks** (List). List exa research tasks using cursor-based pagination (max 50 per page). Returns: researchId per task. Deprecated May 1, 2026 — migrate to /search with type "deep-reasoning".
- **Create a Exa search** (Create). Search the exa web index and extract content from matching pages. Returns result items including url, title, publishedDate, and content fields (text, highlights, summary) populated based on the contents parameter. Required: query.
- **List all Exa searches** (List). List exa web search results matching a natural language query. Returns result items including url, title, publishedDate, and content fields (text, highlights, summary) populated based on the contents parameter. Required: query.
- **Create a Exa API key** (Create). Create a new exa API key for your team with an optional name and rate limit. Returns: id, name, rateLimit, teamId, createdAt.
- **Delete a Exa API key by ID** (Delete). Permanently delete an exa API key by id. Returns an empty 204 response on success. Required: id.
- **Get single Exa API key by ID** (Get). Get a specific exa API key by id. Returns: id, name, rateLimit, teamId, createdAt. Required: id.
- **List all Exa API keys** (List). List all exa API keys belonging to your team. Returns: id, name, rateLimit, teamId, createdAt for each key.
- **Update a Exa API key by ID** (Update). Update the name and/or rate limit of an existing exa API key by id. Returns: id, name, rateLimit, teamId, createdAt. Required: id.
- **Exa companies search** (Search). Search exa's index of 50M+ companies using natural language queries across industry, funding stage, headcount, geography, and technology. Returns: title, url, and entities — each entity containing id, type, and structured properties including name, foundedYear, headquarters, financials, and webTraffic. Required: query.
- **Exa news search** (Search). Search exa's real-time news index — spanning major publications, trade press, and niche outlets — using semantic or keyword queries with native date filtering. Returns: url, title, publishedDate, score, id. Required: query.
- **List all Exa search** (List). Search exa for news and web content using natural language queries. Returns a list of results including url, title, score, publishedDate, and optional contents fields (text, highlights, summary). Required: query. numResults accepts 1–100 and defaults to 10.
- **Exa people search** (Search). Search Exa's index of 1B+ professional profiles using a natural language query. Returns per-result: title, url, and entities containing structured person metadata such as name, location, workHistory, and educationHistory. Required: query.
- **Create a Exa agent run cancellation** (Create). Cancel an in-progress exa agent run by its run_id. Sends a cancellation request to stop the specified run. Returns an empty 204 response on success. Required: run_id.
- **Create a Exa monitor trigger** (Create). Trigger an Exa monitor run immediately in exa, bypassing its scheduled interval. Works for monitors with `active` or `paused` status. Returns an empty 204 response on success. Required: monitor_id.
- **Get single Exa API key usage by ID** (Get). Get usage analytics and billing data for a specific exa API key. Returns api_key_id, usage, and costs, making it suitable for building billing dashboards, monitoring spend, and generating per-key cost-allocation reports. Required: api_key_id.
- **Create a Exa webset** (Create). Create a new exa Webset that asynchronously searches, verifies, and enriches web results against specified criteria. Returns: id, status, metadata, created_at, updated_at.
- **List all Exa websets** (List). List all exa Websets. Returns: id, status, metadata, created_at, updated_at.
- **Get single Exa webset by ID** (Get). Get a single exa Webset by id. Optionally pass expand=["items"] to include the Webset's collected items in the response. Returns: id, status, metadata, created_at, updated_at, items. Required: id.
- **Update a Exa webset by ID** (Update). Update an exa Webset by id. Returns: id, status, metadata, created_at, updated_at. Required: id.
- **Delete a Exa webset by ID** (Delete). Delete an exa Webset by id. Returns the deleted Webset object including id, status, metadata, created_at, and updated_at. Required: id.
- **Create a Exa webset cancellation** (Create). Cancel an exa Webset, halting any active searches and transitioning the Webset status to 'canceled'. Returns the updated Webset object including its id, object, status, metadata, created_at, and updated_at. Required: webset_id.
- **Create a Exa webset search** (Create). Create a new search within an exa Webset. Returns: id, object, status, query, entity, criteria, progress, createdAt, updatedAt. Required: webset_id, query, count. Criteria list is capped at 5 items; if omitted, exa auto-detects criteria from the query.
- **Get single Exa webset search by ID** (Get). Get a single exa Webset search by id. Returns: id, object, status, query, entity, criteria, progress, websetId, createdAt, updatedAt. Required: webset_id, id.
- **Create a Exa webset search cancellation** (Create). Cancel a running exa webset search, immediately stopping its execution. Returns the updated WebsetSearch object including id, object, status (set to 'canceled'), query, entity, and criteria. Required: webset_id, search_id.
- **Create a Exa webset enrichment** (Create). Create an exa Webset enrichment, instructing an AI agent to extract or compute a specific data point for every item in the Webset. Returns: id, status, description, format, title, webset_id, options, instructions, metadata, created_at, updated_at. Required: webset_id, description.
- **Get single Exa webset enrichment by ID** (Get). Get a single exa Webset enrichment by id. Returns: id, status, description, format, title, webset_id, options, instructions, metadata, created_at, updated_at. Required: webset_id, id.
- **Delete a Exa webset enrichment by ID** (Delete). Delete an exa Webset enrichment by id. Returns an empty 204 response on success. Required: webset_id, id.
- **Create a Exa webset enrichment cancellation** (Create). Cancel a pending exa webset enrichment. Returns the updated enrichment object including id, status, webset_id, description, format, options, instructions, metadata, created_at, and updated_at. Required: webset_id, enrichment_id.
- **Create a Exa webhook** (Create). Create a new Exa webhook to receive event notifications at a specified URL. Returns: id, url, events, createdAt. Required: url. If events is omitted, all event types are delivered by default.
- **List all Exa webhooks** (List). List all Exa webhooks configured for your account. Returns: id, url, events, createdAt per webhook.
- **Get single Exa webhook by ID** (Get). Get a single Exa webhook by id. Returns: id, url, events, createdAt. Required: id.
- **Update a Exa webhook by ID** (Update). Update an existing Exa webhook by id. Returns: id, url, events, createdAt. Required: id.
- **Delete a Exa webhook by ID** (Delete). Delete an Exa webhook by id. Returns an empty 204 response on success. Required: id.
- **List all Exa webhook attempts** (List). List delivery attempts for a specific exa webhook. Returns: id, eventId, eventType, webhookId, url, successful, responseStatusCode, responseBody, responseHeaders, attempt, attemptedAt, and object. Required: webhook_id.
