{"name":"io.github.lvpiggyqq/xcatcher","slug":"lvpiggyqq-xcatcher","title":"Xcatcher — Recent X Posts","description":"Fetch recent public X/Twitter posts by named handle for monitoring, comparison, OSINT, and research.","url":"https://mcp.market/server/lvpiggyqq-xcatcher","rating":null,"grade":"B","score":84,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":28,"stars":9,"forks":1,"downloads_week":null,"last_push_at":"2026-08-10T22:43:38.000Z","license":"MIT"},"uptime":{"percent":100,"checks":28,"ok":28,"last_checked_at":"2026-11-02T02:26:01.098Z","last_ok_at":"2026-11-02T02:26:01.098Z","latency_ms":808},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/lvpiggyqq/xcatcher-mcp-manifest","website":"https://xcatcher.top/","version":"3.1.0","remotes":[{"type":"streamable-http","url":"https://xcatcher.top/mcp/","headers":[{"description":"Optional Xcatcher API key for account tools. Discovery and direct x402 tools work without it.","isSecret":true,"placeholder":"Bearer xc_live_...","name":"Authorization"},{"description":"Request JSON responses from the stateless Remote MCP server.","default":"application/json","name":"Accept"}]}],"packages":[],"tools":[{"name":"cancel_task","description":"Cancel a queued task by task_id. Side effects: changes task state. Xcatcher refunds cost_points when a queued task is successfully cancelled.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"task_id":{"description":"Task ID to cancel.","minimum":1,"title":"Task Id","type":"integer"}},"required":["task_id"],"title":"cancel_taskArguments"}},{"name":"create_crawl_task","description":"Create a crawl task for one or more X (Twitter) usernames. Side effects: creates a new task AND consumes points.\n\nIf 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.\n\nModes:\n- normal: Fast latest-post snapshot at scale (fresh-feed monitoring). Optimized for high-throughput batch retrieval.\n- deep:   Deeper per-user collection/enrichment (typically slower; higher resource usage). Use when you need more than a quick latest-post snapshot.\n\nPerformance 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.\nBatching: For very large sets, split users into batches. Suggested upper bound per task: 500 users (configurable via MAX_USERS_PER_TASK).\n\nReliability:\n- Use idempotency_key to make retries safe (avoid duplicate charges).\n- After creation, poll get_task_status every 5–10s until has_result=true.\n- Then call get_result_download_url (download still requires the same Bearer token).\n","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"users":{"description":"Array of X usernames (handles). You may include a leading '@'.","items":{"type":"string"},"maxItems":500,"minItems":1,"title":"Users","type":"array"},"mode":{"default":"normal","description":"normal = fast latest-post snapshot at scale; deep = deeper per-user collection (slower).","enum":["normal","deep"],"title":"Mode","type":"string"},"idempotency_key":{"anyOf":[{"maxLength":128,"type":"string"},{"type":"null"}],"default":null,"description":"Optional idempotency key for safe retries (recommended for agents).","title":"Idempotency Key"}},"required":["users"],"title":"create_crawl_taskArguments"}},{"name":"get_account_balance","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"title":"get_account_balanceArguments"}},{"name":"get_direct_crawl_payment","description":"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.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"users":{"description":"X handles, @handles, or x.com/twitter.com profile URLs.","items":{"type":"string"},"maxItems":500,"minItems":1,"title":"Users","type":"array"},"mode":{"default":"normal","description":"Direct x402 normal requests use progressive batch pricing; deep is $0.10 per normalized requested handle. Always preflight the complete list.","enum":["normal","deep"],"title":"Mode","type":"string"}},"required":["users"],"title":"get_direct_crawl_paymentArguments"}},{"name":"get_direct_result_preview","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"task_id":{"description":"Completed paid task ID.","minimum":1,"title":"Task Id","type":"integer"},"task_token":{"description":"Task-scoped xtask_ token.","title":"Task Token","type":"string"},"limit":{"default":20,"description":"Rows to return (1-100).","maximum":100,"minimum":1,"title":"Limit","type":"integer"},"offset":{"default":0,"description":"Zero-based row offset.","minimum":0,"title":"Offset","type":"integer"}},"required":["task_id","task_token"],"title":"get_direct_result_previewArguments"}},{"name":"get_direct_task_status","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"task_id":{"description":"Task ID returned after x402 settlement.","minimum":1,"title":"Task Id","type":"integer"},"task_token":{"description":"Task-scoped xtask_ token returned after settlement or idempotent recovery.","title":"Task Token","type":"string"}},"required":["task_id","task_token"],"title":"get_direct_task_statusArguments"}},{"name":"get_result_download_url","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"task_id":{"description":"Task ID. Must be completed (has_result=true).","minimum":1,"title":"Task Id","type":"integer"}},"required":["task_id"],"title":"get_result_download_urlArguments"}},{"name":"get_result_preview","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"task_id":{"description":"Completed task ID owned by the current API key.","minimum":1,"title":"Task Id","type":"integer"},"limit":{"default":20,"description":"Maximum result rows to return (1-100).","maximum":100,"minimum":1,"title":"Limit","type":"integer"},"offset":{"default":0,"description":"Zero-based row offset for pagination.","minimum":0,"title":"Offset","type":"integer"}},"required":["task_id"],"title":"get_result_previewArguments"}},{"name":"get_sample_result","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"title":"get_sample_resultArguments"}},{"name":"get_service_info","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"title":"get_service_infoArguments"}},{"name":"get_task_status","description":"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.\n\nReturns safe structured state, result metadata, and authenticated result URLs; server filesystem paths are never exposed.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"task_id":{"description":"Task ID returned by create_crawl_task.","minimum":1,"title":"Task Id","type":"integer"}},"required":["task_id"],"title":"get_task_statusArguments"}},{"name":"get_x402_quote","description":"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.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"points":{"description":"Number of points to buy (1-200000). Live quote amount is authoritative.","maximum":200000,"minimum":1,"title":"Points","type":"integer"}},"required":["points"],"title":"get_x402_quoteArguments"}},{"name":"list_crawl_tasks","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"limit":{"default":20,"description":"Tasks to return (1-100).","maximum":100,"minimum":1,"title":"Limit","type":"integer"},"before_id":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Cursor from next_before_id; omit for the newest tasks.","title":"Before Id"}},"title":"list_crawl_tasksArguments"}},{"name":"preflight_crawl","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"users":{"description":"X handles, @handles, or x.com/twitter.com profile URLs.","items":{"type":"string"},"maxItems":500,"minItems":1,"title":"Users","type":"array"},"mode":{"default":"normal","description":"API-key accounts use 1 point per normal handle and 10 per deep handle; direct x402 normal requests receive progressive batch pricing shown by preflight.","enum":["normal","deep"],"title":"Mode","type":"string"}},"required":["users"],"title":"preflight_crawlArguments"}},{"name":"submit_direct_crawl_payment","description":"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.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"users":{"description":"The exact handles/profile URLs used for the payment requirement.","items":{"type":"string"},"maxItems":500,"minItems":1,"title":"Users","type":"array"},"payment_signature_b64":{"description":"The base64(JSON) PAYMENT-SIGNATURE produced for the accepted x402 v2 requirement.","title":"Payment Signature B64","type":"string"},"mode":{"default":"normal","description":"Must exactly match the quoted mode.","enum":["normal","deep"],"title":"Mode","type":"string"}},"required":["users","payment_signature_b64"],"title":"submit_direct_crawl_paymentArguments"}},{"name":"wait_for_task","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"task_id":{"description":"Task ID returned by create_crawl_task.","minimum":1,"title":"Task Id","type":"integer"},"timeout_seconds":{"default":60,"description":"Maximum wait in seconds (5-120).","maximum":120,"minimum":5,"title":"Timeout Seconds","type":"integer"},"poll_interval_seconds":{"default":5,"description":"Seconds between status checks (2-15).","maximum":15,"minimum":2,"title":"Poll Interval Seconds","type":"integer"}},"required":["task_id"],"title":"wait_for_taskArguments"}},{"name":"x402_topup","description":"Top up points for the CURRENT Bearer key using x402 proof.\n\nInputs:\n- quote_id: returned by PAYMENT-REQUIRED (or /api/v1/x402/quote)\n- payment_signature_b64: base64(JSON) that will be passed as HTTP header PAYMENT-SIGNATURE\n\nSide effects: credits points to the same Bearer key (no key rotation).\nOn success returns credited_points and balance_after (shape depends on upstream).\n","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"quote_id":{"description":"Quote ID returned by PAYMENT-REQUIRED (or /x402/quote).","title":"Quote Id","type":"string"},"payment_signature_b64":{"description":"Base64(JSON) for header PAYMENT-SIGNATURE.","title":"Payment Signature B64","type":"string"}},"required":["quote_id","payment_signature_b64"],"title":"x402_topupArguments"}}],"scan":{"score":84,"grade":"B","scanned_at":"2026-09-23T21:38:57.877Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-23T21:38:57.824Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 1554ms"]},"poisoning":{"score":15,"max":15,"notes":["17 tool descriptions checked"]},"auth":{"score":8,"max":15,"notes":["API key sent as a header"]},"maintenance":{"score":12,"max":15,"notes":["last push 44 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[],"inputs":{"probes":[{"url":"https://xcatcher.top/mcp/","reachable":true,"authRequired":false,"latencyMs":1554,"serverInfo":{"name":"Xcatcher Remote MCP","version":"1.26.0"}}],"packages":[],"repo":{"found":true,"owner":"lvpiggyqq","repo":"xcatcher-mcp-manifest","archived":false,"pushedAt":"2026-08-10T22:43:38Z","stars":9,"forks":1,"openIssues":1,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/187372918?v=4","ownerCreatedAt":"2024-11-05T07:27:48Z","license":"MIT"},"icon":{"url":"https://xcatcher.top/favicon.svg","source":"site"},"presence":{"stars":9,"forks":1,"downloadsWeek":null,"license":"MIT","lastPushAt":"2026-08-10T22:43:38.000Z","score":28}}}},"grade_history":[],"reviews":[]}