{
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-09-29/server.schema.json",
  "name": "com.tweetsmash/mcp",
  "title": "Tweetsmash",
  "description": "Search, label, export and manage your X (Twitter) bookmarks from any MCP client. Read full post content, run smart views, trigger PDF/CSV/JSON exports, manage digests, and discover X Lists.",
  "version": "2.1.0",
  "websiteUrl": "https://www.tweetsmash.com/x-bookmarks-mcp",
  "repository": {
    "url": "https://github.com/RamyaChinnadurai/tweetsmash-mcp",
    "source": "github"
  },
  "remotes": [
    {
      "type": "streamable-http",
      "url": "https://mcp.tweetsmash.com/api/mcp"
    }
  ],
  "packages": [
    {
      "registryType": "npm",
      "identifier": "@tweetsmash/mcp",
      "version": "1.1.0",
      "transport": {
        "type": "stdio"
      },
      "environmentVariables": [
        {
          "name": "TWEETSMASH_TOKEN",
          "description": "Tweetsmash API key. Generate one at https://www.tweetsmash.com/integrations/api",
          "isRequired": true,
          "isSecret": true
        }
      ]
    }
  ],
  "serverUrl": "https://mcp.tweetsmash.com/api/mcp",
  "transport": "streamable-http",
  "authentication": {
    "type": "bearer",
    "description": "Send a Tweetsmash API key as `Authorization: Bearer <key>`. Keys are created at https://www.tweetsmash.com/integrations/api.",
    "documentation": "https://www.tweetsmash.com/auth.md",
    "protectedResourceMetadata": "https://www.tweetsmash.com/.well-known/oauth-protected-resource"
  },
  "tools": [
    {
      "name": "list_bookmarks",
      "description": "List the user's Twitter BOOKMARKS — posts they deliberately saved.",
      "annotations": {
        "title": "list_bookmarks",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "_meta": {
        "ui": {
          "resourceUri": "ui://tweetsmash/bookmark-list"
        },
        "ui/resourceUri": "ui://tweetsmash/bookmark-list"
      }
    },
    {
      "name": "list_likes",
      "description": "List the posts the user LIKED on X (not their bookmarks).",
      "annotations": {
        "title": "list_likes",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "_meta": {
        "ui": {
          "resourceUri": "ui://tweetsmash/bookmark-list"
        },
        "ui/resourceUri": "ui://tweetsmash/bookmark-list"
      }
    },
    {
      "name": "search_bookmarks",
      "description": "Search through a user's Twitter bookmarks using keyword search (q), semantic search (vector_search_term), or author filtering (author).",
      "annotations": {
        "title": "search_bookmarks",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "_meta": {
        "ui": {
          "resourceUri": "ui://tweetsmash/bookmark-list"
        },
        "ui/resourceUri": "ui://tweetsmash/bookmark-list"
      }
    },
    {
      "name": "get_bookmark_count",
      "description": "Get the total count of user's bookmarks with optional filtering.",
      "annotations": {
        "title": "get_bookmark_count",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "list_labels",
      "description": "List all user's labels with their usage counts.",
      "annotations": {
        "title": "list_labels",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "add_labels_to_tweets",
      "description": "Add a label to a list of tweets.",
      "annotations": {
        "title": "add_labels_to_tweets",
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": false,
        "openWorldHint": false
      }
    },
    {
      "name": "remove_labels_from_tweets",
      "description": "Remove a label from a list of tweets using label_name.",
      "annotations": {
        "title": "remove_labels_from_tweets",
        "readOnlyHint": false,
        "destructiveHint": true,
        "idempotentHint": false,
        "openWorldHint": false
      }
    },
    {
      "name": "delete_label",
      "description": "Delete a label from the account entirely — the label itself plus every bookmark's assignment of it.",
      "annotations": {
        "title": "delete_label",
        "readOnlyHint": false,
        "destructiveHint": true,
        "idempotentHint": false,
        "openWorldHint": false
      }
    },
    {
      "name": "setup_vector_store",
      "description": "Initialize the vector store for semantic bookmark search.",
      "annotations": {
        "title": "setup_vector_store",
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": false,
        "openWorldHint": false
      }
    },
    {
      "name": "list_skills",
      "description": "START HERE for any open-ended request.",
      "annotations": {
        "title": "list_skills",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "get_skill",
      "description": "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.",
      "annotations": {
        "title": "get_skill",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "get_library_overview",
      "description": "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.",
      "annotations": {
        "title": "get_library_overview",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "search_docs",
      "description": "Answer questions about Tweetsmash itself — features, how-to, pricing, plans, limits, account/subscription.",
      "annotations": {
        "title": "search_docs",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "get_bookmark",
      "description": "Get a single saved bookmark with FULL content in one call — the full X Article body, the unrolled thread, notes, and (optionally) replies.",
      "annotations": {
        "title": "get_bookmark",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "tag_bookmarks_by_filter",
      "description": "Add a label to EVERY bookmark matching a filter, in a single call.",
      "annotations": {
        "title": "tag_bookmarks_by_filter",
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": false,
        "openWorldHint": false
      }
    },
    {
      "name": "archive_bookmarks",
      "description": "Archive, unarchive, delete, undelete, or mark read/unread a list of bookmarks by id (max 500).",
      "annotations": {
        "title": "archive_bookmarks",
        "readOnlyHint": false,
        "destructiveHint": true,
        "idempotentHint": false,
        "openWorldHint": false
      }
    },
    {
      "name": "archive_bookmarks_by_filter",
      "description": "Apply archive/unarchive/delete/undelete to EVERY bookmark matching a filter, in one call.",
      "annotations": {
        "title": "archive_bookmarks_by_filter",
        "readOnlyHint": false,
        "destructiveHint": true,
        "idempotentHint": false,
        "openWorldHint": false
      }
    },
    {
      "name": "list_smart_views",
      "description": "List the user's Smart Views (saved filtered views).",
      "annotations": {
        "title": "list_smart_views",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "get_smart_view",
      "description": "Get a single Smart View by slug (its filter, tabs/buckets, and sort).",
      "annotations": {
        "title": "get_smart_view",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "get_smart_view_bookmarks",
      "description": "List the bookmarks inside a Smart View, optionally scoped to one tab/bucket.",
      "annotations": {
        "title": "get_smart_view_bookmarks",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "_meta": {
        "ui": {
          "resourceUri": "ui://tweetsmash/bookmark-list"
        },
        "ui/resourceUri": "ui://tweetsmash/bookmark-list"
      }
    },
    {
      "name": "create_smart_view",
      "description": "Create a Smart View from a filter so the user can reuse it.",
      "annotations": {
        "title": "create_smart_view",
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": false,
        "openWorldHint": false
      }
    },
    {
      "name": "update_smart_view",
      "description": "Update a Smart View (name, filter, tabs, sort) by slug.",
      "annotations": {
        "title": "update_smart_view",
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": false,
        "openWorldHint": false
      }
    },
    {
      "name": "delete_smart_view",
      "description": "Delete a Smart View by slug.",
      "annotations": {
        "title": "delete_smart_view",
        "readOnlyHint": false,
        "destructiveHint": true,
        "idempotentHint": false,
        "openWorldHint": false
      }
    },
    {
      "name": "create_share_link",
      "description": "Create a public, read-only share link for a set of bookmarks (explicit ids or everything matching a filter).",
      "annotations": {
        "title": "create_share_link",
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": false,
        "openWorldHint": true
      }
    },
    {
      "name": "revoke_share_link",
      "description": "Revoke a previously created share link by its token.",
      "annotations": {
        "title": "revoke_share_link",
        "readOnlyHint": false,
        "destructiveHint": true,
        "idempotentHint": false,
        "openWorldHint": false
      }
    },
    {
      "name": "trigger_pdf_export",
      "description": "Start a PDF export of the user's bookmarks (explicit ids, everything matching a filter, or the whole library).",
      "annotations": {
        "title": "trigger_pdf_export",
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": false,
        "openWorldHint": false
      }
    },
    {
      "name": "trigger_csv_export",
      "description": "Start a CSV export (explicit ids, a filter, or the whole library).",
      "annotations": {
        "title": "trigger_csv_export",
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": false,
        "openWorldHint": false
      }
    },
    {
      "name": "trigger_json_export",
      "description": "Start a JSON export (explicit ids, a filter, or the whole library).",
      "annotations": {
        "title": "trigger_json_export",
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": false,
        "openWorldHint": false
      }
    },
    {
      "name": "list_digest_preferences",
      "description": "List the user's email-digest schedules (frequency, time, paused state) for bookmark and Smart View digests.",
      "annotations": {
        "title": "list_digest_preferences",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "update_digest_preference",
      "description": "Update a digest schedule (enable/pause, frequency, time) by id.",
      "annotations": {
        "title": "update_digest_preference",
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": false,
        "openWorldHint": false
      }
    },
    {
      "name": "delete_digest_preference",
      "description": "Remove a digest schedule by id.",
      "annotations": {
        "title": "delete_digest_preference",
        "readOnlyHint": false,
        "destructiveHint": true,
        "idempotentHint": false,
        "openWorldHint": false
      }
    },
    {
      "name": "list_past_digests",
      "description": "List past digests sent to the user's email, newest first.",
      "annotations": {
        "title": "list_past_digests",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "list_mash_digests",
      "description": "The user's Mash Digest 2.0 digests — the AI-composed ones.",
      "annotations": {
        "title": "list_mash_digests",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "list_mash_digest_issues",
      "description": "Past issues of the user's Digest 2.0, newest first — what arrived and when.",
      "annotations": {
        "title": "list_mash_digest_issues",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "get_mash_digest_issue",
      "description": "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.",
      "annotations": {
        "title": "get_mash_digest_issue",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "compose_mash_digest",
      "description": "Compose one of the user's Digest 2.0 digests NOW rather than waiting for its schedule.",
      "annotations": {
        "title": "compose_mash_digest",
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": false,
        "openWorldHint": false
      }
    },
    {
      "name": "get_sync_status",
      "description": "Show the user's app-sync integrations (Notion, Google Sheets, Zotero): whether each is connected/enabled, synced vs pending counts, and any errors.",
      "annotations": {
        "title": "get_sync_status",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "get_bookmark_sync_status",
      "description": "Show whether a specific bookmark has synced to a given integration connection.",
      "annotations": {
        "title": "get_bookmark_sync_status",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "list_twitter_lists",
      "description": "List the X (Twitter) lists the user follows in Tweetsmash.",
      "annotations": {
        "title": "list_twitter_lists",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
      }
    },
    {
      "name": "get_list_tweets",
      "description": "Get recent tweets for a followed X list — the latest, or (sort=POPULARITY) the top/trending tweets in a look-back window.",
      "annotations": {
        "title": "get_list_tweets",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
      }
    },
    {
      "name": "get_list_digests",
      "description": "List past Twitter-list email digests for the user.",
      "annotations": {
        "title": "get_list_digests",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "send_list_digest",
      "description": "Build and email a digest of a Twitter list's high-signal tweets to the user now.",
      "annotations": {
        "title": "send_list_digest",
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": false,
        "openWorldHint": true
      }
    },
    {
      "name": "preview_list_ranking",
      "description": "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…",
      "annotations": {
        "title": "preview_list_ranking",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "get_author_preferences",
      "description": "The user's stated author preferences for list digests: `boost` = never-miss authors, `hide` = muted authors.",
      "annotations": {
        "title": "get_author_preferences",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "set_author_preference",
      "description": "Remember how the user feels about an author in their list digests.",
      "annotations": {
        "title": "set_author_preference",
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": false,
        "openWorldHint": false
      }
    },
    {
      "name": "get_me",
      "description": "Get the current user's account: identity, current plan and status, and usage (e.g.",
      "annotations": {
        "title": "get_me",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "get_connection_status",
      "description": "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).",
      "annotations": {
        "title": "get_connection_status",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "fetch_recent_bookmarks",
      "description": "Force-pull the user's most recent bookmarks from the X API now (server-side).",
      "annotations": {
        "title": "fetch_recent_bookmarks",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
      }
    },
    {
      "name": "remember",
      "description": "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.",
      "annotations": {
        "title": "remember",
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": false,
        "openWorldHint": false
      }
    },
    {
      "name": "recall",
      "description": "Read back the user's saved library preferences (optionally filtered by a substring).",
      "annotations": {
        "title": "recall",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "forget",
      "description": "Delete a saved library preference by key (optionally narrowed by kind).",
      "annotations": {
        "title": "forget",
        "readOnlyHint": false,
        "destructiveHint": true,
        "idempotentHint": false,
        "openWorldHint": false
      }
    },
    {
      "name": "get_interests",
      "description": "Read what this user is actually interested in, inferred from their saved bookmarks, hand labels, questions and digest clicks — not from anything they typed.",
      "annotations": {
        "title": "get_interests",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "correct_interest",
      "description": "Record the user's correction to an inferred interest, using a key from get_interests.",
      "annotations": {
        "title": "correct_interest",
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": false,
        "openWorldHint": false
      }
    }
  ],
  "resources": [
    {
      "uri": "ui://tweetsmash/bookmark-list",
      "name": "bookmark-list-view",
      "title": "Saved posts",
      "description": "Interactive card list of saved X posts: open a post on X, load the next page, or ask for a summary.",
      "mimeType": "text/html;profile=mcp-app"
    }
  ],
  "resourceCount": 1,
  "toolCount": 53
}
