Exa MCP Search
Use this skill when online search, page fetch, code/docs lookup, company research, people research, or Exa MCP parameter checks are needed.
Current Source Of Truth
- Hosted MCP endpoint:
https://mcp.exa.ai/mcp
- Official source:
exa-labs/exa-mcp-server@15ffb50519e719dc791cdc750ce5ed1934c0a1ed
- Current npm package checked:
exa-mcp-server@3.4.1; verified tarball SHA-256 62379fab5750cbc8334f096ff986ab1b7152488afffab5b0e275995310b6e978
- Tool schemas can change. Before adding new parameters, verify with
tools/list through a normal HTTP client.
Direct MCP HTTP is the required invocation model for this skill. curl is fine, but keep the session and SSE parsing in small shell helpers instead of repeating low-level flags at every call site.
Tool Choice
| Need |
Prefer |
Notes |
| General current web search |
web_search_exa |
Simple search. Only query and numResults. |
| Filtered search, dates, domains, categories, summaries, highlights, subpages |
web_search_advanced_exa |
Enable explicitly in tools=. Use this for company/people/papers/news filters. |
| Read known URLs fully |
web_fetch_exa |
Use after search when highlights are insufficient. |
| Code examples/docs |
web_search_exa |
get_code_context_exa still exists but is deprecated. |
| Company research |
web_search_advanced_exa with category:"company" |
company_research_exa still exists but is deprecated. |
| People/profiles |
web_search_advanced_exa with category:"people" |
people_search_exa still exists but is deprecated. |
Core Parameters
web_search_exa
query required: semantically rich natural-language query. Can include category:company or category:people.
numResults optional: default 10.
- No
type, livecrawl, contextMaxCharacters, or tokensNum on current hosted schema.
{"query":"latest AI safety research June 2026","numResults":10}
web_search_advanced_exa
query required.
- Common optional filters:
numResults, type (auto | fast | instant), category, includeDomains, excludeDomains, startPublishedDate, endPublishedDate, startCrawlDate, endCrawlDate, includeText, excludeText, userLocation, moderation, additionalQueries.
- Content controls:
textMaxCharacters, contextMaxCharacters, enableSummary, summaryQuery, enableHighlights, highlightsMaxCharacters, highlightsQuery, maxAgeHours, livecrawlTimeout, subpages, subpageTarget.
- Deprecated highlight controls:
highlightsNumSentences, highlightsPerUrl; prefer highlightsMaxCharacters.
- Categories include
company, publication, news, pdf, github, personal site, people, financial report.
{
"query":"Anthropic funding valuation 2026",
"category":"news",
"includeDomains":["techcrunch.com","bloomberg.com"],
"startPublishedDate":"2026-01-01",
"numResults":10,
"type":"auto",
"enableHighlights":true
}
web_fetch_exa
urls required: array of URLs. Batch multiple URLs in one call.
maxCharacters optional: default 3000.
{"urls":["https://docs.exa.ai/reference"],"maxCharacters":5000}
Deprecated But Still Available
get_code_context_exa: use web_search_exa instead. Current schema is query, numResults; old tokensNum is obsolete.
company_research_exa: use web_search_advanced_exa with category:"company" instead. Schema is companyName, numResults; default 3.
people_search_exa: use web_search_advanced_exa with category:"people" instead.
crawling_exa: use web_fetch_exa instead.
deep_search_exa: use web_search_advanced_exa instead; current hosted MCP requires OAuth or an API key when this tool is requested.
deep_researcher_start / deep_researcher_check: deprecated; use Exa Research API directly when needed.
Curl Pattern
- POST
initialize; keep returned Mcp-Session-Id response header.
- POST
notifications/initialized with that header.
- POST
tools/list or tools/call with that header.
- If response is
text/event-stream, parse JSON from data: lines.
Minimal Curl Helper
EXA_URL="https://mcp.exa.ai/mcp?tools=web_search_exa,web_search_advanced_exa,web_fetch_exa"
EXA_SESSION_ID=""
exa_rpc() {
local payload="$1"
local session_header=()
local response
if [ -n "$EXA_SESSION_ID" ]; then
session_header=(-H "Mcp-Session-Id: $EXA_SESSION_ID")
fi
response="$(curl -isS "$EXA_URL" \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
"${session_header[@]}" \
--data "$payload")"
if [ -z "$EXA_SESSION_ID" ]; then
EXA_SESSION_ID="$(printf '%s\n' "$response" | awk 'tolower($0) ~ /^mcp-session-id:/ { sub(/^[^:]+:[[:space:]]*/, ""); gsub(/\r/, ""); print; exit }')"
fi
printf '%s\n' "$response" | sed -n 's/^data: //p'
}
exa_init() {
exa_rpc '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"exa-curl","version":"0.1.0"}}}' >/dev/null
exa_rpc '{"jsonrpc":"2.0","method":"notifications/initialized"}' >/dev/null
}
exa_call() {
local tool_name="$1"
local arguments_json="$2"
jq -nc --arg name "$tool_name" --argjson arguments "$arguments_json" \
'{jsonrpc:"2.0",id:2,method:"tools/call",params:{name:$name,arguments:$arguments}}' |
while IFS= read -r payload; do exa_rpc "$payload"; done
}
exa_init
exa_call web_search_exa '{"query":"latest AI safety research","numResults":5}'
Tool output format differs: web_search_exa returns formatted text, web_search_advanced_exa returns JSON text, and web_fetch_exa returns fetched page text.
Research Practice
- For simple lookup, run one targeted
web_search_exa call.
- For dated/current questions, calculate exact date ranges first and pass
startPublishedDate / endPublishedDate through web_search_advanced_exa.
- For source-heavy tasks, fetch only the best URLs with
web_fetch_exa; do not dump raw results into the final answer.
- For company/people/paper/news workflows, prefer
web_search_advanced_exa categories rather than deprecated specialized tools.
- Mention source uncertainty when Exa returns sparse, conflicting, or old results.
References
- Tool fields:
references/exa-tools.md
1---2name: exa-search3description: Use Exa MCP for current web, code/docs, company, people, and page-fetch research. Prefer current hosted tool schemas and note deprecated tools.4---5
6# Exa MCP Search
7
8Use this skill when online search, page fetch, code/docs lookup, company research, people research, or Exa MCP parameter checks are needed.
9
10## Current Source Of Truth
11
12- Hosted MCP endpoint: `https://mcp.exa.ai/mcp`
13- Official source: `exa-labs/exa-mcp-server@15ffb50519e719dc791cdc750ce5ed1934c0a1ed`
14- Current npm package checked: `exa-mcp-server@3.4.1`; verified tarball SHA-256 `62379fab5750cbc8334f096ff986ab1b7152488afffab5b0e275995310b6e978`
15- Tool schemas can change. Before adding new parameters, verify with `tools/list` through a normal HTTP client.
16
17Direct MCP HTTP is the required invocation model for this skill. `curl` is fine, but keep the session and SSE parsing in small shell helpers instead of repeating low-level flags at every call site.
18
19## Tool Choice
20
21| Need | Prefer | Notes |
22| --- | --- | --- |
23| General current web search | `web_search_exa` | Simple search. Only `query` and `numResults`. |
24| Filtered search, dates, domains, categories, summaries, highlights, subpages | `web_search_advanced_exa` | Enable explicitly in `tools=`. Use this for company/people/papers/news filters. |
25| Read known URLs fully | `web_fetch_exa` | Use after search when highlights are insufficient. |
26| Code examples/docs | `web_search_exa` | `get_code_context_exa` still exists but is deprecated. |
27| Company research | `web_search_advanced_exa` with `category:"company"` | `company_research_exa` still exists but is deprecated. |
28| People/profiles | `web_search_advanced_exa` with `category:"people"` | `people_search_exa` still exists but is deprecated. |
29
30## Core Parameters
31
32### `web_search_exa`
33
34- `query` required: semantically rich natural-language query. Can include `category:company` or `category:people`.
35- `numResults` optional: default `10`.
36- No `type`, `livecrawl`, `contextMaxCharacters`, or `tokensNum` on current hosted schema.
37
38```json
39{"query":"latest AI safety research June 2026","numResults":10}
40```
41
42### `web_search_advanced_exa`
43
44- `query` required.
45- Common optional filters: `numResults`, `type` (`auto` | `fast` | `instant`), `category`, `includeDomains`, `excludeDomains`, `startPublishedDate`, `endPublishedDate`, `startCrawlDate`, `endCrawlDate`, `includeText`, `excludeText`, `userLocation`, `moderation`, `additionalQueries`.
46- Content controls: `textMaxCharacters`, `contextMaxCharacters`, `enableSummary`, `summaryQuery`, `enableHighlights`, `highlightsMaxCharacters`, `highlightsQuery`, `maxAgeHours`, `livecrawlTimeout`, `subpages`, `subpageTarget`.
47- Deprecated highlight controls: `highlightsNumSentences`, `highlightsPerUrl`; prefer `highlightsMaxCharacters`.
48- Categories include `company`, `publication`, `news`, `pdf`, `github`, `personal site`, `people`, `financial report`.
49
50```json
51{
52 "query":"Anthropic funding valuation 2026",
53 "category":"news",
54 "includeDomains":["techcrunch.com","bloomberg.com"],
55 "startPublishedDate":"2026-01-01",
56 "numResults":10,
57 "type":"auto",
58 "enableHighlights":true
59}
60```
61
62### `web_fetch_exa`
63
64- `urls` required: array of URLs. Batch multiple URLs in one call.
65- `maxCharacters` optional: default `3000`.
66
67```json
68{"urls":["https://docs.exa.ai/reference"],"maxCharacters":5000}
69```
70
71### Deprecated But Still Available
72
73- `get_code_context_exa`: use `web_search_exa` instead. Current schema is `query`, `numResults`; old `tokensNum` is obsolete.
74- `company_research_exa`: use `web_search_advanced_exa` with `category:"company"` instead. Schema is `companyName`, `numResults`; default `3`.
75- `people_search_exa`: use `web_search_advanced_exa` with `category:"people"` instead.
76- `crawling_exa`: use `web_fetch_exa` instead.
77- `deep_search_exa`: use `web_search_advanced_exa` instead; current hosted MCP requires OAuth or an API key when this tool is requested.
78- `deep_researcher_start` / `deep_researcher_check`: deprecated; use Exa Research API directly when needed.
79
80## Curl Pattern
81
821. POST `initialize`; keep returned `Mcp-Session-Id` response header.
832. POST `notifications/initialized` with that header.
843. POST `tools/list` or `tools/call` with that header.
854. If response is `text/event-stream`, parse JSON from `data:` lines.
86
87### Minimal Curl Helper
88
89```bash
90EXA_URL="https://mcp.exa.ai/mcp?tools=web_search_exa,web_search_advanced_exa,web_fetch_exa"
91EXA_SESSION_ID=""
92
93exa_rpc() {
94 local payload="$1"
95 local session_header=()
96 local response
97
98 if [ -n "$EXA_SESSION_ID" ]; then
99 session_header=(-H "Mcp-Session-Id: $EXA_SESSION_ID")
100 fi
101
102 response="$(curl -isS "$EXA_URL" \
103 -H 'Content-Type: application/json' \
104 -H 'Accept: application/json, text/event-stream' \
105 "${session_header[@]}" \
106 --data "$payload")"
107
108 if [ -z "$EXA_SESSION_ID" ]; then
109 EXA_SESSION_ID="$(printf '%s\n' "$response" | awk 'tolower($0) ~ /^mcp-session-id:/ { sub(/^[^:]+:[[:space:]]*/, ""); gsub(/\r/, ""); print; exit }')"
110 fi
111
112 printf '%s\n' "$response" | sed -n 's/^data: //p'
113}
114
115exa_init() {
116 exa_rpc '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"exa-curl","version":"0.1.0"}}}' >/dev/null
117 exa_rpc '{"jsonrpc":"2.0","method":"notifications/initialized"}' >/dev/null
118}
119
120exa_call() {
121 local tool_name="$1"
122 local arguments_json="$2"
123 jq -nc --arg name "$tool_name" --argjson arguments "$arguments_json" \
124 '{jsonrpc:"2.0",id:2,method:"tools/call",params:{name:$name,arguments:$arguments}}' |
125 while IFS= read -r payload; do exa_rpc "$payload"; done
126}
127
128exa_init
129exa_call web_search_exa '{"query":"latest AI safety research","numResults":5}'
130```
131
132Tool output format differs: `web_search_exa` returns formatted text, `web_search_advanced_exa` returns JSON text, and `web_fetch_exa` returns fetched page text.
133
134## Research Practice
135
136- For simple lookup, run one targeted `web_search_exa` call.
137- For dated/current questions, calculate exact date ranges first and pass `startPublishedDate` / `endPublishedDate` through `web_search_advanced_exa`.
138- For source-heavy tasks, fetch only the best URLs with `web_fetch_exa`; do not dump raw results into the final answer.
139- For company/people/paper/news workflows, prefer `web_search_advanced_exa` categories rather than deprecated specialized tools.
140- Mention source uncertainty when Exa returns sparse, conflicting, or old results.
141
142## References
143
144- Tool fields: `references/exa-tools.md`