{"serverId":"mcp-registry/sh.twitr/twitr","tools":[{"name":"x_lists","fixed":{"name":"x_lists","description":"Read an X/Twitter List: its combined tweet timeline, its member roster, or its followers. Billed per item returned. Useful for following a curated set of accounts as one feed.\n\nGuidance: kind=tweets|members|followers; id = list ID. resultsLimit is MANDATORY — billed per item returned. tweets supports sinceTime/untilTime and includeReplies.","inputSchema":{"type":"object","required":["kind","id","resultsLimit"],"properties":{"id":{"type":"string","description":"List ID."},"kind":{"enum":["tweets","members","followers"],"type":"string","description":"What to read from the list."},"sinceTime":{"type":"string"},"untilTime":{"type":"string"},"resultsLimit":{"type":"integer","maximum":10000,"minimum":1,"description":"MANDATORY: max items returned, billed per item."},"includeReplies":{"type":"boolean"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":235,"tokensAfter":235},{"name":"x_read","fixed":{"name":"x_read","description":"Read live X/Twitter data: look up a single tweet or user profile, batch-read up to 100 tweets or users at once, check whether one account follows another, fetch trending topics by region, extract a long-form article, or download tweet media. Pay per call in USDC — no API key, no signup; failed calls are never charged.\n\nGuidance: resource=get-tweet|get-user (id), batch-tweets|batch-users (ids array, ≤100), check-follower (source+target usernames), trends (optional woeid/count), article (tweet id)","inputSchema":{"type":"object","allOf":[{"if":{"properties":{"resource":{"const":"followers-you-know"}}},"then":{"required":["resultsLimit"]}}],"required":["resource"],"properties":{"id":{"type":"string","description":"Tweet ID, user ID, or username (depends on resource)."},"ids":{"type":"array","items":{"type":"string"},"description":"batch-tweets|batch-users: up to 100 tweet IDs or user IDs/usernames."},"count":{"type":"integer","description":"trends: number of trends to return."},"woeid":{"type":"integer","description":"trends: region WOEID (default 1 = worldwide)."},"source":{"type":"string","description":"check-follower: source username."},"target":{"type":"string","description":"check-follower: target username."},"resource":{"enum":["get-tweet","get-user","batch-tweets","batch-users","check-follower","trends","article","followers-you-know","download-media"],"type":"string","description":"Which read operation to run."},"resultsLimit":{"type":"integer","maximum":10000,"minimum":1,"description":"Mandatory for followers-you-know: max results, billed per result."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":450,"tokensAfter":450},{"name":"x_search","fixed":{"name":"x_search","description":"Search X/Twitter tweets with the full operator set — keyword, exact phrase, from-user, language, date range, media type, minimum likes/retweets, verified-only — or search user profiles by keyword. Billed per tweet returned against your resultsLimit cap. Built for tracking what people say about a topic, brand, or ticker in real time.\n\nGuidance: type=search-tweets (default): q required, resultsLimit MANDATORY (billed per tweet returned). Supports the full filter set: fromUser, language, sinceDate/","inputSchema":{"type":"object","allOf":[{"if":{"properties":{"type":{"const":"search-users"}}},"else":{"required":["resultsLimit"]},"then":{}}],"required":["q"],"properties":{"q":{"type":"string","description":"Search query (X operator syntax supported for tweets)."},"type":{"enum":["search-tweets","search-users"],"type":"string","description":"Search tweets (default) or users."},"cursor":{"type":"string","description":"search-users: pagination cursor from a previous call's report.next_cursor."},"fromUser":{"type":"string"},"language":{"type":"string"},"minFaves":{"type":"integer"},"mediaType":{"enum":["images","videos","gifs","media"],"type":"string"},"sinceDate":{"type":"string","description":"YYYY-MM-DD"},"untilDate":{"type":"string","description":"YYYY-MM-DD"},"minReplies":{"type":"integer"},"exactPhrase":{"type":"string"},"minRetweets":{"type":"integer"},"excludeWords":{"type":"string"},"resultsLimit":{"type":"integer","maximum":10000,"minimum":1,"description":"search-tweets: MANDATORY max tweets returned, billed per tweet."},"verifiedOnly":{"type":"boolean"},"advancedQuery":{"type":"string","description":"Raw X search operator string appended to q."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":477,"tokensAfter":477},{"name":"x_write","fixed":{"name":"x_write","description":"Act on X/Twitter through an account you connect: post a tweet, reply, like, retweet, follow or unfollow, send a DM, delete a tweet, remove a follower, or upload media. Ownership is checked server-side — an agent can only write as a handle its own wallet connected.\n\nGuidance: PREREQUISITE: connect an X account first — POST /api/x-accounts/start (free, SIWX) with {username} only; it returns a one-time connect_url the USER opens in their own browser to sign in there. Never ask the user for their X ","inputSchema":{"type":"object","required":["action","account"],"properties":{"text":{"type":"string","description":"post|reply|send_dm: the message body."},"action":{"enum":["post","reply","like","unlike","retweet","unretweet","follow","unfollow","delete_tweet","send_dm","remove_follower","upload_media"],"type":"string","description":"Which write to perform."},"account":{"type":"string","description":"A connected X handle owned by this wallet (no @)."},"media_ids":{"type":"array","items":{"type":"string"},"description":"send_dm: optional uploaded media ids to attach."},"media_url":{"type":"string","description":"upload_media: public URL of the file to upload; returns a media_id."},"community_id":{"type":"string","description":"post: optional community to post into."},"is_note_tweet":{"type":"boolean","description":"post: long-form note tweet."},"target_user_id":{"type":"string","description":"follow|unfollow|send_dm|remove_follower: the numeric X user id of the target (not the @handle). Get it from x_read get-user."},"target_tweet_id":{"type":"string","description":"like|unlike|retweet|unretweet|delete_tweet: the target tweet ID."},"reply_to_tweet_id":{"type":"string","description":"reply: the tweet being replied to."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":494,"tokensAfter":494}],"toolsChanged":4,"tokensSaved":0,"todo":[{"tool":"x_compose","params":["goal","tone","draft","topic","hasLink","hasMedia","mediaType","callToAction","styleUsername","additionalContext"]},{"tool":"x_draws","params":["backupCount","mustRetweet","winnerCount","filterLanguage","requiredHashtags","requiredKeywords","requiredMentions","uniqueAuthorsOnly","filterMinFollowers","mustFollowUsername","filterAccountAgeDays"]},{"tool":"x_extract","params":["language","minFaves","mediaType","sinceDate","untilDate","searchQuery","targetListId","verifiedOnly","targetSpaceId","targetTweetId","targetUsername","targetCommunityId"]},{"tool":"x_lists","params":["sinceTime","untilTime","includeReplies"]},{"tool":"x_radar","params":["hours","limit","region"]},{"tool":"x_search","params":["fromUser","language","minFaves","mediaType","minReplies","exactPhrase","minRetweets","excludeWords","verifiedOnly"]},{"tool":"x_timeline","params":["language","minFaves","mediaType","verifiedOnly","includeReplies","includeParentTweet"]}],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}