Search / io.github.lvpiggyqq/xcatcher
Xcatcher — Recent X Posts
not classifiedFetch recent public X/Twitter posts by named handle for monitoring, comparison, OSINT, and research.
v3.1.0 · active · repository · website · descriptor JSON · versions
Search / io.github.lvpiggyqq/xcatcher
Fetch recent public X/Twitter posts by named handle for monitoring, comparison, OSINT, and research.
v3.1.0 · active · repository · website · descriptor JSON · versions
{
"mcpServers": {
"xcatcher": {
"type": "http",
"url": "https://xcatcher.top/mcp/",
"headers": {
"Authorization": "Bearer ${XCATCHER_TOKEN}",
"Accept": "application/json"
}
}
}
}claude mcp add --transport http xcatcher https://xcatcher.top/mcp/ --header "Authorization: Bearer ${XCATCHER_TOKEN}" --header "Accept: application/json"[mcp_servers.xcatcher]
url = "https://xcatcher.top/mcp/"
bearer_token_env_var = "XCATCHER_TOKEN"
http_headers = { "Accept" = "application/json" }
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"xcatcher": {
"type": "remote",
"url": "https://xcatcher.top/mcp/",
"enabled": true,
"headers": {
"Authorization": "Bearer {env:XCATCHER_TOKEN}",
"Accept": "application/json"
}
}
}
}{
"mcpServers": {
"xcatcher": {
"type": "http",
"url": "https://xcatcher.top/mcp/",
"headers": {
"Authorization": "Bearer ${XCATCHER_TOKEN}",
"Accept": "application/json"
}
}
},
"deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=xcatcher&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8veGNhdGNoZXIudG9wL21jcC8iLCJoZWFkZXJzIjp7IkF1dGhvcml6YXRpb24iOiJCZWFyZXIgJHtYQ0FUQ0hFUl9UT0tFTn0iLCJBY2NlcHQiOiJhcHBsaWNhdGlvbi9qc29uIn19"
}{
"servers": {
"xcatcher": {
"type": "http",
"url": "https://xcatcher.top/mcp/",
"headers": {
"Authorization": "Bearer ${XCATCHER_TOKEN}",
"Accept": "application/json"
}
}
}
}{
"mcpServers": {
"xcatcher": {
"httpUrl": "https://xcatcher.top/mcp/",
"headers": {
"Authorization": "Bearer ${XCATCHER_TOKEN}",
"Accept": "application/json"
}
}
}
}extensions:
"xcatcher":
enabled: true
name: "xcatcher"
type: streamable_http
uri: "https://xcatcher.top/mcp/"
headers:
"Authorization": "Bearer ${XCATCHER_TOKEN}"
"Accept": "application/json"
timeout: 300
Placeholders to fill from your own secret store: ${XCATCHER_TOKEN}. The registry never accepts secret values.
protocol.modernnewest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28protocol.statelessonly applies to 2026-07-28 serversprotocol.transportstreamable HTTPprotocol.list_ttlonly applies to 2026-07-28 serversauth.prm, auth.as_metadata, auth.cimdno remote uses OAuthauth.secret_in_urlno templated URLtools.descriptionsevery tool has a descriptiontools.description_length1 tools have descriptions over 1,024 characters, which crowds the contexttools.schemasevery tool has an object input schematools.annotations17 of 17 tools declare readOnlyHint or destructiveHinttools.directory_hintsevery tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHinttools.token_costabout 3,418 tokens to load every tooltools.api_dumptools are not a one-to-one API dumpstability.changesno tool changes in 30 daysstability.rug_pullno tool changed its meaning under the same namedeps.known_vulns, deps.mcp_sdk_version, deps.resolvableno npm or PyPI packageNo tool definition changes recorded. A server's first observation is its baseline; later probes record what changes.
Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.
+repository +namespace-matches-repo +website -unreachable(1 failures) ~updated-71d-ago
Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.
| remote | auth | reachable | uptime 30d | p50 | protocol | last ok |
|---|---|---|---|---|---|---|
https://xcatcher.top/mcp/ streamable-http | none | no (1 failures) | 94% | 527 ms | 2025-11-25 | 2026-10-20 |
cancel_taskdestructive | Cancel a queued task by task_id. Side effects: changes task state. Xcatcher refunds cost_points when a queued task is successfully cancelled. |
create_crawl_taskdestructive | Create a crawl task for one or more X (Twitter) usernames. Side effects: creates a new task AND consumes points. If points are insufficient, upstream returns HTTP 402 with PAYMENT-REQUIRED (quote). This tool surfaces it as error.code=PAYMENT_REQUIRED with payment_required payload so agents can request spending approval, top up, then retry safely. Modes: - normal: Fast latest-post snapshot at scale (fresh-feed monitoring). Optimized for high-throughput batch retrieval. - deep: Deeper per-user collection/enrichment (typically slower; higher resource usage). Use when you need more than a quick latest-post snapshot. Performance note: Normal mode is optimized for a small latest-post snapshot per handle. Actual completeness and latency depend on X availability, upstream limits, and network conditions. Batching: For very large sets, split users into batches. Suggested upper bound per task: 500 users (configurable via MAX_USERS_PER_TASK). Reliability: - Use idempotency_key to make retries safe (avoid duplicate charges). - After creation, poll get_task_status every 5–10s until has_result=true. - Then call get_result_download_url (download still requires the same Bearer token). |
get_account_balanceread-only | Return the account attached to the current Bearer API key and its points balance. Use before creating a task to estimate whether an x402 top-up will be needed. Read-only. |
get_direct_crawl_payment | Create a request-bound x402 v2 payment requirement for an accountless crawl. Use this only for the accountless x402 path after preflight_crawl; API-key accounts use create_crawl_task instead. Normal requests use progressive batch pricing, so quote the complete deduplicated handle list together. This does not move funds. Return payment_required_b64 unchanged to an x402-compatible wallet/client; the live amount, asset, network, destination, and quoteId are authoritative. |
get_direct_result_previewread-only | Return structured JSON rows for a completed accountless paid crawl. Use this instead of get_result_preview for an accountless x402 task; API-key accounts use get_result_preview. Use offset for pagination; the task token is required and should be treated as a secret. |
get_direct_task_statusread-only | Read an accountless paid crawl using its task_id and task-scoped token. Use this instead of get_task_status for an accountless x402 task. Poll every 5-10 seconds until task.has_result is true or it reaches failed/cancelled. |
get_result_download_urlread-only | Get an absolute download URL for a task result (read-only). If the task is not finished, returns ok=false with code=RESULT_NOT_READY (HTTP 409). Downloading the URL requires the same Authorization: Bearer token. |
get_result_previewread-only | Return up to 100 result rows from an API-key account task as native structured JSON for direct agent analysis; accountless x402 tasks use get_direct_result_preview instead. Use offset/next_offset for pagination; this does not download or parse XLSX. Use after has_result=true; use get_result_download_url when the complete XLSX is required. Read-only. |
get_sample_resultread-only | Return a stable synthetic example of Xcatcher's paginated result and coverage metadata. No live X data is fetched, no account is needed, no task or quote is created, and no funds move. |
get_service_inforead-only | Read Xcatcher's live capabilities, prices, limits, endpoints, and recommended agent workflow. Call this first when planning a crawl or when cached documentation may be stale. No points are consumed. |
get_task_statusread-only | Get API-key account task status by task_id (read-only); accountless x402 tasks use get_direct_task_status instead. Recommended polling interval: every 5–10 seconds until has_result=true. Returns safe structured state, result metadata, and authenticated result URLs; server filesystem paths are never exposed. |
get_x402_quote | Create a short-lived USDC quote for a requested number of Xcatcher points. Returns the exact live amount and supported Base/Solana payment requirements; it does not move funds. Ask the user before signing or sending any payment. |
list_crawl_tasksread-only | List recent tasks owned by the current Bearer API key, newest first. Use next_before_id for cursor pagination. Read-only and does not consume points. |
preflight_crawlread-only | Normalize and deduplicate X handles, validate the mode, and preview the current modeled points/USDC cost. This free read-only check requires no account, creates no quote or task, and moves no funds. Use it before requesting a live x402 payment challenge. |
submit_direct_crawl_paymentdestructive | Submit an x402 v2 PAYMENT-SIGNATURE for the exact users/mode used by get_direct_crawl_payment. This may settle USDC and create a crawl task. Call only after explicit spending approval. On success, securely save task_token: it grants task-scoped result access for seven days. |
wait_for_taskread-only | Poll a crawl task server-side until it has a result, reaches a terminal failure/cancelled state, or the bounded timeout expires. Read-only and cheaper for agent context than repeated manual polling. |
x402_topupdestructive | Top up points for the CURRENT Bearer key using x402 proof. Inputs: - quote_id: returned by PAYMENT-REQUIRED (or /api/v1/x402/quote) - payment_signature_b64: base64(JSON) that will be passed as HTTP header PAYMENT-SIGNATURE Side effects: credits points to the same Bearer key (no key rotation). On success returns credited_points and balance_after (shape depends on upstream). |
Schemas: list_tools.
{
"name": "io.github.lvpiggyqq/xcatcher",
"_meta": {
"io.modelcontextprotocol.registry/publisher-provided": {
"product": "Xcatcher",
"category": [
"social-intelligence",
"osint",
"market-research",
"automation"
],
"keywords": [
"X",
"Twitter",
"recent-posts",
"batch-monitoring",
"x402-v2",
"USDC",
"Base",
"accountless"
],
"capabilities": {
"input": "1-500 named X account handles per task",
"modes": {
"deep": "Deeper per-handle pull; 10 points per handle",
"normal": "Small latest-post snapshot; 1 point per handle"
},
"access": "Accountless x402 v2 per crawl, or scoped API-key account",
"output": "Paginated native JSON or authenticated XLSX",
"freeOnboarding": "Anonymous no-side-effect preflight and synthetic sample result",
"directX402Pricing": {
"billingBasis": "normalized requested handles",
"minimumTaskUsd": "0.01",
"pricingVersion": "2026-08-11.progressive-v1",
"deepUsdPerHandle": "0.10",
"normalProgressiveTiers": [
"1-5: $0.01",
"6-25: $0.0075",
"26-100: $0.006",
"101-500: $0.005"
],
"livePreflightAnd402AreAuthoritative": true,
"internalActorFailoverHasNoExtraCharge": true
}
},
"documentation": {
"docs": "https://xcatcher.top/docs/",
"llms": "https://xcatcher.top/llms.txt",
"skill": "https://xcatcher.top/skills/xcatcher/SKILL.md",
"sample": "https://xcatcher.top/api/v1/demo",
"openapi": "https://xcatcher.top/openapi.yaml",
"preflight": "https://xcatcher.top/api/v1/preflight",
"discoveryMetadata": "https://xcatcher.top/discovery-metadata.json",
"cdpBazaarValidationResource": "https://xcatcher.top/api/v1/x402/crawl?users=openai&mode=normal"
}
}
},
"title": "Xcatcher — Recent X Posts",
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
"remotes": [
{
"url": "https://xcatcher.top/mcp/",
"type": "streamable-http",
"headers": [
{
"name": "Authorization",
"isSecret": true,
"description": "Optional Xcatcher API key for account tools. Discovery and direct x402 tools work without it.",
"placeholder": "Bearer xc_live_..."
},
{
"name": "Accept",
"default": "application/json",
"description": "Request JSON responses from the stateless Remote MCP server."
}
]
}
],
"version": "3.1.0",
"repository": {
"url": "https://github.com/lvpiggyqq/xcatcher-mcp-manifest",
"source": "github"
},
"websiteUrl": "https://xcatcher.top/",
"description": "Fetch recent public X/Twitter posts by named handle for monitoring, comparison, OSINT, and research."
}