Skip to main content
Glama

linkedin_unipile_post

Read-only

LinkedIn posts: your home feed, a post, its engagement. Publishing, commenting and reacting is linkedin_unipile_act (op="publish_post" / "comment_post" / "react_post").

op:

  • "feed" (default): your LinkedIn home, read LIVE — one page per call, sorted by publication date (most recent first), nothing stored. Sponsored/promo inserts are excluded. The choice of posts follows your LinkedIn home setting. Next page: pass the returned cursor again (None = end of the stream). Returns {items, cursor, count}. Served as a TRIAGE VIEW: each post returns enough to rank it (author + headline, date, traction, link, urn) and its text cut at 600 characters (text_truncated: true marks the cut) — a page of 40 raw posts exceeds the size of a tool result, and sorting a feed is done on the header. Nothing is lost: fields=["*"] returns all the post's fields, text_max_chars=None the full text, and a whole post is read with op="get" (post_id=<urn>).

  • "get": a post — post_id = social_id (urn:li:…) from a linkedin_unipile_profile(op="posts") result.

  • "engagement": who reacted/commented — kind='comments' or 'reactions'. Follows the pages up to limit people (default 100, max 500); returns {items, count, truncated, next_offset, stopped} — truncated: true says that the list is PARTIAL, resume with offset=next_offset. comment_id targets a comment's replies (comments) or reactions (reactions). An Unipile 429 is the unipile_rate_limited refusal (delay in retry_after_seconds); after a first page, it returns the partial result.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "linkedin_unipile_post"
  }
}

Input Schema

NameRequiredDescriptionDefault
opNofeed (default) | get | engagement.feed
_orgNoOrg (id) de CET APPEL. `oto_list_orgs()`.
kindNoop="engagement" — 'comments' (default) or 'reactions'.comments
limitNoop="feed" — posts requested for this page (default 20); op="engagement" — people to return at most (default 100, max 500).
_groupNoÉquipe (id) de CET APPEL, sous son org parente.
cursorNoop="feed" — the next page: the `cursor` from a previous call (omitted = the first page).
fieldsNoop="feed" — projection: the requested fields, plus the `urn` always kept to address the post. Omitted = the triage view; `["*"]` = all the post's fields.
offsetNoop="engagement" — where to resume (the `next_offset` of a previous call; 0 = start).
_run_idNoOBLIGATOIRE à chaque appel dès `run_start` ou `data_claim_next` : sans lui, l'écriture sur une ligne réservée est refusée. Hérité seulement si le serveur tient un run actif — n'y compte pas.
post_idNopost's social_id (get, engagement).
_accountNoCompte à OPÉRER quand plusieurs existent. `oto_identity(op='list')`.
_projectNoProjet (id) de CET APPEL — jeton PRIMAIRE. `oto_project(op='list')`.
_instanceNoInstance de connecteur PRÉCISE (un credential exact). `oto_instance(op='list')`.
comment_idNoop="engagement" — a comment of the post: its replies (kind='comments') or its reactions (kind='reactions').
text_max_charsNoop="feed" — text length of each post (default 600; `None` = full text).

Schema Changelog

Changes observed during successful MCP inspections.

No schema history has been recorded yet.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint=true; the description goes well beyond by disclosing that the feed is read LIVE with nothing stored, that sponsored inserts are excluded, that results are a deliberately truncated triage view with `text_truncated` markers, and that a 429 surfaces as an `unipile_rate_limited` refusal with `retry_after_seconds` and a partial result after the first page. That is exactly the operational context annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the op breakdown and bolded op names, and nearly every sentence carries operational information. It is long and duplicates some schema defaults (limit, text_max_chars), but the density is justified by three distinct modes and their pagination semantics.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by naming the return shapes per op (`{items, cursor, count}` and `{items, count, truncated, next_offset, stopped}`) and explaining how `truncated`/`next_offset` drive resumption. For a 15-parameter, three-mode tool this is complete enough to call correctly on the first try.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds cross-parameter meaning the schema does not: `cursor` is the returned cursor and `None` means end of stream, `offset` resumes from `next_offset`, `comment_id` retargets engagement to a comment's replies or reactions, and `limit` has different defaults per op. It repeats a few defaults already in the schema, which keeps it from a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening line names the resource and the three read modes (feed, get, engagement) with a specific verb per mode, and explicitly carves out publishing/commenting/reacting to the sibling `linkedin_unipile_act` with the exact op values. An agent can distinguish this from `linkedin_unipile_act` and `linkedin_unipile_profile` without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Each op carries its own when-to-use context: feed for the home stream, get for a single post addressed by `urn` from a profile posts result, engagement for who reacted/commented. It also states the exclusion (writes go to `linkedin_unipile_act`) and the recovery path when the triage view is insufficient (`fields=["*"]`, `text_max_chars=None`, `op="get"`).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources