exa
Server Details
Connect AI agents to Exa for web search, content fetching, and multi-step research.
- Status
- Healthy
- Uptime
- 99.9% over 80 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- exa-labs/exa-mcp-server
- GitHub Stars
- 5,213
- Server Listing
- Exa MCP Server
- ChatGPT
- –
- Claude
- Exa
TDQS
Scored across 2 tools
web_search_exa and web_fetch_exa have clearly distinct purposes: one searches the web, the other reads a specific URL's content. Their descriptions explicitly explain when to use each and how they complement each other.
Both tool names follow the exact same pattern: web_<verb>_exa (web_search_exa, web_fetch_exa). The verb-noun structure and suffix are consistent, making the set predictable.
Only two tools are provided, which is borderline thin even for a focused search-and-fetch server. The set covers a minimal but coherent workflow, so it's not severely under-scoped, but it lacks the breadth of a well-rounded toolset.
For a web search and content retrieval server, the two core operations (search and fetch) fully cover the domain's lifecycle. There are no obvious dead ends: search results can be followed up with fetch, and batch fetching is supported.
Available Tools
2 toolsweb_fetch_exaFetch Web PagesARead-onlyIdempotentInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| urls | Yes | URLs to read. Batch multiple URLs in one call. | |
| maxCharacters | No | Maximum characters to extract per page (default: 3000) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, openWorld, non-destructive), so the description only needs to add context. It contributes the output shape (clean text plus metadata) and batching behavior, but says nothing about truncation at maxCharacters or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action, then uses tight 'Best for' and 'Returns' labels. Every sentence earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description appropriately covers the return value (clean text and metadata). It is complete for the core fetch operation, though edge behaviors like truncation are left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented in the schema. The description's 'Batch multiple URLs in one call' merely restates the urls parameter and adds no syntax or format detail beyond it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Read a webpage's full content as clean markdown') and distinguishes itself from its sibling by naming web_search_exa and its relationship to it. An agent can tell exactly what this tool does versus search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use it ('after web_search_exa when highlights are insufficient or to read any URL'), naming both the triggering alternative and the general case. The 'Best for' line reinforces the intended context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web_search_exaWeb SearchARead-onlyIdempotentInspect
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.| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | 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 | Yes | 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 | No | Number of search results to return (default: 10). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds the return shape ('clean text content from top search results') and category-scoping behavior, which is useful but modest; there is no mention of rate limits, result freshness, or ranking behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with what the tool does, then scannable Best-for / Returns / Tips sections with no filler. The query-tip example slightly duplicates the schema wording, but the structure is clean and appropriately short.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description supplies the missing return information ('clean text content from top search results'), and annotations cover the safety profile. The category:people/company guidance is a genuinely useful extra, though result count and pagination behavior are only implied by the schema's numResults default.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents query (semantically rich description, category: syntax) and objective (ranking/exclusion goals). The description's 'Query tips' largely restate what the schema says, so it adds little meaning beyond the structured fields – baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Search the web') and scopes it with a 'Best for' list covering current information, news, facts, people, and companies. The closing line naming web_fetch_exa as a follow-up partially differentiates it from the sibling, though it doesn't state outright that fetching content from a known URL is web_fetch_exa's job, not this tool's.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for when to use it ('Finding current information, news, facts, people, companies') and explicitly routes follow-up work to web_fetch_exa when highlights are insufficient. It stops short of stating exclusions (e.g., when not to use search vs. a direct fetch), so it is clear context without full when/when-not coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
- Changed
web_search_exa2 fields changed- added
Input schema / properties / objectiveAdded value: +{ + "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.", + "maxLength": 4096, + "minLength": 1, + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "query" -]New value: +[ + "query", + "objective" +]
1 tool update
- Changed
web_search_exa2 fields changed- removed
Input schema / properties / objectiveRemoved value: -{ - "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.", - "maxLength": 4096, - "minLength": 1, - "type": "string" -} - changed
Input schema / requiredPrevious value: -[ - "query", - "objective" -]New value: +[ + "query" +]
1 tool update
- Changed
web_search_exa2 fields changed- added
Input schema / properties / objectiveAdded value: +{ + "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.", + "maxLength": 4096, + "minLength": 1, + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "query" -]New value: +[ + "query", + "objective" +]
1 tool update
- Changed
web_search_exa2 fields changed- removed
Input schema / properties / objectiveRemoved value: -{ - "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.", - "maxLength": 4096, - "minLength": 1, - "type": "string" -} - changed
Input schema / requiredPrevious value: -[ - "query", - "objective" -]New value: +[ + "query" +]
1 tool update
- Changed
web_search_exa2 fields changed- added
Input schema / properties / objectiveAdded value: +{ + "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.", + "maxLength": 4096, + "minLength": 1, + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "query" -]New value: +[ + "query", + "objective" +]
1 tool update
- Changed
web_search_exa2 fields changed- removed
Input schema / properties / objectiveRemoved value: -{ - "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.", - "maxLength": 4096, - "minLength": 1, - "type": "string" -} - changed
Input schema / requiredPrevious value: -[ - "query", - "objective" -]New value: +[ + "query" +]
1 tool update
- Changed
web_search_exa2 fields changed- added
Input schema / properties / objectiveAdded value: +{ + "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.", + "maxLength": 4096, + "minLength": 1, + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "query" -]New value: +[ + "query", + "objective" +]
1 tool update
- Changed
web_search_exa1 field changed- removed
Input schema / properties / objectiveRemoved value: -{ - "description": "The broader task this search is part of. Always include it when known. It supplements the query rather than replacing it so write the query as you normally would.", - "maxLength": 4096, - "minLength": 1, - "type": "string" -}
1 tool update
- Changed
web_search_exa1 field changed- added
Input schema / properties / objectiveAdded value: +{ + "description": "The broader task this search is part of. Always include it when known. It supplements the query rather than replacing it so write the query as you normally would.", + "maxLength": 4096, + "minLength": 1, + "type": "string" +}
1 tool update
- Changed
web_search_exa1 field changed- removed
Input schema / properties / objectiveRemoved value: -{ - "description": "The broader task this search is part of. Always include it when known. It supplements the query rather than replacing it so write the query as you normally would.", - "maxLength": 4096, - "minLength": 1, - "type": "string" -}
1 tool update
- Changed
web_search_exa1 field changed- added
Input schema / properties / objectiveAdded value: +{ + "description": "The broader task this search is part of. Always include it when known. It supplements the query rather than replacing it so write the query as you normally would.", + "maxLength": 4096, + "minLength": 1, + "type": "string" +}
1 tool update
- Changed
web_search_exa1 field changed- removed
Input schema / properties / objectiveRemoved value: -{ - "description": "The broader task this search is part of. Always include it when known. It supplements the query rather than replacing it so write the query as you normally would.", - "maxLength": 4096, - "minLength": 1, - "type": "string" -}
1 tool update
- Changed
web_search_exa1 field changed- added
Input schema / properties / objectiveAdded value: +{ + "description": "The broader task this search is part of. Always include it when known. It supplements the query rather than replacing it so write the query as you normally would.", + "maxLength": 4096, + "minLength": 1, + "type": "string" +}
1 tool update
- Changed
web_search_exa1 field changed- removed
Input schema / properties / objectiveRemoved value: -{ - "description": "The broader task this search is part of. Always include it when known. It supplements the query rather than replacing it so write the query as you normally would.", - "maxLength": 4096, - "minLength": 1, - "type": "string" -}
1 tool update
- Changed
web_search_exa1 field changed- added
Input schema / properties / objectiveAdded value: +{ + "description": "The broader task this search is part of. Always include it when known. It supplements the query rather than replacing it so write the query as you normally would.", + "maxLength": 4096, + "minLength": 1, + "type": "string" +}
1 tool update
- Changed
web_search_exa1 field changed- removed
Input schema / properties / objectiveRemoved value: -{ - "description": "The broader task this search is part of. Always include it when known. It supplements the query rather than replacing it so write the query as you normally would.", - "maxLength": 4096, - "minLength": 1, - "type": "string" -}
1 tool update
- Changed
web_search_exa1 field changed- added
Input schema / properties / objectiveAdded value: +{ + "description": "The broader task this search is part of. Always include it when known. It supplements the query rather than replacing it so write the query as you normally would.", + "maxLength": 4096, + "minLength": 1, + "type": "string" +}
Related MCP Connectors
Web scraping, search, crawling, structured extraction and research for AI agents.
Web search and page-reading for AI agents. One-click OAuth connect, or a Caesar API key.
Web search and page reading for AI agents, including JSON APIs, RSS feeds and YouTube.
Web search, fetch, extract, and research for AI agents. Markdown output + AI-synthesized answers.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceConnects AI assistants to Exa AI's search capabilities for web search, code context retrieval from GitHub repos and documentation, company research, LinkedIn search, and deep research tasks.6 npmMIT
- AlicenseNot gradedqualityDmaintenanceConnects AI assistants to Exa's search capabilities, enabling web search, code search, and company research.72,516 npmMIT
- AlicenseNot gradedqualityDmaintenanceConnect AI assistants to Exa's search capabilities: web search, code search, and company research.72,516 npm1MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to perform web searches, research papers, Twitter searches, company research, URL crawling, and LinkedIn searches using the Exa AI Search API for real-time web information.72,516 npm1MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.