LinkedMash
REMOTE · MCP.LINKEDMASH.COM · 2 COMPONENTS · SCANNED SEP 20
Search, label and export your LinkedIn saved posts, then draft, schedule and publish from them.
Available components
Recent critical change
Authorization (23 Aug 2026). See the changelog before you install this server.
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 → Why this is hard to score →
Endpoint Security89
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- The endpoint enforces authorisation, but returns a challenge with no valid RFC 9728 metadata, so a client cannot discover where to get a token. See how to fix → View diagnostics → Fail
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
Transport & Reachability0
- Transport blocked by authentication: the endpoint requires auth we don't have to verify streamable-http. See how to fix → View diagnostics → Unverified
Schema Quality & AI Usability0
- Schema blocked by authentication: the endpoint requires auth we don't have to read it. See how to fix → Unverified
Stability & Change Management0
- Stability not yet verified: not enough scan history yet (needs a 30-day window).Unverified
Tool Coverage0
- Tool coverage blocked by authentication: the endpoint requires auth we don't have to read its tools.Unverified
Tool Safety0
- Tool safety blocked by authentication: the endpoint requires auth we don't have to read its tools.Unverified
Capabilities0
- Capabilities blocked by authentication: the endpoint requires auth we don't have to read them. See how to fix → Unverified
Unverified: 6 categories
Categories scored 0 because we could not verify them: authentication we do not have, an unreachable endpoint, or not enough scan history. We only credit what we can confirm. Claim this server and supply a read-only token to verify it and lift the score.
How do I install the LinkedMash MCP server?
LinkedMash is a hosted endpoint at https://mcp.linkedmash.com/api/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · mcp.linkedmash.com
claude mcp add --transport http linkedmash-linkedmash 'https://mcp.linkedmash.com/api/mcp'
{
"mcpServers": {
"linkedmash-linkedmash": {
"url": "https://mcp.linkedmash.com/api/mcp"
}
}
} {
"servers": {
"linkedmash-linkedmash": {
"type": "http",
"url": "https://mcp.linkedmash.com/api/mcp"
}
}
} [mcp_servers.linkedmash-linkedmash] url = "https://mcp.linkedmash.com/api/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"linkedmash-linkedmash": {
"type": "remote",
"url": "https://mcp.linkedmash.com/api/mcp",
"enabled": true
}
}
} openclaw mcp add linkedmash-linkedmash --url 'https://mcp.linkedmash.com/api/mcp' --transport streamable-http
mcp_servers:
linkedmash-linkedmash:
url: "https://mcp.linkedmash.com/api/mcp" {
"McpServers": {
"linkedmash-linkedmash": {
"Transport": "http",
"Url": "https://mcp.linkedmash.com/api/mcp"
}
}
} assistant mcp add linkedmash-linkedmash -t streamable-http -u 'https://mcp.linkedmash.com/api/mcp'
{
"mcpServers": {
"linkedmash-linkedmash": {
"type": "http",
"url": "https://mcp.linkedmash.com/api/mcp"
}
}
} The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.
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.
- 26 Aug 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 25 Aug 26 −45
- Endpoint reachability: reachable → behind authorisation ▼ security
- Transport: pass → unverified ▼ security
- Stability: 0.97 → unverified ▼ security
- Authorization: The endpoint enforces authorisation, but returns a challenge with no valid RFC 9728 metadata, so a client cannot discover where to get a token. security
- Capabilities: pass → unverified ▼ functional
- Tool coverage: 100 → unverified ▼ functional
- Schema quality: 100 → unverified ▼ functional
- 24 Aug 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.
- 23 Aug 26 +2
- Authorization: unverified → fail ▼ critical
- The server rewrote its instructions, which are the text every model session reads security
- The server changed its declared name: mcp-typescript server on vercel → linkedmash-mcp security
- Tool “correct_interest” is now declared destructive security
- Tool “delete_bookmarks_by_filter” is now declared destructive security
- Tool “delete_draft” is now declared destructive security
- Tool “delete_smart_folder” is now declared destructive security
- Tool “forget” is now declared destructive security
- The server now declares the “resources” capability functional
- First check of Capabilities: pass functional
- First check of Schema quality: 100 functional
- New resource “LinkedMash library overview” functional
- Server version: 0.1.0 → 1.2.0 functional
- New tool “open_library_overview” functional
- 21 Aug 26 0
- New tool “list_digests” functional
- New tool “correct_interest” functional
- New tool “get_digest_issue” functional
- New tool “get_interests” functional
- New tool “list_digest_issues” functional
- 11 Aug 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 31 Jul 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 30 Jul 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
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 20 Sept 2026 · Probed https://mcp.linkedmash.com/api/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=mcp.linkedmash.com | CN=YR2,O=Let's Encrypt,C=US | 2 Aug 2026 | 31 Oct 2026 | RSA 2048 | SHA256-RSA | 65e882632e531580aa4184af3fa4f74d076 |
| SANs: mcp.linkedmash.com | ||||||
| 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 |
Background: What to check on a remote MCP endpoint →
DNSSEC insecure
Validation of mcp.linkedmash.com. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| com. | present | 19718 | 13 | Verified |
| linkedmash.com. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication Challenged, unverified
The endpoint asked for a token, but we could not retrieve and validate the RFC 9728 metadata that tells a client how to obtain one.
| Result | Challenged, unverified |
|---|---|
| Enforced | On connection |
| HTTP status | 401 |
WWW-Authenticate challenge Bearer error="invalid_token", error_description="No authorization provided", resource_metadata="https://mcp.linkedmash.com/.well-known/oauth-protected-resource"
Bearer error="invalid_token", error_description="No authorization provided", resource_metadata="https://mcp.linkedmash.com/.well-known/oauth-protected-resource" | Header | Value |
|---|---|
| strict-transport-security | max-age=63072000 |
| www-authenticate | Bearer error="invalid_token", error_description="No authorization provided", resource_metadata="https://mcp.linkedmash.com/.well-known/oauth-protected-resource" |
Protected resource metadata
| Document | https://mcp.linkedmash.com/.well-known/oauth-protected-resource |
|---|---|
| Retrieved | No |
| Problem | metadata_http_error |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://mcp.linkedmash.com/api/mcp | Auth required | 401 | |
| http (plaintext) | http://mcp.linkedmash.com/api/mcp | HTTPS enforced | 308 | https://mcp.linkedmash.com/api/mcp |
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. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
add_labels ~200
Add 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.
| Name | Type | Req | Description |
|---|---|---|---|
| label_id | string | – | ID of the existing label to add (use either label_id or label_name) |
| label_name | string | – | Name of the label to add (will create if doesn't exist, use either label_id or label_name) |
| post_ids | array | yes | Specific post IDs to label — a small, explicitly chosen set. For 'all posts matching a filter' use tag_bookmarks_by_filter instead (paginated ids cover only one page). |
No output schema declared.
No examples provided.
archive_bookmarks_by_filter ~553
ARCHIVE 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.
| Name | Type | Req | Description |
|---|---|---|---|
| author | string | – | Filter by author name or ID. Use this parameter when the user wants to find posts by a specific author (e.g., 'Show posts by John Doe', 'Find posts from Suresh sambantham'). Supports fuzzy matching -… |
| bookmarked_from | string | – | Filter by bookmark date range (ISO date string) |
| bookmarked_to | string | – | Filter by bookmark date range (ISO date string) |
| comment | string | – | Filter by comment: 'only' returns just saved comments, 'exclude' returns only top-level posts. If the user didn't ask about saved comments, prefer 'none' (or omit) — 'none' applies no comment filter.… |
| confirm | – | – | MUST be true, and ONLY after the user explicitly confirmed this destructive action in THIS conversation (you told them what will be affected and they said yes). Never set it on your own initiative. |
| hide_archived | – | – | Hide archived bookmarks. Default true (archived excluded). Set false ONLY when the user explicitly asks to include archived posts — do not fill this in otherwise. |
| is_unread_only | boolean | – | Filter to ONLY unread bookmarks. OMIT unless the user explicitly asks for unread posts. Default false: read AND unread bookmarks are both included. |
| media_type | string | – | Optional media-attachment filter. Accepted values: 'none', 'image', 'video', 'pdf'. When the user did NOT explicitly name a kind of media, pass 'none' (or omit the field) — 'none' means no media filt… |
| posted_from | string | – | Filter by post posting date range (ISO date string) |
| posted_to | string | – | Filter by post posting date range (ISO date string) |
| q | string | – | Optional keyword/text filter on post content to further narrow which posts are affected. |
| tag | string | – | Filter by tag |
No output schema declared.
No examples provided.
cancel_scheduled_post ~52
Cancel a scheduled post by its schedule id (from a get_queue entry). Requires a paid Creator/Lifetime plan.
| Name | Type | Req | Description |
|---|---|---|---|
| schedule_id | string | yes | The id of the scheduled post (from the queue entries) |
No output schema declared.
No examples provided.
correct_interest ~198
Correct one thing Lina inferred. Use when the member says an interest is wrong, out of date, or badly worded: confirm (that's right), boost (more of this), rename (say it in their words — pass value), hide (stop using it) or forget (DELETE what was learned about it). Prefer hide unless the member asks to be forgotten: hide stops the inference being used and can be undone, while forget destroys the evidence and cannot. Forget answers forgotten:false when the deletion did not happen — relay that rather than confirming it anyway.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | confirm = that's right; boost = more of this; rename = say it in the member's words (needs value); hide = stop using it; forget = DELETE what was learned. |
| interest | string | yes | The interest to correct, as its key or its displayed name. |
| value | string | – | The new wording. Required for rename, ignored otherwise. |
No output schema declared.
No examples provided.
create_draft ~231
Create a new LinkedIn post draft in the user's Content Studio. Put the post body text in 'content'. Returns the created draft (with its id) which can later be scheduled or published. Requires a paid Creator/Lifetime plan.
| Name | Type | Req | Description |
|---|---|---|---|
| content | string | yes | The body text of the LinkedIn post/draft |
| format | string | – | Post format. OMIT (or pass 'none') unless the user asked for a specific format — default is text. |
| media_mime_type | string | – | MIME type of the attached media, e.g. image/png, video/mp4, application/pdf |
| media_url | string | – | Public URL of an image/video/PDF to attach (host one with upload_media). Set post_type to match. |
| media_urls | array | – | Optional array of media URLs to attach |
| post_type | string | – | Attachment type — set to image/video/pdf ONLY when actually attaching media (it drives how the post publishes to LinkedIn). No media attached -> prefer 'none' or omit. |
| title | string | – | Optional internal title for the draft |
No output schema declared.
No examples provided.
create_smart_folder ~124
Create a smart folder (filtered view) — a saved filter/workflow over the user's saved posts. 'name' is required; 'base_query' is the filter query that defines which posts belong; 'triage_buckets' are optional tabs/stages inside the folder. Returns the created folder (with its slug).
| Name | Type | Req | Description |
|---|---|---|---|
| base_query | string | – | The folder's filter query. |
| description | string | – | Optional description of the folder. |
| name | string | yes | Folder name. |
| triage_buckets | array | – | Tabs/stages inside the folder. |
No output schema declared.
No examples provided.
delete_bookmarks_by_filter ~563
DELETE 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.
| Name | Type | Req | Description |
|---|---|---|---|
| author | string | – | Filter by author name or ID. Use this parameter when the user wants to find posts by a specific author (e.g., 'Show posts by John Doe', 'Find posts from Suresh sambantham'). Supports fuzzy matching -… |
| bookmarked_from | string | – | Filter by bookmark date range (ISO date string) |
| bookmarked_to | string | – | Filter by bookmark date range (ISO date string) |
| comment | string | – | Filter by comment: 'only' returns just saved comments, 'exclude' returns only top-level posts. If the user didn't ask about saved comments, prefer 'none' (or omit) — 'none' applies no comment filter.… |
| confirm | – | – | MUST be true, and ONLY after the user explicitly confirmed this destructive action in THIS conversation (you told them what will be affected and they said yes). Never set it on your own initiative. |
| hide_archived | – | – | Hide archived bookmarks. Default true (archived excluded). Set false ONLY when the user explicitly asks to include archived posts — do not fill this in otherwise. |
| is_unread_only | boolean | – | Filter to ONLY unread bookmarks. OMIT unless the user explicitly asks for unread posts. Default false: read AND unread bookmarks are both included. |
| media_type | string | – | Optional media-attachment filter. Accepted values: 'none', 'image', 'video', 'pdf'. When the user did NOT explicitly name a kind of media, pass 'none' (or omit the field) — 'none' means no media filt… |
| posted_from | string | – | Filter by post posting date range (ISO date string) |
| posted_to | string | – | Filter by post posting date range (ISO date string) |
| q | string | – | Optional keyword/text filter on post content to further narrow which posts are affected. |
| tag | string | – | Filter by tag |
No output schema declared.
No examples provided.
delete_draft ~46
Delete (move to trash) a Content Studio draft by its id. Requires a paid Creator/Lifetime plan.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | The id of the content post/draft |
No output schema declared.
No examples provided.
delete_smart_folder ~69
Delete a smart folder (filtered view) by its slug. This removes the saved filter/workflow itself — it does NOT delete any saved posts. Use list_smart_folders to find the slug.
| Name | Type | Req | Description |
|---|---|---|---|
| slug | string | yes | The smart folder's slug (from list_smart_folders). |
No output schema declared.
No examples provided.
forget ~124
Delete a durable user memory by its 'key' (optionally scoped to a 'kind'). Use this when the user asks you to forget something you remembered about them, or to correct an outdated preference/fact before re-adding it with remember.
| Name | Type | Req | Description |
|---|---|---|---|
| key | string | yes | The slug (key) of the memory to delete. Removes every memory with that key for the user. |
| kind | string | – | Optional: restrict deletion to this kind only. Prefer 'none' (or omit) unless the user named a kind — 'none' removes every kind sharing the key. |
No output schema declared.
No examples provided.
get_analytics ~92
Get the user's account-level LinkedIn analytics — impressions, reactions, comments, reshares, members reached and follower growth — over a time window (date_range like '7d', '30d', '90d'). Requires a paid Creator/Lifetime plan.
| Name | Type | Req | Description |
|---|---|---|---|
| date_range | string | – | Time window, e.g. '7d', '30d', '90d' (default 30d) |
No output schema declared.
No examples provided.
get_bookmark ~68
Get a single saved LinkedIn post (bookmark) by its post_id — full content, author, media and tags. Use this to read one specific saved post, e.g. before creating content based on it.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | The post_id of the saved bookmark to fetch |
No output schema declared.
No examples provided.
get_bookmark_count ~472
Get 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.
| Name | Type | Req | Description |
|---|---|---|---|
| author | string | – | Filter by author name or ID. Use this parameter when the user wants to find posts by a specific author (e.g., 'Show posts by John Doe', 'Find posts from Suresh sambantham'). Supports fuzzy matching -… |
| bookmarked_from | string | – | Filter by bookmark date range (ISO date string) |
| bookmarked_to | string | – | Filter by bookmark date range (ISO date string) |
| comment | string | – | Filter by comment: 'only' returns just saved comments, 'exclude' returns only top-level posts. If the user didn't ask about saved comments, prefer 'none' (or omit) — 'none' applies no comment filter.… |
| hide_archived | – | – | Hide archived bookmarks. Default true (archived excluded). Set false ONLY when the user explicitly asks to include archived posts — do not fill this in otherwise. |
| is_unread_only | boolean | – | Filter to ONLY unread bookmarks. OMIT unless the user explicitly asks for unread posts. Default false: read AND unread bookmarks are both included. |
| media_type | string | – | Optional media-attachment filter. Accepted values: 'none', 'image', 'video', 'pdf'. When the user did NOT explicitly name a kind of media, pass 'none' (or omit the field) — 'none' means no media filt… |
| posted_from | string | – | Filter by post posting date range (ISO date string) |
| posted_to | string | – | Filter by post posting date range (ISO date string) |
| tag | string | – | Filter by tag |
No output schema declared.
No examples provided.
get_digest_issue ~73
Read ONE digest issue: its sections, and for each post the summary the digest wrote and why it was picked. Carries post IDS rather than post content — pass them to get_bookmark or list_bookmarks to read the posts themselves.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | The issue id, from list_digest_issues. |
No output schema declared.
No examples provided.
get_draft ~44
Get a single Content Studio post/draft by its id. Requires a paid Creator/Lifetime plan.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | The id of the content post/draft |
No output schema declared.
No examples provided.
get_growth_digest ~97
Get the user's GROWTH DIGEST — their positioning, content pillars, authority gaps, ranked what-to-do-next actions (with ready-to-use draft prompts), and this week's numbers (new saves, posts published). USE THIS whenever the user asks what they should post/do next, wants a growth plan or weekly review, or asks how to build authority — then walk them through the top next steps. Requires a paid Creator/Lifetime plan.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_interests ~104
Read what Lina worked out about the member on her own — inferred from what they save, label and read, NOT from anything they stated. Each interest carries how strongly it reads, whether it is active right now, and how many signals it rests on. An account with little activity answers an empty list, which means 'not enough to say yet' rather than 'no interests'. Present these as observations that can be wrong, and use correct_interest when the member disagrees.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_post_analytics ~94
Get per-post LinkedIn analytics for the user's recently published posts (impressions, engagements, likes, comments, etc.) over a time window. Requires a paid Creator/Lifetime plan.
| Name | Type | Req | Description |
|---|---|---|---|
| date_range | string | – | Time window, e.g. '7d', '30d', '90d' (default 30d) |
| limit | number | – | Max number of recently-published posts to return |
No output schema declared.
No examples provided.
get_posting_schedule ~40
Get the user's recurring posting schedule — the weekly time-slot grid and timezone that drive 'next-slot' scheduling. Requires a paid Creator/Lifetime plan.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_posting_slots ~73
Get the next free posting slots from the user's recurring posting schedule (in their timezone). Use a returned slot's timestamp as publish_at when scheduling. Requires a paid Creator/Lifetime plan.
| Name | Type | Req | Description |
|---|---|---|---|
| count | number | – | How many free slots to return |
| timezone | string | – | IANA timezone for the slots |
No output schema declared.
No examples provided.
get_queue ~90
List the user's posting queue — scheduled and published LinkedIn posts, grouped by date. Optionally filter by status. Each entry includes its schedule id (use it to cancel/reschedule). Requires a paid Creator/Lifetime plan.
| Name | Type | Req | Description |
|---|---|---|---|
| status | string | – | Filter the queue by status. If the user didn't name a status, prefer 'none' (or omit) — 'none' returns the whole queue. |
No output schema declared.
No examples provided.
get_smart_folder ~84
Get one smart folder (filtered view) by its slug — its name, description, filter query (base_query) and tabs (triage buckets). Use list_smart_folders first to find the slug. To read the posts inside, use get_smart_folder_posts.
| Name | Type | Req | Description |
|---|---|---|---|
| slug | string | yes | The smart folder's slug (from list_smart_folders). |
No output schema declared.
No examples provided.
get_smart_folder_posts ~157
List the saved LinkedIn posts inside a smart folder (filtered view). Pass the folder's slug (from list_smart_folders). Optionally pass 'bucket' to return only one tab/stage (triage bucket) of the folder; omit it for all posts in the folder. Paginate with 'cursor' (a numeric offset) and 'limit'.
| Name | Type | Req | Description |
|---|---|---|---|
| bucket | string | – | Tab/stage name within the folder (a triage bucket); omit for all posts in the folder. |
| cursor | number | – | Numeric offset for pagination. |
| limit | number | – | Number of posts to retrieve (1-100). |
| slug | string | yes | The smart folder's slug (from list_smart_folders). |
No output schema declared.
No examples provided.
list_bookmarks ~541
List 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.
| Name | Type | Req | Description |
|---|---|---|---|
| author | string | – | Filter by author name or ID. Use this parameter when the user wants to find posts by a specific author (e.g., 'Show posts by John Doe', 'Find posts from Suresh sambantham'). Supports fuzzy matching -… |
| bookmarked_from | string | – | Filter by bookmark date range (ISO date string) |
| bookmarked_to | string | – | Filter by bookmark date range (ISO date string) |
| comment | string | – | Filter by comment: 'only' returns just saved comments, 'exclude' returns only top-level posts. If the user didn't ask about saved comments, prefer 'none' (or omit) — 'none' applies no comment filter.… |
| cursor | string | – | Pagination cursor for next page |
| hide_archived | – | – | Hide archived bookmarks. Default true (archived excluded). Set false ONLY when the user explicitly asks to include archived posts — do not fill this in otherwise. |
| is_unread_only | boolean | – | Filter to ONLY unread bookmarks. OMIT unless the user explicitly asks for unread posts. Default false: read AND unread bookmarks are both included. |
| limit | number | – | Number of bookmarks to retrieve (1-100) |
| media_type | string | – | Optional media-attachment filter. Accepted values: 'none', 'image', 'video', 'pdf'. When the user did NOT explicitly name a kind of media, pass 'none' (or omit the field) — 'none' means no media filt… |
| posted_from | string | – | Filter by post posting date range (ISO date string) |
| posted_to | string | – | Filter by post posting date range (ISO date string) |
| sort_by | string | – | Sort order for results |
| tag | string | – | Filter by tag |
No output schema declared.
No examples provided.
list_digest_issues ~87
List past issues of the member's digests, newest first — when each was composed, whether it sent, and which digest it came from. Use get_digest_issue to read what one actually said.
| Name | Type | Req | Description |
|---|---|---|---|
| digest_id | string | – | Only issues of this digest. Omit for all of them. |
| limit | integer | – | How many issues, newest first (default 20). |
No output schema declared.
No examples provided.
list_digests ~69
List the member's bookmark digests — the recurring email of what they saved, written up. Shows each digest's sections (what each one is for) and its schedule. Read-only: this API can see a digest but cannot create, compose or send one, which stays in the app.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
list_drafts ~81
List the user's Content Studio posts (drafts, scheduled and published LinkedIn posts they are authoring). Optionally filter by status. Requires a paid Creator/Lifetime plan.
| Name | Type | Req | Description |
|---|---|---|---|
| status | string | – | Filter content posts by status. If the user didn't name a status, prefer 'none' (or omit) — 'none' lists all of them. |
No output schema declared.
No examples provided.
list_labels ~15
List all user's labels/tags
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
list_smart_folders ~77
List the user's smart folders (a.k.a. filtered views / triage views). A smart folder is a saved filter/workflow over their saved posts, optionally split into tabs (triage buckets/stages). Returns each folder's slug (use it with the other smart-folder tools), name, description, filter query and tabs.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
open_library_overview Open LinkedMash library overview ~30
Show a visual LinkedMash workspace with the canonical MCP setup, developer portal, and API key links.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
recall ~99
Retrieve what you durably remember about the user (preferences, writing voice/style, facts, standing instructions) across conversations. Optionally pass a free-text 'query' to narrow the results; omit it to get the full memory digest. Use this when you need to recall the user's preferences or voice before answering or drafting.
| Name | Type | Req | Description |
|---|---|---|---|
| query | string | – | Optional free-text filter to narrow which remembered items to return. Omit to return the user's full memory digest. |
No output schema declared.
No examples provided.
remember ~392
Persist a DURABLE fact, preference, writing-style trait, or standing instruction about the user so it is remembered in FUTURE conversations (not just this one). Use this when the user states a lasting preference or instruction (e.g. 'always keep replies short', 'I write for early-stage founders', 'my timezone is IST', 'use a punchy tone'). kind = preference|style|fact|instruction; key = a short stable slug (reusing a key overwrites it); value = a concise phrase. Do NOT store secrets, passwords, tokens, payment details, or sensitive personal data. Optional mode: 'append' grows an existing note instead of overwriting. If a write is REFUSED (e.g. it would overwrite something the user set themselves, which takes precedence), you'll get an error explaining why — tell the user rather than retrying.
| Name | Type | Req | Description |
|---|---|---|---|
| key | string | yes | Short stable slug identifying this memory within its kind (e.g. 'tone', 'audience', 'timezone', 'response_length'). Re-using the same key overwrites the previous value. |
| kind | string | yes | What kind of durable memory this is. 'preference' = how the user likes things done; 'style' = the user's writing voice (tone/structure/audience/formats/signature phrases); 'fact' = a stable fact abou… |
| mode | string | – | How to write when this (kind, key) already exists: 'overwrite' (default) replaces the value; 'append' adds it on a new line. OMIT (or pass 'none') for the default — only use 'append' to grow an accum… |
| value | string | yes | The memory content — a concise phrase (keep it under ~160 characters). |
No output schema declared.
No examples provided.
remove_labels ~84
Remove labels from bookmarked posts. Either label_id or label_name must be provided.
| Name | Type | Req | Description |
|---|---|---|---|
| label_id | string | – | ID of the label to remove (use either label_id or label_name) |
| label_name | string | – | Name of the label to remove (use either label_id or label_name) |
| post_ids | array | yes | Array of post IDs to remove labels from |
No output schema declared.
No examples provided.
remove_labels_by_filter ~581
REMOVE 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.
| Name | Type | Req | Description |
|---|---|---|---|
| author | string | – | Filter by author name or ID. Use this parameter when the user wants to find posts by a specific author (e.g., 'Show posts by John Doe', 'Find posts from Suresh sambantham'). Supports fuzzy matching -… |
| bookmarked_from | string | – | Filter by bookmark date range (ISO date string) |
| bookmarked_to | string | – | Filter by bookmark date range (ISO date string) |
| comment | string | – | Filter by comment: 'only' returns just saved comments, 'exclude' returns only top-level posts. If the user didn't ask about saved comments, prefer 'none' (or omit) — 'none' applies no comment filter.… |
| hide_archived | – | – | Hide archived bookmarks. Default true (archived excluded). Set false ONLY when the user explicitly asks to include archived posts — do not fill this in otherwise. |
| is_unread_only | boolean | – | Filter to ONLY unread bookmarks. OMIT unless the user explicitly asks for unread posts. Default false: read AND unread bookmarks are both included. |
| label_id | string | – | ID of the label to remove (use either label_id or label_name) |
| label_name | string | – | Name of the label to remove (use either label_id or label_name) |
| media_type | string | – | Optional media-attachment filter. Accepted values: 'none', 'image', 'video', 'pdf'. When the user did NOT explicitly name a kind of media, pass 'none' (or omit the field) — 'none' means no media filt… |
| posted_from | string | – | Filter by post posting date range (ISO date string) |
| posted_to | string | – | Filter by post posting date range (ISO date string) |
| q | string | – | Optional keyword/text filter on post content to further narrow which posts get the label removed. |
| tag | string | – | Filter by tag |
No output schema declared.
No examples provided.
schedule_post ~207
Schedule a Content Studio draft to publish to LinkedIn, or publish it immediately. Set publish_at to 'now' (publish right away), 'next-slot' (the next free slot in the user's posting schedule), or an ISO-8601 timestamp. A timezone (IANA, e.g. 'America/New_York') is required unless publish_at is 'now'. Requires a paid Creator/Lifetime plan.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | The id of the draft to schedule or publish |
| media_mime_type | string | – | Optional media MIME type |
| media_url | string | – | Optional media URL to attach |
| post_type | string | – | Post type (default: text) |
| publish_at | string | yes | When to publish: 'now', 'next-slot' (next free posting slot), or an ISO-8601 timestamp |
| timezone | string | – | IANA timezone, e.g. 'America/New_York'. Required unless publish_at is 'now'. |
No output schema declared.
No examples provided.
search_bookmarks ~638
Search 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.
| Name | Type | Req | Description |
|---|---|---|---|
| author | string | – | Filter by author name or ID. Use this parameter when the user wants to find posts by a specific author (e.g., 'Show posts by John Doe', 'Find posts from Suresh sambantham'). Supports fuzzy matching -… |
| bookmarked_from | string | – | Filter by bookmark date range (ISO date string) |
| bookmarked_to | string | – | Filter by bookmark date range (ISO date string) |
| comment | string | – | Filter by comment: 'only' returns just saved comments, 'exclude' returns only top-level posts. If the user didn't ask about saved comments, prefer 'none' (or omit) — 'none' applies no comment filter.… |
| cursor | string | – | Pagination cursor for next page |
| hide_archived | – | – | Hide archived bookmarks. Default true (archived excluded). Set false ONLY when the user explicitly asks to include archived posts — do not fill this in otherwise. |
| is_unread_only | boolean | – | Filter to ONLY unread bookmarks. OMIT unless the user explicitly asks for unread posts. Default false: read AND unread bookmarks are both included. |
| limit | number | – | Number of bookmarks to retrieve (1-100) |
| media_type | string | – | Optional media-attachment filter. Accepted values: 'none', 'image', 'video', 'pdf'. When the user did NOT explicitly name a kind of media, pass 'none' (or omit the field) — 'none' means no media filt… |
| posted_from | string | – | Filter by post posting date range (ISO date string) |
| posted_to | string | – | Filter by post posting date range (ISO date string) |
| q | string | – | Keyword or text search query for finding bookmarks by exact words or phrases in post content. Do NOT use this for author names - use the 'author' parameter instead. |
| sort_by | string | – | Sort order for results |
| tag | string | – | Filter by tag |
| vector_search_term | string | – | Semantic search query for retrieving bookmarks based on meaning and context, not just keywords. Use for natural language questions or topic-based searches. |
No output schema declared.
No examples provided.
search_docs ~245
Answer 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.
| Name | Type | Req | Description |
|---|---|---|---|
| query | string | – | What the user wants to know about Linkedmash itself — a feature and how to reach it, a setting to change, or pricing/billing (e.g. 'where do I manage my subscription', 'how do I schedule a post', 'ho… |
No output schema declared.
No examples provided.
set_posting_schedule ~97
Replace the user's recurring posting schedule (weekly time-slot grid + timezone). 'grid' is an array of slots like { time: '8:30 am', days: { Mon: true, Wed: true } }. These slots drive 'next-slot' scheduling. Requires a paid Creator/Lifetime plan.
| Name | Type | Req | Description |
|---|---|---|---|
| grid | array | yes | Recurring posting slots |
| timezone | string | yes | IANA timezone for the recurring posting schedule |
No output schema declared.
No examples provided.
setup_vector_store ~162
Initialize 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.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
tag_bookmarks_by_filter ~686
Add 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.
| Name | Type | Req | Description |
|---|---|---|---|
| author | string | – | Filter by author name or ID. Use this parameter when the user wants to find posts by a specific author (e.g., 'Show posts by John Doe', 'Find posts from Suresh sambantham'). Supports fuzzy matching -… |
| bookmarked_from | string | – | Filter by bookmark date range (ISO date string) |
| bookmarked_to | string | – | Filter by bookmark date range (ISO date string) |
| comment | string | – | Filter by comment: 'only' returns just saved comments, 'exclude' returns only top-level posts. If the user didn't ask about saved comments, prefer 'none' (or omit) — 'none' applies no comment filter.… |
| hide_archived | – | – | Hide archived bookmarks. Default true (archived excluded). Set false ONLY when the user explicitly asks to include archived posts — do not fill this in otherwise. |
| is_unread_only | boolean | – | Filter to ONLY unread bookmarks. OMIT unless the user explicitly asks for unread posts. Default false: read AND unread bookmarks are both included. |
| label_id | string | – | ID of the existing label to add (use either label_id or label_name) |
| label_name | string | – | Name of the label to add — created if it doesn't exist (use either label_id or label_name) |
| media_type | string | – | Optional media-attachment filter. Accepted values: 'none', 'image', 'video', 'pdf'. When the user did NOT explicitly name a kind of media, pass 'none' (or omit the field) — 'none' means no media filt… |
| posted_from | string | – | Filter by post posting date range (ISO date string) |
| posted_to | string | – | Filter by post posting date range (ISO date string) |
| q | string | – | Optional keyword/text filter on post content to further narrow which posts get tagged. |
| tag | string | – | Filter by tag |
No output schema declared.
No examples provided.
trigger_csv_export ~339
Start exporting the user's saved LinkedIn posts to a CSV (spreadsheet) file. Use this when the user asks to export/download their saved posts as CSV or to a spreadsheet. By default it exports the WHOLE library; to scope it, pass post_ids for a specific selection, or a filter (search_query, filter+value e.g. author/label/type, tags, or author). This records the export — it does NOT return the file. ALWAYS tell the user the export has started and to open the Export Center link (returned in the message) to view and download it.
| Name | Type | Req | Description |
|---|---|---|---|
| author | string | – | Restrict the export to a specific author (name or id). Shorthand for filter='author'. |
| filter | string | – | Filter dimension to scope the export, paired with 'value' (e.g. 'author' + an author id, 'label' + a tag, 'type' + image/video/pdf). If the user asked to export everything, prefer 'none' (or omit) —… |
| post_ids | array | – | Specific saved-post ids to export. Omit to export by filter or the whole library. |
| search_query | string | – | Keyword/text query to scope which saved posts are exported (matches post content). OMIT unless the user asked to export a subset. |
| tags | array | – | Restrict the export to saved posts carrying these tags/labels. OMIT unless the user named tags. |
| value | string | – | The value for 'filter' (e.g. the author id, the tag/label, or the media type). |
No output schema declared.
No examples provided.
trigger_json_export ~337
Start exporting the user's saved LinkedIn posts to a JSON file (a structured backup). Use this when the user asks to export/download/back up their saved posts as JSON. By default it exports the WHOLE library; to scope it, pass post_ids for a specific selection, or a filter (search_query, filter+value e.g. author/label/type, tags, or author). This records the export — it does NOT return the file. ALWAYS tell the user the export has started and to open the Export Center link (returned in the message) to view and download it.
| Name | Type | Req | Description |
|---|---|---|---|
| author | string | – | Restrict the export to a specific author (name or id). Shorthand for filter='author'. |
| filter | string | – | Filter dimension to scope the export, paired with 'value' (e.g. 'author' + an author id, 'label' + a tag, 'type' + image/video/pdf). If the user asked to export everything, prefer 'none' (or omit) —… |
| post_ids | array | – | Specific saved-post ids to export. Omit to export by filter or the whole library. |
| search_query | string | – | Keyword/text query to scope which saved posts are exported (matches post content). OMIT unless the user asked to export a subset. |
| tags | array | – | Restrict the export to saved posts carrying these tags/labels. OMIT unless the user named tags. |
| value | string | – | The value for 'filter' (e.g. the author id, the tag/label, or the media type). |
No output schema declared.
No examples provided.
trigger_pdf_export ~371
Start exporting the user's saved LinkedIn posts to PDF. Use this when the user asks to export/download/back up their saved posts as a PDF (e.g. 'export all my saved posts to PDF', 'give me a PDF of my saved AI posts'). By default it exports the WHOLE library; to scope it, pass post_ids for a specific selection, or a filter (search_query for a keyword, filter+value e.g. author/label/type, tags, or author). This kicks off an async job — it does NOT return the file. ALWAYS tell the user the export has started and to open the Export Center link (returned in the message) to view and download it once ready; large exports can take up to a minute.
| Name | Type | Req | Description |
|---|---|---|---|
| author | string | – | Restrict the export to a specific author (name or id). Shorthand for filter='author'. |
| filter | string | – | Filter dimension to scope the export, paired with 'value' (e.g. 'author' + an author id, 'label' + a tag, 'type' + image/video/pdf). If the user asked to export everything, prefer 'none' (or omit) —… |
| post_ids | array | – | Specific saved-post ids to export. Omit to export by filter or the whole library. |
| search_query | string | – | Keyword/text query to scope which saved posts are exported (matches post content). OMIT unless the user asked to export a subset. |
| tags | array | – | Restrict the export to saved posts carrying these tags/labels. OMIT unless the user named tags. |
| value | string | – | The value for 'filter' (e.g. the author id, the tag/label, or the media type). |
No output schema declared.
No examples provided.
update_draft ~137
Update a Content Studio draft by id (partial — provide only the fields to change; 'content' is required for non-trash updates). Requires a paid Creator/Lifetime plan.
| Name | Type | Req | Description |
|---|---|---|---|
| content | string | – | Updated body text (required for non-trash updates) |
| format | string | – | Updated post format. OMIT (or pass 'none') unless the user asked to change it. |
| id | string | yes | The id of the content post/draft to update |
| media_mime_type | string | – | Updated media MIME type |
| media_urls | array | – | Updated media URLs |
| title | string | – | Updated internal title |
No output schema declared.
No examples provided.
update_smart_folder ~135
Update a smart folder (filtered view) by its slug. Provide only the fields to change: 'name', 'description', 'base_query' (the filter query), and/or 'triage_buckets' (the tabs/stages). Use list_smart_folders to find the slug.
| Name | Type | Req | Description |
|---|---|---|---|
| base_query | string | – | Updated filter query. |
| description | string | – | Updated description. |
| name | string | – | Updated folder name. |
| slug | string | yes | The smart folder's slug (from list_smart_folders). |
| triage_buckets | array | – | Updated tabs/stages inside the folder. |
No output schema declared.
No examples provided.
upload_media ~186
Host an image, video, or PDF and get back a public URL to attach to a post (use the returned url as media_url, with the matching post_type). Provide a remote 'url' to re-host (recommended — the asset then stays available until a scheduled publish), or 'file_base64' (+ file_name) for raw bytes. Requires a paid Creator/Lifetime plan.
| Name | Type | Req | Description |
|---|---|---|---|
| file_base64 | string | – | Base64-encoded file bytes (alternative to url; best for smaller files) |
| file_name | string | – | File name, e.g. 'chart.png' (required when using file_base64) |
| mime_type | string | – | MIME type, e.g. image/png, video/mp4, application/pdf |
| url | string | – | Public http(s) URL of the media to host (recommended — it then stays available until a scheduled publish) |
No output schema declared.
No examples provided.
What is the LinkedMash MCP server?
LinkedMash is an MCP server listed in the public MCP registry as io.github.linkedmash/linkedmash. Search, label and export your LinkedIn saved posts, then draft, schedule and publish from them. This page covers its hosted endpoint (https://mcp.linkedmash.com/api/mcp).
Is the LinkedMash MCP server safe to use?
LinkedMash scores 36 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the LinkedMash MCP server expose?
LinkedMash exposes 46 tools: open_library_overview, search_docs, list_bookmarks, search_bookmarks, get_bookmark_count, and 41 more. Their descriptions and schemas cost roughly 9,244 tokens of context every time the server is loaded.
Does the LinkedMash MCP server require authentication?
Yes. LinkedMash asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.
Is the LinkedMash MCP server still maintained?
LinkedMash is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.