Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, email [email protected] and we’ll put it right.

twitr.sh

REMOTE · TWITR.SH · SCANNED AUG 3

X/Twitter reads, search, monitors and posting. Pay-per-call in USDC — no signup, no API keys.

Available components

+4 this week 60 Trust /100
Trust breakdown (6 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score →

Endpoint Security63
Transport & Reachability100
Schema Quality & AI Usability47
  • AI-judged instruction clarity (good).Pass
  • Context-footprint check failed: tool/resource definitions use about 4294 tokens (~306/item across 14 items; 14 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management23
  • Stability observed for 7 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage85
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 56% of tool parameters carry a description.Partial
Capabilities60
  • Spec-recency check failed: implements MCP spec 2025-06-18; the latest is 2026-07-28. See how to fix → Fail
Install

Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.

remote · twitr.sh

# add to Claude Code
claude mcp add --transport http sh-twitr-twitr https://twitr.sh/api/mcp
# ~/.codex/config.toml
[mcp_servers.sh-twitr-twitr]
url = "https://twitr.sh/api/mcp"
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "sh-twitr-twitr": {
      "type": "remote",
      "url": "https://twitr.sh/api/mcp",
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add sh-twitr-twitr --url https://twitr.sh/api/mcp --transport streamable-http
# ~/.hermes/config.yaml
mcp_servers:
  sh-twitr-twitr:
    url: "https://twitr.sh/api/mcp"
// mcp.json
{
  "mcpServers": {
    "sh-twitr-twitr": {
      "type": "http",
      "url": "https://twitr.sh/api/mcp"
    }
  }
}

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 3 Aug 26 0
    • The server rewrote its instructions, which are the text every model session reads security
    • Tool “x_write” rewrote its description, which is the text the model reads security
    • Tool “x_inbox” rewrote its description, which is the text the model reads security
  • 2 Aug 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 17 to 20. That category is still filling its 30-day observation window: 5 days of observed history at the previous scan, 6 at this one. The score rises as the window fills, whether or not the server changes.

  • 31 Jul 26 +1
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 29 Jul 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.

  • 28 Jul 26 +1
    • Schema quality: 270 → 304 functional
    • Stability: unverified → 0.03 functional
  • 27 Jul 26 56

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 3 Aug 2026 · Probed https://twitr.sh/api/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=twitr.sh CN=YR2,O=Let's Encrypt,C=US 27 Jul 2026 25 Oct 2026 RSA 2048 SHA256-RSA 63188e526b9fa93d61ada413086fcf42dc8
SANs: twitr.sh
CN=YR2,O=Let's Encrypt,C=US (CA) CN=Root YR,O=ISRG,C=US 3 Sept 2025 2 Sept 2028 RSA 2048 SHA256-RSA 4ebd24947e24d394802d84a52fd5b319
CN=Root YR,O=ISRG,C=US (CA) CN=ISRG Root X1,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 RSA 4096 SHA256-RSA f24b6d17f9d9ad7cb1c9fea78782699f
DNSSEC insecure

Validation of twitr.sh. Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
sh. present 55297 8 Verified
twitr.sh. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication No authorisation required

The endpoint answered without asking for a token. Anyone who knows the URL can reach it.

Result No authorisation required
HTTP status 200
Header Value
strict-transport-security max-age=63072000
Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://twitr.sh/api/mcp Verified 200
http (plaintext) http://twitr.sh/api/mcp HTTPS enforced 308 https://twitr.sh/api/mcp
MCP tools — 14 exposed · ~4,070 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability.

Tool Tokens
x_communities ~150

Read an X/Twitter Community: profile info, member and moderator rosters, the community's tweets, or keyword search inside the community. Fixed price for info; billed per item for rosters, tweets, and search. Guidance: kind=info (fixed price) or members|moderators|tweets|search (per-item — resultsLimit MANDATORY). id = community ID. search additionally requires q.

NameTypeReqDescription
idstringyesCommunity ID.
kindstringyesWhat to read.
qstringsearch: query within the community.
resultsLimitintegerMandatory for members/moderators/tweets/search: max items, billed per item.

No output schema declared.

No examples provided.

x_community ~186

Manage X/Twitter Communities as a connected account: create a new community, join or leave an existing one, or delete a community you own. Guidance: PREREQUISITE: connect an X account. Acts as a handle THIS wallet owns. action=create (name, optional description) | join|leave (community_id) | delete (community_id + community_name confirmation). account required. Payment settles before the action; Idempotency-Key required.

NameTypeReqDescription
accountstringyesA connected X handle owned by this wallet (no @).
actionstringyesWhich community action.
community_idstringjoin|leave|delete: the community ID.
community_namestringdelete: the community name, as confirmation.
descriptionstringcreate: optional community description.
namestringcreate: the community name.

No output schema declared.

No examples provided.

x_compose ~198

Draft tweets with AI: generate variants from a topic and goal, refine an existing draft, or score a draft for likely engagement — with tone, call-to-action, and style-matching options. Flat sub-cent price per step. Guidance: step=generate (topic + goal required; optional tone/styleUsername/additionalContext/callToAction/mediaType/hasLink/hasMedia), refine (draft required), or score (draft required). Returns text variants with scores and suggestions. Flat floor price per call.

NameTypeReqDescription
additionalContextstring
callToActionstring
draftstring
goalstring
hasLinkboolean
hasMediaboolean
mediaTypestring
stepstringyesComposer step.
styleUsernamestring
tonestring
topicstring

No output schema declared.

No examples provided.

x_draws ~339

Run a provably fair giveaway on X/Twitter: pick crypto-random winners from a tweet's replies, with retweet, follow, hashtag, keyword, minimum-follower, and account-age conditions. Fixed price set upfront from your estimated entry count. Guidance: tweetUrl required. Optional: winnerCount (default 1), backupCount, uniqueAuthorsOnly, mustRetweet, mustFollowUsername, filterMinFollowers, filterAccountAgeDays, filterLanguage, requiredHashtags/Keywords/Mentions. Pricing is fixed upfront from the estimatedEntries you set (default 1000, max 10000) — set it near the tweet's reply count; that number is enforced as a hard cap. Payment settles before the draw runs, so pay only when you intend to run it; a failed draw does not auto-refund (contact support). Idempotency-Key header required — retries with the same key replay the original result instead of re-charging.

NameTypeReqDescription
backupCountinteger
estimatedEntriesintegerExpected replies inspected — drives the fixed price (default 1000).
filterAccountAgeDaysinteger
filterLanguagestring
filterMinFollowersinteger
mustFollowUsernamestring
mustRetweetboolean
requiredHashtagsarray
requiredKeywordsarray
requiredMentionsarray
tweetUrlstringyesFull tweet URL (https://x.com/user/status/ID).
uniqueAuthorsOnlyboolean
winnerCountinteger

No output schema declared.

No examples provided.

x_extract ~357

Bulk-export X/Twitter data as downloadable datasets: followers, following, repliers, quoters, reposters, likers, mentions, full threads, list and community members, spaces, or people/tweet search results — 23 extractors. Runs async: you get a claim check immediately and poll a free status URL for the download link. Billed per result. Guidance: tool selects the extractor (23 options). Provide the matching target: targetTweetId (reply/repost/quote/thread/article/favoriters extractors), targetUsername (follower/following/verified/post/mention/likes/media), targetCommunityId, targetListId, targetSpaceId, or searchQuery (people_search, tweet_search_extractor). resultsLimit is MANDATORY — billed per result (article_extractor bills 5× per result). Runs ASYNC: the response is a claim check {snapshot_id, status_url}; poll status_url (free, SIWX) until status=ready for the download link. Idempotency-Key header is required so retries reuse the same job.

NameTypeReqDescription
languagestring
mediaTypestring
minFavesinteger
resultsLimitintegeryesMANDATORY: max results extracted, billed per result.
searchQuerystring
sinceDatestring
targetCommunityIdstring
targetListIdstring
targetSpaceIdstring
targetTweetIdstring
targetUsernamestring
toolstringyesWhich extractor to run.
untilDatestring
verifiedOnlyboolean

No output schema declared.

No examples provided.

x_inbox ~261

Read a connected X/Twitter account's private surfaces: bookmarks and bookmark folders, notifications, and DM history. Billed per item returned; readable only for handles this wallet connected. Guidance: PREREQUISITE: connect an X account (see /api/x-accounts/start). Reads act AS that account, so you can only read the inbox of a handle THIS wallet connected. action=bookmarks (optional folderId) | bookmark_folders | notifications (optional type) | dm_history (target_user_id required). bookmarks/notifications/dm_history are billed per item — set resultsLimit (1–10000). account (the connected handle) is required.

NameTypeReqDescription
accountstringyesA connected X handle owned by this wallet (no @).
actionstringyesWhich inbox read to run.
folderIdstringbookmarks: optional folder to read.
maxIdstringdm_history: paginate before this message id.
resultsLimitintegerMax items to return (billed per item); ignored for bookmark_folders.
target_user_idstringdm_history: the other party's user id.
typestringnotifications: optional filter (e.g. mentions).

No output schema declared.

No examples provided.

x_lists ~150

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. Guidance: kind=tweets|members|followers; id = list ID. resultsLimit is MANDATORY — billed per item returned. tweets supports sinceTime/untilTime and includeReplies.

NameTypeReqDescription
idstringyesList ID.
includeRepliesboolean
kindstringyesWhat to read from the list.
resultsLimitintegeryesMANDATORY: max items returned, billed per item.
sinceTimestring
untilTimestring

No output schema declared.

No examples provided.

x_monitor ~594

Watch an X/Twitter account or keyword query in real time: new tweets, replies, quotes, mentions, hashtags, and profile changes, delivered to your agent by free polling or HMAC-signed webhooks. Prepaid by the hour with a hard stop at expiry — no open-ended billing. The way to track a brand, competitor, or topic without re-polling paid reads. Guidance: action=create needs username (account monitor, e.g. "vercel") OR query (keyword monitor, X search syntax, ≤512 chars), optional eventTypes — 21 available: post events (tweet.new, .reply, .retweet, .quote, .media, .link, .poll, .mention, .hashtag, .longform) for any monitor, plus profile-change events (profile.avatar/banner/name/username/bio/location/url/verified/protected/pinned_tweet/unavailable.changed) for ACCOUNT monitors only; default all applicable — and hours (1–168, default 1). action=extend needs monitorId + hours; hours append to the current expiry (total prepaid window ≤ 720h). Extend at least 5 minutes BEFORE expiry — extends inside the final 5 minutes are refused (unpaid) to keep settlement from racing the expiry teardown. PREPAID: the monitor stops and is removed at expires_at unless extended — no open-ended billing; early deletion does not refund remaining hours. Idempotency-Key header REQUIRED — retries replay the original monitor instead of re-charging (on the MCP door, retries are protected by single-use payment credentials instead). Pay with USDC on Base (x402) or Tempo (MPP); Solana is not offered for monitors (stateful resources need a recoverable owner wallet). After creation: poll events at /api/monitors/{id}/events (free — SIWX sign-in with the paying wallet; do NOT poll in a tight loop) or register an HTTPS webhook once at /api/webhooks to push signed events straight to your AI agent (Claude, OpenClaw, Hermes, or any endpoint) in real time. Manage monitors at /api/monitors (SIWX).

NameTypeReqDescription
actionstringyesCreate a new monitor or extend an existing one.
eventTypesarrayEvent types to receive (default: all applicable). Post events (tweet.*) work for any monitor; profile-change events (profile.*.changed) apply to ACCOUNT monitors only.
hoursintegerPrepaid hours to purchase (default 1).
monitorIdstringMonitor to extend (extend only).
querystringX search query to monitor (create, type=keyword).
typestringMonitor kind (create). Inferred from username/query when omitted.
usernamestringX handle to monitor, without @ (create, type=account).

No output schema declared.

No examples provided.

x_profile ~206

Edit a connected X/Twitter account's profile: display name, bio, location, website link, avatar image, and banner image. Acts only on handles this wallet connected. Guidance: PREREQUISITE: connect an X account. Acts as a handle THIS wallet owns. action=update_profile (any of name, description, location, url) | set_avatar (media_url) | set_banner (media_url). account required. Payment settles before the change; Idempotency-Key required.

NameTypeReqDescription
accountstringyesA connected X handle owned by this wallet (no @).
actionstringyesWhich profile edit to make.
descriptionstringupdate_profile: new bio.
locationstringupdate_profile: new location.
media_urlstringset_avatar|set_banner: public image URL.
namestringupdate_profile: new display name.
urlstringupdate_profile: new website URL.

No output schema declared.

No examples provided.

x_radar ~148

Trending topics and breaking stories across tech, dev, science, business, culture, politics, and entertainment — aggregated from multiple public sources with regional and time-window filters. Flat sub-cent price per call; the cheap first stop for what is happening right now. Guidance: Optional filters: category, region, hours (lookback), limit, source. Use report.next_cursor via `after` for the next page. Flat floor price per call.

NameTypeReqDescription
afterstringPagination cursor.
categorystringTopic category filter.
hoursinteger
limitinteger
regionstring
sourcestringTrend source filter.

No output schema declared.

No examples provided.

x_read ~312

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. Guidance: 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), followers-you-know (id + mandatory resultsLimit), download-media (id or ids ≤50 — returns media file URLs on THIS origin; links live 7 days). Fixed-price per call/id except followers-you-know which is per-result.

NameTypeReqDescription
countintegertrends: number of trends to return.
idstringTweet ID, user ID, or username (depends on resource).
idsarraybatch-tweets|batch-users: up to 100 tweet IDs or user IDs/usernames.
resourcestringyesWhich read operation to run.
resultsLimitintegerMandatory for followers-you-know: max results, billed per result.
sourcestringcheck-follower: source username.
targetstringcheck-follower: target username.
woeidintegertrends: region WOEID (default 1 = worldwide).

No output schema declared.

No examples provided.

x_search ~360

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. Guidance: type=search-tweets (default): q required, resultsLimit MANDATORY (billed per tweet returned). Supports the full filter set: fromUser, language, sinceDate/untilDate, mediaType, minFaves, verifiedOnly, exactPhrase, excludeWords, advancedQuery, and more. type=search-users: q required; returns one results page per call — follow report.next_cursor for the next page (each page is a separate paid call).

NameTypeReqDescription
advancedQuerystringRaw X search operator string appended to q.
cursorstringsearch-users: pagination cursor from a previous call's report.next_cursor.
exactPhrasestring
excludeWordsstring
fromUserstring
languagestring
mediaTypestring
minFavesinteger
minRepliesinteger
minRetweetsinteger
qstringyesSearch query (X operator syntax supported for tweets).
resultsLimitintegersearch-tweets: MANDATORY max tweets returned, billed per tweet.
sinceDatestringYYYY-MM-DD
typestringSearch tweets (default) or users.
untilDatestringYYYY-MM-DD
verifiedOnlyboolean

No output schema declared.

No examples provided.

x_timeline ~274

Fetch a user's X/Twitter timeline — their tweets, replies, likes, media posts, or mentions — plus follower and following lists, and per-tweet engagement lists (who replied, quoted, retweeted, or favorited). Billed per item returned. The building block for monitoring what an account posts or ranking accounts by activity. Guidance: kind selects the timeline: user-tweets|user-replies|user-likes|user-media|user-mentions|followers|following|verified-followers (id = user) or tweet-replies|tweet-quotes|tweet-thread|tweet-favoriters|tweet-retweeters (id = tweet). resultsLimit is MANDATORY — billed per item returned. Search-operator filters (fromUser, language, mediaType, minFaves, …) apply to tweet timelines.

NameTypeReqDescription
idstringyesUser ID/username or tweet ID (depends on kind).
includeParentTweetboolean
includeRepliesboolean
kindstringyesWhich timeline to fetch.
languagestring
mediaTypestring
minFavesinteger
resultsLimitintegeryesMANDATORY: max items returned, billed per item.
verifiedOnlyboolean

No output schema declared.

No examples provided.

x_write ~535

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. Guidance: 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 password, email, or 2FA secret. Poll GET /api/x-accounts until the handle shows linked, then reference it in `account`. Actions: post (text) | reply (text + reply_to_tweet_id) | like|unlike|retweet|unretweet|delete_tweet (target_tweet_id) | follow|unfollow (target_user_id — the NUMERIC user id, get it from x_read get-user) | remove_follower (target_user_id of the follower) | send_dm (target_user_id + text) | upload_media (media_url → returns media_id). You can only write as a handle THIS wallet connected (checked server-side; the input account is not trusted). Payment settles before the action runs and is non-refundable; a write may return status=pending_confirmation with an actionId to poll — do NOT resend. Idempotency-Key header is required so a retry replays the original result instead of acting twice.

NameTypeReqDescription
accountstringyesA connected X handle owned by this wallet (no @).
actionstringyesWhich write to perform.
community_idstringpost: optional community to post into.
is_note_tweetbooleanpost: long-form note tweet.
media_idsarraysend_dm: optional uploaded media ids to attach.
media_urlstringupload_media: public URL of the file to upload; returns a media_id.
reply_to_tweet_idstringreply: the tweet being replied to.
target_tweet_idstringlike|unlike|retweet|unretweet|delete_tweet: the target tweet ID.
target_user_idstringfollow|unfollow|send_dm|remove_follower: the numeric X user id of the target (not the @handle). Get it from x_read get-user.
textstringpost|reply|send_dm: the message body.

No output schema declared.

No examples provided.