Only use tools returned by tools/list. If web_search_exa is listed, use it to find relevant pages and current information by describing the page you want to find. If web_fetch_exa is listed, use it to read known URLs when search highlights are insufficient or you already have a URL. If agent_run is listed, use it for multi-step research, list-building, or enrichment. If a run is still running, continue with its runId rather than starting a duplicate run.
Protocol
Pass100/10020 / 20 pts
Connection, authentication, and protocol compatibility.
Expand internal abbreviations and remove technical prefixes from the display title.
Description99/100
Search the web for any topic and get clean, ready-to-use content.
Best for: Finding current information, news, facts, people, companies, or answering questions about any topic.
Returns: Clean text content from top search results.
Query tips:
describe the ideal page, not keywords. "blog post comparing React and Vue performance" not "React vs Vue".
Use category:people / category:company to search through Linkedin profiles / companies respectively.
If highlights are insufficient, follow up with web_fetch_exa on the best URLs.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query
Natural language search query. Should be a semantically rich description of the ideal page, not just keywords. Optionally include category:<type> (company, people) to focus results — e.g. 'category:people John Doe software engineer'.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
numResults
Number of search results to return (default: 10).
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
objective
Goal for this search turn; say which documents should rank first, which should be excluded, and what specific facts or figures to pull from them.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "web_search_exa",
"title": "Web Search",
"description": "Search the web for any topic and get clean, ready-to-use content.\n\n Best for: Finding current information, news, facts, people, companies, or answering questions about any topic.\n Returns: Clean text content from top search results.\n\n Query tips:\n describe the ideal page, not keywords. \"blog post comparing React and Vue performance\" not \"React vs Vue\".\n Use category:people / category:company to search through Linkedin profiles / companies respectively.\n If highlights are insufficient, follow up with web_fetch_exa on the best URLs.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"query",
"objective"
],
"properties": {
"query": {
"type": "string",
"minLength": 1,
"description": "Natural language search query. Should be a semantically rich description of the ideal page, not just keywords. Optionally include category:<type> (company, people) to focus results — e.g. 'category:people John Doe software engineer'."
},
"objective": {
"type": "string",
"maxLength": 4096,
"minLength": 1,
"description": "Goal for this search turn; say which documents should rank first, which should be excluded, and what specific facts or figures to pull from them."
},
"numResults": {
"type": "number",
"description": "Number of search results to return (default: 10)."
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}
}
Expand internal abbreviations and remove technical prefixes from the display title.
Description98/100
Read a webpage's full content as clean markdown. Use after web_search_exa when highlights are insufficient or to read any URL.
Best for: Extracting full content from known URLs. Batch multiple URLs in one call.
Returns: Clean text content and metadata from the page(s).
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
urls
URLs to read. Batch multiple URLs in one call.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
maxCharacters
Maximum characters to extract per page (default: 3000)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "web_fetch_exa",
"title": "Fetch Web Pages",
"description": "Read a webpage's full content as clean markdown. Use after web_search_exa when highlights are insufficient or to read any URL.\n\nBest for: Extracting full content from known URLs. Batch multiple URLs in one call.\nReturns: Clean text content and metadata from the page(s).",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
},
"description": "URLs to read. Batch multiple URLs in one call."
},
"maxCharacters": {
"type": "number",
"minimum": 1,
"description": "Maximum characters to extract per page (default: 3000)"
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
Start or resume an Exa Agent run for multi-step research, list-building, or enrichment. Use it instead of running many searches yourself when a task needs multiple searches, cross-source verification, or a structured table of results. Long-running: returns a run ID; resume with runId when the tool reports the run is still running. Not for a single question or lookup (use web_search_exa) or reading a known URL (use web_fetch_exa). An interrupted tool call is not an explicit cancellation request.
The description explains the capability, when to use it, and what to expect.
Inputs82/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query
Natural-language research or enrichment objective. Provide query or runId, not both.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
runId
ID returned by an earlier call. Use it to check or continue waiting for the same run. Do not start a duplicate run.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
systemPrompt
Optional system-level guidance for the Agent.
Clear enough to supply this argument.
outputSchema
JSON Schema describing the desired research output. Prefer a top-level object with bounded arrays and source/evidence fields.
Clear enough to supply this argument.
input › data
Known rows/entities to enrich or process.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
input › exclusion
Entities, rows, or records Agent should avoid returning again.
Clear enough to supply this argument.
dataSources › items › provider
Exa Connect provider ID. Self-serve providers: fiber, financial_datasets, similarweb, baselayer, affiliate, particle, jinko, polymarket, macrobond. Other providers work only when enabled for your Exa team.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
previousRunId
ID of a completed prior run to use as context for a new run.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
effort
Agent effort level. Defaults to low.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
budget › maxCostDollars
Maximum spend for the run in US dollars, $1–$100. Only for effort auto or ultra; defaults to $5 for auto and $20 for ultra.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
budget › maxDurationSeconds
Soft wall-clock limit in seconds, 300–10800. Only for effort ultra; the run returns what it has found as it nears the limit.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
{
"name": "agent_run",
"title": "Run Exa Agent",
"description": "Start or resume an Exa Agent run for multi-step research, list-building, or enrichment. Use it instead of running many searches yourself when a task needs multiple searches, cross-source verification, or a structured table of results. Long-running: returns a run ID; resume with runId when the tool reports the run is still running. Not for a single question or lookup (use web_search_exa) or reading a known URL (use web_fetch_exa). An interrupted tool call is not an explicit cancellation request.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"input": {
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": {}
},
"description": "Known rows/entities to enrich or process."
},
"exclusion": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": {}
},
"description": "Entities, rows, or records Agent should avoid returning again."
}
},
"additionalProperties": false
},
"query": {
"type": "string",
"minLength": 1,
"description": "Natural-language research or enrichment objective. Provide query or runId, not both."
},
"runId": {
"type": "string",
"pattern": "^agent_run_",
"description": "ID returned by an earlier call. Use it to check or continue waiting for the same run. Do not start a duplicate run."
},
"budget": {
"type": "object",
"properties": {
"maxCostDollars": {
"type": "number",
"description": "Maximum spend for the run in US dollars, $1–$100. Only for effort auto or ultra; defaults to $5 for auto and $20 for ultra."
},
"maxDurationSeconds": {
"type": "integer",
"description": "Soft wall-clock limit in seconds, 300–10800. Only for effort ultra; the run returns what it has found as it nears the limit."
}
},
"description": "Optional per-run spend and duration limits for the metered auto and ultra efforts. Set it when the user names a cost or time limit.",
"additionalProperties": false
},
"effort": {
"enum": [
"minimal",
"low",
"medium",
"high",
"xhigh",
"ultra",
"auto"
],
"type": "string",
"description": "Agent effort level. Defaults to low."
},
"dataSources": {
"type": "array",
"items": {
"type": "object",
"required": [
"provider"
],
"properties": {
"provider": {
"type": "string",
"minLength": 1,
"description": "Exa Connect provider ID. Self-serve providers: fiber, financial_datasets, similarweb, baselayer, affiliate, particle, jinko, polymarket, macrobond. Other providers work only when enabled for your Exa team."
}
},
"additionalProperties": false
},
"maxItems": 5,
"description": "Optional Exa Connect providers to enable for this run."
},
"outputSchema": {
"type": "object",
"description": "JSON Schema describing the desired research output. Prefer a top-level object with bounded arrays and source/evidence fields.",
"additionalProperties": {}
},
"systemPrompt": {
"type": "string",
"description": "Optional system-level guidance for the Agent."
},
"previousRunId": {
"type": "string",
"pattern": "^agent_run_",
"description": "ID of a completed prior run to use as context for a new run."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"success",
"id",
"status",
"outputReady"
],
"properties": {
"id": {
"type": "string",
"description": "agent_run_... ID. Pass as runId to resume a running run."
},
"error": {
"type": "object",
"additionalProperties": {}
},
"usage": {
"type": "object",
"additionalProperties": {}
},
"output": {
"anyOf": [
{
"type": "object",
"properties": {
"text": {
"anyOf": [
{
"type": "string",
"minLength": 0
},
{
"type": "null"
}
],
"description": "Prose answer."
},
"files": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": {}
}
},
"grounding": {
"description": "Per-field citations and confidence."
},
"structured": {
"description": "Output matching the caller-supplied outputSchema, if any."
}
},
"additionalProperties": true
},
{
"type": "null"
}
]
},
"status": {
"enum": [
"completed",
"running",
"failed",
"cancelled"
],
"type": "string"
},
"message": {
"type": "string",
"description": "Next-step guidance for running runs."
},
"success": {
"type": "boolean",
"description": "True for completed and running runs; false for failed and cancelled."
},
"stopReason": {
"anyOf": [
{
"type": "string",
"minLength": 0
},
{
"type": "null"
}
],
"description": "Why the run stopped, e.g. complete, cancelled, error."
},
"costDollars": {
"type": "object",
"additionalProperties": {}
},
"outputReady": {
"type": "boolean",
"description": "True only when status is completed."
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}
}
Loading score analytics…
Put your MCP to the test
A few tasks worth trying with this server, chosen from its reviewed tools. These have not been run.
01Web SearchSearch the web for any topic and get clean, ready-to-use content.
02Fetch Web PagesRead a webpage's full content as clean markdown.
Want to run these tasks against your MCP server with us?
Exa setup, tools, quality score, publishing readiness, and alternatives.
How do I add Exa to Claude, ChatGPT, or Cursor?
Add Exa to Claude, ChatGPT, or Cursor by connecting its remote MCP URL in each client's MCP settings. In Claude, add a custom connector. In ChatGPT, add an MCP app. In Cursor, add an MCP server under Settings. The MCP URL is https://mcp.exa.ai/mcp. This server requires OAuth, so complete the login prompt after you connect.
Is Exa MCP ready for ChatGPT and Claude?
As of October 16, 2026, Exa scores 100/100 on Manufact's MCP publishing checklist. The scan meets ChatGPT publishing checks and meets Claude publishing checks. Passing these checks does not guarantee marketplace approval.
How clear is Exa's MCP tool documentation?
As of October 16, 2026, Exa scores 84/100 in Manufact's review of tool titles, descriptions, input and output schemas, and behavior annotations. The review covers 3 of 3 discovered tools. The quality score measures documentation clarity; runtime behavior and marketplace readiness require separate checks.
What tools does the Exa MCP server provide?
Exa provides these MCP tools: web_search_exa and get_code_context_exa.
What are the best alternatives to Exa?
As of October 20, 2026, alternatives to Exa in search-research on the Manufact MCP leaderboard include Agentic Atlas: Agent Design Patterns, common-practice, GDELT Cloud, BookDNA, and Lyon.
Does Exa MCP require authentication?
Exa requires authentication. Connect it in Claude, ChatGPT, or Cursor and complete the OAuth login prompt.
Who develops Exa?
Exa is developed by Exa. It is listed as partner on the Claude connector directory.
Not your MCP?
Review any public or OAuth MCP server for protocol compatibility, tool documentation, and ChatGPT and Claude publishing readiness. No account required.