A side-by-side look at the LinkedMash and Taplio Linkedin MCP MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.
Verdict: choose LinkedMash for social media work as a local process; choose Taplio Linkedin MCP for social media over a hosted endpoint. You can also run both side by side in one mcpServers block.
search_docs, list_bookmarks, search_bookmarks.get_me, create_draft, get_draft.Rows where the two servers differ are marked.
| Spec | ||
|---|---|---|
| Category | Social Media | Social Media |
| Quality signal | 56/100 · Good | 53/100 · Good |
| Install command | Confirmed | Confirmed |
| Transport | Local subprocess (stdio) | Remote HTTP/SSE |
| Auth | Not declared | Not declared |
| Pricing | Not declared | Not declared |
| Required env vars | None listed | None listed |
| Verified owner | Community listing | Community listing |
| GitHub stars | 0 | 3 |
| Directory activity | 2 views 0 installs 0 upvotes | 3 views 0 installs 0 upvotes |
| Tools | 40 | 14 |
| Full listing | View LinkedMash | View Taplio Linkedin MCP |
search_docsAnswer a question about Linkedmash THE PRODUCT — its features and how to reach them, how to change a setting, and pricing/billing. Use this for questions like 'where do I manage my subscription', 'how do I schedule a post', 'how much is the Creator plan', 'how do I change Lina's writing rules', 'how do I import my LinkedIn saves', 'what does Smart Folders do'. It returns the most relevant sections of the Linkedmash help guide — answer the user in your own words from them and point them to the exact page (e.g. Settings → Billing). For live prices, direct the user to the pricing page (/pricing). This tool reads product documentation only, NOT the user's saved posts or account data.list_bookmarksList bookmarks with optional filtering and pagination. Defaults: read AND unread bookmarks are both included (set is_unread_only=true only if the user asks for unread); archived bookmarks are excluded (set hide_archived=false to include them). Only apply the filters the user actually asked for — do NOT add media_type, unread, or date filters unprompted. IMPORTANT: Use this tool (with the 'author' parameter) when the user asks to show posts by a specific author, find posts from someone, or filter by author name. The 'author' parameter supports fuzzy matching of author names.search_bookmarksSearch through a user's LinkedIn bookmarks using either keyword (text) search or semantic (meaning-based) search. Supports all list_bookmarks filters, full-text search via the q field, and semantic search via the vector_search_term field for natural language or topic-based queries. IMPORTANT: At least one of 'q', 'vector_search_term', or 'author' must be provided. If the user asks to find posts by a specific author (e.g., 'Show posts by John Doe', 'Find posts from Suresh sambantham'), use the 'author' parameter instead of putting the author name in the 'q' field. Use 'q' for searching post content, not for filtering by author.get_bookmark_countGet the count of bookmarks matching the given filters. Supports the SAME filters as list_bookmarks (dates, author, tag, media_type, unread, q, comment) and the count respects all of them, so it is always consistent with a list_bookmarks call using identical filters. Defaults match list_bookmarks: read + unread included, archived excluded. The result echoes applied_filters — check it matches what the user asked before reporting the number.list_labelsList all user's labels/tagsadd_labelsAdd a label to a FEW explicitly chosen posts (specific post_ids the user picked or is looking at). Either label_id or label_name must be provided. NEVER use this to label 'all posts matching a filter' (a date range, an author, a tag, unread…) — fetched lists are ONE PAGE, so labeling their ids silently misses the rest; use tag_bookmarks_by_filter instead, which labels EVERY match server-side in one call and returns matched/tagged counts.remove_labelsRemove labels from bookmarked posts. Either label_id or label_name must be provided.tag_bookmarks_by_filterAdd a label to ALL bookmarks matching a filter in ONE server-side call. Use this — NOT list_bookmarks/search_bookmarks followed by add_labels — whenever the user asks to tag/label many posts by date range, author, tag, media type, or unread status (e.g. 'tag all posts older than March 2026 as Archive', 'label everything from John Doe as Hiring'). Date targeting: 'older than'/'before' DATE -> posted_to (or bookmarked_to); 'since'/'after' DATE -> posted_from (or bookmarked_from); use posted_* for when the post was published and bookmarked_* for when the user saved it; dates are ISO (YYYY-MM-DD). Provide label_name (created if it doesn't exist) or label_id. The tool returns matched/tagged/failed counts: ALWAYS tell the user how many posts were tagged; if 'truncated' is true, tell them it stopped at the cap and to narrow the date range to tag the rest; if 'failed' > 0, mention it. Never paginate or loop add_labels for bulk tagging — this one call handles the whole set.remove_labels_by_filterREMOVE a label from ALL bookmarks matching a filter in ONE server-side call — the mirror of tag_bookmarks_by_filter. Use this — NOT list/search + remove_labels on page ids — whenever the user asks to remove/clear a label from many posts by date range, author, tag, media type, or unread status (even phrased as 'fetch all X and remove the label'). Provide label_name or label_id; matching is automatically scoped to posts that carry the label. Returns matched/removed/failed counts: ALWAYS report them ('Removed from X of Y matching posts'); if 'truncated' is true, say it stopped at the cap.archive_bookmarks_by_filterARCHIVE all bookmarks matching a filter in ONE server-side call (reversible — archived posts stay recoverable in the app's Archive). Use for 'archive all posts <filter>' style requests, even phrased as 'fetch then archive'. BEFORE calling: tell the user what will be archived (use get_bookmark_count with the same filter) and get an explicit yes — then call with confirm=true. Returns matched/affected counts: ALWAYS report them; if 'truncated' is true, say it stopped at the cap.delete_bookmarks_by_filterDELETE all bookmarks matching a filter in ONE server-side call. Deletion is soft (recoverable from the app for a while) but MUST be treated as destructive: BEFORE calling, tell the user exactly what will be deleted (use get_bookmark_count with the same filter to state the number) and get an explicit yes in this conversation — only then call with confirm=true. NEVER delete on your own initiative. Returns matched/affected counts: ALWAYS report them; if 'truncated' is true, say it stopped at the cap and offer to run again with a narrower filter.setup_vector_storeInitialize the vector store for semantic search. CRITICAL: When vector/semantic search fails with 'Vector Store Not Setup' error and you offered the user options to either initialize or use keyword search, and the user responds with 'first', 'option 1', 'yes', 'initialize', 'set it up', 'init', 'setup', 'go ahead' or similar confirmation, you MUST immediately call this tool. ALWAYS check your previous message in the chat history to confirm the user is responding to your options. Do NOT re-run the search tool - just call this tool. After calling this tool, inform the user that setup has started and may take a few minutes. This is an async operation that may take a few minutes to complete for large bookmark collections.get_meRead this first to orient. Returns the user's identity and content preferences so you can tailor output to themcreate_draftCreate a new LinkedIn post draft (unpublished). Publish it later with `schedule_draft` or `publish_draft`.get_draftFetch a single LinkedIn post draft by id.list_draftsList the user's unpublished LinkedIn post drafts.update_draftUpdate the content of an existing draft. Only drafts can be edited: published or scheduled posts cannot.delete_draftPermanently delete a LinkedIn post draft.publish_draftPublish a draft to LinkedIn immediately. This goes live now and cannot be undone.schedule_draftSchedule a draft to be published automatically at a future time.unscheduleUnschedule a scheduled post, returning it to drafts so you can edit, reschedule, or delete it.list_postsList the user's LinkedIn posts (status `scheduled`, `sending`, or `sent`), most recent first. A draft becomes aget_postFetch a single LinkedIn post by id. A post has status `scheduled`, `sending`, or `sent`; drafts are separateget_analytics_overviewGet the user's LinkedIn analytics overview (followers, impressions, engagement). Defaults to today when no datePaste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.
{
"mcpServers": {
"linkedmash-2": {
"command": "npx",
"args": [
"-y",
"@linkedmash/mcp"
]
}
}
}
{
"mcpServers": {
"taplio-linkedin-mcp": {
"url": "https://mcp.taplio.com"
}
}
}