Search, label, and manage your X (Twitter) bookmarks from any MCP client via Tweetsmash.
Do not connect
A critical issue was found. Do not connect this server as-is.
Scanned 1 month ago Due for re-check
A server can change after it's graded. Re-run the automated scan to refresh this report.
This grade is deterministic and reproducible: the same server surface always yields the same grade under a given algorithm version. It is a real automated assessment computed by the MCPGrade engine from what the probe actually observed — not a fabricated or opinion score. It is not a manual human pentest, so it can miss context-specific risks.
Every signal below was measured directly by the automated probe. The grade is derived only from evidence like this — nothing is assumed.
The mcp-typescript server on vercel MCP server exposes 53 tools, focused primarily on web capabilities. Its published description reads: "Search, label, and manage your X (Twitter) bookmarks from any MCP client via Tweetsmash". It communicates over Streamable HTTP using the 2025-06-18 protocol revision, and does not require authorization to connect. MCPGrade currently rates mcp-typescript server on vercel F — a critical issue was found and the server should not be connected as-is. Its most notable findings include "Hidden instructions in a tool description" and "Hidden instructions in a tool description". This report is a deterministic, reproducible automated assessment: the same observed surface always yields the same grade under a given algorithm version, and it is refreshed as new scans arrive and free to read — but it is not a substitute for a manual human security review. Always re-check mcp-typescript server on vercel's advertised tools, transport security, and authorization posture before connecting an autonomous agent or sharing sensitive context with it.
Add mcp-typescript server on vercel to an MCP client using the endpoint below. Review the grade and findings above before granting an autonomous agent access.
MCP endpoint
https://mcp.tweetsmash.com/api/mcpStreamable HTTP transport. This is the MCP endpoint, not a website — paste it into your MCP client server list rather than a browser.
Captured passively during the read-only scan. Click any value to find servers that match it.
The tools this server advertises via tools/list — names, purposes, and the parameters each accepts, exactly as enumerated read-only.
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, a
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 abo
Sorted worst-first. Each finding shows its severity, what it means, its OWASP MCP Top-10 mapping, and a recommended fix — the check id links to the exact methodology row that produced it.
tool: list_bookmarks
A tool description contains imperative text aimed at the model (e.g. "ignore previous", "before answering read …").
orting options. IMPORTANT: Use this tool (with the 'author' parameter) wheRecommendationRemove model-directed instructions from tool descriptions.
tool: search_bookmarks
A tool description contains imperative text aimed at the model (e.g. "ignore previous", "before answering read …").
ld be provided. IMPORTANT: Use the 'author' parameter for filtering by autRecommendationRemove model-directed instructions from tool descriptions.
tool: list_bookmarks
A tool description tries to alter the model’s use of another tool.
es X Likes; use list_likes for those. Supports filtering and pagination. SRecommendationDescriptions must describe only their own tool.
tool: list_likes
A tool description tries to alter the model’s use of another tool.
an a save — use list_bookmarks for things the user deliberately saved, and thiRecommendationDescriptions must describe only their own tool.
tool: delete_label
A tool description tries to alter the model’s use of another tool.
arry the label (list_labels returns the count) and get an explicit yes. ToRecommendationDescriptions must describe only their own tool.
tool: list_skills
A tool description tries to alter the model’s use of another tool.
to use it; call get_skill for the exact tool sequence.RecommendationDescriptions must describe only their own tool.
tool: get_skill
A tool description tries to alter the model’s use of another tool.
You do NOT need list_skills first: if you already know what the user is tryRecommendationDescriptions must describe only their own tool.
tool: get_library_overview
A tool description tries to alter the model’s use of another tool.
ad of paging through bookmarks.RecommendationDescriptions must describe only their own tool.
tool: get_smart_view_bookmarks
A tool description tries to alter the model’s use of another tool.
turned ids with archive_bookmarks / tagging tools to act on the view.RecommendationDescriptions must describe only their own tool.
tool: list_past_digests
A tool description tries to alter the model’s use of another tool.
Digest 2.0, use list_mash_digests.RecommendationDescriptions must describe only their own tool.
tool: list_mash_digest_issues
A tool description tries to alter the model’s use of another tool.
ck one and call get_mash_digest_issue for the whole thing. Pass digest_id to narrow tRecommendationDescriptions must describe only their own tool.
tool: get_mash_digest_issue
A tool exposes a free-text/webhook/feedback parameter with no honest purpose — a classic exfil channel.
r to carry on a conversation about something the user just read. Items carryRecommendationRemove side-channel parameters; constrain tool inputs.
tool: get_mash_digest_issue
A tool description tries to alter the model’s use of another tool.
solve them with get_bookmark if the user asks about a specific post.RecommendationDescriptions must describe only their own tool.
tool: compose_mash_digest
A tool description tries to alter the model’s use of another tool.
urrent one (use get_mash_digest_issue for that). Returns an issue_id to read back oncRecommendationDescriptions must describe only their own tool.
tool: list_twitter_lists
A tool description tries to alter the model’s use of another tool.
— pass that to get_list_tweets / send_list_digest. START HERE for any 'what'sRecommendationDescriptions must describe only their own tool.
tool: get_list_tweets
A tool description tries to alter the model’s use of another tool.
connect_id from list_twitter_lists. hours defaults to 24.RecommendationDescriptions must describe only their own tool.
tool: set_author_preference
A tool description tries to alter the model’s use of another tool.
t digest and in preview_list_ranking immediately.RecommendationDescriptions must describe only their own tool.
tool: fetch_recent_bookmarks
A tool description tries to alter the model’s use of another tool.
freshness, use get_list_tweets instead.RecommendationDescriptions must describe only their own tool.
tool: remember
A tool description tries to alter the model’s use of another tool.
RecommendationDescriptions must describe only their own tool.
tool: correct_interest
A tool description tries to alter the model’s use of another tool.
ighted higher. `forget` is different and IRREVERSIBLE: it erases the uRecommendationDescriptions must describe only their own tool.
The server accepts tool enumeration (and likely invocation) with no authentication.
RecommendationRequire OAuth 2.1 authorization for any server exposing non-public tools.
tool: add_labels_to_tweets
The server advertises open-world / broadly-scoped capabilities.
no annotations on write-capable tool "add_labels_to_tweets"RecommendationScope tools to the minimum needed.
tool: remove_labels_from_tweets
The server advertises open-world / broadly-scoped capabilities.
no annotations on write-capable tool "remove_labels_from_tweets"RecommendationScope tools to the minimum needed.
tool: delete_label
The server advertises open-world / broadly-scoped capabilities.
no annotations on write-capable tool "delete_label"RecommendationScope tools to the minimum needed.
tool: archive_bookmarks
The server advertises open-world / broadly-scoped capabilities.
no annotations on write-capable tool "archive_bookmarks"RecommendationScope tools to the minimum needed.
tool: archive_bookmarks_by_filter
The server advertises open-world / broadly-scoped capabilities.
no annotations on write-capable tool "archive_bookmarks_by_filter"RecommendationScope tools to the minimum needed.
tool: create_smart_view
The server advertises open-world / broadly-scoped capabilities.
no annotations on write-capable tool "create_smart_view"RecommendationScope tools to the minimum needed.
tool: update_smart_view
The server advertises open-world / broadly-scoped capabilities.
no annotations on write-capable tool "update_smart_view"RecommendationScope tools to the minimum needed.
tool: delete_smart_view
The server advertises open-world / broadly-scoped capabilities.
no annotations on write-capable tool "delete_smart_view"RecommendationScope tools to the minimum needed.
tool: create_share_link
The server advertises open-world / broadly-scoped capabilities.
no annotations on write-capable tool "create_share_link"RecommendationScope tools to the minimum needed.
tool: update_digest_preference
The server advertises open-world / broadly-scoped capabilities.
no annotations on write-capable tool "update_digest_preference"RecommendationScope tools to the minimum needed.
tool: delete_digest_preference
The server advertises open-world / broadly-scoped capabilities.
no annotations on write-capable tool "delete_digest_preference"RecommendationScope tools to the minimum needed.
tool: get_mash_digest_issue
The server advertises open-world / broadly-scoped capabilities.
no annotations on write-capable tool "get_mash_digest_issue"RecommendationScope tools to the minimum needed.
tool: set_author_preference
The server advertises open-world / broadly-scoped capabilities.
no annotations on write-capable tool "set_author_preference"RecommendationScope tools to the minimum needed.
tool: forget
The server advertises open-world / broadly-scoped capabilities.
no annotations on write-capable tool "forget"RecommendationScope tools to the minimum needed.
tool: correct_interest
The server advertises open-world / broadly-scoped capabilities.
no annotations on write-capable tool "correct_interest"RecommendationScope tools to the minimum needed.
Vantaj uptime monitoring via MCP — manage monitors, heartbeats, incidents, and status pages.
Unified gateway to Algeria's TKAWEN ecosystem: commerce, certification, and AI tools.
Provides access to the Cohereon Doctrine AI safety framework with governance components, tiered access, and agent onboarding.
Agentic rails for complex workflows with receipts, fees, and MCP tool access.
Structural TC39 spec lookup for ECMA-262 and ECMA-402 in AI agents, SHA-pinned and offline-first.
Structural TC39 spec lookup for ECMA-262 and ECMA-402 in AI agents, SHA-pinned and offline-first.
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 provi
Get the total count of user's bookmarks with optional filtering. Useful for understanding the size of bookmark collections before listing them.
List all user's labels with their usage counts. Useful for discovering existing labels before adding new ones.
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.
Remove a label from a list of tweets using label_name.
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 u
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 fe
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,
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 (lear
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-e
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 f
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
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. Report
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 chan
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.
List the user's Smart Views (saved filtered views). Each has a slug you pass to the other smart-view tools.
Get a single Smart View by slug (its filter, tabs/buckets, and sort).
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.
Create a Smart View from a filter so the user can reuse it. Provide a name and the base_query (filter).
Update a Smart View (name, filter, tabs, sort) by slug.
Delete a Smart View by slug.
Create a public, read-only share link for a set of bookmarks (explicit ids or everything matching a filter). Returns a share_url valid for 7 days. Free plans share up to 10 bookmarks.
Revoke a previously created share link by its token.
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.
Start a CSV export (explicit ids, a filter, or the whole library). Returns a job id; the file appears in the Export Center.
Start a JSON export (explicit ids, a filter, or the whole library). Returns a job id; the file appears in the Export Center.
List the user's email-digest schedules (frequency, time, paused state) for bookmark and Smart View digests.
Update a digest schedule (enable/pause, frequency, time) by id.
Remove a digest schedule by id.
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.
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
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 o
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 ther
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 i
Show the user's app-sync integrations (Notion, Google Sheets, Zotero): whether each is connected/enabled, synced vs pending counts, and any errors.
Show whether a specific bookmark has synced to a given integration connection.
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' requ
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 automaticall
List past Twitter-list email digests for the user.
Build and email a digest of a Twitter list's high-signal tweets to the user now.
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, affini
The user's stated author preferences for list digests: `boost` = never-miss authors, `hide` = muted authors.
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=h
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'.
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 ex
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 n
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. I
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 d
Delete a saved library preference by key (optionally narrowed by kind). Use when the user changes their mind or asks you to drop something.
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
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 ow