Skip to main content
Glama

React to a LinkedIn Post

li_react_to_post
Idempotent

React to ONE LinkedIn post from a chosen account, now: Like by default, or another of LinkedIn's reactions. The worker's browser opens the post, reads it like a person would, refuses if the page shows more than one post or the post already carries this account's reaction (a reaction is a toggle, so it is never clicked twice), clicks once, and confirms the reaction shows. Returns outcome (reacted, already_reacted, post_unavailable, not_confirmed, failed), the post's author as the page names them, and reactionsToday. Dry-run unless confirmReact=true: confirm the post and the account with the user first, since a reaction is public.

Capped at 15-25 reactions a day per account (our policy; LinkedIn publishes no limit), shared with campaign engagement, and spaced a few minutes apart, so a call may wait for its turn. Not held to sending hours (a person asked now). A timeout is NOT a failure: the job is still queued, so never call again for the same post; read li_job_result with the returned jobId.

To warm up an INVITE, do not call this: give the prospect engagePostUrl in li_ingest_prospects or li_create_campaign and the campaign reacts about a day before the invite, never less than 16 hours, checking the post is really theirs. Reading someone's recent posts to pick one is a separate lookup; this tool only reacts.

Input Schema

NameRequiredDescriptionDefault
postUrlYesThe post: https://www.linkedin.com/feed/update/urn:li:activity:<id>/ (also share/ugcPost urns) or a https://www.linkedin.com/posts/<...>/ copy-link. Anything else is refused before a browser opens.
reactionNoLIKE (default), PRAISE (Celebrate), EMPATHY (Love), INTEREST (Insightful), APPRECIATION (Support) or ENTERTAINMENT (Funny); the on-screen name works too.
sessionIdNoAccount id from li_list_accounts. Needed (or sessionLabel) when you have more than one account; never guessed.
confirmReactYesMust be true to react; false returns a dry-run preview and touches nothing
sessionLabelNoAccount by label, LinkedIn name, profile slug or member id (li_list_accounts). Needed (or sessionId) when you have more than one account; never guessed.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Added

TDQS

A4.8/5.0
Behavior5/5

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

Goes well beyond the annotations: describes the browser opening the post, refusal when multiple posts or a prior reaction exist, toggle semantics preventing double-click, daily cap of 15-25 shared with campaign engagement, spacing that may cause wait, not being held to sending hours, and that a timeout is not failure – read li_job_result with the returned jobId. Annotations (non-readOnly, idempotent) are consistent.

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 core action and default; then behavior, caps, failure handling, and the invite-warmup exclusion. Dense but every paragraph earns its place for a multi-behavior tool. Slightly long, but the exclusions are necessary for correct routing.

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?

No output schema, so the description explains return values (outcome enum, author, reactionsToday) and failure semantics (timeout not failure, use li_job_result). Caps, preconditions, and account-selection rules are all covered for a 5-parameter mutating tool.

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% and descriptions are strong, but the prose adds value: the default reaction, that confirmReact=false means dry-run touching nothing, that sessionId/sessionLabel are never guessed and required with multiple accounts, and the postUrl refusal behavior. Mostly restates schema though, so not 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?

States a specific verb (react) and resource (ONE LinkedIn post from a chosen account), and explicitly disambiguates from sibling behaviors: warming up an invite must go through li_ingest_prospects/li_create_campaign, and picking a post is a separate lookup. An agent can distinguish this from li_fetch_posts and campaign tools without opening anything.

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?

Gives explicit when-to-use and when-NOT-to-use: 'To warm up an INVITE, do not call this' and routes to li_ingest_prospects/li_create_campaign instead; also says reading posts to pick one is a separate lookup. Names the dry-run default and the confirm precondition with the user.

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