Skip to main content
Glama
Desearch-ai

Desearch MCP Server

Official

Desearch MCP Server

npm version

AI search, X search and web search for AI agents, plus page extraction and X data tools. Bring your own Desearch API key.

Tools

The Desearch MCP server includes the following tools:

  • AI Search (ai-search): Performs AI Twitter and web searches with relevant links and summary. tools uses short source ids (web, twitter, arxiv, wikipedia, youtube, hackernews, reddit). Older labels such as Web Search are still accepted and sent to the API as the short id. Default is ["web", "twitter"].

  • X Search (x-search): Tweet search on X. Arguments: query (required), count (optional, default 20). Sort stays Top. Optional filters: user, start_date, end_date (YYYY-MM-DD), lang, verified, blue_verified, is_quote, is_video, is_image, min_retweets, min_replies, min_likes.

  • Web Search (web-search): SERP-style web search. Arguments: query (required), start (optional pagination offset).

  • Web Links Search (web-links-search): Web link search. Arguments: prompt (required), tools (optional, only web, default ["web"]; Web Search is accepted and rewritten to web), count (optional, 10–200). The links/web API rejects other sources, so they are not in the enum.

  • Extract (extract): Read a public URL as text or HTML. Preferred over crawl. Arguments: url (required), format (optional, html or text), js (optional), wait (optional milliseconds).

  • Web Crawl (web-crawl): Same arguments as extract, on the legacy /web/crawl route. The SDK marks webCrawl deprecated in favor of extract; this tool stays so that route remains reachable. Prefer extract for new integrations.

  • X Links Search (x-links-search): AI search for X post links. Arguments: prompt (required), count (optional, 10–200).

  • X Posts By URLs (x-posts-by-urls): Full posts for a list of URLs. Argument: urls (required).

  • X Post By ID (x-post-by-id): One post by ID. Argument: id (required).

  • X Posts By User (x-posts-by-user): Posts by a user. Arguments: user (required), query (optional), count (optional, 1–100).

  • X Post Retweeters (x-post-retweeters): Users who retweeted a post. Arguments: id (required), cursor (optional).

  • X User Posts (x-user-posts): A user's timeline. Arguments: username (required), cursor (optional).

  • X User Replies (x-user-replies): Posts and replies by a user. Arguments: user (required), count (optional, 1–100), query (optional).

  • X Post Replies (x-post-replies): Replies to a post. Arguments: post_id (required), count (optional, 1–100), query (optional).

  • X Trends (x-trends): Trending topics for a location. Arguments: woeid (required), count (optional, 30–100).

The full SDK method → endpoint → MCP tool map is in docs/API_MCP_PARITY.md. Every public desearch-js 1.5 method is a tool. latestTweets was removed from the SDK (GET /twitter/latest in 1.0.1) and is not exposed.

Related MCP server: grok-mcp-server

Prerequisites 📋

Installation 🛠️

NPM Installation

The package name is desearch-mcp-server. The current version is on npm. See CHANGELOG.md for release notes. The stdio entry is the desearch-mcp-server bin (build/index.js), which requires DESEARCH_API_KEY.

npm install -g desearch-mcp-server

Or run it without a global install:

npx -y desearch-mcp-server

Cursor or Claude can start that bin directly:

{
    "mcpServers": {
        "desearch": {
            "command": "npx",
            "args": ["-y", "desearch-mcp-server"],
            "env": {
                "DESEARCH_API_KEY": "your-api-key"
            }
        }
    }
}

command: "desearch-mcp-server" (no args) is the same entry after the global install above.

Gemini CLI

Install the extension from this repository. Gemini CLI asks for your Desearch API key (stored as a sensitive setting) and connects to the hosted server https://mcp.desearch.ai/mcp:

gemini extensions install https://github.com/Desearch-ai/mcp-desearch

To change the key later, run gemini extensions config desearch. AI agents such as Cline can follow llms-install.md to set up the server.

Using Smithery

To install the Desearch MCP server for Claude Desktop automatically via Smithery:

npx -y @smithery/cli install desearch/desearch --client claude

Or for Cursor IDE:

npx -y @smithery/cli install desearch/desearch --client cursor

Windsurf

Windsurf's Cascade agent reads MCP servers from mcp_config.json under the mcpServers key. Open it from the Cascade panel: click the ... (Actions) menu, then Open MCP config file. Windsurf builds use ~/.codeium/windsurf/mcp_config.json (on Windows, %USERPROFILE%\.codeium\windsurf\mcp_config.json). Newer builds may open ~/.config/devin/mcp_config.json instead (Windows: %APPDATA%\devin\mcp_config.json); edit whichever file that action opens.

Hosted server (no local install). Remote servers use serverUrl with headers:

{
    "mcpServers": {
        "desearch": {
            "serverUrl": "https://mcp.desearch.ai/mcp",
            "headers": {
                "x-api-key": "your-api-key"
            }
        }
    }
}

To keep the key out of the file, Windsurf can interpolate an environment variable: "x-api-key": "${env:DESEARCH_API_KEY}".

Local stdio alternative:

{
    "mcpServers": {
        "desearch": {
            "command": "npx",
            "args": ["-y", "desearch-mcp-server"],
            "env": {
                "DESEARCH_API_KEY": "your-api-key"
            }
        }
    }
}

Save the file, then refresh the MCP servers list in Cascade.

Zed

Zed calls MCP servers context servers. Open your settings file with the zed: open settings file action (or use Settings → AI → MCP Servers → Add Server) and add a context_servers entry.

Hosted server:

{
    "context_servers": {
        "desearch": {
            "url": "https://mcp.desearch.ai/mcp",
            "headers": {
                "x-api-key": "your-api-key"
            }
        }
    }
}

Local stdio alternative:

{
    "context_servers": {
        "desearch": {
            "command": "npx",
            "args": ["-y", "desearch-mcp-server"],
            "env": {
                "DESEARCH_API_KEY": "your-api-key"
            }
        }
    }
}

The server is ready when the dot next to desearch in Settings → AI → MCP Servers turns green ("Server is active").

Configuration ⚙️

1. Configure Cursor IDE to run the Desearch MCP server

Open Cursor IDE, access command palette Cmd+Shift+P or Ctrl+Shift+P, and search for Open MCP Settings. Click on Add new global MCP server to open the mcp.json file.

2. Add the Desearch server configuration:

{
    "mcpServers": {
        "desearch": {
            "command": "desearch-mcp-server",
            "env": {
                "DESEARCH_API_KEY": "your-api-key"
            }
        }
    }
}

Replace your-api-key with your actual Desearch API key from console.desearch.ai/api-keys.

3. Restart Cursor IDE

For the changes to take effect:

  1. Completely quit Cursor IDE

  2. Start Cursor IDE again

1. Configure Claude Desktop to run the Desearch MCP server

Open the Claude Desktop app and enable Developer Mode from the top-left menu bar.

Once enabled, open Settings (also from the top-left menu bar) and navigate to the Developer Option, where you'll find the Edit Config button. Clicking it will open the claude_desktop_config.json file, allowing you to make the necessary edits.

OR (if you want to open claude_desktop_config.json from terminal)

For macOS:

  1. Open your Claude Desktop config:

code ~/Library/Application\ Support/Claude/claude_desktop_config.json

For Windows:

  1. Open your Claude Desktop configuration:

code %APPDATA%\Claude\claude_desktop_config.json

2. Add the Desearch server configuration:

{
    "mcpServers": {
        "desearch": {
            "command": "desearch-mcp-server",
            "env": {
                "DESEARCH_API_KEY": "your-api-key"
            }
        }
    }
}

Replace your-api-key with your actual Desearch API key from console.desearch.ai/api-keys.

3. Restart Claude Desktop

For the changes to take effect:

  1. Completely quit Claude Desktop

  2. Start Claude Desktop again

  3. You can verify the server by checking status in Settings > Developer > desearch

Remote Streamable HTTP

The same server can run over MCP Streamable HTTP for a remote client. Local stdio (desearch-mcp-server, Smithery) is unchanged and still reads DESEARCH_API_KEY from the environment.

Remote requests do not use that environment variable. Discovery does not need a key: initialize, notifications/initialized, ping, tools/list, prompts/list, resources/list, and resources/templates/list return 200 so a marketplace scanner can read the tool list. tools/call and every other method still require the caller's own Desearch API key, the same key from console.desearch.ai/api-keys:

  • Authorization: Bearer <DESEARCH_API_KEY> (preferred)

  • x-api-key: <DESEARCH_API_KEY>

A bare Authorization: <DESEARCH_API_KEY> value is also accepted. The key is not read from the query string. There is no shared server secret and no WWW-Authenticate challenge: the hosted process forwards the per-request key to the Desearch API only when a call needs it.

The MCP endpoint is POST /mcp. Responses are JSON (stateless Streamable HTTP). GET and DELETE on /mcp return 405 because the server does not keep a session or push server-to-client messages. GET /, GET /health, and GET /api/health are unauthenticated health checks.

Hosted endpoint

The public Streamable HTTP endpoint is https://mcp.desearch.ai/mcp. Listing the tools does not need a key. Send your Desearch API key on each tools/call in the x-api-key header. Authorization: Bearer <key> is also accepted. Use the key from console.desearch.ai/api-keys. The server does not read a key from the query string. Remote requests do not use a process-level DESEARCH_API_KEY.

Cursor, or any remote MCP client:

{
    "mcpServers": {
        "desearch": {
            "url": "https://mcp.desearch.ai/mcp",
            "headers": {
                "x-api-key": "your-api-key"
            }
        }
    }
}

Use with Claude (custom connector)

Desearch is not in the Claude Connectors Directory yet. You can add the hosted server as a custom connector with your Desearch API key.

Sources: Custom remote MCP connectors and connector authentication. Request-header authentication is a beta feature in Claude.

Claude.ai / Claude Desktop (organization admin)

  1. Open Organization settings > Connectors.

  2. Select Add, then Custom. If asked for the connector type, choose Web.

  3. Server URL: https://mcp.desearch.ai/mcp

  4. Sign-in option: No sign-in.

  5. Under Request headers, add x-api-key with your Desearch API key as the value.

  6. Select Add.

The header value is stored once and shared by everyone in the organization who uses the connector.

Claude Code

claude mcp add --transport http desearch https://mcp.desearch.ai/mcp \
  --header "x-api-key: YOUR_DESEARCH_API_KEY"

Run locally

npm install
npm run build
npm run start:http

This listens on 0.0.0.0:3000 (PORT and HOST override that). MCP_TRANSPORT=http is the same as --http.

curl -sS http://127.0.0.1:3000/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -H 'Authorization: Bearer your-api-key' \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"smoke","version":"0.0.1"}}}'

Cursor (or any remote MCP client):

{
    "mcpServers": {
        "desearch": {
            "url": "http://127.0.0.1:3000/mcp",
            "headers": {
                "Authorization": "Bearer your-api-key"
            }
        }
    }
}

The image default is stdio MCP (node build/index.js). Registries such as Glama start the container and speak MCP on stdin/stdout, so the image does not pass --http unless you override it. Stdio requires DESEARCH_API_KEY. Smithery does not use this image command; smithery.yaml starts node build/index.js and injects DESEARCH_API_KEY itself.

Streamable HTTP is an override. Replace the command with --http, or set MCP_TRANSPORT=http and keep the default command. The image still exposes port 3000 for that mode.

docker build -t desearch-mcp .
# stdio (image default)
docker run --rm -e DESEARCH_API_KEY=your-api-key -i desearch-mcp
# Streamable HTTP
docker run --rm -p 3000:3000 desearch-mcp node build/index.js --http
# same HTTP mode via env, without replacing the command
docker run --rm -e MCP_TRANSPORT=http -p 3000:3000 desearch-mcp

Deploy on Vercel

Vercel fits this server because the handler is stateless and answers each JSON-RPC call in one response. vercel.json builds the project, serves POST /mcp, and sets the function duration to 60 seconds. Hobby plans cap function duration lower than that, so AI Search tool calls need a plan that allows at least 60 seconds. initialize and tools/list are short either way.

No server-side Desearch API key is required in the Vercel project. After deploy, the endpoint is:

https://<project>.vercel.app/mcp

https://mcp.desearch.ai/mcp is the public hostname. This repo does not create DNS records. Clients send x-api-key, or Authorization: Bearer <key>.

The same node build/index.js --http process is the fallback if you would rather run a long-lived Node host instead of Vercel. The Docker image defaults to stdio; pass --http or set MCP_TRANSPORT=http to serve Streamable HTTP from it.

Troubleshooting 🔧

Common Issues

  1. Server Not Found

    • Check Claude or Cursor Desktop configuration syntax

    • Ensure Node.js is installed

  2. API Key Issues

    • Confirm your DESEARCH_API_KEY is valid

    • Check the DESEARCH_API_KEY is correctly set in the Cursor or Claude Desktop config

    • Verify that there are no spaces around the API key

    • For the remote HTTP server, send Authorization: Bearer <key> or x-api-key. A hosted DESEARCH_API_KEY environment variable is not used for those requests.

  3. Connection Issues

    • Restart Claude Desktop or Cursor IDE completely

    • Check Claude Desktop logs:

    # macOS
    tail -n 50 -f ~/Library/Logs/Claude/mcp*.log
    
    # Windows
    type "%APPDATA%\Claude\logs\mcp*.log"

Available Tools

15 tools
extractExtract Page ContentA
Read-only
Inspect

Extract a public URL and return its content as plain text or HTML using Desearch. Preferred over web-crawl for new integrations.

ParametersJSON Schema
NameRequiredDescriptionDefault
jsNoRender JavaScript before reading the page.
urlYesPublic URL to read, example: 'https://desearch.ai'
waitNoPost-load wait in milliseconds when JavaScript rendering is enabled.
formatNoContent format to return: 'html' or 'text'.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered structurally. The description adds one genuinely useful constraint beyond that — the URL must be public — plus the JS-rendering capability, but says nothing about rate limits, timeouts, content-size truncation, or failure behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the core action and back-loaded with the sibling routing hint. No filler or redundant restatement of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a four-parameter read tool with full schema coverage and annotations, the description covers purpose, output format, and alternative-tool routing. No output schema exists, but the return shape (text or HTML) is stated; only edge-case behavior like truncation or error handling is unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 url, js, wait, and format. The description only echoes the format options ('plain text or HTML') and adds no syntax, defaults, or interaction details (e.g., that 'wait' only applies when 'js' is true) beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (extract) and resource (a public URL's content), and names the return formats (plain text or HTML). It also explicitly distinguishes itself from the sibling web-crawl, so an agent can choose between them without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The sentence 'Preferred over web-crawl for new integrations' names the alternative and the condition that selects this tool, which is exactly the kind of routing guidance an agent needs. It stops short of stating when NOT to use it (e.g., for non-public or authenticated pages beyond the implicit 'public URL' constraint).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

web-crawlCrawl Web Page (Legacy)A
Read-only
Inspect

Crawl a public URL and return its content as plain text or HTML on the legacy Desearch /web/crawl route. The SDK marks webCrawl deprecated in favor of extract; this tool stays for parity with that route. Prefer extract for new integrations.

ParametersJSON Schema
NameRequiredDescriptionDefault
jsNoRender JavaScript before reading the page.
urlYesPublic URL to read, example: 'https://desearch.ai'
waitNoPost-load wait in milliseconds when JavaScript rendering is enabled.
formatNoContent format to return: 'html' or 'text'.

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds genuinely useful lifecycle context the annotations don't carry: deprecation status and legacy-route parity. It says nothing about auth needs, rate limits, or size/page limits, so with annotations carrying safety it lands at a solid 3.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the core action and output. The 'legacy' concept is stated twice ('legacy Desearch /web/crawl route' and 'stays for parity with that route'), a minor redundancy that keeps it just short of a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does cover the return shape (plain text or HTML) and the deprecation/alternative story, which is what an agent needs to choose and call it. Missing only operational details like payload size limits or JS-rendering caveats for a read-only, open-world crawl tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% (js, url, wait, format are all documented in-schema with an enum for format). The description's mention of 'plain text or HTML' only echoes the format enum values, adding no syntax or behavioral detail beyond the schema. Baseline 3 applies when the schema does all the parameter work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (crawl a public URL) and the exact output shapes (plain text or HTML), plus the underlying route (/web/crawl). It also distinguishes itself from the sibling 'extract' by naming it, so an agent can route without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the alternative tool explicitly ('Prefer extract for new integrations') and gives the condition that selects it (new vs. legacy integrations), plus the reason this tool still exists (parity with the legacy route). Nothing about when to pick this versus extract is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

x-post-by-idGet X Post by IDB
Read-only
Inspect

Fetch a single X (Twitter) post by its ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe unique ID of the post, example: '1234567890'

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds nothing beyond that: no auth requirements, no rate-limit note, no behavior for missing/invalid IDs or protected posts.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One front-loaded sentence with zero filler; the resource and lookup key come first. Nothing is wasted and nothing is buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read tool with no output schema and full annotation coverage, the definition is essentially sufficient to invoke correctly. It could go further on error/missing-post behavior, but nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single 'id' parameter is documented with an example in the schema itself. The description adds no format or constraint detail beyond what the schema already provides, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Fetch a single X post') plus the lookup key ('by its ID'), which implicitly separates it from x-posts-by-urls and x-posts-by-user. It never names a sibling or explicit boundary, so it falls short of the 5 tier.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance at all. With a crowded sibling set (x-posts-by-urls, x-posts-by-user, x-search, x-post-replies), the description should say when ID lookup is preferable, but it leaves the agent to infer everything.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

x-post-repliesGet X Post RepliesB
Read-only
Inspect

Fetch replies to an X (Twitter) post, with an optional keyword query.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoNumber of posts to retrieve (1-100).
queryNoAdvanced search query to filter replies.
post_idYesThe ID of the post to fetch replies for.

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so the safety and reach profile is covered. The description adds essentially nothing beyond that: no pagination behavior, no ordering, no rate-limit or result-cap context, and no note that count caps at 100.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero filler. The core action leads and the optional modifier trails it. Nothing can be trimmed without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read tool with no output schema and full schema coverage, the description is barely sufficient. It leaves open the practical questions an agent faces: how many replies come back by default, whether results are paginated or ordered, and how the keyword query interacts with the fetched set.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 post_id, count (1-100), and the advanced query string. The description only restates the query parameter and adds no format, syntax, or default value detail, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Fetch replies to an X (Twitter) post.' That is unambiguous on its own. However, it does not distinguish this tool from close siblings such as x-user-replies (replies authored by a user) or x-search, so an agent must infer the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no prerequisites, and no mention of alternatives. The phrase 'with an optional keyword query' hints at filtering but never says when keyword filtering is preferable to a plain fetch or to using x-search for reply discovery.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

x-post-retweetersList X Post RetweetersA
Read-only
Inspect

List users who retweeted an X (Twitter) post. Pass cursor to page through more users.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the post to get retweeters for.
cursorNoCursor for pagination from a previous response.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds the pagination/cursor behavior, but says nothing about auth requirements, rate limits, or result completeness for a public X endpoint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero filler, and the core action is front-loaded ahead of the paging hint.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

A simple two-parameter read tool; annotations carry the safety profile and the schema documents both params. There is no output schema, so the return shape is not explained, but nothing essential for a correct call is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both parameters are fully documented in the schema, so the baseline is 3. The description restates cursor's purpose (paging) without adding syntax or format detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'List users who retweeted an X (Twitter) post.' The resource is precise enough to separate it from siblings like x-post-replies or x-posts-by-user, though no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Pass cursor to page through more users' gives operational guidance for the pagination parameter, but there is no statement of when to use this tool versus the other X-post tools (e.g., replies, by-id). Usage is implied by the resource name rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

x-posts-by-urlsGet X Posts by URLsB
Read-only
Inspect

Fetch full X (Twitter) posts for a list of post URLs.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlsYesPost URLs to fetch, example: ['https://x.com/user/status/123']

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is covered. The description adds essentially nothing beyond that — no batch size limits, rate-limit notes, behavior on invalid or deleted URLs, or partial-failure handling, which matter for a batch fetch against an open-world source.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; the verb and resource come first. Nothing in the sentence is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter read tool with full schema coverage and safety annotations, the description is minimally sufficient. It is missing the operational context that would make a batch external fetch fully usable, such as batch limits or per-URL failure behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and there is only one parameter, so the schema carries the semantics (array of URL strings, minItems 1, with an example). The description only restates 'a list of post URLs' without adding format constraints or limits, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb ('Fetch') and resource ('full X (Twitter) posts') scoped to a list of post URLs, which is specific enough to understand the operation. However, it does not distinguish itself from the closely related sibling x-post-by-id, which an agent might reasonably choose for the same intent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this bulk-by-URL tool versus x-post-by-id, x-user-posts, or x-search. The description also omits any prerequisites or conditions such as URL validity requirements or what happens with mixed/broken URLs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

x-posts-by-userSearch X Posts by UserB
Read-only
Inspect

Search X (Twitter) posts by a specific user, with an optional keyword query.

ParametersJSON Schema
NameRequiredDescriptionDefault
userYesUser to search for, example: 'elonmusk'
countNoNumber of posts to retrieve (1-100).
queryNoAdvanced search query to filter this user's posts.

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is covered. The description adds nothing behavioral beyond that — no mention of rate limits, pagination, result ordering, or what an empty result means — making it essentially redundant with the structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tight sentence with no filler, and the core action is front-loaded. It is arguably too terse for a tool with a confusable sibling, but there is no wasted language.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter read tool with full schema coverage and annotations, the description is minimally sufficient to call the tool correctly. It falls short on sibling disambiguation (x-user-posts) and any behavioral context about result volume or ordering.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters (user, count, query) are documented in the schema itself. The description restates the optional keyword query but adds no syntax, format, or default details beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (search X posts) scoped to a user, plus an optional keyword filter. It is clear what the tool does, but it offers no differentiation from the very similar sibling x-user-posts, which an agent could easily confuse it with.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'with an optional keyword query' implies one usage pattern (keyword-filtered user timelines), but there is no explicit when-to-use guidance, no prerequisites, and no naming of alternatives such as x-search or x-user-posts.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

x-user-postsGet X User TimelineC
Read-only
Inspect

Retrieve a user's X (Twitter) timeline posts by username. Pass cursor to page through more posts.

ParametersJSON Schema
NameRequiredDescriptionDefault
cursorNoCursor for pagination from a previous response.
usernameYesUsername to fetch posts for, example: 'elonmusk'

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is covered without the description. The description adds nothing beyond that — no notes on rate limits, auth requirements, result ordering, or timeline scope (e.g., replies/retweets included) — so its behavioral contribution is minimal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the core action and free of filler. The second sentence is somewhat redundant with the schema's cursor description, so it doesn't fully earn its place, but overall sizing is appropriate.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter read tool with full schema coverage and a complete read-only annotation set, the description is adequate. It omits what the returned post objects contain (no output schema exists) and, more importantly, how this differs from the sibling x-posts-by-user.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters (username, cursor) are already documented in the schema, giving a baseline of 3. The description's cursor note restates pagination behavior rather than adding format or semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Retrieve a user's X (Twitter) timeline posts by username'), which is clearer than a bare name restatement. However, it offers no differentiation from the near-identical sibling x-posts-by-user (or x-search/x-user-replies), leaving the agent unable to tell which to pick without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use or when-not-to-use guidance and no named alternative. The only operational note, 'Pass cursor to page through more posts,' is parameter mechanics rather than selection guidance, so the agent gets no help choosing between this and x-posts-by-user.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

x-user-repliesGet X User RepliesB
Read-only
Inspect

Fetch posts and replies by an X (Twitter) user, with an optional keyword query.

ParametersJSON Schema
NameRequiredDescriptionDefault
userYesUsername of the user to search for, example: 'elonmusk'
countNoNumber of posts to retrieve (1-100).
queryNoAdvanced search query to filter this user's posts and replies.

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds the useful behavioral detail that both posts and replies are returned, but says nothing about pagination, rate limits, or result ordering.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; the primary action and the optional qualifier are both stated immediately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only, 3-parameter tool with no output schema this is minimally adequate, but it leaves the overlap with x-user-posts and x-post-replies unresolved and gives no hint about result volume or pagination behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters are already documented. The description only restates the optional keyword query, adding no format, syntax, or default semantics beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Fetch) and resource (posts and replies by an X user), so the agent knows the operation. However, it does not differentiate itself from close siblings like x-user-posts, x-post-replies, or x-search, and the phrase 'posts and replies' blurs the boundary with x-user-posts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance is given. The mention of an 'optional keyword query' implies a filtered-search use case, but the description never says when to prefer this tool over x-user-posts, x-post-replies, or x-search.

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. 1 tool updatev0.1.3
    • Changedai-search1 field changed
      • changedInput schema / properties / model / description
        Previous value: -"Model to use for the search, example: 'NOVA', Nova is 10s model, Orbit is 30s model"New value: +"Model to use for the search: NOVA (default) or ORBIT."
  2. 15 tool updatesv0.1.2
    • First observedai-search
    • First observedextract
    • First observedweb-crawl
    • First observedweb-links-search
    • First observedweb-search
    • First observedx-links-search
    • First observedx-post-by-id
    • First observedx-post-replies
    • First observedx-post-retweeters
    • First observedx-posts-by-urls
    • First observedx-posts-by-user
    • First observedx-search
    • First observedx-trends
    • First observedx-user-posts
    • First observedx-user-replies

TDQS

B3.4/5.0

Scored across 15 tools

Disambiguation4/5

Most tools target distinct resource+action pairs (e.g., x-post-by-id vs x-posts-by-urls), and descriptions clarify differences. However, x-posts-by-user and x-user-posts are easily confused, and x-search vs x-links-search require careful reading to distinguish. Overall mostly distinct but with minor overlap.

Naming Consistency4/5

Kebab-case is used throughout with clear prefixes (x- for X/Twitter, web- for web, ai- for AI). Minor inconsistencies exist in singular/plural (x-post-by-id vs x-posts-by-urls) and phrasing (x-posts-by-user vs x-user-posts), but the pattern remains predictable and readable.

Tool Count5/5

15 tools is well-scoped for a search/crawl API covering multiple sources and endpoints. Each tool maps to a specific Desearch capability, and the deprecated web-crawl is justified for route parity.

Completeness4/5

Covers web search, AI search, link search, content extraction/crawl, X post retrieval by ID/URLs/user, replies, retweeters, and trends. Minor gaps include no direct X user profile lookup or hashtag search, but core workflows are well-covered.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    Enables searching X (formerly Twitter) using xAI's Responses API with support for filtering by handles, date ranges, and media understanding, returning structured results with citations.
    1
    15 npm
    1
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Enables real-time search of X.com (Twitter) posts, users, threads, and trends via xAI's Grok API, directly from Claude.
    5
    32 PyPI
    3
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables real-time search of X (Twitter) posts, user timelines, and trends using either xAI's Responses API or the official X API v2.
    4
    -