com. tweetsmash/ mcp
by tweetsmash.com · remote · no sign-in to list tools · v2.0.0 · published by com.tweetsmash
Search, label, and manage your X (Twitter) bookmarks from any MCP client via Tweetsmash
53 tools: 8 can delete or cancel things, 2 do something that can't be undone, 14 change things and 29 only read.
Scanned Oct 21, 2026
- Deletes or cancels8Claude Code: deny: see these tools
- Can't be undone2Claude Code: ask: see these tools
- Changes things14Claude Code: ask: see these tools
- Only reads29Claude Code: allow: see these tools
1 check matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http tweetsmash https://mcp.tweetsmash.com/api/mcpFindings
Matches of fixed checks, with the text they matched.
- Warnlist_skills
The server marks "list_skills" 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,"idempotentHint":true,"openWorldHint":false}; The name "list_skills" says "list": 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.
53 tools
Deletes or cancels 8Claude Code: deny
archive_bookmarksArchive, unarchive, delete, undelete, or mark read/unread a list of bookmarks by id (max 500).No findings
Why it is in this group
- The name "archive_bookmarks" says "archive": a word for removing or ending something.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Archive, unarchive, delete, undelete, or mark read/unread a list of bookmarks by id (max 500). This is a bulk write; for destructive actions (delete) confirm with the user first. Reports how many changed.
Annotations the server declares
- title: archive_bookmarks
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: false
- openWorldHint: false
archive_bookmarks_by_filterApply archive/unarchive/delete/undelete to EVERY bookmark matching a filter, in one call.No findings
Why it is in this group
- The name "archive_bookmarks_by_filter" says "archive": a word for removing or ending something.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Apply archive/unarchive/delete/undelete to EVERY bookmark matching a filter, in one call. Destructive by nature — confirm with the user before delete. Reports counts.
Annotations the server declares
- title: archive_bookmarks_by_filter
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: false
- openWorldHint: false
delete_digest_preferenceRemove a digest schedule by id.No findings
Why it is in this group
- The name "delete_digest_preference" says "delete": a word for removing or ending something.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Remove a digest schedule by id.
Annotations the server declares
- title: delete_digest_preference
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: false
- openWorldHint: false
delete_labelDelete a label from the account entirely — the label itself plus every bookmark's assignment of it.No findings
Why it is in this group
- The name "delete_label" says "delete": a word for removing or ending something.
- The description says "IRREVERSIBLE".
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Delete a label from the account entirely — the label itself plus every bookmark's assignment of it. The BOOKMARKS are not deleted; they simply lose this label. IRREVERSIBLE: before calling, tell the user how many bookmarks carry the label (list_labels returns the count) and get an explicit yes. To take a label off SOME bookmarks instead, use remove_labels_from_tweets. If the name matches more than one label the call fails with the candidates — re-run with label_id.
Annotations the server declares
- title: delete_label
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: false
- openWorldHint: false
delete_smart_viewDelete a Smart View by slug.No findings
Why it is in this group
- The name "delete_smart_view" says "delete": a word for removing or ending something.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Delete a Smart View by slug.
Annotations the server declares
- title: delete_smart_view
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: false
- openWorldHint: false
forgetDelete a saved library preference by key (optionally narrowed by kind).No findings
Why it is in this group
- The description's first verb is "delete": a word for removing or ending something.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Delete a saved library preference by key (optionally narrowed by kind). Use when the user changes their mind or asks you to drop something.
Annotations the server declares
- title: forget
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: false
- openWorldHint: false
remove_labels_from_tweetsRemove a label from a list of tweets using label_name.No findings
Why it is in this group
- The name "remove_labels_from_tweets" says "remove": a word for removing or ending something.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Remove a label from a list of tweets using label_name.
Annotations the server declares
- title: remove_labels_from_tweets
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: false
- openWorldHint: false
Can't be undone 2Claude Code: ask
correct_interestRecord the user's correction to an inferred interest, using a key from get_interests.No findings
Why it is in this group
- The description says "IRREVERSIBLE".
Description, as the server wrote it Record the user's correction to an inferred interest, using a key from get_interests. Corrections are sticky — they survive every future recompute. Use `confirm` when they agree, `rename` for their own wording, `hide` to stop using an interest while keeping its history, `boost` when they want it weighted higher. `forget` is different and IRREVERSIBLE: it erases the underlying history so the topic cannot re-form — only use it when the user clearly asks to delete, and say what it means first.
Annotations the server declares
- title: correct_interest
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
send_list_digestBuild and email a digest of a Twitter list's high-signal tweets to the user now.No findings
Why it is in this group
- The name "send_list_digest" says "send": a word for sending, and what is sent cannot be taken back.
Description, as the server wrote it Build and email a digest of a Twitter list's high-signal tweets to the user now.
Annotations the server declares
- title: send_list_digest
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
Changes things 14Claude Code: ask
add_labels_to_tweetsAdd a label to a list of tweets.No findings
Why it is in this group
- The name "add_labels_to_tweets" says "add": a word for a change.
Description, as the server wrote it Add a label to a list of tweets. Can use an existing label by ID or create a new label by name. Either label_id or label_name must be provided.
Annotations the server declares
- title: add_labels_to_tweets
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
compose_mash_digestCompose one of the user's Digest 2.0 digests NOW rather than waiting for its schedule.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.
Description, as the server wrote it Compose one of the user's Digest 2.0 digests NOW rather than waiting for its schedule. SPENDS A DIGEST CREDIT and takes about a minute, so only call it when the user asks for a fresh digest — not to inspect the current one (use get_mash_digest_issue for that). Returns an issue_id to read back once composing finishes.
Annotations the server declares
- title: compose_mash_digest
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
create_smart_viewCreate a Smart View from a filter so the user can reuse it.No findings
Why it is in this group
- The name "create_smart_view" says "create": a word for a change.
Description, as the server wrote it Create a Smart View from a filter so the user can reuse it. Provide a name and the base_query (filter).
Annotations the server declares
- title: create_smart_view
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
list_skillsSTART HERE for any open-ended request.1 finding
Why it is in this group
- The name "list_skills" says "list": a word for reading.
- The description's first verb is "start": 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 "list_skills" 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,"idempotentHint":true,"openWorldHint":false}; The name "list_skills" says "list": a word for reading.
Description, as the server wrote it START HERE for any open-ended request. Lists the task playbooks this server supports — systematic learning from bookmarks, organising into themes, cleaning up, X-list intelligence, exporting data out, finding a half-remembered save, digests, and diagnosing sync. Each names when to use it; call get_skill for the exact tool sequence.
Annotations the server declares
- title: list_skills
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
rememberSave a durable PREFERENCE about how this user wants their bookmark library handled — the themes they organise by, topics to exclude, preferred summary length/format, which account …No findings
Why it is in this group
- The description's first verb is "save": a word for a change.
Description, as the server wrote it Save a durable PREFERENCE about how this user wants their bookmark library handled — the themes they organise by, topics to exclude, preferred summary length/format, which account is their main one. It carries across sessions AND into the Tweetsmash web app, which your own client memory cannot reach. Use it for lasting preferences the user states or confirms, not for general chat context, task state, or anything secret.
Annotations the server declares
- title: remember
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
set_author_preferenceRemember how the user feels about an author in their list digests.No findings
Why it is in this group
- The name "set_author_preference" says "set": a word for a change.
Description, as the server wrote it Remember how the user feels about an author in their list digests. action=boost → never miss this author's posts (they will always be included, low-signal ones collapsed rather than dropped); action=hide → mute them; action=clear → forget the preference. Use when the user says things like 'don't let me miss marclou's updates' or 'stop showing me X'. Takes effect from the next digest and in preview_list_ranking immediately.
Annotations the server declares
- title: set_author_preference
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
setup_vector_storeInitialize the vector store for semantic bookmark search.No findings
Why it is in this group
- The name "setup_vector_store" says "store": a word for a change.
Description, as the server wrote it Initialize the vector store for semantic bookmark search. CRITICAL: When vector/semantic search fails with 'Vector Store Not Setup' error, call this tool. This is an async operation that may take a few minutes for large bookmark collections.
Annotations the server declares
- title: setup_vector_store
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
tag_bookmarks_by_filterAdd a label to EVERY bookmark matching a filter, in a single call.No findings
Why it is in this group
- The description's first verb is "add": a word for a change.
Description, as the server wrote it Add a label to EVERY bookmark matching a filter, in a single call. Prefer this over listing then looping when the user says 'tag all my … as …'. Resolves an author name to its id automatically. Reports matched/tagged/failed counts.
Annotations the server declares
- title: tag_bookmarks_by_filter
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
trigger_csv_exportStart a CSV export (explicit ids, a filter, or the whole library).No findings
Why it is in this group
- The name "trigger_csv_export" says "trigger": a word for a change.
Description, as the server wrote it Start a CSV export (explicit ids, a filter, or the whole library). Returns a job id; the file appears in the Export Center.
Annotations the server declares
- title: trigger_csv_export
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
trigger_json_exportStart a JSON export (explicit ids, a filter, or the whole library).No findings
Why it is in this group
- The name "trigger_json_export" says "trigger": a word for a change.
Description, as the server wrote it Start a JSON export (explicit ids, a filter, or the whole library). Returns a job id; the file appears in the Export Center.
Annotations the server declares
- title: trigger_json_export
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
trigger_pdf_exportStart a PDF export of the user's bookmarks (explicit ids, everything matching a filter, or the whole library).No findings
Why it is in this group
- The name "trigger_pdf_export" says "trigger": a word for a change.
Description, as the server wrote it Start a PDF export of the user's bookmarks (explicit ids, everything matching a filter, or the whole library). Returns a job id; tell the user the file will appear in the Export Center.
Annotations the server declares
- title: trigger_pdf_export
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
update_digest_preferenceUpdate a digest schedule (enable/pause, frequency, time) by id.No findings
Why it is in this group
- The name "update_digest_preference" says "update": a word for a change.
Description, as the server wrote it Update a digest schedule (enable/pause, frequency, time) by id.
Annotations the server declares
- title: update_digest_preference
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
update_smart_viewUpdate a Smart View (name, filter, tabs, sort) by slug.No findings
Why it is in this group
- The name "update_smart_view" says "update": a word for a change.
Description, as the server wrote it Update a Smart View (name, filter, tabs, sort) by slug.
Annotations the server declares
- title: update_smart_view
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
Only reads 29Claude Code: allow
fetch_recent_bookmarksForce-pull the user's most recent bookmarks from the X API now (server-side).No findings
Why it is in this group
- The name "fetch_recent_bookmarks" says "fetch": a word for reading.
Description, as the server wrote it Force-pull the user's most recent bookmarks from the X API now (server-side). Requires a connected X account; if the account only syncs via the browser extension, this reports that a browser sync is needed. Use when the user asks to refresh / fetch their latest saves. For Twitter-list freshness, use get_list_tweets instead.
Annotations the server declares
- title: fetch_recent_bookmarks
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
get_author_preferencesThe user's stated author preferences for list digests: `boost` = never-miss authors, `hide` = muted authors.No findings
Why it is in this group
- The name "get_author_preferences" says "get": a word for reading.
Description, as the server wrote it The user's stated author preferences for list digests: `boost` = never-miss authors, `hide` = muted authors.
Annotations the server declares
- title: get_author_preferences
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_bookmarkGet a single saved bookmark with FULL content in one call — the full X Article body, the unrolled thread, notes, and (optionally) replies.No findings
Why it is in this group
- The name "get_bookmark" says "get": a word for reading.
Description, as the server wrote it Get a single saved bookmark with FULL content in one call — the full X Article body, the unrolled thread, notes, and (optionally) replies. Use `include` (comma list of article,thread,notes,replies) to narrow it; defaults to article,thread,notes. Use this when the user wants to read or summarize a specific saved tweet/thread/article in depth.
Annotations the server declares
- title: get_bookmark
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_bookmark_countGet the total count of user's bookmarks with optional filtering.No findings
Why it is in this group
- The name "get_bookmark_count" says "get": a word for reading.
Description, as the server wrote it Get the total count of user's bookmarks with optional filtering. Useful for understanding the size of bookmark collections before listing them.
Annotations the server declares
- title: get_bookmark_count
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_bookmark_sync_statusShow whether a specific bookmark has synced to a given integration connection.No findings
Why it is in this group
- The name "get_bookmark_sync_status" says "get": a word for reading.
Description, as the server wrote it Show whether a specific bookmark has synced to a given integration connection.
Annotations the server declares
- title: get_bookmark_sync_status
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_connection_statusCheck whether the user's tweets can be pulled: the X (Twitter) API connection (connected / disconnected), whether the browser extension has synced recently, and a rolled-up can_pul…No findings
Why it is in this group
- The name "get_connection_status" says "get": a word for reading.
Description, as the server wrote it Check whether the user's tweets can be pulled: the X (Twitter) API connection (connected / disconnected), whether the browser extension has synced recently, and a rolled-up can_pull + how (x_api or extension). Use this before a sync, or when the user asks why bookmarks aren't updating. Note: the extension is browser-only and can't be driven by an agent.
Annotations the server declares
- title: get_connection_status
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_interestsRead what this user is actually interested in, inferred from their saved bookmarks, hand labels, questions and digest clicks — not from anything they typed.No findings
Why it is in this group
- The name "get_interests" says "get": a word for reading.
Description, as the server wrote it Read what this user is actually interested in, inferred from their saved bookmarks, hand labels, questions and digest clicks — not from anything they typed. Returns topics with a 0-1 strength, whether each is active this week, and a `coverage` field saying how much evidence exists (`lite` means a new account: treat it as a first guess and check before relying on it). Use it to prioritise, filter or explain — then confirm with the user rather than asserting it back as fact. Evidence itself is not returned.
Annotations the server declares
- title: get_interests
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_library_overviewA snapshot of the whole library: total bookmarks, unread, untagged, breakdown by type (threads/media/links/notes), every label with its count, and the years covered.No findings
Why it is in this group
- The name "get_library_overview" says "get": a word for reading.
Description, as the server wrote it A snapshot of the whole library: total bookmarks, unread, untagged, breakdown by type (threads/media/links/notes), every label with its count, and the years covered. Use this FIRST for anything open-ended (organise, clean up, learn from my saves, 'how many do I have per topic') instead of paging through bookmarks.
Annotations the server declares
- title: get_library_overview
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_list_digestsList past Twitter-list email digests for the user.No findings
Why it is in this group
- The name "get_list_digests" says "get": a word for reading.
Description, as the server wrote it List past Twitter-list email digests for the user.
Annotations the server declares
- title: get_list_digests
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_list_tweetsGet recent tweets for a followed X list — the latest, or (sort=POPULARITY) the top/trending tweets in a look-back window.No findings
Why it is in this group
- The name "get_list_tweets" says "get": a word for reading.
Description, as the server wrote it Get recent tweets for a followed X list — the latest, or (sort=POPULARITY) the top/trending tweets in a look-back window. Serves a cached copy when it's fresh and otherwise fetches from X automatically, so it always returns real tweets; `meta.source` says cache or fetched and `meta.cache_age_hours` how old it is. Pass max_age_hours:0 to force a refresh. Get connect_id from list_twitter_lists. hours defaults to 24.
Annotations the server declares
- title: get_list_tweets
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
get_mash_digest_issueOne digest issue in full: its title, intro, every section, and per item the summary, why it was picked and why it matters to this user.No findings
Why it is in this group
- The name "get_mash_digest_issue" says "get": a word for reading.
Description, as the server wrote it One digest issue in full: its title, intro, every section, and per item the summary, why it was picked and why it matters to this user. Use it to answer 'what was in my digest?', 'why was this in there?' or to carry on a conversation about something the user just read. Items carry tweet IDS, not post text — resolve them with get_bookmark if the user asks about a specific post.
Annotations the server declares
- title: get_mash_digest_issue
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_meGet the current user's account: identity, current plan and status, and usage (e.g.No findings
Why it is in this group
- The name "get_me" says "get": a word for reading.
Description, as the server wrote it Get the current user's account: identity, current plan and status, and usage (e.g. AI chat credits). Use this to answer 'who am I' / 'what plan am I on'.
Annotations the server declares
- title: get_me
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_skillGet the full playbook for a task: when to use it, the exact tool sequence with the arguments that matter, tips, and the pitfalls that cause empty results.No findings
Why it is in this group
- The name "get_skill" says "get": a word for reading.
Description, as the server wrote it Get the full playbook for a task: when to use it, the exact tool sequence with the arguments that matter, tips, and the pitfalls that cause empty results. `name` takes EITHER an exact skill name (learn_from_bookmarks, organise_into_themes, cleanup_library, list_intelligence, get_my_data_out, find_that_thing, stay_on_top, diagnose_sync, connect_your_tool) OR a plain description of the job — both resolve. You do NOT need list_skills first: if you already know what the user is trying to do, call this directly with their request and skip the round trip. Reach for list_skills only to browse what exists.
Annotations the server declares
- title: get_skill
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_smart_viewGet a single Smart View by slug (its filter, tabs/buckets, and sort).No findings
Why it is in this group
- The name "get_smart_view" says "get": a word for reading.
Description, as the server wrote it Get a single Smart View by slug (its filter, tabs/buckets, and sort).
Annotations the server declares
- title: get_smart_view
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_smart_view_bookmarksList the bookmarks inside a Smart View, optionally scoped to one tab/bucket.No findings
Why it is in this group
- The name "get_smart_view_bookmarks" says "get": a word for reading.
Description, as the server wrote it List the bookmarks inside a Smart View, optionally scoped to one tab/bucket. Use the returned ids with archive_bookmarks / tagging tools to act on the view.
Annotations the server declares
- title: get_smart_view_bookmarks
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_sync_statusShow the user's app-sync integrations (Notion, Google Sheets, Zotero): whether each is connected/enabled, synced vs pending counts, and any errors.No findings
Why it is in this group
- The name "get_sync_status" says "get": a word for reading.
Description, as the server wrote it Show the user's app-sync integrations (Notion, Google Sheets, Zotero): whether each is connected/enabled, synced vs pending counts, and any errors.
Annotations the server declares
- title: get_sync_status
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
list_bookmarksList the user's Twitter BOOKMARKS — posts they deliberately saved.No findings
Why it is in this group
- The name "list_bookmarks" says "list": a word for reading.
Description, as the server wrote it List the user's Twitter BOOKMARKS — posts they deliberately saved. Never includes X Likes; use list_likes for those. Supports filtering and pagination. Supports filtering by read status, media type, author, tags, date ranges, and sorting options. IMPORTANT: Use this tool (with the 'author' parameter) when the user asks to show tweets by a specific author.
Annotations the server declares
- title: list_bookmarks
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
list_digest_preferencesList the user's email-digest schedules (frequency, time, paused state) for bookmark and Smart View digests.No findings
Why it is in this group
- The name "list_digest_preferences" says "list": a word for reading.
Description, as the server wrote it List the user's email-digest schedules (frequency, time, paused state) for bookmark and Smart View digests.
Annotations the server declares
- title: list_digest_preferences
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
list_labelsList all user's labels with their usage counts.No findings
Why it is in this group
- The name "list_labels" says "list": a word for reading.
Description, as the server wrote it List all user's labels with their usage counts. Useful for discovering existing labels before adding new ones.
Annotations the server declares
- title: list_labels
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
list_likesList the posts the user LIKED on X (not their bookmarks).No findings
Why it is in this group
- The name "list_likes" says "list": a word for reading.
Description, as the server wrote it List the posts the user LIKED on X (not their bookmarks). Likes are a lighter signal than a save — use list_bookmarks for things the user deliberately saved, and this when the user explicitly asks about likes or about what they react to. Same filters and pagination as list_bookmarks.
Annotations the server declares
- title: list_likes
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
list_mash_digest_issuesPast issues of the user's Digest 2.0, newest first — what arrived and when.No findings
Why it is in this group
- The name "list_mash_digest_issues" says "list": a word for reading.
Description, as the server wrote it Past issues of the user's Digest 2.0, newest first — what arrived and when. Deliberately WITHOUT the content: pick one and call get_mash_digest_issue for the whole thing. Pass digest_id to narrow to one digest.
Annotations the server declares
- title: list_mash_digest_issues
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
list_mash_digestsThe user's Mash Digest 2.0 digests — the AI-composed ones.No findings
Why it is in this group
- The name "list_mash_digests" says "list": a word for reading.
Description, as the server wrote it The user's Mash Digest 2.0 digests — the AI-composed ones. An account can have SEVERAL (a morning read and an evening skim are two digests, not two sections of one), so START HERE and use the returned `id` for the other digest tools. Returns each digest's name, where its sections read from, and its schedule.
Annotations the server declares
- title: list_mash_digests
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
list_past_digestsList past digests sent to the user's email, newest first.No findings
Why it is in this group
- The name "list_past_digests" says "list": a word for reading.
Description, as the server wrote it List past digests sent to the user's email, newest first. This is Digest 1.0 (the cluster pipeline). For the AI-composed Digest 2.0, use list_mash_digests.
Annotations the server declares
- title: list_past_digests
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
list_smart_viewsList the user's Smart Views (saved filtered views).No findings
Why it is in this group
- The name "list_smart_views" says "list": a word for reading.
Description, as the server wrote it List the user's Smart Views (saved filtered views). Each has a slug you pass to the other smart-view tools.
Annotations the server declares
- title: list_smart_views
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
list_twitter_listsList the X (Twitter) lists the user follows in Tweetsmash.No findings
Why it is in this group
- The name "list_twitter_lists" says "list": a word for reading.
Description, as the server wrote it List the X (Twitter) lists the user follows in Tweetsmash. Returns each list's name plus its `connect_id` — pass that to get_list_tweets / send_list_digest. START HERE for any 'what's in my list' request.
Annotations the server declares
- title: list_twitter_lists
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
preview_list_rankingRank a followed X list exactly the way the digest ranker would, WITHOUT sending anything, and show the work: each unit carries its rank_signals (lane_fit = matches what the user bu…No findings
Why it is in this group
- The name "preview_list_ranking" says "preview": a word for reading.
Description, as the server wrote it Rank a followed X list exactly the way the digest ranker would, WITHOUT sending anything, and show the work: each unit carries its rank_signals (lane_fit = matches what the user builds/studies, affinity = an author they trust, engagement, substance, noise demotions) plus author groups (`group_size` + `related_items` = several posts by one author, best one leading). Use this to answer 'what's worth reading in my list?', 'why was this picked?', or to check how a preference change would land. `meta.inert_dimensions` names signals that had no data for this pool.
Annotations the server declares
- title: preview_list_ranking
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
recallRead back the user's saved library preferences (optionally filtered by a substring).No findings
Why it is in this group
- The description's first verb is "read": a word for reading.
Description, as the server wrote it Read back the user's saved library preferences (optionally filtered by a substring). Worth calling before an open-ended organise, summarise or cleanup task so you follow how they already like things done.
Annotations the server declares
- title: recall
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
search_bookmarksSearch through a user's Twitter bookmarks using keyword search (q), semantic search (vector_search_term), or author filtering (author).No findings
Why it is in this group
- The name "search_bookmarks" says "search": a word for reading.
Description, as the server wrote it Search through a user's Twitter bookmarks using keyword search (q), semantic search (vector_search_term), or author filtering (author). At least one of q, vector_search_term, or author should be provided. IMPORTANT: Use the 'author' parameter for filtering by author, not the 'q' field.
Annotations the server declares
- title: search_bookmarks
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
search_docsAnswer questions about Tweetsmash itself — features, how-to, pricing, plans, limits, account/subscription.No findings
Why it is in this group
- The name "search_docs" says "search": a word for reading.
Description, as the server wrote it Answer questions about Tweetsmash itself — features, how-to, pricing, plans, limits, account/subscription. Searches the bundled product guide and returns the most relevant sections for you to answer from. Call with an empty query to list the help topics.
Annotations the server declares
- title: search_docs
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
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 2.0.0. Values in angle brackets are yours to fill in.
claude mcp add --transport http tweetsmash https://mcp.tweetsmash.com/api/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__tweetsmash__list_bookmarks",
"mcp__tweetsmash__list_likes",
"mcp__tweetsmash__search_bookmarks",
"mcp__tweetsmash__get_bookmark_count",
"mcp__tweetsmash__list_labels",
"mcp__tweetsmash__get_skill",
"mcp__tweetsmash__get_library_overview",
"mcp__tweetsmash__search_docs",
"mcp__tweetsmash__get_bookmark",
"mcp__tweetsmash__list_smart_views",
"mcp__tweetsmash__get_smart_view",
"mcp__tweetsmash__get_smart_view_bookmarks",
"mcp__tweetsmash__list_digest_preferences",
"mcp__tweetsmash__list_past_digests",
"mcp__tweetsmash__list_mash_digests",
"mcp__tweetsmash__list_mash_digest_issues",
"mcp__tweetsmash__get_mash_digest_issue",
"mcp__tweetsmash__get_sync_status",
"mcp__tweetsmash__get_bookmark_sync_status",
"mcp__tweetsmash__list_twitter_lists",
"mcp__tweetsmash__get_list_tweets",
"mcp__tweetsmash__get_list_digests",
"mcp__tweetsmash__preview_list_ranking",
"mcp__tweetsmash__get_author_preferences",
"mcp__tweetsmash__get_me",
"mcp__tweetsmash__get_connection_status",
"mcp__tweetsmash__fetch_recent_bookmarks",
"mcp__tweetsmash__recall",
"mcp__tweetsmash__get_interests"
],
"ask": [
"mcp__tweetsmash__add_labels_to_tweets",
"mcp__tweetsmash__setup_vector_store",
"mcp__tweetsmash__list_skills",
"mcp__tweetsmash__tag_bookmarks_by_filter",
"mcp__tweetsmash__create_smart_view",
"mcp__tweetsmash__update_smart_view",
"mcp__tweetsmash__create_share_link",
"mcp__tweetsmash__trigger_pdf_export",
"mcp__tweetsmash__trigger_csv_export",
"mcp__tweetsmash__trigger_json_export",
"mcp__tweetsmash__update_digest_preference",
"mcp__tweetsmash__compose_mash_digest",
"mcp__tweetsmash__send_list_digest",
"mcp__tweetsmash__set_author_preference",
"mcp__tweetsmash__remember",
"mcp__tweetsmash__correct_interest"
],
"deny": [
"mcp__tweetsmash__remove_labels_from_tweets",
"mcp__tweetsmash__delete_label",
"mcp__tweetsmash__archive_bookmarks",
"mcp__tweetsmash__archive_bookmarks_by_filter",
"mcp__tweetsmash__delete_smart_view",
"mcp__tweetsmash__revoke_share_link",
"mcp__tweetsmash__delete_digest_preference",
"mcp__tweetsmash__forget"
]
}
}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 tweetsmash. Review it before you use it.