Desearch
by Desearch-ai · remote · local (npm) · no sign-in to list tools · v0.3.3 · published by GitHub user Desearch-ai
AI search (Reddit, HN, arXiv, Wikipedia), X and web search, page extraction, X data, People Search.
22 tools: 2 can delete or cancel things, 2 do something that can't be undone, 10 change things and 8 only read.
Scanned Oct 21, 2026
- Deletes or cancels2Claude Code: deny: see these tools
- Can't be undone2Claude Code: ask: see these tools
- Changes things10Claude Code: ask: see these tools
- Only reads8Claude Code: allow: see these tools
11 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http desearch https://mcp.desearch.ai/mcpFindings
Matches of fixed checks, with the text they matched.
- Warnweb-links-search
The server marks "web-links-search" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}; The name "web-links-search" says "link": a word for a change.
- Warnx-links-search
The server marks "x-links-search" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}; The name "x-links-search" says "link": a word for a change.
- Warnx-posts-by-urls
The server marks "x-posts-by-urls" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}; The name "x-posts-by-urls" says "post": a word for a change.
- Warnx-post-by-id
The server marks "x-post-by-id" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}; The name "x-post-by-id" says "post": a word for a change.
- Warnx-posts-by-user
The server marks "x-posts-by-user" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}; The name "x-posts-by-user" says "post": a word for a change.
The server marks "x-post-retweeters" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}; The name "x-post-retweeters" says "post": a word for a change.
Show 5 more findingsShow fewer
- Warnx-user-posts
The server marks "x-user-posts" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}; The name "x-user-posts" says "post": a word for a change.
- Warnx-user-replies
The server marks "x-user-replies" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}; The name "x-user-replies" says "reply": a word for sending, and what is sent cannot be taken back.
- Warnx-post-replies
The server marks "x-post-replies" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}; The name "x-post-replies" says "post": a word for a change.
- Warnpeople-search
The server marks "people-search" destructive (destructiveHint: true), and its name says "search", a word for reading.
What this check looks forMatched text
annotations: {"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The name "people-search" says "search": a word for reading.
The server marks "people-search-control" destructive (destructiveHint: true), and its name says "search", a word for reading.
What this check looks forMatched text
annotations: {"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":true}; The name "people-search-control" says "search": a word for reading.
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
22 tools
Deletes or cancels 2Claude Code: deny
people-searchStart a paid job billed to the user's Desearch balance: find people on X, YouTube, LinkedIn, or TikTok who match a plain-language description.1 finding
Why it is in this group
- The name "people-search" says "search": a word for reading.
- The description's first verb is "start": a word for a change.
- The server marks it destructive (destructiveHint: true).
Findings
- Warn
The server marks "people-search" destructive (destructiveHint: true), and its name says "search", a word for reading.
What this check looks forMatched text
annotations: {"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The name "people-search" says "search": a word for reading.
Description, as the server wrote it Start a paid job billed to the user's Desearch balance: find people on X, YouTube, LinkedIn, or TikTok who match a plain-language description. Each person comes back with a fit score, why they matched, their audience, and public contacts and links. This call reserves count times the platform's per-person price (reserved_cost_usd) and returns a task_id at once. When the search ends you pay only for the people it delivered (a per-search minimum applies when it finds anyone; a search that finds no one is free) and the rest of the reservation is returned. The search runs in the background, usually for 1 to 5 minutes: poll people-search-status with the task_id to read progress and the people found so far, and use people-search-control to pause, resume, or cancel it. Do not start the same search twice; send idempotency_key so a retry returns the first task instead of charging again. Filters depend on the platform. x: min_followers, max_followers, verified_only, countries, keywords, exclude_keywords. youtube: min_subscribers, max_subscribers, countries, require_contact, keywords, exclude_keywords. linkedin: min_followers, max_followers, countries, keywords, exclude_keywords. tiktok: min_followers, max_followers, require_contact, keywords, exclude_keywords.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: false
- openWorldHint: true
- title: People Search
people-search-controlPause, resume, or cancel a People Search task.1 finding
Why it is in this group
- The name "people-search-control" says "search": a word for reading.
- The server marks it destructive (destructiveHint: true).
Findings
- Warn
The server marks "people-search-control" destructive (destructiveHint: true), and its name says "search", a word for reading.
What this check looks forMatched text
annotations: {"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":true}; The name "people-search-control" says "search": a word for reading.
Description, as the server wrote it Pause, resume, or cancel a People Search task. Free. pause: a queued search pauses at once; a running one finishes its current batch first (status pausing, then paused). A search paused for more than 7 days is cancelled. resume: continues a paused search where it stopped, with no new charge. cancel: stops the search for good; you pay only for the people it already delivered and the rest of the reservation is returned. People found so far stay readable for 30 days.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: true
- openWorldHint: true
- title: Control People Search
Can't be undone 2Claude Code: ask
x-post-repliesFetch replies to an X (Twitter) post, with an optional keyword query.1 finding
Why it is in this group
- The name "x-post-replies" says "post": a word for a change.
- The name "x-post-replies" also says "reply": a word for sending, and what is sent cannot be taken back.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "x-post-replies" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}; The name "x-post-replies" says "post": a word for a change.
Description, as the server wrote it Fetch replies to an X (Twitter) post, with an optional keyword query.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
- title: Get X Post Replies
x-user-repliesFetch posts and replies by an X (Twitter) user, with an optional keyword query.1 finding
Why it is in this group
- The name "x-user-replies" says "reply": a word for sending, and what is sent cannot be taken back.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "x-user-replies" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}; The name "x-user-replies" says "reply": a word for sending, and what is sent cannot be taken back.
Description, as the server wrote it Fetch posts and replies by an X (Twitter) user, with an optional keyword query.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
- title: Get X User Replies
Changes things 10Claude Code: ask
extractExtract a public URL and return its content as plain text or HTML using Desearch.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Extract a public URL and return its content as plain text or HTML using Desearch. Preferred over web-crawl for new integrations. API docs: https://www.desearch.ai/docs/api-reference/get-web-extract
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
- title: Extract Page Content
people-profilesEveryone your People Searches found on one platform, one entry per person: their best-scoring result and the search that found them (found_by).No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Everyone your People Searches found on one platform, one entry per person: their best-scoring result and the search that found them (found_by). Free; it does not run a new search. Search by name, handle, bio, or location with q, filter by contact channels (has), audience, fit score, location, or verification, and sort by score, recent, or audience. People from searches that ended more than 30 days ago are left out.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
- title: List People Found
web-crawlCrawl a public URL and return its content as plain text or HTML on the legacy Desearch /web/crawl route.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it 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. API docs: https://www.desearch.ai/docs/guide/apis/extract-api
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
- title: Crawl Web Page (Legacy)
web-links-searchSearch the web for links using Desearch.1 finding
Why it is in this group
- The name "web-links-search" says "link": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "web-links-search" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}; The name "web-links-search" says "link": a word for a change.
Description, as the server wrote it Search the web for links using Desearch. Only the web source is accepted.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
- title: Web Links Search
x-links-searchAI search for X (Twitter) post links using Desearch.1 finding
Why it is in this group
- The name "x-links-search" says "link": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "x-links-search" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}; The name "x-links-search" says "link": a word for a change.
Description, as the server wrote it AI search for X (Twitter) post links using Desearch. Returns links from posts that match the prompt.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
- title: X Links Search
x-post-by-idFetch a single X (Twitter) post by its ID.1 finding
Why it is in this group
- The name "x-post-by-id" says "post": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "x-post-by-id" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}; The name "x-post-by-id" says "post": a word for a change.
Description, as the server wrote it Fetch a single X (Twitter) post by its ID.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
- title: Get X Post by ID
x-post-retweetersList users who retweeted an X (Twitter) post.1 finding
Why it is in this group
- The name "x-post-retweeters" says "post": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "x-post-retweeters" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}; The name "x-post-retweeters" says "post": a word for a change.
Description, as the server wrote it List users who retweeted an X (Twitter) post. Pass cursor to page through more users.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
- title: List X Post Retweeters
x-posts-by-urlsFetch full X (Twitter) posts for a list of post URLs.1 finding
Why it is in this group
- The name "x-posts-by-urls" says "post": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "x-posts-by-urls" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}; The name "x-posts-by-urls" says "post": a word for a change.
Description, as the server wrote it Fetch full X (Twitter) posts for a list of post URLs.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
- title: Get X Posts by URLs
x-posts-by-userSearch X (Twitter) posts by a specific user, with an optional keyword query.1 finding
Why it is in this group
- The name "x-posts-by-user" says "post": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "x-posts-by-user" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}; The name "x-posts-by-user" says "post": a word for a change.
Description, as the server wrote it Search X (Twitter) posts by a specific user, with an optional keyword query.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
- title: Search X Posts by User
x-user-postsRetrieve a user's X (Twitter) timeline posts by username.1 finding
Why it is in this group
- The name "x-user-posts" says "post": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "x-user-posts" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}; The name "x-user-posts" says "post": a word for a change.
Description, as the server wrote it Retrieve a user's X (Twitter) timeline posts by username. Pass cursor to page through more posts.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
- title: Get X User Timeline
Only reads 8Claude Code: allow
ai-searchAI search and analysis on web using Desearch AINo findings
Why it is in this group
- The name "ai-search" says "search": a word for reading.
Description, as the server wrote it AI search and analysis on web using Desearch AI
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
- title: AI Search
fetchRead a public page as text.No findings
Why it is in this group
- The name "fetch" says "fetch": a word for reading.
Description, as the server wrote it Read a public page as text. Pass a URL returned by search.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
- title: Fetch Page
people-search-statusStatus, progress, and cost of one People Search task, plus a page of the people found so far: name, handle, url, platform, audience, location, fit score, why they matched, contacts…No findings
Why it is in this group
- The name "people-search-status" says "search": a word for reading.
Description, as the server wrote it Status, progress, and cost of one People Search task, plus a page of the people found so far: name, handle, url, platform, audience, location, fit score, why they matched, contacts, and links. Free. People arrive while the search runs: pass the returned next_cursor as cursor on the next call to get only the people found since then. When done is true and has_more is false you have everyone the search found. An ended task has completion_reason (why it stopped), coverage_limited: true when a budget stopped it before count (more people may match), and warnings such as partial_enrichment (some profiles could not be read, so those people were scored on the search hit; they show enrichment: failed). Each person has fully_verified (every criterion confirmed by their own profile or posts) and unverified_criteria (criteria that are unknown or not met, or a disqualifier that applies). These are information only: the person still qualified.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
- title: Get People Search Status
people-search-tasksYour People Search tasks, newest first, with status, counts, cost, why each ended search stopped (completion_reason, coverage_limited), and the metadata labels set on people-search…No findings
Why it is in this group
- The name "people-search-tasks" says "search": a word for reading.
Description, as the server wrote it Your People Search tasks, newest first, with status, counts, cost, why each ended search stopped (completion_reason, coverage_limited), and the metadata labels set on people-search. Free. Use it to find a task_id (filter by metadata to find the searches of one campaign), or to see which searches are still queued, running, or paused: a new search is refused while too many are active.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
- title: List People Search Tasks
searchSearch the public web and return titles and links.No findings
Why it is in this group
- The name "search" says "search": a word for reading.
Description, as the server wrote it Search the public web and return titles and links. Use fetch with a result URL to read the page.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
- title: Search
web-searchSERP-style web search using Desearch.No findings
Why it is in this group
- The name "web-search" says "search": a word for reading.
Description, as the server wrote it SERP-style web search using Desearch. Returns ranked titles, links, and snippets.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
- title: Web Search
x-searchSearch X (Twitter) using Desearch AI.No findings
Why it is in this group
- The name "x-search" says "search": a word for reading.
Description, as the server wrote it Search X (Twitter) using Desearch AI. Optional filters narrow by user, date, language, verification, media, and engagement. Sort stays Top.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
- title: X Search
x-trendsRetrieve trending topics on X (Twitter) for a location by its WOEID using Desearch.No findings
Why it is in this group
- The description's first verb is "retrieve": a word for reading.
Description, as the server wrote it Retrieve trending topics on X (Twitter) for a location by its WOEID using Desearch.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
- title: Get X Trends
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 0.3.3. Values in angle brackets are yours to fill in.
claude mcp add --transport http desearch https://mcp.desearch.ai/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__desearch__ai-search",
"mcp__desearch__x-search",
"mcp__desearch__web-search",
"mcp__desearch__x-trends",
"mcp__desearch__search",
"mcp__desearch__fetch",
"mcp__desearch__people-search-status",
"mcp__desearch__people-search-tasks"
],
"ask": [
"mcp__desearch__web-links-search",
"mcp__desearch__x-links-search",
"mcp__desearch__x-posts-by-urls",
"mcp__desearch__x-post-by-id",
"mcp__desearch__x-posts-by-user",
"mcp__desearch__x-post-retweeters",
"mcp__desearch__x-user-posts",
"mcp__desearch__x-user-replies",
"mcp__desearch__x-post-replies",
"mcp__desearch__extract",
"mcp__desearch__web-crawl",
"mcp__desearch__people-profiles"
],
"deny": [
"mcp__desearch__people-search",
"mcp__desearch__people-search-control"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as desearch. Review it before you use it.
