Skip to main content
Glama

Server Details

Operate a real LinkedIn account from your AI agent. 52 tools for the inbox, invitations, network, profiles, Sales Navigator search in plain language, posts and engagement; six playbooks served as MCP prompts that preview before they write; daily quotas enforced server-side; structured errors; idempotent writes; signed webhooks when a prospect replies or a connection is accepted. LinkedIn only. 7-day trial, no card.

Ownership verified
Status
Healthy
Uptime
99.6% over 21 days
Last Tested
Transport
Streamable HTTP · MCP 2024-11-05
URL

TDQS

A3.9/5.0

Scored across 58 tools

Disambiguation4/5

Most tools target a distinct resource+action and the verbose descriptions explicitly disambiguate near-neighbors (e.g. send_message vs salesnav_send_message, list_conversations vs salesnav_list_messaging_threads, comment_post vs reply_comment, scrape_post vs scrape_my_posts). The deliberate cross-references ('Not for X, see Y') keep boundaries clear despite the size. A few areas (the multiple scrape_* and post-listing tools) still require close reading, preventing a perfect score.

Naming Consistency4/5

The overwhelming majority follow a predictable snake_case verb_noun pattern (list_, get_, create_, update_, delete_, send_, accept_) with a consistent salesnav_ prefix for the Sales Navigator family. Minor deviations exist: noun-only names like reach_playbooks, profile_viewers, and the irregular get_me. Overall readable and consistent.

Tool Count2/5

58 tools is heavy for a single server and crosses the '25+' threshold; the surface is broad but includes parallel Sales Navigator and classic duplicates that pad the count. It is defensible given the wide LinkedIn automation domain, but the set is large enough to strain tool selection.

Completeness5/5

The surface covers the domain comprehensively: full lifecycle CRUD for accounts, conversations, invitations, jobs, webhooks, scheduled posts and media upload, plus scraping, playbooks and Sales Navigator support. Create/read/update/delete/pause/resume are all present with no obvious dead ends.

Available Tools

58 tools
accept_invitationB
Idempotent
Inspect

Accept a pending received connection request. Use to accept a received invitation (invitation_secret from list_received_invitations). Ask the user which ones.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYesReach id of the LinkedIn account to act on, from list_accounts.
idempotency_keyNoOptional. A key you choose (a UUID is fine) that names this exact call. If you retry with the same key and the same arguments, the first call's result is returned and nothing is done twice on LinkedIn. Reusing a key with different arguments is refused. Keys expire after 24 hours.
linkedin_id_or_urlYesThe LinkedIn member: profile URL, vanity name (the part after /in/), Sales Navigator URL, or internal member id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
acceptedNo

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare openWorldHint, idempotentHint and destructiveHint, so the safety profile is covered externally. The description adds a real behavioral instruction ("Ask the user which ones"), indicating a confirmation step, but omits rate limits or irreversible side effects on LinkedIn. There is no contradiction with annotations.

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?

Three short sentences, front-loaded with the core action, with no padding. The parenthetical invitation_secret reference is the one sentence that damages rather than earns its place.

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

Completeness3/5

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

An output schema exists, so return values need no explanation, and annotations carry the idempotency/destructiveness profile. However, a mutation tool whose description identifies the wrong input field and never mentions the account scoping requirement is not fully complete for correct invocation.

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

Parameters2/5

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

Schema coverage is 100%, so the baseline would be 3, but the description names "invitation_secret" as the input while the actual required parameters are account_id and linkedin_id_or_url. This mismatch points the agent at a parameter that does not exist (and additionalProperties: false would reject it), actively misleading rather than adding meaning.

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

Purpose4/5

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

The opening sentence names a specific verb and resource ("Accept a pending received connection request"), which clearly separates it from send_invitation and withdraw_invitation. It lacks explicit sibling naming (e.g. decline_invitation), so it falls short of a 5.

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

Usage Guidelines4/5

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

It states when to use the tool and where the input originates ("invitation_secret from list_received_invitations"), which routes the agent correctly. It never states when not to use it or names decline_invitation as the alternative, so no exclusions are covered.

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

archive_conversationA
Idempotent
Inspect

Archive or unarchive a LinkedIn conversation. Set archive=false to unarchive. conversation_linkedin_id is the conversation_id returned by list_conversations. Housekeeping in the classic inbox; reversible (archive=false). Not a delete, see delete_conversation.

ParametersJSON Schema
NameRequiredDescriptionDefault
archiveNoTrue to archive, False to unarchive.
account_idYesReach id of the LinkedIn account to act on, from list_accounts.
idempotency_keyNoOptional. A key you choose (a UUID is fine) that names this exact call. If you retry with the same key and the same arguments, the first call's result is returned and nothing is done twice on LinkedIn. Reusing a key with different arguments is refused. Keys expire after 24 hours.
conversation_linkedin_idYesConversation (thread) id, as returned by list_conversations.

Output Schema

ParametersJSON Schema
NameRequiredDescription
archivedNoCurrent archived state

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare destructiveHint=false and idempotentHint=true, so the safety baseline is covered. The description adds genuinely useful context beyond them: the operation is reversible via archive=false and is housekeeping rather than deletion. It doesn't add auth or rate-limit notes, but for a low-risk reversible toggle that is reasonable.

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

Conciseness5/5

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

Front-loads the core action in the first sentence, then adds only the unarchive flag, the id source, scope, and the explicit non-delete routing note. Every sentence earns its place with zero padding.

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 an output schema present, return values need no explanation, and the description covers the action, direction, reversibility, ID provenance, and the delete alternative. Nothing an agent needs to call this correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all four parameters, including archive semantics and the idempotency_key contract. The description restates archive=false and the provenance of conversation_linkedin_id but adds no syntax or format detail beyond the schema. Baseline 3 when the schema carries the load.

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+resource ('Archive or unarchive a LinkedIn conversation') and immediately distinguishes itself from the sibling delete_conversation. The dual-direction behavior (archive/unarchive via archive=false) is spelled out, so the agent can tell exactly what the tool does without opening siblings.

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

Usage Guidelines4/5

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

Gives clear context ('Housekeeping in the classic inbox') and names the alternative for the delete case ('Not a delete, see delete_conversation'), plus the unarchive condition. It stops short of positioning against star_conversation, the other non-destructive conversation-state sibling, so routing is not fully exhausted.

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

cancel_jobA
DestructiveIdempotent
Inspect

Cancel a job: its pending items will never run. Items already executed are unaffected. Cannot be undone. Irreversible for the pending items (executed ones stay); confirm with the user. To stop temporarily use pause_job.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYesJob id, as returned by create_job or list_jobs.
idempotency_keyNoOptional. A key you choose (a UUID is fine) that names this exact call. If you retry with the same key and the same arguments, the first call's result is returned and nothing is done twice on LinkedIn. Reusing a key with different arguments is refused. Keys expire after 24 hours.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
itemsNo
labelNo
actionNo
sourceNo
statusNo
totalsNo
windowNo
resume_atNo
account_idNo
created_atNo
started_atNo
completed_atNo
next_item_atNo
pause_reasonNoquota_reached | account_disconnected | billing | manual

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered structurally; the description adds the concrete consequences (pending items never run, executed items remain, cannot be undone). It does not restate the idempotency-key retry semantics, but those live in the schema description, so this is a modest gap rather than a miss.

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 operation and its consequence, and every clause is decision-relevant. Minor redundancy between 'Cannot be undone' and 'Irreversible for the pending items' costs a point, but there is no filler.

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

Completeness4/5

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

For a destructive, irreversible tool with a full output schema and complete annotations, the description supplies the consequence model and the pause_job alternative an agent needs. What is missing — post-cancellation job state and response shape — is covered by the output schema.

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

Parameters3/5

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

Schema description coverage is 100%, including job_id provenance ('as returned by create_job or list_jobs') and a full idempotency_key explanation, so the schema carries all parameter meaning. The description adds nothing about parameters, which is the correct baseline when coverage is complete.

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+resource ('Cancel a job') and immediately clarifies scope: pending items will never run, executed items are unaffected. It explicitly contrasts with the sibling pause_job, so an agent can distinguish it from create_job/list_jobs/get_job without opening schemas.

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?

Explicitly routes to the alternative: 'To stop temporarily use pause_job.' It also adds a when-to-use guardrail — 'confirm with the user' — for an irreversible action, which is exactly the decision context an agent needs.

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

comment_postAInspect

Post a comment on a LinkedIn post on behalf of the connected account. Use to write a new top-level comment on a post; to answer an existing comment use reply_comment. Counts against the daily comments quota; the text is public, preview it with the user.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesComment text.
account_idYesReach id of the LinkedIn account to act on, from list_accounts.
idempotency_keyNoOptional. A key you choose (a UUID is fine) that names this exact call. If you retry with the same key and the same arguments, the first call's result is returned and nothing is done twice on LinkedIn. Reusing a key with different arguments is refused. Keys expire after 24 hours.
post_url_or_urnYesLinkedIn post URL, slug, or URN.

Output Schema

ParametersJSON Schema
NameRequiredDescription
commentedNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, openWorldHint=true and destructiveHint=false, so the mutating/external nature is covered structurally. The description adds genuinely new context beyond the annotations: it consumes the daily comment quota and the content becomes publicly visible, which is the kind of side-effect disclosure that matters for a write tool. It stops short of explaining what happens when the quota is exhausted (e.g., pointing at get_account_quotas), so it is strong but not exhaustive.

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

Conciseness5/5

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

Three short sentences, front-loaded with the core action, then the disambiguation, then the caveats. Every sentence carries information an agent needs; no filler or restatement of the tool name.

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

Completeness4/5

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

An output schema exists so return values need not be explained, and annotations cover the safety profile. The description covers scope, alternative, quota and visibility, but omits what to do on quota exhaustion or auth failure, the only real gap for a write tool with sibling quota-inspection tools available.

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

Parameters3/5

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

Schema description coverage is 100% for all four parameters, including a detailed idempotency_key explanation, so the schema does the heavy lifting. The description adds no parameter-level detail (no format for post_url_or_urn, no note that account_id comes from list_accounts), which matches the baseline 3.

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 and resource ('Post a comment on a LinkedIn post') plus the acting principal ('on behalf of the connected account'). It explicitly distinguishes itself from the sibling reply_comment, so an agent can route correctly without opening either 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?

Gives the when ('write a new top-level comment on a post'), the when-not with the named alternative ('to answer an existing comment use reply_comment'), and operational caveats (daily quota, public text, preview with the user). Nothing about selection is left to inference.

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

create_jobAInspect

Queue a batch of LinkedIn actions (messages, invitations, profile visits or comments) that Reach executes on its own over the following hours or days: spread across the account's activity window (set per account with update_account_quotas; default 09:00-18:00, Monday to Friday, in the account's timezone; overridable per job) with human-like gaps, never beyond the daily quota of the action. Returns immediately with a job_id and the planned schedule; the agent does not have to stay alive. The job pauses by itself when a quota is reached or the account disconnects and resumes when it can; webhooks job.started / job.progress / job.paused / job.completed report what happens. Use it for anything above a handful of actions instead of calling send_message or send_invitation in a loop. Always show the user the items before queuing them. Use for any batch above a handful of actions; returns at once with the schedule. Show the items to the user first. Not for a single action, call the direct tool.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoWeekdays the job may run: mon, tue, wed, thu, fri, sat, sun. Default: the account's window (Monday to Friday unless changed).
itemsYesOne object per action, in the order to execute them; fields depend on the action (see action).
labelNoShort free text shown in the dashboard and in webhook events, e.g. 'Follow-ups week 40'.
actionYesWhat every item does. send_message: text + conversation_linkedin_id (reply) or recipient_linkedin_id (new thread). send_invitation: linkedin_id_or_url + optional message (<200 chars). visit_profile: linkedin_id_or_url. comment_post: post_url_or_urn + text.
timezoneNoIANA zone such as Europe/Paris. Default: the account's window setting, else the zone of its proxy country.
account_idYesReach id of the LinkedIn account to act on, from list_accounts.
window_endNoHH:MM in the job's timezone; default: the account's window (18:00 unless changed).
window_startNoHH:MM in the job's timezone; default: the account's window (09:00 unless changed).
idempotency_keyNoOptional. A key you choose (a UUID is fine) that names this exact call. If you retry with the same key and the same arguments, the first call's result is returned and nothing is done twice on LinkedIn. Reusing a key with different arguments is refused. Keys expire after 24 hours.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
itemsNo
labelNo
actionNo
sourceNo
statusNo
totalsNo
windowNo
resume_atNo
account_idNo
created_atNo
started_atNo
completed_atNo
next_item_atNo
pause_reasonNoquota_reached | account_disconnected | billing | manual

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only declare the safety profile; the description goes far beyond, disclosing asynchronous execution, spreading across the account activity window with human-like gaps, quota-bounded behavior, self-pausing on quota/disconnect and self-resuming, webhook lifecycle events (job.started/progress/paused/completed), and that it returns immediately with a job_id and schedule so the agent need not stay alive.

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

Conciseness3/5

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

The core is well front-loaded, but the closing sentences ('Use for any batch above a handful of actions; returns at once with the schedule. Show the items to the user first. Not for a single action, call the direct tool.') restate content already delivered earlier in the paragraph, adding length without new information.

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?

Given an output schema exists, the description does not need to detail return values, and it still notes the job_id/schedule return and webhook reporting. Async lifecycle, quota interaction, defaults and prerequisites are all covered for a 9-parameter batching 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 already 100%, so the baseline is 3, but the description adds meaning the schema does not: it ties window_start/window_end/timezone/days to the account-level setting managed by update_account_quotas, explains the default fallback chain, and clarifies the action-to-item-fields relationship ('fields depend on the action').

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 and resource ('Queue a batch of LinkedIn actions ... that Reach executes on its own over the following hours or days') and enumerates the action types. An agent can distinguish this asynchronously-executed batching tool from the synchronous send_message/send_invitation siblings 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?

Explicitly names the alternatives ('instead of calling send_message or send_invitation in a loop'), gives a threshold ('anything above a handful of actions'), an exclusion ('Not for a single action, call the direct tool') and a workflow rule ('Always show the user the items before queuing them'). Nothing is left to inference.

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

create_multi_photoAInspect

Create a LinkedIn multi-photo object from a list of digitalmediaAsset URNs. Returns an identifierUrn (urn:li:fsd_multiPhoto:…) to pass to create_post. author_urn is the urn:li:fsd_profile:… of the connected account (get it from get_me). Use after uploading two or more images with upload_media_from_url; returns the single URN create_post takes. Not for one image.

ParametersJSON Schema
NameRequiredDescriptionDefault
alt_textsNoOptional alt text per image (same order as media_urns).
account_idYesReach id of the LinkedIn account to act on, from list_accounts.
author_urnYesOnly messages from this author URN.
media_urnsYesList of urn:li:digitalmediaAsset:… URNs.
idempotency_keyNoOptional. A key you choose (a UUID is fine) that names this exact call. If you retry with the same key and the same arguments, the first call's result is returned and nothing is done twice on LinkedIn. Reusing a key with different arguments is refused. Keys expire after 24 hours.

Output Schema

ParametersJSON Schema
NameRequiredDescription
identifier_urnNoURN to pass as media_urn of create_post

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnly=false, destructive=false, idempotent=false, openWorld=true, and the output schema documents the return shape. The description still adds real context: the creation workflow position, that the returned identifierUrn must be handed to create_post, and that author_urn must be sourced from get_me. It does not disclose rate limits or what happens if media_urns are invalid, keeping it just below the top.

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?

Purpose is front-loaded and the sentences are tight, but the create_post linkage is stated twice ('to pass to create_post' and 'the single URN create_post takes'), which is mild redundancy that keeps it from a 5.

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?

Given an output schema and annotations covering the safety profile, the description still supplies everything an agent needs: prerequisites, exclusions, parameter provenance, and the downstream handoff. Nothing required to call it correctly is missing.

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. The description goes further by telling the agent where author_urn comes from (get it from get_me) and what media_urns semantically are, which compensates for the schema's confusing author_urn description ('Only messages from this author URN').

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?

Specific verb (Create) plus resource (LinkedIn multi-photo object) with the exact input (digitalmediaAsset URNs) and output (identifierUrn). It distinguishes itself from siblings by naming both the upstream (upload_media_from_url) and downstream (create_post) tools, so an agent can place it in the workflow 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?

Explicit when: 'Use after uploading two or more images with upload_media_from_url.' Explicit when-not: 'Not for one image.' It also identifies create_post as the consumer of the returned URN, covering the relevant alternatives and ordering.

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

create_postAInspect

Create or schedule a LinkedIn post, optionally with a media attachment. For a single image pass a urn:li:digitalmediaAsset:… URN; for multiple images pass a urn:li:fsd_multiPhoto:… URN from create_multi_photo. Set scheduled_at (Unix ms) to schedule; omit it to publish immediately. Publishes now or schedules (scheduled_time); counts against the daily posts quota. Show the user the full text before calling.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesPlain text to send or post.
media_urnNoOptional media URN to attach.
account_idYesReach id of the LinkedIn account to act on, from list_accounts.
visibilityNo'ANYONE' or 'CONNECTIONS_ONLY'.ANYONE
scheduled_atNoScheduled publish time in Unix milliseconds. Omit to publish now.
idempotency_keyNoOptional. A key you choose (a UUID is fine) that names this exact call. If you retry with the same key and the same arguments, the first call's result is returned and nothing is done twice on LinkedIn. Reusing a key with different arguments is refused. Keys expire after 24 hours.
allowed_commenters_scopeNo'ALL' or 'CONNECTIONS_ONLY'.ALL

Output Schema

ParametersJSON Schema
NameRequiredDescription
resource_keyNoIdentifier of the created or scheduled post

TDQS

A4.5/5.0
Behavior4/5

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

Adds real context beyond annotations: posts count against a daily quota, and the agent should show the user the full text before calling. Annotations only supply the safety profile (readOnly=false, destructive=false, openWorld=true). The idempotency behavior is left to the schema rather than restated here.

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 dense with useful detail. Slightly redundant: the schedule/omit behavior is stated twice ('Set scheduled_at … omit it to publish immediately' then 'Publishes now or schedules'), and the stray 'scheduled_time' term adds noise.

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

Completeness4/5

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

With an output schema present and annotations covering the safety profile, the description is nearly complete: it covers modes, media routing, quota, and a user-confirmation guardrail. The inconsistent 'scheduled_time' reference is the only notable gap for an agent parsing the scheduling parameter.

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% (baseline 3), but the description adds genuine value by mapping media_urn to the correct URN format per case and restating the scheduled_at scheduling semantics. Minor confusion: it later refers to 'scheduled_time', a name not present in the schema.

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+resource ('Create or schedule a LinkedIn post') and immediately delineates the two modes. Distinguishes itself from siblings like create_multi_photo (referenced for the multi-image URN) and update_scheduled_post.

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 conditions: single image → digitalmediaAsset URN, multiple images → fsd_multiPhoto URN from create_multi_photo, set scheduled_at to schedule, omit to publish now. Routes the agent to the correct sibling and states the alternative publishing modes.

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

create_webhook_endpointAInspect

Register a URL to be called when something happens on LinkedIn, so an agent or an n8n/Make workflow can react instead of polling. Returns the signing secret ONCE; deliveries carry 'Reach-Signature: t=,v1=<hex HMAC-SHA256(secret, t + '.' + body)>'. Events: message.received, connection.new, account.status_changed, quota.threshold_reached, quota.reached, or '*' for all. Omit account_ids to subscribe for every account of the user. https only. Use when the user wants to react to a reply, a new connection, a quota alert or a job event from n8n, Make or their own code; needs an https URL they control. Not for the model to call itself.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYeshttps URL that accepts a JSON POST.
eventsYesEvent types, or ['*'].
account_idsNoOptional: only these LinkedIn account ids.
descriptionNoFree-text label for your own reference.
idempotency_keyNoOptional. A key you choose (a UUID is fine) that names this exact call. If you retry with the same key and the same arguments, the first call's result is returned and nothing is done twice on LinkedIn. Reusing a key with different arguments is refused. Keys expire after 24 hours.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
urlNo
noteNo
eventsNo
secretNoSigning secret, returned once
is_activeNo
created_atNo
account_idsNo
descriptionNo
disabled_reasonNo
last_delivery_atNo
consecutive_failuresNo

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only cover the safety profile (readOnly=false, destructive=false, idempotent=false, openWorld=false). The description adds critical context they cannot: the signing secret is returned ONCE, the exact signature header format and HMAC construction, the default scoping of account_ids, and the https-only constraint. This is exactly the value-add the description should provide.

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?

Dense but front-loaded: purpose first, then the secret/signature contract, then event vocabulary, then usage conditions and the exclusion. Every clause carries information. It is one long paragraph, so a reader must parse carefully, but there is no filler or repetition.

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 an output schema present the description needn't enumerate return fields, yet it still flags the one-time secret exposure that matters most for correct client handling. Combined with the event list, scoping default, and routing guidance, an agent has everything needed to select and invoke the tool correctly against its siblings.

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 baseline would be 3, but the description adds real meaning the schema lacks: it enumerates the concrete event names (message.received, connection.new, account.status_changed, quota.threshold_reached, quota.reached, '*'), which the schema leaves as an opaque string array with no enum, and it clarifies the account_ids default (omit = all accounts). It does not restate the url or idempotency_key semantics, which the schema already covers well.

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 first sentence states a specific verb+resource ("Register a URL to be called when something happens on LinkedIn") and immediately frames the outcome (react instead of polling). It is clearly distinct from the sibling delete/update/list/test_webhook_endpoint tools, which share the resource but differ in verb.

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?

Explicit when-to-use ("Use when the user wants to react to a reply, a new connection, a quota alert or a job event from n8n, Make or their own code"), a prerequisite ("needs an https URL they control"), and an exclusion ("Not for the model to call itself"). Nothing is left to inference.

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

decline_invitationA
DestructiveIdempotent
Inspect

Decline/ignore a pending received connection request. Use to ignore a received invitation; the sender is not notified. Not for invitations the account sent, see withdraw_invitation.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYesReach id of the LinkedIn account to act on, from list_accounts.
idempotency_keyNoOptional. A key you choose (a UUID is fine) that names this exact call. If you retry with the same key and the same arguments, the first call's result is returned and nothing is done twice on LinkedIn. Reusing a key with different arguments is refused. Keys expire after 24 hours.
linkedin_id_or_urlYesThe LinkedIn member: profile URL, vanity name (the part after /in/), Sales Navigator URL, or internal member id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
declinedNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, but the description adds a meaningful behavioral fact not in the annotations: the sender is not notified. It stops short of describing reversibility or quota effects, so not a full 5.

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

Conciseness5/5

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

Three short sentences, front-loaded with the core action, then usage, then the exclusion and alternative — no filler.

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

Completeness4/5

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

An output schema exists so return values need not be explained, and the description covers action, scope, notification behavior, and the sibling alternative. Minor gap: it doesn't clarify whether the request is removed vs merely hidden from listing.

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

Parameters3/5

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

Schema coverage is 100%, so account_id, linkedin_id_or_url, and idempotency_key are already fully documented in the schema. The description adds no parameter-level detail, which is the baseline expectation at full coverage.

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+resource (decline/ignore a pending received connection request) and explicitly scopes it to received invitations, distinguishing it from accept_invitation, send_invitation, and withdraw_invitation.

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?

Explicitly says when to use it (to ignore a received invitation) and when not to (invitations the account sent), routing the agent to withdraw_invitation by name.

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

delete_accountA
DestructiveIdempotent
Inspect

Delete a LinkedIn account by account_id. Also clears invitation references before deletion. Removes the account from Reach only (LinkedIn is untouched); irreversible, requires the user's explicit confirmation. Not for disconnecting temporarily.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYesReach id of the LinkedIn account to act on, from list_accounts.
idempotency_keyNoOptional. A key you choose (a UUID is fine) that names this exact call. If you retry with the same key and the same arguments, the first call's result is returned and nothing is done twice on LinkedIn. Reusing a key with different arguments is refused. Keys expire after 24 hours.

Output Schema

ParametersJSON Schema
NameRequiredDescription
deletedNo
account_idNo

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the annotations (destructiveHint, idempotentHint, readOnlyHint=false), the description discloses real behavioral consequences: it clears invitation references before deletion, permanently removes only the Reach-side record while leaving LinkedIn untouched, and is irreversible. The confirmation requirement is also a meaningful operational constraint not captured by the structured fields.

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

Conciseness5/5

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

Three tight sentences, front-loaded with the action and scope, then the side effect, then the exclusions and safety requirement. Every sentence carries decision-relevant information and nothing is padded.

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 an output schema present, return values need not be described, and the annotations already cover safety/idempotency hints. The description supplies the remaining critical context - Reach-only scope, irreversible destruction, invitation-reference cleanup, confirmation requirement, and the temporary-disconnect exclusion - so an agent has everything needed to call it correctly.

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

Parameters3/5

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

Schema description coverage is 100%, and the schema itself thoroughly documents account_id and idempotency_key, so the baseline score is 3. The description only repeats 'by account_id' and adds no format, source, or idempotency-key guidance beyond what the schema already provides.

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 description states a specific verb and resource ('Delete a LinkedIn account') and immediately bounds it with 'Removes the account from Reach only (LinkedIn is untouched).' This scope distinction, plus the explicit 'Not for disconnecting temporarily,' lets an agent separate this from read/list siblings like list_accounts and from any temporary-disconnect behavior without opening the schema.

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

Usage Guidelines4/5

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

It gives a clear negative condition ('Not for disconnecting temporarily') and a prerequisite ('requires the user's explicit confirmation'), which tells the agent when not to call it and what must happen first. It stops short of naming a specific alternative tool, but no sibling tool fills that role, so the guidance is clear without an explicit routing target.

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

delete_conversationA
DestructiveIdempotent
Inspect

Permanently delete a LinkedIn conversation. conversation_linkedin_id is the conversation_id returned by list_conversations. Irreversible for this account; confirm with the user. To hide a thread without losing it use archive_conversation.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYesReach id of the LinkedIn account to act on, from list_accounts.
idempotency_keyNoOptional. A key you choose (a UUID is fine) that names this exact call. If you retry with the same key and the same arguments, the first call's result is returned and nothing is done twice on LinkedIn. Reusing a key with different arguments is refused. Keys expire after 24 hours.
conversation_linkedin_idYesConversation (thread) id, as returned by list_conversations.

Output Schema

ParametersJSON Schema
NameRequiredDescription
deletedNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, and openWorldHint=true. The description adds important context beyond the annotations by stating the deletion is permanent and 'Irreversible for this account,' and by advising user confirmation. It does not cover authentication or rate-limit behavior, but that is a minor gap given the annotation coverage.

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

Conciseness5/5

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

Three sentences, front-loaded with the destructive action and followed by parameter provenance, irreversibility warning, and the safer alternative. Every sentence earns its place.

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?

Given that annotations carry safety hints and an output schema exists, the description supplies the remaining decision-critical context: permanence, irreversibility, confirmation advice, and a clear sibling alternative. Nothing an agent needs in order to call this tool correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so all parameters are already documented structurally, including the detailed idempotency_key semantics. The description only reiterates that conversation_linkedin_id is returned by list_conversations, which mostly duplicates the schema rather than adding new syntax or constraints.

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 description gives a specific verb and resource: 'Permanently delete a LinkedIn conversation.' It also distinguishes this tool from its sibling archive_conversation, so an agent can identify it without opening the 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?

It explicitly names the alternative and the condition for choosing it: 'To hide a thread without losing it use archive_conversation.' It also tells the agent to confirm with the user before calling, which gives clear usage guidance.

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

delete_scheduled_postA
DestructiveIdempotent
Inspect

Delete a scheduled LinkedIn post. post_urn is the URN returned by list_scheduled_posts (e.g. urn:li:ugcPost:…). Only for posts still scheduled; irreversible, confirm with the user. A published post cannot be deleted through Reach.

ParametersJSON Schema
NameRequiredDescriptionDefault
post_urnYesURN of the scheduled post (urn:li:…), from list_scheduled_posts.
account_idYesReach id of the LinkedIn account to act on, from list_accounts.
idempotency_keyNoOptional. A key you choose (a UUID is fine) that names this exact call. If you retry with the same key and the same arguments, the first call's result is returned and nothing is done twice on LinkedIn. Reusing a key with different arguments is refused. Keys expire after 24 hours.

Output Schema

ParametersJSON Schema
NameRequiredDescription
deletedNo
post_urnNo

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, but the description adds the key operational context the annotations cannot: the action is irreversible and requires user confirmation, and the target scope is limited to still-scheduled posts. That is exactly the 'what gets destroyed / preconditions' context the rubric rewards.

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

Conciseness5/5

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

Three tightly packed sentences: identity first, then parameter provenance, then scope and safety constraints. No filler and every clause carries actionable information.

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?

For a destructive single-target delete with a full input schema, an output schema, and complete annotations, the description covers everything the agent needs: the target, its source, the exclusion of published posts, and the confirmation/irreversibility requirement.

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

Parameters3/5

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

Schema coverage is 100%, so post_urn, account_id and idempotency_key are already fully documented in the schema. The description restates post_urn's origin (list_scheduled_posts) and gives an example URN shape, which is mildly useful but largely duplicates the schema, so the baseline 3 applies.

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 (delete) and resource (scheduled LinkedIn post), and scopes it to scheduled rather than published posts, which distinguishes it from the sibling update_scheduled_post and list_scheduled_posts. An agent can tell exactly what this does without opening the 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?

Gives explicit when (posts still scheduled, URN sourced from list_scheduled_posts) and when-not (a published post cannot be deleted through Reach), plus a workflow prerequisite to confirm with the user. Nothing about routing to this tool versus its siblings is left to inference.

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

delete_webhook_endpointA
DestructiveIdempotent
Inspect

Delete a webhook endpoint and its delivery history. Irreversible (the delivery history goes too); confirm with the user. To pause deliveries use update_webhook_endpoint with is_active=false.

ParametersJSON Schema
NameRequiredDescriptionDefault
endpoint_idYesWebhook endpoint id, from list_webhook_endpoints.
idempotency_keyNoOptional. A key you choose (a UUID is fine) that names this exact call. If you retry with the same key and the same arguments, the first call's result is returned and nothing is done twice on LinkedIn. Reusing a key with different arguments is refused. Keys expire after 24 hours.

Output Schema

ParametersJSON Schema
NameRequiredDescription
deletedNo
endpoint_idNo

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered. The description still adds meaningful context beyond them: the operation is irreversible and specifically destroys the delivery history, plus it mandates user confirmation before proceeding — exactly the 'what gets destroyed' detail the rubric rewards.

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

Conciseness5/5

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

Three short clauses, front-loaded with the destructive action and its scope, then the irreversible/confirm caveat, then the alternative. Every sentence earns its place with no filler.

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?

Output schema exists so return values need no explanation, and annotations already cover the safety/idempotency profile. The description supplies the remaining critical facts — irreversibility, scope of deletion, confirmation requirement, and the pause alternative — leaving nothing an agent needs missing.

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

Parameters3/5

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

Schema description coverage is 100% and both parameters (endpoint_id, idempotency_key) are fully documented in the schema, including the idempotency retry semantics. The description adds no parameter-level meaning beyond the schema, so the baseline 3 applies.

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?

Specific verb+resource ("Delete a webhook endpoint") immediately says what happens, and it further names the secondary effect ("and its delivery history"). It also routes the agent away from destructive intent when pausing is the actual goal, distinguishing it from siblings like update_webhook_endpoint.

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?

Explicit when-to-use (removing an endpoint and its history), explicit when-not-to-use with the exact alternative ("To pause deliveries use update_webhook_endpoint with is_active=false"), and a required precondition ("confirm with the user"). Nothing is left to inference.

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

follow_memberA
Idempotent
Inspect

Follow or unfollow a LinkedIn member without connecting. Set follow=false to unfollow. Use to follow someone's posts without a connection request (no quota); to connect use send_invitation.

ParametersJSON Schema
NameRequiredDescriptionDefault
followNoTrue to follow, False to unfollow.
account_idYesReach id of the LinkedIn account to act on, from list_accounts.
idempotency_keyNoOptional. A key you choose (a UUID is fine) that names this exact call. If you retry with the same key and the same arguments, the first call's result is returned and nothing is done twice on LinkedIn. Reusing a key with different arguments is refused. Keys expire after 24 hours.
linkedin_id_or_urlYesThe LinkedIn member: profile URL, vanity name (the part after /in/), Sales Navigator URL, or internal member id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
followingNoCurrent follow state

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare idempotentHint, destructiveHint=false, and openWorldHint, so the safety profile is covered. The description adds useful behavioral context that isn't in the annotations: no connection is created and no quota is consumed, plus the unfollow switch. It stops short of describing exactly what state changes on unfollow, so not a full 5.

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

Conciseness5/5

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

Three short sentences, front-loaded with the core action and each sentence earning its place by adding the unfollow toggle, the usage context, and the alternative. No filler.

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

Completeness4/5

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

With an output schema present, return values need not be explained, and the annotations carry the safety profile. The description covers purpose, the unfollow option, quota implications, and the connect alternative. Only minor omission is the idempotency/retry nuance, which the schema already covers.

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

Parameters3/5

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

Schema description coverage is 100%, so all four parameters (including follow, idempotency_key, account_id, linkedin_id_or_url) are already documented. The description restates the follow=false behavior that the schema already explains, adding no new parameter semantics. Baseline 3 is correct.

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 (follow/unfollow) and resource (LinkedIn member), and explicitly distinguishes itself from the connect flow by naming send_invitation. An agent can identify the tool without opening the 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?

Gives explicit when-to-use ('to follow someone's posts without a connection request') and names the alternative sibling with the selecting condition ('to connect use send_invitation'). It also notes the 'no quota' advantage, leaving nothing to inference.

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

get_account_quotasA
Read-onlyIdempotent
Inspect

Get the quotas configuration and usage counters for a LinkedIn account. Use before a batch to know what is left today; use update_account_quotas to change limits or the activity window.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYesReach id of the LinkedIn account to act on, from list_accounts.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
windowNoThe activity window jobs run in by default.
timezoneNo
window_endNo
window_daysNo
window_startNo
daily_posts_confNo
daily_posts_usedNo
daily_visits_confNo
daily_visits_usedNo
daily_comments_confNo
daily_comments_usedNo
daily_messages_confNo
daily_messages_usedNo
daily_reactions_confNo
daily_reactions_usedNo
daily_invitations_confNo
daily_invitations_usedNo
daily_imports_salesnav_confNo
daily_imports_salesnav_usedNo
daily_imports_standard_confNo
daily_imports_standard_usedNo
daily_imports_recruiter_confNo
daily_imports_recruiter_usedNo

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds minor domain context (a daily quota window, an activity window) but says nothing about rate limits, auth needs, or read behavior. With annotations doing the heavy lifting, a 3 is appropriate.

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

Conciseness5/5

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

Two sentences with zero waste; the purpose is front-loaded and the workflow/alternative guidance follows immediately.

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?

Return format is covered by the existing output schema and safety by annotations, so the description only needs purpose and routing, both of which are complete for this single-parameter read tool.

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

Parameters3/5

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

Schema description coverage is 100% and the single account_id parameter is fully documented (including its source, list_accounts). The description adds no syntax or format detail beyond the schema, so the baseline 3 holds.

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+resource ('Get the quotas configuration and usage counters') scoped to a LinkedIn account, and names the sibling it complements (update_account_quotas). An agent can distinguish it from the update counterpart without opening either 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?

Gives explicit when-to-use ('before a batch to know what is left today') and routes the write case to the named alternative ('use update_account_quotas to change limits or the activity window'). Nothing is left to inference.

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

get_account_request_logsA
Read-onlyIdempotent
Inspect

Get request logs for a LinkedIn account with optional filtering by request_type and pagination using limit/offset. Use to debug a failing account (each LinkedIn call with its status); for totals use get_account_request_logs_stats.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of rows to return.
offsetNoNumber of rows to skip.
account_idYesReach id of the LinkedIn account to act on, from list_accounts.
request_typeNoOnly rows of this request type (for example send_message, list_conversations, connect).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultNoRequest log rows, newest first.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, so the safety profile is covered. The description adds real context beyond that: each row is a single LinkedIn call with its status, and results are paginated via limit/offset. It does not state defaults or caps for limit, which would be the remaining useful detail.

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

Conciseness5/5

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

Two sentences, no filler, and the core action is front-loaded ahead of the alternative-tool pointer. Every clause earns its place.

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?

For a read-only, idempotent log-retrieval tool with full parameter coverage, an output schema, and declared annotations, the description supplies everything an agent needs: purpose, filter, pagination, and the totals alternative.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents account_id, request_type, limit, and offset with examples. The description only restates the same filter/pagination concepts already present in the schema, adding no syntax or default values. Baseline 3 applies when the schema does the heavy lifting.

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 and resource (get request logs for a LinkedIn account) plus the scope modifiers it supports. It explicitly distinguishes itself from the sibling get_account_request_logs_stats, which handles totals, so an agent can choose between them without opening either 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?

Gives a concrete use case (debugging a failing account, seeing each LinkedIn call with its status) and names the alternative tool for totals. The routing condition between this tool and get_account_request_logs_stats is explicit.

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

get_account_request_logs_statsA
Read-onlyIdempotent
Inspect

Get aggregated request-log statistics for a LinkedIn account, grouped by day, week, or month, with optional action and date-range filters. Use for the weekly review or to size an account's activity; for individual calls use get_account_request_logs.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNoEnd of the period, ISO 8601 (default: now).
group_byNoBucket size for the statistics: day, week or month.
account_idYesReach id of the LinkedIn account to act on, from list_accounts.
start_dateNoStart of the period, ISO 8601 (default: 30 days ago).
request_typeNoOnly rows of this request type (for example send_message, list_conversations, connect).

Output Schema

ParametersJSON Schema
NameRequiredDescription
bucketsNo
end_dateNo
group_byNo
start_dateNo
request_typeNo
available_actionsNo

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safe-read profile is fully covered by structured data. The description adds only that results are bucketed aggregates rather than raw rows, which is modest added context; it does not discuss limits, result caps, or ordering. With annotations carrying the safety burden, a 3 is appropriate.

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

Conciseness5/5

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

Two sentences, zero filler; the aggregation scope is front-loaded and the routing to the sibling tool comes second. Every sentence earns its place.

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?

An output schema exists, so return values need not be described, and the schema plus annotations fully cover inputs and safety. The description supplies the one thing structured fields cannot: the aggregation-vs-raw distinction and when to pick this tool.

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

Parameters3/5

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

Schema description coverage is 100%, so all five parameters (account_id, start/end date, group_by, request_type) are already documented in the schema with defaults and an enum. The description's mention of 'action and date-range filters' and bucket sizes only restates that, adding no syntax or format detail beyond the schema.

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+resource ('Get aggregated request-log statistics'), names the aggregation dimension (day/week/month) and filters, and explicitly distinguishes itself from the sibling get_account_request_logs. An agent can separate this from the raw-log tool without opening either 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?

Gives concrete use cases ('weekly review', 'size an account's activity') and names the alternative ('for individual calls use get_account_request_logs') with the condition that selects it. This is the explicit when-to-use/when-not guidance the dimension asks for.

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

get_invitation_statusA
Read-onlyIdempotent
Inspect

Get the connection and invitation status between the connected account and a LinkedIn member. Returns is_connection, invitation_type (SENT/PENDING/WITHDRAWN/REFUSED). Use before send_invitation or send_message to know the relationship (connected, invitation pending, refused). Read-only, cheap.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYesReach id of the LinkedIn account to act on, from list_accounts.
linkedin_id_or_urlYesThe LinkedIn member: profile URL, vanity name (the part after /in/), Sales Navigator URL, or internal member id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
degreeNoConnection distance (1, 2 or 3).
invitation_idNoInvitation URN, if any.
is_connectionNoTrue if the member is a 1st-degree connection.
invitation_typeNo'SENT' (pending sent), 'PENDING' (received, awaiting acceptance), 'WITHDRAWN', or 'REFUSED'.
invitation_secretNoShared secret, required to accept a received invitation.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds value on top by enumerating the returned status values (is_connection, SENT/PENDING/WITHDRAWN/REFUSED) and flagging the call as cheap, which helps an agent decide to probe it freely.

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

Conciseness5/5

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

Three short sentences, front-loaded with purpose, then return shape, then usage. No filler, and the most decision-relevant guidance (when to call) is present without padding.

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?

An output schema exists, so return-value documentation is not required in the description; the brief enumeration of status values is a bonus. For a two-parameter read tool with full annotation coverage, nothing an agent needs to select or invoke it correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100%: account_id and linkedin_id_or_url are both documented in the schema, including accepted URL/vanity/id formats. The description adds no parameter detail beyond that, so the baseline 3 applies.

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+resource (get invitation status / connection status) and scopes it precisely: the relationship between the connected account and a given LinkedIn member. It is immediately distinguishable from siblings like list_sent_invitations or list_received_invitations, which enumerate rather than resolve one member's state.

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?

Explicitly names the decision point: 'Use before send_invitation or send_message to know the relationship (connected, invitation pending, refused).' It names two concrete alternative tools and the condition that selects this one, leaving nothing to inference.

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

get_jobA
Read-onlyIdempotent
Inspect

One job with its status, totals, next execution time and every item (scheduled time, result or error). Use to report progress or to see why an item failed; for an overview of all jobs use list_jobs.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYesJob id, as returned by create_job or list_jobs.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
itemsNo
labelNo
actionNo
sourceNo
statusNo
totalsNo
windowNo
resume_atNo
account_idNo
created_atNo
started_atNo
completed_atNo
next_item_atNo
pause_reasonNoquota_reached | account_disconnected | billing | manual

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds real value beyond that by describing the returned content shape (per-item scheduled time, result or error) and the diagnostic intent of the call. It does not mention pagination or behavior for a non-existent job_id, which keeps it short of a 5.

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

Conciseness5/5

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

Two sentences with zero waste: the first front-loads what you get, the second routes the agent to the right tool for the contrasting case. Every clause earns its place.

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?

For a single-parameter read tool with full annotation coverage and an output schema that carries the return shape, the description is complete enough to call correctly. It briefly reinforces the return content without needing to restate the output schema.

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

Parameters3/5

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

Schema coverage is 100% and the single job_id parameter is already documented in the schema as coming from create_job or list_jobs. The description adds no format, range, or resolution detail beyond that, so the baseline 3 applies since the schema does the heavy lifting.

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+resource ('One job') and enumerates exactly what it returns: status, totals, next execution time, and every item with scheduled time, result or error. It explicitly distinguishes itself from the sibling list_jobs, so an agent can select it without opening either 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?

Gives explicit when-to-use conditions ('to report progress or to see why an item failed') and names the alternative for the contrasting case ('for an overview of all jobs use list_jobs'). Nothing is left to inference.

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

get_meA
Read-onlyIdempotent
Inspect

Call LinkedIn Voyager /me for an account through the stored proxy/cookies and return the normalized profile (same fields as Kanbox uses from /me). Use to confirm which LinkedIn profile an account is (name, headline, premium); one LinkedIn call. Not needed before every action.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYesReach id of the LinkedIn account to act on, from list_accounts.

Output Schema

ParametersJSON Schema
NameRequiredDescription
pictureNoProfile picture URL derived from VectorImage artifacts.
headlineNo
lastnameNo
firstnameNo
is_premiumNo
linkedin_idNoMiniProfile id (entityUrn suffix after fs_miniProfile:).
linkedin_plain_idNoNumeric member id from objectUrn.
linkedin_public_idNoPublic / vanity identifier.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld). The description adds real value beyond them: it discloses the auth mechanism (stored proxy/cookies) and the cost/rate signal ('one LinkedIn call'). It stops short of describing failure modes or error behavior, so not a 5.

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?

Three short sentences, front-loaded with the core action and followed by usage and cost notes. Slightly jargony parenthetical ('same fields as Kanbox uses from /me') but no filler.

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?

An output schema exists so return values needn't be spelled out, and annotations carry the safety profile. The description fully covers what an agent needs: purpose, when to call, auth path, and cost.

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

Parameters3/5

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

Schema coverage is 100% and the single account_id param is fully documented in the schema. The description refers to 'an account' generically without adding format or sourcing detail beyond what the schema's 'from list_accounts' already provides, so baseline 3 applies.

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 and resource (call Voyager /me for an account) and names the concrete return (normalized profile with name, headline, premium). This distinguishes it from siblings like scrape_profile, list_accounts, and get_account_quotas without needing to open 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?

Explicitly says when to use it ('Use to confirm which LinkedIn profile an account is') and when not ('Not needed before every action'), and notes it costs one LinkedIn call. The alternative behavior is clearly scoped.

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

like_postA
Idempotent
Inspect

Like a LinkedIn post on behalf of the connected account. Pass the post URL, slug, or URN. Use for a light touch on a post; idempotent on LinkedIn's side. Counts against the daily reactions quota.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYesReach id of the LinkedIn account to act on, from list_accounts.
idempotency_keyNoOptional. A key you choose (a UUID is fine) that names this exact call. If you retry with the same key and the same arguments, the first call's result is returned and nothing is done twice on LinkedIn. Reusing a key with different arguments is refused. Keys expire after 24 hours.
post_url_or_urnYesLinkedIn post URL, slug, or urn:li:activity:….

Output Schema

ParametersJSON Schema
NameRequiredDescription
likedNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare non-read-only, open-world, idempotent, non-destructive behavior, and the description reinforces idempotency ("idempotent on LinkedIn's side") while adding genuinely new context: it consumes the daily reactions quota and acts on behalf of the connected account. Quota consumption is real behavioral information not present in the annotations.

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?

Four short sentences, front-loaded with the action and identity, then input forms, then operational caveats. No filler, though the quota and idempotency notes could be tightened into one sentence.

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

Completeness4/5

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

An output schema exists, so return values need no explanation. The description covers identity, inputs, idempotency, and quota cost; only the already-liked edge case and error behavior are unaddressed, which is minor for this operation.

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

Parameters3/5

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

Schema description coverage is 100%, so each parameter is already documented in the schema; the description's restatement of accepted post identifiers (URL, slug, URN) adds no syntax or format detail beyond it. Baseline 3 applies.

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 (Like) on a specific resource (a LinkedIn post) with the acting identity (connected account). This cleanly separates it from comment_post and react_message, which operate on different resources/surfaces.

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

Usage Guidelines3/5

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

"Use for a light touch on a post" gives a hint of intent, and the description names accepted input forms, but it never states when to prefer it over comment_post or react_message, nor any exclusion conditions. Usage is implied rather than spelled out.

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

list_accountsA
Read-onlyIdempotent
Inspect

Return LinkedIn accounts accessible with the provided API key. If the key is restricted, only allowed account IDs are returned. Use first in every session to get the account_id the other tools need; ask which account when several are listed.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultNoConnected LinkedIn accounts visible to this key.

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and openWorldHint=false, so the safety profile is covered. The description adds genuinely new behavioral context: restricted API keys yield only permitted account IDs, and the returned account_id is a prerequisite for other tools. It does not describe the return shape, but the output schema exists to cover that.

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

Conciseness5/5

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

Three sentences, each doing distinct work: what it returns, the credential caveat, and the session-ordering instruction. Front-loaded with the outcome and free of filler.

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?

For a zero-parameter discovery tool with an output schema and full annotation coverage, the description supplies everything an agent needs: purpose, ordering in a session, and how to behave when multiple accounts appear. No meaningful gap remains.

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?

The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The description correctly notes that the API key is implicit credential context rather than an input field.

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 and resource ('Return LinkedIn accounts accessible with the provided API key') and scopes it by credential, which cleanly separates it from siblings like get_me or list_connections. An agent can tell what this returns without opening the 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?

Gives explicit sequencing ('Use first in every session to get the account_id the other tools need') and a branching instruction for the multi-account case ('ask which account when several are listed'). This is when-to-use guidance plus an ambiguity-resolution rule, which is more than most definitions provide.

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

list_connectionsA
Read-onlyIdempotent
Inspect

List LinkedIn 1st-degree connections for an account (Voyager dash connections), paged with start/count — same payload as GET /api/linkedin/{account_id}/connections. Use to walk the account's own 1st-degree network; for pending invitations use list_sent_invitations or list_received_invitations; for search use scrape_search.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoPage size.
startNoPagination offset, 0-based.
account_idYesReach id of the LinkedIn account to act on, from list_accounts.

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNoRequested page size.
itemsNo
startNoOffset used for this request.
totalNoTotal connections reported by LinkedIn ``paging.total``.
next_startNoIf set, use as the ``start`` query param for the next page (Kanbox-style paging).

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds genuinely new behavioral context: pagination via start/count and payload parity with the raw Voyager endpoint. It does not discuss rate limits or quota impact, which keeps it from a 5.

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

Conciseness5/5

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

Three tight clauses: what it lists, how it pages, and where to go instead. The routing information is front-loaded and no sentence is redundant.

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?

An output schema exists so return values need not be explained, annotations carry the safety profile, and the schema fully documents parameters. The description completes the picture by clarifying scope and pointing to sibling tools for adjacent cases.

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

Parameters3/5

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

Schema description coverage is 100% – start, count and account_id are each documented in the schema. The description only restates that results are paged with start/count, adding no format, bounds, or default detail beyond the schema. Baseline 3 applies.

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+resource with scope: 'List LinkedIn 1st-degree connections for an account', and even names the underlying payload parity with GET /api/linkedin/{account_id}/connections. It clearly distinguishes itself from the invitations and search siblings by naming them.

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?

Explicitly says when to use it ('walk the account's own 1st-degree network') and routes to alternatives by condition: pending invitations → list_sent_invitations/list_received_invitations, search → scrape_search. Nothing is left to inference.

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

list_conversation_messagesA
Read-onlyIdempotent
Inspect

List messages in a LinkedIn conversation via Voyager /messaging/conversations/{id}/events (Kanbox get_conversation_messages), with optional created_before paging — same as GET /api/linkedin/{account_id}/conversations/{conversation_linkedin_id}/messages. Use after list_conversations to read a thread before replying; the conversation_linkedin_id comes from list_conversations.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYesReach id of the LinkedIn account to act on, from list_accounts.
created_beforeNoOnly messages created before this Unix timestamp in milliseconds, to page back in time.
conversation_linkedin_idYesConversation (thread) id, as returned by list_conversations.

Output Schema

ParametersJSON Schema
NameRequiredDescription
has_moreNoTrue when LinkedIn likely has older events (page size 20).
messagesNo
total_countNoNumber of messages in this response.
next_created_beforeNoPass as ``created_before`` to fetch the next (older) page.
conversation_linkedin_idNoKanbox ``Conversation.linkedin_id`` / conversation key.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered. The description adds value by disclosing the paging mechanism (created_before walks back in time) and the underlying API path. It does not discuss rate limits or result volume, but the existing output schema covers the return shape.

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?

The core purpose is front-loaded in the first clause, followed by routing and prerequisite information. The sentence is dense with backticked identifiers and aliases, costing some readability, but no sentence is filler.

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

Completeness4/5

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

With an output schema present and rich annotations, the description need not explain return values or safety, and it correctly focuses on the workflow prerequisite (list_conversations first). The remaining gap is the unaddressed relationship to salesnav_list_thread_messages, which an agent choosing between the two would want resolved.

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

Parameters3/5

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

Schema description coverage is 100%, so all three parameters (account_id, created_before, conversation_linkedin_id) are already documented with sources and semantics. The description reinforces paging direction and id provenance, matching the schema rather than extending it, so the baseline 3 applies.

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

Purpose4/5

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

The description states a specific verb and resource ('List messages in a LinkedIn conversation') and even names the underlying Voyager endpoint and the Kanbox equivalent, so the operation is unambiguous. It stops short of distinguishing itself from the similarly named sibling salesnav_list_thread_messages, leaving a small ambiguity an agent must resolve elsewhere.

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

Usage Guidelines4/5

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

It gives a clear usage context — 'Use after list_conversations to read a thread before replying' — and explains where the required conversation_linkedin_id originates. There is no explicit exclusion or comparison against the salesnav thread-message alternative, so it is clear context rather than full when/when-not guidance.

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

list_conversationsA
Read-onlyIdempotent
Inspect

List LinkedIn messenger conversations (Voyager Messaging GraphQL), with optional archived, unread, starred filters and next_cursor paging — same as GET /api/linkedin/{account_id}/conversations. Each item returns conversation_id (the thread id — use this as conversation_linkedin_id when fetching messages or replying) and recipient_linkedin_id (the peer's fsd_profile id — use this as recipient_linkedin_id when sending a new message). Use for the classic LinkedIn inbox (this is the one that matters in 95% of cases); Sales Navigator threads are separate, see salesnav_list_messaging_threads.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoPage size.
unreadNoOnly conversations with unread messages.
starredNoOnly starred conversations.
archivedNoOnly archived conversations.
account_idYesReach id of the LinkedIn account to act on, from list_accounts.
next_cursorNoCursor returned by the previous page; omit for the first page.

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNoRequested page size (LinkedIn typically caps at 25).
itemsNo
unreadNoMatches query: unread filter (search query with ``read:false``).
starredNoMatches query: starred folder or client filter when combined.
archivedNoMatches query: archived folder (``category:ARCHIVE``) when not unread.
next_cursorNoPass as ``next_cursor`` for the following page when present.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, openWorld, and non-destructive, so the safety profile is covered. The description adds real context beyond that: it identifies the underlying endpoint and explains what each returned item's IDs are for (conversation_id as conversation_linkedin_id for messages/replies, recipient_linkedin_id for sends). It doesn't discuss rate limits or pagination edge cases, so not a 5.

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 purpose, then routing guidance, then return-value semantics; every sentence carries information. The parenthetical endpoint reference is slightly dense but not wasteful.

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?

For a filtered list tool with full schema coverage, an output schema, and read-only annotations, the description covers purpose, routing to the sibling, and the meaning of returned IDs. Nothing an agent needs to select or call it correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so count, unread, starred, archived, account_id, and next_cursor are all documented in the schema; the description only restates the filters and paging at a high level. Baseline 3 is appropriate, though the downstream ID semantics add minor value.

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+resource ('List LinkedIn messenger conversations'), scopes it to the Voyager Messaging GraphQL endpoint, and explicitly distinguishes classic inbox from Sales Navigator threads by naming the sibling salesnav_list_messaging_threads. An agent can tell it apart without opening schemas.

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 an explicit routing rule: 'Use for the classic LinkedIn inbox (this is the one that matters in 95% of cases); Sales Navigator threads are separate.' The when/when-not and the alternative are both named.

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

list_jobsA
Read-onlyIdempotent
Inspect

Jobs of this user, newest first, without their items. Filter by account or status (scheduled, running, paused, completed, cancelled). Use to find running or paused jobs before creating a new one on the same account; details and items are in get_job.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of jobs; default 50.
statusNoOnly jobs in this status.
account_idNoReach id of the LinkedIn account to act on, from list_accounts.

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNo
itemsNoJobs, newest first.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and non-destructive, so safety is covered. The description adds value beyond that with ordering behavior, the fact that items are excluded from results, and the set of filterable statuses, though it says nothing about pagination or default page size behavior.

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

Conciseness5/5

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

Two tight sentences, front-loaded with scope and ordering, then the usage condition. Every clause earns its place with no redundancy.

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?

An output schema exists, so return values need not be explained, and the description still flags that items are omitted. Combined with full schema coverage and annotations, an agent has everything needed to call it correctly.

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

Parameters3/5

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

Schema coverage is 100% and each parameter is documented in the schema itself (limit default, status enum, account_id provenance). The description restates the filterable dimensions but adds no syntax or format detail beyond what the schema provides, so baseline 3 applies.

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+resource (list jobs), scopes it to this user, and specifies ordering (newest first) and payload shape (without items). It explicitly distinguishes itself from the sibling get_job by noting details and items live there.

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 an explicit when-to-use: 'find running or paused jobs before creating a new one on the same account,' which ties directly to create_job. It also names the alternative (get_job) for a deeper view, so the routing decision is unambiguous.

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

list_received_invitationsA
Read-onlyIdempotent
Inspect

List pending connection invitations received by the account (with invitation_secret to accept them). Use to triage invitations waiting for the account (then accept_invitation or decline_invitation); for those the account sent use list_sent_invitations.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoPage size (max 100).
startNoPagination offset, 0-based.
account_idYesReach id of the LinkedIn account to act on, from list_accounts.

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNo
startNo
totalNo
invitationsNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered. The description adds non-obvious behavioral context: results carry an invitation_secret that is the prerequisite for accepting, which the agent could not infer from annotations alone. It stops short of describing pagination or result shape, so not a 5.

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

Conciseness5/5

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

Two compact sentences with zero filler; the distinguish-from-sibling clause is front-loaded in the second sentence immediately after the purpose. Every clause earns its place.

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?

An output schema exists, so return values needn't be explained, yet the description still surfaces the one output field that drives a downstream action (invitation_secret). Purpose, routing, and the accept/decline follow-up path are all present for this simple list tool.

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

Parameters3/5

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

Schema description coverage is 100% – count, start and account_id all carry their own descriptions including defaults and the max. The description adds no parameter syntax or format meaning beyond that; the only detail it offers (invitation_secret) is a return value, not an input. Baseline 3 applies.

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 (List) and resource (pending connection invitations received by the account), plus a distinguishing scope detail ('received'). It explicitly separates itself from list_sent_invitations, so an agent can route correctly without opening either 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?

Gives a concrete when-to-use ('triage invitations waiting for the account'), names the downstream tools (accept_invitation, decline_invitation) in the right order, and names the sibling to use for the opposite case (list_sent_invitations). This is explicit when/when-not/alternatives guidance.

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

list_scheduled_postsA
Read-onlyIdempotent
Inspect

List scheduled LinkedIn posts for an account, paged. Returns post URNs, text content, and scheduled publish times. Use to see what is queued to publish; published posts are not listed here, use list_user_posts for those.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoPage size.
startNoPagination offset, 0-based.
account_idYesReach id of the LinkedIn account to act on, from list_accounts.

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNo
postsNo
startNo
totalNoTotal number of scheduled posts.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint=false, openWorldHint). The description adds useful behavioral context beyond that: it discloses the paged nature and the returned fields (URNs, text, scheduled publish times), and the scoping fact that only queued posts appear. It does not mention auth needs or rate limits, so not a full 5.

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

Conciseness5/5

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

Three tight sentences, front-loaded with the purpose, followed by return contents and then the routing to the alternative tool. No filler.

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?

Output schema exists, so return values need not be restated, yet the description still summarizes them. With annotations carrying safety and the schema carrying parameters, everything an agent needs to call this correctly is present.

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

Parameters3/5

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

Schema description coverage is 100%, so count, start, and account_id are already documented in the schema. The description only adds 'paged' generically without elaborating on count/start semantics, so it does not meaningfully exceed the schema baseline.

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 (List) and resource (scheduled LinkedIn posts for an account) with scope, and explicitly distinguishes itself from the sibling list_user_posts. An agent can separate it from list_user_posts without opening either 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?

Explicitly states when to use it ('to see what is queued to publish'), when not (published posts are not listed here), and names the alternative (list_user_posts) for the excluded case. Nothing is left to inference.

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

list_sent_invitationsA
Read-onlyIdempotent
Inspect

List pending connection invitations sent by the account that have not yet been accepted. Use to find invitations the account sent that are still pending (then withdraw_invitation if stale); for received ones use list_received_invitations.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoPage size (max 100).
startNoPagination offset, 0-based.
account_idYesReach id of the LinkedIn account to act on, from list_accounts.

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNo
startNo
totalNo
invitationsNo

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is fully covered. The description adds useful semantic scope (only pending, non-accepted invitations), but says nothing about pagination behavior, result volume, or the account-connection prerequisite that annotations don't cover. With annotations carrying the safety burden, this is adequate but not rich.

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

Conciseness5/5

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

Two tight sentences with zero waste. The purpose statement is front-loaded and the routing/alternative information follows immediately, so the most decision-relevant content appears first.

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

Completeness4/5

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

An output schema exists, so return values need not be described, and annotations cover the safety profile. The description is complete for tool selection, though it omits the pagination mechanics and the requirement that account_id come from list_accounts, which the schema covers instead.

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

Parameters3/5

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

Schema description coverage is 100% (count page size, 0-based start offset, account_id sourcing from list_accounts), so the schema fully documents all three parameters. The description adds no parameter-level guidance beyond the implied 'sent, pending' filter, which is the correct baseline when the schema does the heavy lifting.

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 and resource ('List pending connection invitations sent by the account') and narrows scope precisely to invitations 'that have not yet been accepted.' It also distinguishes itself from the sibling list_received_invitations by name, so an agent can route without opening either 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?

Explicitly states when to use it ('find invitations the account sent that are still pending'), names the follow-up action when data is stale ('then withdraw_invitation if stale'), and names the alternative for the opposite case ('for received ones use list_received_invitations'). Nothing is left to inference.

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

list_user_postsA
Read-onlyIdempotent
Inspect

Get recent posts published by a LinkedIn member (via profileUpdatesV2). Paginate with start/count. Use to read what a member published recently (their content, not who engaged); to get likers and commenters of a post use scrape_post. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoNumber of posts (max 50).
startNoPagination offset.
account_idYesReach id of the LinkedIn account to act on, from list_accounts.
linkedin_id_or_urlYesLinkedIn member ID, vanity name, or profile URL.

Output Schema

ParametersJSON Schema
NameRequiredDescription
postsNo
total_postsNo

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered and the trailing 'Read-only' adds nothing. The description does add useful behavior: pagination via start/count and the underlying endpoint. No mention of result caps beyond the schema or rate limits.

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 purpose, then pagination mechanics, then the sibling disambiguation. Three tight sentences with almost no waste, though the trailing 'Read-only.' duplicates the readOnlyHint annotation and could be dropped.

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

Completeness4/5

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

For a paginated read tool with an output schema (so return values need no explanation) and full annotation coverage, the description supplies purpose, pagination, and alternative routing. Only minor gaps remain around result limits and the self-profile case.

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

Parameters3/5

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

Schema description coverage is 100% (count max 50, start offset, account_id origin, linkedin_id_or_url formats), so the schema carries the parameter burden. The description only hints at pagination with 'Paginate with start/count,' adding no syntax or constraint detail beyond the schema; baseline 3 applies.

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 and resource (recent posts published by a LinkedIn member), including the underlying source profileUpdatesV2, and explicitly distinguishes the scope from engagement data. An agent can separate it from scrape_post and scrape_my_posts 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 Guidelines4/5

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

Explicitly names the alternative for a different need: 'to get likers and commenters of a post use scrape_post,' which is a clear when-not statement. It does not address the closely related sibling scrape_my_posts (same data for the authenticated user), so routing is clear but not exhaustive.

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

list_webhook_endpointsA
Read-onlyIdempotent
Inspect

List the webhooks registered for this user: the URLs Reach calls when a conversation gets a new message (message.received), the account gains a 1st-degree connection (connection.new), an account changes connection state (account.status_changed) or a daily quota is close to or at its limit (quota.threshold_reached, quota.reached). Read-only. Use to see where Reach already posts events and which events; also returns the event catalogue.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
endpointsNo
event_typesNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the 'Read-only' sentence largely repeats structured data. However, the description adds genuine behavioral value by enumerating the event types the endpoints are registered for and noting that the call 'also returns the event catalogue', which is not derivable from annotations.

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 scope, then supports it with the event list and the catalogue note. The middle sentence is event-dense and slightly long, but every clause adds routing or return-value information rather than filler.

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

Completeness4/5

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

With an output schema present and rich annotations, the description need not explain return formatting, and the 'event catalogue' note usefully previews content. It is complete for a no-argument list tool, with only minor room to mention relationship to sibling read tools.

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?

The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline for a parameterless tool is 4. The description correctly implies no filtering or argument selection is required.

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 and resource ('List the webhooks registered for this user') and immediately scopes it by enumerating the exact event types that flow through those endpoints. This is clearly distinguishable from create/delete/update/test_webhook_endpoint siblings 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 Guidelines4/5

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

Gives an explicit use case ('Use to see where Reach already posts events and which events'), which tells the agent when this read tool is appropriate. It does not name an alternative tool or state when-not to use it, so it falls short of full routing guidance.

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

pause_jobA
Idempotent
Inspect

Pause a job: nothing more runs until resume_job is called. Reach also pauses a job by itself when a quota is reached or the account disconnects, and resumes those on its own. Use to hold a job the user is unsure about; resume_job re-plans it. Reach pauses on quota or disconnection by itself.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYesJob id, as returned by create_job or list_jobs.
idempotency_keyNoOptional. A key you choose (a UUID is fine) that names this exact call. If you retry with the same key and the same arguments, the first call's result is returned and nothing is done twice on LinkedIn. Reusing a key with different arguments is refused. Keys expire after 24 hours.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
itemsNo
labelNo
actionNo
sourceNo
statusNo
totalsNo
windowNo
resume_atNo
account_idNo
created_atNo
started_atNo
completed_atNo
next_item_atNo
pause_reasonNoquota_reached | account_disconnected | billing | manual

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare the mutation and idempotency profile, and the description adds real behavioral context beyond them: paused jobs stay stopped until resumed, resume re-plans the job, and Reach auto-pauses/resumes on quota or disconnection. This is meaningful disclosure of side effects, though it does not address auth or what data is retained.

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

Conciseness3/5

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

The opening sentence is well front-loaded, but the auto-pause behavior is stated twice ('Reach also pauses a job by itself when a quota is reached or the account disconnects' and 'Reach pauses on quota or disconnection by itself'), which is redundant padding in an otherwise short description.

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

Completeness4/5

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

An output schema exists, so return values need not be explained, and annotations cover the safety/idempotency profile. The description supplies usage intent and lifecycle behavior, leaving only minor gaps such as permissions needed to pause.

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

Parameters3/5

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

Schema coverage is 100%, with job_id and idempotency_key fully documented in the schema (including retry/expiry semantics). The description adds nothing new about parameters, so the baseline 3 applies.

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?

Names a specific verb+resource (pause a job) and immediately states the effect: 'nothing more runs until resume_job is called.' It also distinguishes itself from the sibling resume_job, so an agent can tell the two apart without opening either schema.

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

Usage Guidelines4/5

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

Gives a concrete use case ('hold a job the user is unsure about') and points to the counterpart tool resume_job. It stops short of explicit when-not-to-use guidance or prerequisites, but the context is clear enough to select the tool.

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

profile_viewersA
Read-onlyIdempotent
Inspect

Get the list of members who recently viewed the account's profile (requires LinkedIn Premium). Use for the 'who viewed my profile' list (needs LinkedIn Premium; empty or an error otherwise). Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYesReach id of the LinkedIn account to act on, from list_accounts.

Output Schema

ParametersJSON Schema
NameRequiredDescription
totalNo
viewersNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds genuinely new behavioral context beyond the structured fields: the LinkedIn Premium auth prerequisite and the empty/error outcome when the prerequisite is unmet.

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

Conciseness3/5

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

The purpose is front-loaded and the description is short, but the LinkedIn Premium precondition is stated twice ('requires LinkedIn Premium' and 'needs LinkedIn Premium'), which is redundant filler in a two-sentence definition.

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

Completeness4/5

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

An output schema exists so return values need not be described, and the description still covers purpose, precondition, and failure mode. It is close to complete for a single-parameter read tool, with only sibling routing left implicit.

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

Parameters3/5

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

Only one parameter and schema coverage is 100%, with the schema documenting account_id as a reach id from list_accounts. The description adds no additional parameter meaning, so the baseline 3 applies.

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 (Get), a specific resource (list of members who recently viewed the account's profile), and frames it against the recognizable 'who viewed my profile' concept. An agent can immediately distinguish it from scrape_profile or visit_profile siblings.

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

Usage Guidelines4/5

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

Gives clear context ('Use for the "who viewed my profile" list') and states the gating condition (requires LinkedIn Premium) plus the failure behavior otherwise. However, it never names an alternative tool or an explicit when-not scenario against siblings, leaving routing to inference.

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

reach_playbooksA
Read-onlyIdempotent
Inspect

START HERE. Return the catalogue of ready-made LinkedIn playbooks — what this server can actually accomplish, as named workflows rather than raw endpoints. Each entry carries its tool sequence, its prerequisites, and the full instructions to run it. Call this first when the user asks what you can do with their LinkedIn account, or when a request is vague. Pass playbook_id to get one playbook's instructions and then follow them. Use first for a vague request or 'what can you do'; not needed when the user names a precise action.

ParametersJSON Schema
NameRequiredDescriptionDefault
playbook_idNoId of one playbook from the catalogue, to get its full instructions.
include_instructionsNoAlso return the full instruction text of every playbook (longer output).

Output Schema

ParametersJSON Schema
NameRequiredDescription
playbookNo
playbooksNo
how_to_useNo

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and non-open-world, so the safety profile is covered. The description adds real behavioral context beyond that: entries contain tool sequences, prerequisites and full instructions, and playbook_id narrows the response to one playbook. It does not discuss pagination or catalogue size, but for a static read-only catalogue that is minor.

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 'START HERE' and tightly organized, but the when-to-use guidance is stated twice ('Call this first when the user asks what you can do... or when a request is vague' then 'Use first for a vague request or what can you do'). One of those sentences could be dropped without loss.

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?

An output schema exists, so return structure need not be explained, and the description covers everything else an agent needs: that this is a discovery entry point, what each entry contains, how to drill into one, and when to skip it entirely.

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 description coverage is 100%, so the baseline is 3. The description goes slightly beyond the schema by explaining the intent of playbook_id (retrieve one playbook's instructions 'and then follow them') and flagging that include_instructions produces longer output, which helps an agent decide whether to set it.

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 and resource ('Return the catalogue of ready-made LinkedIn playbooks') and immediately reframes it as 'what this server can actually accomplish, as named workflows rather than raw endpoints'. That framing distinguishes it from every sibling, which are all single-action endpoint tools.

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 ('Call this first when the user asks what you can do... or when a request is vague') and explicit when-not ('not needed when the user names a precise action'). It also names the follow-up behavior (pass playbook_id, then follow the instructions), leaving nothing to inference.

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

react_messageA
Idempotent
Inspect

Add or remove an emoji reaction on a LinkedIn message. Set react=false to remove the reaction. message_urn is the message_urn returned by list_conversation_messages (e.g. urn:li:msg_message:(urn:li:fsd_profile:…,123456789)). emoji is a Unicode emoji character (e.g. 👍, ❤️). Pass conversation_linkedin_id to also mark the conversation as read. Use for an emoji reaction on one message inside a thread (message_urn from list_conversation_messages); to reply in words use send_message.

ParametersJSON Schema
NameRequiredDescriptionDefault
emojiYesUnicode emoji character (e.g. 👍, ❤️).
reactNoTrue to add the reaction, False to remove it.
account_idYesReach id of the LinkedIn account to act on, from list_accounts.
message_urnYesFull message URN to react to.
idempotency_keyNoOptional. A key you choose (a UUID is fine) that names this exact call. If you retry with the same key and the same arguments, the first call's result is returned and nothing is done twice on LinkedIn. Reusing a key with different arguments is refused. Keys expire after 24 hours.
conversation_linkedin_idNoConversation ID — when provided the conversation is marked as read.

Output Schema

ParametersJSON Schema
NameRequiredDescription
emojiNo
reactedNo

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare the safety profile (destructiveHint=false, idempotentHint=true, openWorldHint=true). The description restates the react=false removal and the mark-as-read side effect, but the same mark-as-read behavior is already in the conversation_linkedin_id schema description, so the description adds little beyond structured fields. No quota/rate-limit context despite the account quota siblings.

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 verb+resource and mostly tight, but it repeats the message_urn provenance twice ('returned by list_conversation_messages' and again 'message_urn from list_conversation_messages'), which slightly bloats the sentence.

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

Completeness4/5

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

Covers the mutation direction, the URN source, the side effect, and the sibling alternative; an output schema exists so return values need not be explained. Remaining gaps (permissions/scope requirements, quota behavior) are minor for a reaction toggle.

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%, setting a baseline of 3, but the description adds a concrete message_urn format example (urn:li:msg_message:(urn:li:fsd_profile:…,123456789)) that the schema lacks, plus reinforces the emoji and react semantics. It provides modest value beyond the schema but not exhaustive per-parameter guidance.

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 (add/remove) and resource (emoji reaction on a LinkedIn message), and distinguishes the action from sibling tools: like_post/comment_post operate on posts, send_message on words. An agent can identify this as thread-message reaction handling without opening the 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?

Gives explicit when-to-use ('an emoji reaction on one message inside a thread') and names the alternative and the condition that selects it ('to reply in words use send_message'). It also spells out how to undo the action (react=false).

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

remove_connectionA
DestructiveIdempotent
Inspect

Remove an existing 1st-degree connection. Irreversible on LinkedIn (the person is not notified); confirm with the user. Not for pending invitations, see withdraw_invitation.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYesReach id of the LinkedIn account to act on, from list_accounts.
idempotency_keyNoOptional. A key you choose (a UUID is fine) that names this exact call. If you retry with the same key and the same arguments, the first call's result is returned and nothing is done twice on LinkedIn. Reusing a key with different arguments is refused. Keys expire after 24 hours.
linkedin_id_or_urlYesThe LinkedIn member: profile URL, vanity name (the part after /in/), Sales Navigator URL, or internal member id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
removedNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=true and openWorldHint=true, so the safety profile is partly covered. The description still adds non-derivable context: the action is irreversible on LinkedIn, the other party is not notified, and user confirmation is required. It does not restate the idempotency/retry semantics, which the schema already carries.

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

Conciseness5/5

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

Three tight clauses with the core action first, the reversibility warning second, and the routing rule last. No filler and nothing an agent needs is buried.

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?

An output schema exists so return values need no explanation, params are 100% schema-documented, and the description closes the two gaps an agent actually faces: safety/irreversibility and which sibling to use instead. Complete for this tool's complexity.

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

Parameters3/5

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

Schema description coverage is 100%, so all three parameters (including the idempotency key) are already fully documented. The description adds no syntax or format hint beyond the schema, so the baseline 3 applies.

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?

'Remove an existing 1st-degree connection' gives a precise verb + resource + scope, and the closing clause names the sibling it must not be confused with (withdraw_invitation for pending invitations). An agent can differentiate it from withdraw_invitation without opening either 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?

States the exclusion explicitly ('Not for pending invitations, see withdraw_invitation') and adds a procedural precondition ('confirm with the user'). This is exactly the when/when-not/alternative routing an agent needs in a 50-tool namespace.

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

reply_commentAInspect

Post a reply to an existing LinkedIn comment. Pass the comment_id (URN) returned by scrape_post as comment_urn — it is used directly as threadUrn. Use to answer a specific comment (comment_urn from scrape_my_posts or scrape_post); for a new comment on the post itself use comment_post. Counts against the daily comments quota.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesReply text.
account_idYesReach id of the LinkedIn account to act on, from list_accounts.
comment_urnYesURN of the comment to reply to (comment_id from scrape-post).
idempotency_keyNoOptional. A key you choose (a UUID is fine) that names this exact call. If you retry with the same key and the same arguments, the first call's result is returned and nothing is done twice on LinkedIn. Reusing a key with different arguments is refused. Keys expire after 24 hours.

Output Schema

ParametersJSON Schema
NameRequiredDescription
repliedNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly=false, destructive=false, openWorld=true, idempotent=false, so the safety profile is covered. The description adds genuinely new context: the call counts against the daily comments quota and the URN is consumed directly as threadUrn. It does not reconcile idempotentHint=false with the retry-safe idempotency_key parameter, which is the one remaining disclosure gap.

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

Conciseness5/5

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

Three short sentences, front-loaded with the action, then the alternative routing, then the quota constraint. Every sentence carries distinct information and none is filler.

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?

For a single-write operation with a full output schema, the description supplies the prerequisite source for comment_urn, the sibling disambiguation, and the quota side effect. Nothing an agent needs to invoke it correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3 and the schema already explains account_id, text, comment_urn and idempotency_key. The description adds only a light clarification that comment_urn equals the comment_id from scrape_post and is used as threadUrn; it says nothing about the optional idempotency_key semantics.

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 and resource ('Post a reply to an existing LinkedIn comment') and immediately contrasts with the sibling 'comment_post' for a new comment on the post itself. An agent can route between the two without opening either 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?

Explicit when-to-use plus the alternative: 'Use to answer a specific comment ...; for a new comment on the post itself use comment_post.' It also names where the required comment_urn comes from (scrape_post / scrape_my_posts), closing the main selection gap.

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

resume_jobA
Idempotent
Inspect

Resume a paused job. Its pending items are re-planned from now, inside the window and the remaining quota. Use after a manual pause; jobs paused for quota or disconnection resume on their own and need no call.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYesJob id, as returned by create_job or list_jobs.
idempotency_keyNoOptional. A key you choose (a UUID is fine) that names this exact call. If you retry with the same key and the same arguments, the first call's result is returned and nothing is done twice on LinkedIn. Reusing a key with different arguments is refused. Keys expire after 24 hours.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
itemsNo
labelNo
actionNo
sourceNo
statusNo
totalsNo
windowNo
resume_atNo
account_idNo
created_atNo
started_atNo
completed_atNo
next_item_atNo
pause_reasonNoquota_reached | account_disconnected | billing | manual

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare non-read-only, idempotent, non-destructive. The description adds real behavioral detail beyond that: pending items are re-planned from now, constrained by the window and remaining quota. It doesn't cover auth or error behavior, but adds meaningful semantics.

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

Conciseness5/5

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

Three sentences, front-loaded with the action, then behavior, then usage guidance. No filler; every clause carries information.

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 an output schema covering return values and annotations covering the safety profile, the description fills the remaining gaps (when to call, when not to, re-planning semantics) completely.

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

Parameters3/5

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

Schema description coverage is 100% and idempotency_key's semantics are fully documented in the schema, so the description needn't repeat them. It adds no parameter-level detail, so baseline 3 applies.

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+resource ('Resume a paused job') that is immediately distinguishable from siblings like pause_job, cancel_job, and create_job.

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?

Explicitly says when to use it ('after a manual pause') and, crucially, when NOT to ('jobs paused for quota or disconnection resume on their own and need no call'), which prevents unnecessary calls.

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

salesnav_build_search_urlA
Read-onlyIdempotent
Inspect

Build a Sales Navigator people-search URL from structured lead-search filters, using as many filters as the request implies. RESOLUTION: industry accepts numeric ids OR names (auto-resolved via the taxonomy); region accepts numeric REGION ids OR location names (auto-resolved via geo typeahead — needs account_id). If a name is ambiguous, the tool returns {needs_disambiguation:[...]} with candidates instead of a URL — re-call with the chosen id. BOOLEAN: keywords and current_title accept LinkedIn boolean syntax (AND/OR/NOT, quotes, parentheses). EXCLUSION: any list value may be an object {id|name, exclude:true}. Set execute=true to also run the first page of results (reuses the live search) and return leads. Use after resolving the ids to get the Sales Navigator search URL, then scrape_search on it. Builds a URL only, no LinkedIn call.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoPage size.
groupNoLinkedIn groups: names or ids.
startNoPagination offset, 0-based.
regionNoREGION ids (use salesnav_typeahead type=geo) or location names to auto-resolve. Items may be {id|name, exclude}.
schoolNoResolved SCHOOL ids.
executeNoAlso run the first results page and return leads.
functionNoFUNCTION 1-26: 1 Accounting 4 Business Dev 8 Engineering 10 Finance 12 HR 13 IT 15 Marketing 18 Operations 19 Product 25 Sales 26 Support (etc.).
industryNoIndustry ids (use salesnav_resolve_industry) or names to auto-resolve. Items may be {id|name, exclude}.
keywordsNoGlobal keyword search; supports boolean operators.
last_nameNoLast name filter.
account_idNoRequired when passing location/industry NAMES or execute=true.
first_nameNoFirst name filter.
past_titleNoBoolean search on past job titles.
company_typeNoCOMPANY_TYPE: C=Public P=Privately Held N=Non Profit D=Educational S=Partnership E=Self-Employed O=Self Owned G=Government.
past_companyNoPast companies: names or ids; add exclude:true to exclude one.
relationshipNoRELATIONSHIP: F=1st S=2nd A=Group members O=3rd+.
current_titleNoCurrent job title; free text + boolean (e.g. '(CTO OR "VP Engineering") NOT interim').
past_colleagueNoOnly past colleagues.
current_companyNoResolved COMPANY ids (salesnav_typeahead type=company).
seniority_levelNoSENIORITY: 320 Owner/Partner 310 CXO 300 VP 220 Director 210 Exp. Manager 200 Entry Manager 130 Strategic 120 Senior 110 Entry 100 Trainee.
profile_languageNoISO 639-1 codes: en fr es de it pt nl ...
company_headcountNoCOMPANY_HEADCOUNT codes: A=Self-employed B=1-10 C=11-50 D=51-200 E=201-500 F=501-1000 G=1001-5000 H=5001-10000 I=10001+.
posted_on_linkedinNoOnly people who posted on LinkedIn in the last 30 days.
viewed_your_profileNoOnly people who viewed your profile recently.
years_of_experienceNo1=<1y 2=1-2y 3=3-5y 4=6-10y 5=>10y.
follows_your_companyNoOnly people who follow your company page.
recently_changed_jobsNoOnly people who changed jobs in the last 90 days.
with_shared_experiencesNoOnly people with shared experiences (school, company, group).
years_at_current_companyNo1=<1y 2=1-2y 3=3-5y 4=6-10y 5=>10y.
years_in_current_positionNo1=<1y 2=1-2y 3=3-5y 4=6-10y 5=>10y.

Output Schema

ParametersJSON Schema
NameRequiredDescription
urlNoSales Navigator people-search URL
itemsNoFirst page of results when execute=true
queryNo
startNo
totalNo
applied_filtersNo
needs_disambiguationNoPresent instead of url when a name matched several ids

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already cover readOnly/idempotent/openWorld, yet the description adds real behavioral context: the {needs_disambiguation:[...]} return contract, the account_id precondition for name resolution or execute, and the fact that execute=true triggers a live page fetch. Minor gaps remain (no rate limits, no pagination/result-size caveats for execute), so not a full 5.

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

Conciseness5/5

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

Front-loaded with purpose, then labeled RESOLUTION/BOOLEAN/EXCLUSION/EXECUTION blocks that map to how an agent scans. Dense but every sentence adds actionable information; no filler.

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?

For a 30-parameter tool with an output schema present, the description covers the non-obvious behaviors an agent needs: resolution fallbacks, boolean syntax, exclusions, the execute side effect, and the chained next call. Nothing essential is missing.

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 genuine meaning beyond the schema: industry and region accept ids OR names with auto-resolution rules, keywords/current_title accept LinkedIn boolean syntax, and any list item may be {id|name, exclude:true}.

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 (Build) and resource (Sales Navigator people-search URL) plus scope (from structured lead-search filters). An agent can distinguish it immediately from siblings like scrape_search, salesnav_typeahead, and salesnav_resolve_industry.

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 an explicit workflow: resolve ids first (naming salesnav_resolve_industry and salesnav_typeahead type=geo/company), call this tool to get the URL, then scrape_search on it. It also names the condition that selects the disambiguation re-call path.

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

salesnav_list_messaging_threadsA
Read-onlyIdempotent
Inspect

List Sales Navigator messaging threads (salesApiMessagingThreads). Requires the account to have a Sales Navigator subscription (has_sales_nav). Returns threads with messages and participant profiles. Paginate by passing next_page_starts_at from the previous response as page_starts_at. Use only when the account has Sales Navigator and the user asks about that inbox; the classic inbox is list_conversations.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoThreads per page.
filterNoConversation folder.INBOX
account_idYesReach id of the LinkedIn account to act on, from list_accounts.
page_starts_atNoPagination cursor — next_page_starts_at from the previous response.

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNo
itemsNo
totalNoTotal number of threads matching the filter.
filterNoFilter used: INBOX or ARCHIVE.
page_starts_atNoCursor passed in the request (None for first page).
next_page_starts_atNoPass as page_starts_at to fetch the next (older) page. None when there are no more results.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and open-world, so the safety profile is covered. The description adds substantive context beyond them: the Sales Navigator subscription prerequisite (has_sales_nav), what is returned (threads with messages and participant profiles), and the pagination contract. It omits rate limits or quota behavior, keeping it short of a 5.

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

Conciseness5/5

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

Four dense sentences with no filler: purpose, prerequisite, return shape, pagination, then routing. The prerequisite and the sibling routing are front-loaded where an agent will read them.

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 a full parameter schema, an output schema, and rich annotations, the remaining burden is routing and prerequisites, both of which are stated. Nothing an agent needs in order to call this correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so all four parameters are already documented. The description restates the pagination flow (next_page_starts_at as page_starts_at), which duplicates the schema's own wording rather than adding syntax or edge-case detail. Baseline 3 applies.

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 and resource (list Sales Navigator messaging threads) and grounds it in the API surface (salesApiMessagingThreads). It explicitly distinguishes itself from the classic-inbox sibling list_conversations, so an agent can route correctly without opening either 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?

Gives an explicit precondition ('Only when the account has Sales Navigator and the user asks about that inbox') and names the alternative with the condition that selects it ('the classic inbox is list_conversations'). When-to-use and when-not-to-use are both covered.

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

salesnav_list_thread_messagesA
Read-onlyIdempotent
Inspect

Fetch a Sales Navigator thread with all its messages and participant profiles (salesApiMessagingThreads/{id}). Requires a Sales Navigator subscription. Use the thread id returned by salesnav_list_messaging_threads. message_count controls how many (most recent) messages are returned; compare with total_message_count in the response to know if more exist. Use to read one Sales Navigator thread (thread id from salesnav_list_messaging_threads); classic inbox threads use list_conversation_messages.

ParametersJSON Schema
NameRequiredDescriptionDefault
thread_idYesSales Navigator thread ID.
account_idYesReach id of the LinkedIn account to act on, from list_accounts.
message_countNoNumber of most-recent messages to return.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoSales Navigator thread ID.
archivedNo
messagesNo
participantsNo
restrictionsNo
unread_countNo
next_page_starts_atNoUnix ms timestamp — value from the oldest thread, used as page_starts_at cursor.
total_message_countNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the bar is lower, and the description still adds real value: the Sales Navigator subscription requirement and the message_count vs total_message_count pagination signal. It doesn't describe rate limits or auth failure behavior, but the pagination hint is the key operational detail.

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

Conciseness3/5

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

Front-loaded with purpose and useful, but the thread-id sourcing instruction is stated twice ('Use the thread id returned by salesnav_list_messaging_threads' and again 'thread id from salesnav_list_messaging_threads'), which is redundant filler in an otherwise tight blurb.

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

Completeness4/5

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

With an output schema present, return values needn't be explained, and annotations cover the safety profile; the description completes the picture with the subscription requirement and the sibling routing. Only minor gaps (no mention of error/permission outcomes) remain.

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% (baseline 3), but the description goes further by explaining that message_count returns the most-recent messages and how to detect truncation via total_message_count. That is meaningful semantics beyond the schema's simple range/default.

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 (Fetch) and resource (a Sales Navigator thread with messages and participant profiles), and even cites the underlying endpoint. It distinguishes itself from the classic-inbox equivalent by naming list_conversation_messages as the alternative.

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?

Explicitly says to use the thread id returned by salesnav_list_messaging_threads, states the subscription prerequisite, and routes classic inbox threads to list_conversation_messages. When-to-use and when-not-to-use are both covered.

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

salesnav_resolve_industryA
Read-onlyIdempotent
Inspect

Resolve an industry name (any language) to its LinkedIn Industry Code(s) using the bundled Industry Codes V2 taxonomy (offline, no LinkedIn call). Returns ranked candidates with id, label and hierarchy path. Use the returned id(s) in salesnav_build_search_url's industry filter. Call once per industry term; if several candidates look plausible, pick by the hierarchy path. Use for industries only (offline taxonomy, any language, no LinkedIn call); for locations, companies, schools and titles use salesnav_typeahead.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of rows to return.
queryYesIndustry name to look up, e.g. 'software', 'banque', 'real estate'.

Output Schema

ParametersJSON Schema
NameRequiredDescription
queryNo
candidatesNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already cover readOnly/idempotent/non-destructive/closed-world; the description adds meaningful context beyond them: it is offline with no LinkedIn call, and it returns ranked candidates rather than a single answer. Minor gap is that it doesn't say what happens on an ambiguous or unmatched term.

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 return shape, then usage. Slightly repetitive – the parenthetical 'offline, no LinkedIn call' restates the earlier 'offline, no LinkedIn call' – costing a bit of tightness.

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 an output schema covering the return fields and rich annotations covering safety, the description supplies exactly the missing pieces: the offline/any-language scope, cadence, disambiguation heuristic, and sibling routing. Nothing an agent needs to call it correctly is absent.

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

Parameters3/5

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

Schema description coverage is 100%, so query and limit are already documented including examples and bounds. The description adds the important 'any language' semantic but nothing further about limit or ranking behavior, so baseline 3 applies.

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 (resolve) and resource (industry name → LinkedIn Industry Code) plus the mechanism (bundled Industry Codes V2 taxonomy, offline). Explicitly distinguishes itself from salesnav_typeahead for non-industry entity types.

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?

Names the downstream consumer (salesnav_build_search_url's `industry` filter), gives calling cadence (once per term), a disambiguation rule (pick by hierarchy path), and explicit exclusions that route to salesnav_typeahead for locations/companies/schools/titles.

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

salesnav_send_messageAInspect

Send a message in an existing Sales Navigator thread (salesApiMessageActions). Requires the account to have a Sales Navigator subscription. Use the thread id returned by salesnav_list_messaging_threads. Use only to reply inside an existing Sales Navigator thread; everything else (new messages, classic inbox) goes through send_message. Counts against the daily messages quota.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesMessage body (plain text).
thread_idYesSales Navigator thread ID.
account_idYesReach id of the LinkedIn account to act on, from list_accounts.
copy_to_crmNoCopy message to CRM.
idempotency_keyNoOptional. A key you choose (a UUID is fine) that names this exact call. If you retry with the same key and the same arguments, the first call's result is returned and nothing is done twice on LinkedIn. Reusing a key with different arguments is refused. Keys expire after 24 hours.

Output Schema

ParametersJSON Schema
NameRequiredDescription
successNo
thread_idNo
message_idNo
status_codeNo

TDQS

A4.7/5.0
Behavior4/5

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

Annotations only declare readOnly=false, destructive=false, openWorld=true and idempotent=false; the description adds substantive behavioral context beyond that: a subscription prerequisite and that the call consumes the daily messages quota. It does not, however, reconcile the idempotency_key parameter with idempotentHint=false, though the schema itself covers that.

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

Conciseness5/5

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

Four short sentences, front-loaded with the action and scope, then alternatives, then prerequisites and quota. Every sentence carries distinct information; there is no filler.

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?

An output schema exists, so return values need not be described. For a mutating 5-parameter tool the description covers prerequisites, correct usage vs. siblings, the thread_id origin, and quota cost — sufficient for an agent to invoke it correctly.

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 description coverage is already 100%, so the baseline is 3, but the description adds real value by naming the source of thread_id (salesnav_list_messaging_threads), which the schema alone does not say. It contributes nothing further about text/account_id/copy_to_crm, which the schema handles.

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 and resource ('Send a message in an existing Sales Navigator thread') and immediately scopes it against the sibling send_message ('everything else ... goes through send_message'). An agent can distinguish it from send_message without inspecting either 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?

Explicitly gives when to use it (reply inside an existing Sales Navigator thread), when not to (new messages, classic inbox), the alternative to use instead (send_message), the prerequisite (Sales Navigator subscription), and where the required thread_id comes from (salesnav_list_messaging_threads). Nothing is left to inference.

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

salesnav_typeaheadA
Read-onlyIdempotent
Inspect

Live Sales Navigator autocomplete for facets whose ids are dynamic. Use type='geo' to resolve a location to its REGION id (the only reliable way — LinkedIn region ids are not enumerable), and type='company' / 'school' / 'title' for those entity facets. Returns [{id, displayValue, headline}]. Feed the chosen id into salesnav_build_search_url (region / current_company / school / current_title). Requires a connected account. Use for facets whose ids are dynamic (geo, company, school, title…); for industries use salesnav_resolve_industry. One LinkedIn call per lookup.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoFacet to autocomplete. 'geo' -> region ids.geo
countNoPage size.
queryYesText to autocomplete, e.g. 'Paris', 'Google', 'HEC'.
account_idYesReach id of the LinkedIn account to act on, from list_accounts.

Output Schema

ParametersJSON Schema
NameRequiredDescription
typeNo
queryNo
resultsNo

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint, idempotentHint, openWorldHint, destructiveHint=false), but the description adds genuinely new operational context: 'Requires a connected account' and 'One LinkedIn call per lookup,' which discloses cost/rate behavior. It stops short of describing failure modes (no match, invalid facet) or pagination behavior for count.

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 behavior and the routing rule, then the return shape and downstream usage. The 'dynamic ids' rationale is stated twice, which is mild redundancy, and the parenthetical 'geo, company, school, title…' repeats the enum already covered earlier.

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 an output schema present, the description needn't explain return values in detail, yet it still names the returned fields and where the chosen id should be used next. Auth requirement and per-call cost are both disclosed, so nothing needed to call it correctly is missing.

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 real meaning: it tells the agent that 'geo' yields REGION ids and which downstream URL parameter each facet maps to. It undersells the 'group' enum value entirely and mentions 'industry' only to deflect it elsewhere, leaving a small gap.

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 ('Live Sales Navigator autocomplete') and resource (facet ids that are dynamic), and explicitly distinguishes itself from salesnav_resolve_industry, a close sibling. An agent can pick this tool without opening another 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?

Gives explicit routing: type='geo' for region ids, company/school/title for entity facets, and redirects industries to salesnav_resolve_industry. It also names the downstream consumer (salesnav_build_search_url) and which parameter each facet feeds.

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

scrape_my_postsA
Read-onlyIdempotent
Inspect

Fetch likers and/or commenters for the account's own recent posts. since_hours limits to posts published in the last N hours (default 24). Use for engagement on the account's own posts (likers, commenters, comment URNs for reply_comment); for someone else's post use scrape_post.

ParametersJSON Schema
NameRequiredDescriptionDefault
likedNoInclude the people who liked.
commentsNoInclude the people who commented, with their comment text.
max_postsNoMax posts to process (max 20).
account_idYesReach id of the LinkedIn account to act on, from list_accounts.
since_hoursNoOnly posts from the last N hours (max 720).

Output Schema

ParametersJSON Schema
NameRequiredDescription
postsNo
total_postsNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds real context: the scope is limited to the account's own recent posts, the since_hours window defaults to 24, and comment URNs feed reply_comment. It stops short of rate-limit or auth notes, but against rich annotations this is solid added value.

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

Conciseness5/5

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

Three sentences, front-loaded with the core action in the first clause, followed by the scoping rule and the routing guidance. No filler; every sentence earns its place.

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?

An output schema exists, so return format needn't be described, and the annotations cover the safety profile. Combined with explicit sibling routing and the since_hours scope, an agent has everything needed to call this correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all five parameters including account_id, liked, comments, max_posts and since_hours. The description only restates the since_hours window and its default, adding no syntax or format detail beyond the schema. Baseline 3 applies when the schema does the heavy lifting.

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 (Fetch) and resource (likers/commenters for the account's own recent posts), and explicitly distinguishes itself from the sibling scrape_post ('for someone else's post use scrape_post'). An agent can select this over scrape_post without opening either 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?

Names the exact use case (engagement on the account's own posts) and enumerates the outputs that qualify (likers, commenters, comment URNs for reply_comment), then names the alternative tool and the condition ('someone else's post') that selects it. Nothing is left to inference.

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

scrape_postA
Read-onlyIdempotent
Inspect

Fetch likers and/or commenters for a LinkedIn post. Pass the full post URL or slug. Set liked=true and/or comments=true. Use to get the people who liked or commented on one post you have the URL of; for the account's own recent posts use scrape_my_posts. Counts against the imports quota.

ParametersJSON Schema
NameRequiredDescriptionDefault
likedNoInclude likers.
commentsNoInclude commenters.
account_idYesReach id of the LinkedIn account to act on, from list_accounts.
post_id_or_urlYesLinkedIn post URL or slug.

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemsNo
post_idNo
total_likesNo
total_commentsNo

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already cover safety (readOnlyHint=true, idempotentHint=true, destructiveHint=false, openWorldHint=true), so the bar is lower. The description adds genuinely new context beyond those fields: the call 'counts against the imports quota', which is a billing/limit trait not available in annotations. It stops short of noting rate limits or pagination, so 4 rather than 5.

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

Conciseness5/5

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

Three compact sentences with zero filler. The core action leads, followed by parameter guidance, the sibling disambiguation, and the quota caveat in descending order of importance.

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?

An output schema exists, so return values need not be described, and annotations cover the safety profile. With purpose, parameters, alternative routing, and quota cost all addressed, nothing an agent needs to select and invoke the tool correctly is missing.

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. The description adds guidance the schema does not convey: 'Pass the full post URL or slug' clarifies the accepted format, and 'Set liked=true and/or comments=true' communicates that the flags are independent and combinable, which is a usage rule rather than a restatement of field types.

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 and resource ('Fetch likers and/or commenters for a LinkedIn post') and explicitly delimits scope to a single post you have the URL for. It also names the sibling it is not (scrape_my_posts), so an agent can distinguish it without opening either 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?

Gives an explicit when-to-use condition ('one post you have the URL of') and an explicit alternative with its own condition ('for the account's own recent posts use scrape_my_posts'). It also discloses a cost constraint (imports quota) that affects selection.

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

scrape_profileA
Read-onlyIdempotent
Inspect

Fetch a complete LinkedIn profile (name, headline, company, experience, skills…). Pass a LinkedIn URL, vanity name, internal member ID, or Sales Navigator lead URL. Uses SalesNav API when available for richer data. Use to read one person in depth (experience, skills, company); costly, one LinkedIn call per profile. For a list of people use scrape_search; to just check the relationship use get_invitation_status.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYesReach id of the LinkedIn account to act on, from list_accounts.
linkedin_id_or_urlYesLinkedIn profile URL, vanity name, Sales Navigator URL, or internal member ID.

Output Schema

ParametersJSON Schema
NameRequiredDescription
jobNoCurrent job title.
degreeNoNetwork degree: 1, 2, or 3.
skillsNo
companyNoCurrent company name.
pictureNoProfile picture URL.
summaryNo
headlineNo
industryNo
lastnameNo
locationNo
firstnameNo
full_nameNoFull name as returned by LinkedIn (standard search only).
languagesNo
company_idNoLinkedIn company ID.
is_premiumNo
connectionsNo
linkedin_idNoProfile ID (fsd_profile or ts_profile suffix).
profile_urlNoPublic LinkedIn profile URL.
company_logoNo
company_typeNo
year_companyNoTenure at current company (years).
is_opentoworkNo
month_companyNoTenure at current company (months).
year_positionNoTenure at current position (years).
month_positionNoTenure at current position (months).
company_websiteNo
is_open_profileNo
job_descriptionNo
company_industryNo
company_linkedinNoLinkedIn company page URL.
company_locationNo
linkedin_plain_idNoNumeric member ID (objectUrn suffix).
linkedin_public_idNoVanity URL slug (/in/<slug>).
salesnavigator_urlNoSales Navigator profile URL (SalesNav searches only).
startyear_positionNo
company_descriptionNo
company_specialtiesNo
startmonth_positionNo
company_year_foundedNo
company_employee_countNo
company_employee_rangeNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds genuinely new behavioral context: the per-call cost and the fact that SalesNav API is used opportunistically when available for richer data. It stops short of describing failure modes or rate-limit behavior, so not a 5.

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

Conciseness5/5

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

Four tight sentences, front-loaded with the outcome and input flexibility before the cost warning and the sibling routing. No filler, and the most decision-relevant facts come first.

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 an output schema present, the description needn't explain return values, and it covers everything else an agent needs: accepted identifier forms, cost, data-source behavior, and sibling selection. Nothing material is missing for a two-parameter read tool.

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

Parameters3/5

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

Schema coverage is 100% and both parameters are fully documented in the schema, so the schema carries the load. The description restates the accepted identifier formats (URL, vanity name, member ID, SalesNav lead URL), which largely duplicates the schema rather than extending it.

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 (Fetch) and resource (complete LinkedIn profile) and enumerates what is returned (name, headline, company, experience, skills). It explicitly distinguishes itself from scrape_search and get_invitation_status, so an agent can route without opening sibling schemas.

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 an explicit when-to-use ('read one person in depth'), the cost tradeoff ('costly, one LinkedIn call per profile'), and names two alternatives with the conditions that select them (scrape_search for lists, get_invitation_status for relationship checks).

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

send_invitationAInspect

Send a connection request to a LinkedIn member. Optional message capped at 300 chars (premium) or 200 chars. Use to connect with someone not yet a 1st-degree connection; check get_invitation_status first to avoid duplicates. Counts against the daily invitations quota; for more than ten use create_job. To follow without connecting use follow_member.

ParametersJSON Schema
NameRequiredDescriptionDefault
messageNoOptional personalised invitation note.
account_idYesReach id of the LinkedIn account to act on, from list_accounts.
idempotency_keyNoOptional. A key you choose (a UUID is fine) that names this exact call. If you retry with the same key and the same arguments, the first call's result is returned and nothing is done twice on LinkedIn. Reusing a key with different arguments is refused. Keys expire after 24 hours.
linkedin_id_or_urlYesLinkedIn member ID, vanity name, or profile URL.

Output Schema

ParametersJSON Schema
NameRequiredDescription
connectedNoInvitation sent

TDQS

A4.7/5.0
Behavior4/5

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

Annotations cover only the safety profile (readOnly=false, openWorld, non-idempotent, non-destructive); the description adds real behavioral context the annotations cannot convey: the daily invitation quota, the duplicate risk, and the 300/200-char message caps. It omits any mention of the schema's idempotency_key retry semantics and of permission/failure behavior, so it stops short of a 5.

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

Conciseness5/5

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

Four dense sentences, front-loaded with the core action and followed by constraints, prerequisites, and alternatives. Every sentence carries actionable information with no filler.

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?

An output schema exists, so return values need not be explained. Combined with 100% schema parameter coverage and annotations carrying the safety profile, the description supplies everything else an agent needs: quota, rate/alternatives, duplicate avoidance, and message limits.

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 a 3 baseline applies; the description adds meaning beyond the schema by specifying the message length limit (300 premium / 200 chars), which the schema only calls an 'optional personalised invitation note'. No other parameter gets added semantic detail, keeping it below 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+resource ('Send a connection request to a LinkedIn member') and immediately scopes it to non-1st-degree connections. It explicitly distinguishes itself from sibling tools, naming follow_member for the no-connection case and create_job for bulk outreach, so an agent can route correctly without opening other schemas.

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 ('connect with someone not yet a 1st-degree connection'), a prerequisite ('check get_invitation_status first to avoid duplicates'), and two alternatives with their selecting conditions ('for more than ten use create_job'; 'To follow without connecting use follow_member'). Nothing about selection is left to inference.

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

send_messageAInspect

Send a LinkedIn DM via Voyager createMessage: use conversation_linkedin_id for an existing thread or recipient_linkedin_id for a new DM. Use for the classic inbox: conversation_linkedin_id to reply in a thread, recipient_linkedin_id for a new one (1st-degree connections, or InMail). Counts against the daily messages quota; for a Sales Navigator thread use salesnav_send_message; for more than ten messages use create_job.

ParametersJSON Schema
NameRequiredDescriptionDefault
textNoPlain text to send or post.
account_idYesReach id of the LinkedIn account to act on, from list_accounts.
idempotency_keyNoOptional. A key you choose (a UUID is fine) that names this exact call. If you retry with the same key and the same arguments, the first call's result is returned and nothing is done twice on LinkedIn. Reusing a key with different arguments is refused. Keys expire after 24 hours.
in_mail_premiumNoSend as InMail to someone outside the network (premium accounts); requires recipient_linkedin_id.
recipient_linkedin_idNoRecipient profile id (fsd_profile id) to start a new conversation; from list_conversations or scrape_profile. Omit when replying in an existing conversation.
conversation_linkedin_idNoConversation (thread) id, as returned by list_conversations.

Output Schema

ParametersJSON Schema
NameRequiredDescription
successNo
status_codeNoHTTP status from LinkedIn (e.g. 201 on success).

TDQS

A4.4/5.0
Behavior4/5

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

Annotations cover the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=true), and the description adds genuinely non-annotated context: it consumes the daily messages quota and requires a premium/InMail path for out-of-network recipients. It does not discuss failure modes or what happens if the quota is exhausted, which keeps it short of a 5.

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

Conciseness3/5

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

The first two sentences restate the same conversation_linkedin_id/recipient_linkedin_id rule in slightly different words, which is redundant filler. The quota and alternative-tool guidance is well placed and front-loaded, but the definition could shed roughly a sentence without losing information.

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

Completeness4/5

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

With an output schema present, return values need no explanation, and the annotation set plus the idempotency_key schema field covers safety and retry semantics. The description rounds this out with quota impact and sibling routing, leaving little an agent needs that is missing.

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 description coverage is 100%, so the baseline is 3, but the description adds a cross-parameter decision rule the schema alone only implies: conversation_linkedin_id for replies in an existing thread vs recipient_linkedin_id for initiating a new conversation. That routing guidance is meaningful value on top of the field-level docs.

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+resource ('Send a LinkedIn DM via Voyager createMessage') and immediately differentiates itself from the Sales Navigator variant and the bulk job path. An agent can identify this as the classic-inbox one-off send 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?

Explicitly routes between the two id parameters (existing thread vs new DM), states eligibility for the new-DM path (1st-degree connections or InMail), and names two alternatives with their selecting conditions: salesnav_send_message for Sales Navigator threads, create_job for more than ten messages. This is textbook when-to-use/when-not.

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

star_conversationA
Idempotent
Inspect

Star or unstar a LinkedIn conversation. Set star=false to remove the star. conversation_linkedin_id is the conversation_id returned by list_conversations. Housekeeping in the classic inbox; reversible (star=false). No quota.

ParametersJSON Schema
NameRequiredDescriptionDefault
starNoTrue to star, False to unstar.
account_idYesReach id of the LinkedIn account to act on, from list_accounts.
idempotency_keyNoOptional. A key you choose (a UUID is fine) that names this exact call. If you retry with the same key and the same arguments, the first call's result is returned and nothing is done twice on LinkedIn. Reusing a key with different arguments is refused. Keys expire after 24 hours.
conversation_linkedin_idYesConversation (thread) id, as returned by list_conversations.

Output Schema

ParametersJSON Schema
NameRequiredDescription
starredNoCurrent starred state

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already cover the safety profile (destructiveHint=false, idempotentHint=true, readOnlyHint=false), and the description adds genuinely non-annotation context: the action is reversible via star=false and consumes no quota. It does not, however, discuss any permission or scope requirements.

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

Conciseness5/5

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

Three terse clauses front-load the core action, then the toggle, then provenance and constraints. No sentence is wasted.

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

Completeness4/5

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

With an output schema present, return values need no explanation, and the annotations plus description together cover safety, idempotency, reversibility, and quota. The only minor gap is the absence of permission/scope guidance for a write operation.

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

Parameters3/5

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

Schema coverage is 100%, so all four parameters including star, account_id, and idempotency_key are already documented in the schema. The description repeats the star=false semantics and the list_conversations origin of conversation_linkedin_id, adding little beyond the structured fields, so the baseline 3 applies.

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 pair (star/unstar) and the exact resource (a LinkedIn conversation), and even clarifies the toggle direction with star=false. An agent can immediately distinguish this from sibling tools like archive_conversation or delete_conversation.

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

Usage Guidelines4/5

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

Provides a clear usage context ("Housekeeping in the classic inbox") that frames when this tool is appropriate, and explains the unstar path. It stops short of naming alternatives such as archive_conversation or delete_conversation for when the intent is removal rather than marking.

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

test_webhook_endpointA
Read-onlyIdempotent
Inspect

Send a signed 'ping' event to a webhook endpoint right now and report the HTTP status it answered. Use to check a receiver end to end (signed ping, HTTP status back); does not deliver real events.

ParametersJSON Schema
NameRequiredDescriptionDefault
endpoint_idYesWebhook endpoint id, from list_webhook_endpoints.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNo
response_statusNo
response_excerptNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/idempotentHint/OpenWorld behavior, so the bar is lower. The description adds real value by clarifying the payload is a signed 'ping' and the returned observable is the HTTP status, and by dispelling the assumption that it triggers real event delivery.

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

Conciseness5/5

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

Two compact sentences with no filler; the action and its scope are front-loaded and the limitation is appended efficiently.

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?

An output schema exists, so return values need not be spelled out, and the description still names the returned signal (HTTP status). For a single-parameter probe tool this is complete.

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

Parameters3/5

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

Only one parameter, and the schema documents it at 100% coverage, including its source ('from list_webhook_endpoints'). The description adds no meaning beyond that, so the baseline 3 applies.

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 (send a signed 'ping' event) plus resource (webhook endpoint) and the observable outcome (report HTTP status). It is easily distinguished from siblings like create/update/delete/list_webhook_endpoints, and explicitly rules out real event delivery.

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

Usage Guidelines4/5

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

Gives a clear when-to-use condition: checking a receiver end to end, with the exclusion that it does not deliver real events. It does not name an explicit alternative tool, but the use case and non-use case are both stated, which is strong guidance.

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

update_account_quotasA
Idempotent
Inspect

Update one or more quota configuration fields for a LinkedIn account, and its activity window (the hours, days and timezone jobs run in when a job does not set its own). Only provided fields are updated. Changes limits and the activity window for jobs; does not reset today's counters. Raising a limit is the user's decision, ask first.

ParametersJSON Schema
NameRequiredDescriptionDefault
timezoneNoIANA zone for the window, e.g. Europe/Paris. Empty string resets to the zone of the account's proxy country.
account_idYesReach id of the LinkedIn account to act on, from list_accounts.
window_endNoHH:MM: jobs on this account stop at this time. Empty string resets to 18:00.
window_daysNoWeekdays jobs may run: mon, tue, wed, thu, fri, sat, sun. Empty list resets to Monday–Friday.
window_startNoHH:MM, in the account's timezone: jobs on this account start no earlier. Empty string resets to 09:00.
idempotency_keyNoOptional. A key you choose (a UUID is fine) that names this exact call. If you retry with the same key and the same arguments, the first call's result is returned and nothing is done twice on LinkedIn. Reusing a key with different arguments is refused. Keys expire after 24 hours.
daily_posts_confNoDaily limit for 'posts' on this account; 0 means unlimited.
daily_visits_confNoDaily limit for 'visits' on this account; 0 means unlimited.
daily_comments_confNoDaily limit for 'comments' on this account; 0 means unlimited.
daily_messages_confNoDaily limit for 'messages' on this account; 0 means unlimited.
daily_reactions_confNoDaily limit for 'reactions' on this account; 0 means unlimited.
daily_invitations_confNoDaily limit for 'invitations' on this account; 0 means unlimited.
daily_imports_salesnav_confNoDaily limit for 'imports_salesnav' on this account; 0 means unlimited.
daily_imports_standard_confNoDaily limit for 'imports_standard' on this account; 0 means unlimited.
daily_imports_recruiter_confNoDaily limit for 'imports_recruiter' on this account; 0 means unlimited.

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotasNo
windowNo
updatedNo
account_idNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false and idempotentHint=true, so safety/idempotency are covered structurally. The description adds real behavioral context beyond them: partial-update semantics, that it does not reset today's counters, and a consent rule for raising limits. It stops short of describing the response or failure modes, so not a 5.

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

Conciseness5/5

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

Four tight sentences, zero filler, with the core scope front-loaded and the consent caveat last. Every sentence carries actionable information.

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?

For a 15-parameter mutation with full schema coverage and an output schema (so return values need not be explained), the description covers scope, partial-update behavior, side-effect boundaries, and a consent rule. Nothing essential to correct invocation is missing.

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 description coverage is 100%, so the schema already documents all 15 parameters (baseline 3). The description adds genuine meaning by framing the window params as an inheritance default (used when a job does not set its own), which the schema does not state.

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 (update) and resource (quota configuration fields plus activity window for a LinkedIn account), and distinguishes itself from get_account_quotas by being the mutating counterpart. An agent can identify the operation without opening the schema.

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

Usage Guidelines4/5

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

Gives clear operating context: only provided fields are updated (partial update), changes apply to jobs rather than today's counters, and raising a limit requires asking the user first. It does not explicitly name the alternative tool (get_account_quotas) or state when-not to use this, so it falls short of a 5.

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

update_scheduled_postA
Idempotent
Inspect

Update the text and/or scheduled time of an existing scheduled LinkedIn post. post_urn is the URN returned by list_scheduled_posts (e.g. urn:li:ugcPost:…). At least one of text or scheduled_at must be provided. Only for posts still scheduled (post_urn from list_scheduled_posts); a published post cannot be edited through Reach.

ParametersJSON Schema
NameRequiredDescriptionDefault
textNoPlain text to send or post.
post_urnYesURN of the scheduled post (urn:li:…), from list_scheduled_posts.
account_idYesReach id of the LinkedIn account to act on, from list_accounts.
scheduled_atNoUnix timestamp in milliseconds.
idempotency_keyNoOptional. A key you choose (a UUID is fine) that names this exact call. If you retry with the same key and the same arguments, the first call's result is returned and nothing is done twice on LinkedIn. Reusing a key with different arguments is refused. Keys expire after 24 hours.

Output Schema

ParametersJSON Schema
NameRequiredDescription
updatedNo
post_urnNo

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=true, and openWorldHint=true, so safety and idempotency are covered structurally. The description adds genuinely useful behavioral scope: the requirement that at least one mutable field be supplied and the fact that published posts are out of reach. It does not restate the idempotency semantics, which the schema documents, but the added constraints make it more than a repeat of annotations.

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?

Three tightly written sentences with the core action front-loaded and constraints following. There is mild redundancy between the first parenthetical (post_urn returned by list_scheduled_posts) and the closing clause, but nothing that undermines the structure.

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?

An output schema exists, so return values need not be explained. The description covers the mutation scope, required inputs, key parameter provenance, and the restriction on published posts, which is everything an agent needs to invoke it correctly.

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 description coverage is 100%, so the 3 baseline applies, but the description adds a real cross-parameter constraint absent from the schema: only account_id and post_urn are marked required, yet the description correctly states that at least one of text or scheduled_at must be provided. That goes beyond the per-field descriptions.

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 and resource (update an existing scheduled LinkedIn post) and scopes it to text and/or scheduled time. It is clearly distinguishable from siblings like create_post, delete_scheduled_post, and list_scheduled_posts 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?

Explicitly states the precondition (at least one of text or scheduled_at must be provided), the source of the key parameter (post_urn from list_scheduled_posts), and an exclusion (published posts cannot be edited through Reach). All the when-to-use and when-not-to-use context is present.

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

update_webhook_endpointA
Idempotent
Inspect

Change a webhook's url, events, account_ids, description or is_active. Only provided fields change. Re-enabling clears the failure counter. Use to change events, accounts or url, or to re-enable an endpoint disabled after failures; to stop deliveries temporarily set is_active=false rather than deleting.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNohttps URL that receives the signed JSON POST (http accepted for localhost only).
eventsNoEvent types to subscribe to (message.received, connection.new, account.status_changed, quota.threshold_reached, quota.reached) or ['*'].
is_activeNoPause (false) or resume (true) deliveries.
account_idsNoOnly these LinkedIn account ids; omit for every account of the user.
descriptionNoFree-text label for your own reference.
endpoint_idYesWebhook endpoint id, from list_webhook_endpoints.
idempotency_keyNoOptional. A key you choose (a UUID is fine) that names this exact call. If you retry with the same key and the same arguments, the first call's result is returned and nothing is done twice on LinkedIn. Reusing a key with different arguments is refused. Keys expire after 24 hours.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
urlNo
eventsNo
is_activeNo
created_atNo
account_idsNo
descriptionNo
disabled_reasonNo
last_delivery_atNo
consecutive_failuresNo

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare idempotentHint=true, destructiveHint=false and a non-read-only mutation, so the safety profile is covered. The description goes beyond them by disclosing partial-update semantics ('Only provided fields change') and a side effect the annotations cannot express ('Re-enabling clears the failure counter'). It does not discuss permission requirements, but the added behavioral context is genuine.

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

Conciseness5/5

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

Three short sentences with no filler; the mutable-field list and the partial-update rule come first, and the delete-avoidance guidance is placed last as the corrective. Every clause carries information an agent needs.

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?

Output schema exists, so return values need no explanation, and annotations plus the full-coverage input schema carry the type and safety details. For a straightforward PATCH-style mutation the description supplies everything missing: partial-update behavior, the re-enable side effect, and the alternative to deletion.

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 description coverage is 100%, so the per-parameter baseline is 3. The description adds a cross-cutting semantic rule that the schema does not state — omitted fields are left untouched, so providing events replaces rather than merges — which materially changes how an agent should fill the schema.

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?

Names a specific verb (change/update) plus the resource (webhook endpoint) and enumerates the mutable fields (url, events, account_ids, description, is_active), so it is immediately distinguishable from create_webhook_endpoint, delete_webhook_endpoint, list_webhook_endpoints and test_webhook_endpoint among siblings.

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?

Explicitly states when to use it ('to change events, accounts or url, or to re-enable an endpoint disabled after failures') and gives an explicit alternative for the adjacent case ('to stop deliveries temporarily set is_active=false rather than deleting'). It routes the agent away from delete_webhook_endpoint, which is exactly the confusion risk here.

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

upload_media_from_urlAInspect

Upload an image to LinkedIn by fetching it from a public URL. Returns a digitalmediaAsset URN (urn:li:digitalmediaAsset:…) that can be passed to create_post (single image) or create_multi_photo (multi-photo). Use this instead of upload-media when working as an agent — no binary file upload needed. Use before create_post when the post needs an image; returns the URN create_post expects. For several images, then create_multi_photo.

ParametersJSON Schema
NameRequiredDescriptionDefault
image_urlYesPublicly accessible URL of the image to upload.
account_idYesReach id of the LinkedIn account to act on, from list_accounts.
idempotency_keyNoOptional. A key you choose (a UUID is fine) that names this exact call. If you retry with the same key and the same arguments, the first call's result is returned and nothing is done twice on LinkedIn. Reusing a key with different arguments is refused. Keys expire after 24 hours.
media_upload_typeNoLinkedIn media upload type (default: IMAGE_SHARING).IMAGE_SHARING

Output Schema

ParametersJSON Schema
NameRequiredDescription
urnNourn:li:digitalmediaAsset:… to pass as media_urn

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, openWorldHint=true, idempotentHint=false. The description adds useful context (no binary upload required, returns a URN for chaining) but omits permissions/auth requirements, rate limits, or what happens on failure for a mutating call.

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-loads purpose and stays short, but the last two sentences partially restate the create_post routing already given ('Use before create_post... returns the URN create_post expects') and could be trimmed.

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

Completeness4/5

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

With annotations, a full output schema, and 100% parameter coverage, the description's job is workflow routing, which it handles well. Minor gap: no mention of permission/auth needs for a write operation.

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

Parameters3/5

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

Schema description coverage is 100%, so all four parameters are already documented in the schema. The description only alludes to the URL input ('fetching it from a public URL') and adds no syntax or constraint detail beyond what the schema states. Baseline 3 is correct.

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+resource+mechanism: upload an image to LinkedIn by fetching it from a public URL. Names the return value (digitalmediaAsset URN) and distinguishes itself from the sibling upload-media tool.

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?

Explicitly says when to use it ('instead of upload-media when working as an agent — no binary file upload needed') and when to reach for the downstream siblings (create_post for single image, create_multi_photo for several). Routing is fully spelled out.

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

visit_profileA
Idempotent
Inspect

Simulate a profile view, triggering a 'viewed your profile' notification for the target member. Use to leave a 'viewed your profile' trace as a soft touch before an invitation; counts against the daily visits quota. Not needed to read a profile, use scrape_profile.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYesReach id of the LinkedIn account to act on, from list_accounts.
idempotency_keyNoOptional. A key you choose (a UUID is fine) that names this exact call. If you retry with the same key and the same arguments, the first call's result is returned and nothing is done twice on LinkedIn. Reusing a key with different arguments is refused. Keys expire after 24 hours.
linkedin_id_or_urlYesLinkedIn member ID, vanity name, or profile URL.

Output Schema

ParametersJSON Schema
NameRequiredDescription
visitedNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds genuinely non-redundant behavior: the call produces an outward-facing notification on the target member's side and consumes the daily visits quota. It does not state what the response contains, but the output schema exists, so this is only a minor gap.

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

Conciseness5/5

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

Three tight sentences: what it does, when to use it, and the routing rule to the sibling. The consequence (notification) and the cost (quota) are front-loaded rather than buried.

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 annotations covering safety/idempotency, a complete input schema, and an output schema for return values, the description supplies everything else an agent needs: the write-to-another-user side effect, quota cost, intended workflow position, and the alternative for read-only profile access.

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

Parameters3/5

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

Schema description coverage is 100% and all three parameters (account_id, idempotency_key, linkedin_id_or_url) are documented in the schema, including target format and idempotency semantics. The description adds no parameter-level detail beyond the schema, so the baseline of 3 applies.

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 precise verb and resource ('Simulate a profile view') plus the externally visible consequence ('triggering a viewed your profile notification'). It explicitly names the sibling it is not (scrape_profile), so an agent can separate reading a profile from visiting it without opening either 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?

Gives an explicit when-to-use ('leave a viewed your profile trace as a soft touch before an invitation') and an explicit when-not ('Not needed to read a profile, use scrape_profile' with a named alternative). The quota caveat further constrains when it is sensible to call.

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

withdraw_invitationA
DestructiveIdempotent
Inspect

Withdraw a pending sent connection request. Use to cancel a pending sent invitation (from list_sent_invitations), for example one older than three weeks. Not for received invitations, see decline_invitation.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYesReach id of the LinkedIn account to act on, from list_accounts.
idempotency_keyNoOptional. A key you choose (a UUID is fine) that names this exact call. If you retry with the same key and the same arguments, the first call's result is returned and nothing is done twice on LinkedIn. Reusing a key with different arguments is refused. Keys expire after 24 hours.
linkedin_id_or_urlYesThe LinkedIn member: profile URL, vanity name (the part after /in/), Sales Navigator URL, or internal member id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
withdrawnNo

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, openWorldHint=true and readOnlyHint=false, covering the safety profile. The description adds only the constraint that the target must be pending, but says nothing about reversibility, failure modes, or quota cost. With annotations carrying the burden, this is a modest but acceptable addition.

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

Conciseness5/5

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

Three short sentences, front-loaded with the core action, then usage context, then the exclusion. Every sentence earns its place with no filler.

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

Completeness4/5

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

An output schema exists, so return values need not be described, and the annotations plus schema cover arguments and safety. The description supplies the key routing information; only failure/precondition detail is absent.

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

Parameters3/5

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

Schema description coverage is 100%, so account_id, linkedin_id_or_url and idempotency_key are fully documented in the schema. The description adds no parameter-level detail beyond what is already structured, which matches the baseline 3.

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 (withdraw) and resource (a pending sent connection request), and explicitly delineates it from the sibling decline_invitation. An agent can pick this over the other invitation tools without opening a 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?

Gives the when ('cancel a pending sent invitation from list_sent_invitations, e.g. older than three weeks'), the when-not ('Not for received invitations'), and the named alternative ('see decline_invitation'). Routing is fully specified.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 9 tool updates
    • Removedconnect
    • Changedcreate_job2 fields changed
      • changedInput schema / properties / action / description
        Previous value: -"What every item does. send_message: text + conversation_linkedin_id (reply) or recipient_linkedin_id (new thread). connect: linkedin_id_or_url + optional message (<200 chars). visit_profile: linkedin_id_or_url. comment_post: post_url_or_urn + text."New value: +"What every item does. send_message: text + conversation_linkedin_id (reply) or recipient_linkedin_id (new thread). send_invitation: linkedin_id_or_url + optional message (<200 chars). visit_profile: linkedin_id_or_url. comment_post: post_url_or_urn + text."
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "send_message",
        -  "connect",
        -  "visit_profile",
        -  "comment_post"
        -]New value: +[
        +  "send_message",
        +  "send_invitation",
        +  "visit_profile",
        +  "comment_post"
        +]
    • Removedfollow
    • Addedfollow_member
    • Addedget_invitation_status
    • Removedinvitation_status
    • Addedlist_user_posts
    • Addedsend_invitation
    • Removeduser_posts
  2. 8 tool updates
    • Addedcancel_job
    • Addedcreate_job
    • Changedget_account_quotas6 fields changed
      • addedOutput schema / properties / timezone
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Timezone"
        +}
      • addedOutput schema / properties / window
        Added value: +{
        +  "additionalProperties": true,
        +  "description": "The activity window jobs run in by default.",
        +  "properties": {
        +    "customised": {
        +      "type": "boolean"
        +    },
        +    "days": {
        +      "items": {
        +        "type": "integer"
        +      },
        +      "type": "array"
        +    },
        +    "timezone": {
        +      "type": "string"
        +    },
        +    "window_end": {
        +      "type": "string"
        +    },
        +    "window_start": {
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedOutput schema / properties / window_days
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "integer"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Window Days"
        +}
      • addedOutput schema / properties / window_end
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Window End"
        +}
      • addedOutput schema / properties / window_start
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Window Start"
        +}
      • removedOutput schema / title
        Removed value: -"QuotasOut"
    • Addedget_job
    • Addedlist_jobs
    • Addedpause_job
    • Addedresume_job
    • Changedupdate_account_quotas5 fields changed
      • addedInput schema / properties / timezone
        Added value: +{
        +  "description": "IANA zone for the window, e.g. Europe/Paris. Empty string resets to the zone of the account's proxy country.",
        +  "type": "string"
        +}
      • addedInput schema / properties / window_days
        Added value: +{
        +  "description": "Weekdays jobs may run: mon, tue, wed, thu, fri, sat, sun. Empty list resets to Monday–Friday.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / window_end
        Added value: +{
        +  "description": "HH:MM: jobs on this account stop at this time. Empty string resets to 18:00.",
        +  "type": "string"
        +}
      • addedInput schema / properties / window_start
        Added value: +{
        +  "description": "HH:MM, in the account's timezone: jobs on this account start no earlier. Empty string resets to 09:00.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / window
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
  3. 52 tool updates
    • First observedaccept_invitation
    • First observedarchive_conversation
    • First observedcomment_post
    • First observedconnect
    • First observedcreate_multi_photo
    • First observedcreate_post
    • First observedcreate_webhook_endpoint
    • First observeddecline_invitation
    • First observeddelete_account
    • First observeddelete_conversation
    • First observeddelete_scheduled_post
    • First observeddelete_webhook_endpoint
    • First observedfollow
    • First observedget_account_quotas
    • First observedget_account_request_logs
    • First observedget_account_request_logs_stats
    • First observedget_me
    • First observedinvitation_status
    • First observedlike_post
    • First observedlist_accounts
    • First observedlist_connections
    • First observedlist_conversation_messages
    • First observedlist_conversations
    • First observedlist_received_invitations
    • First observedlist_scheduled_posts
    • First observedlist_sent_invitations
    • First observedlist_webhook_endpoints
    • First observedprofile_viewers
    • First observedreach_playbooks
    • First observedreact_message
    • First observedremove_connection
    • First observedreply_comment
    • First observedsalesnav_build_search_url
    • First observedsalesnav_list_messaging_threads
    • First observedsalesnav_list_thread_messages
    • First observedsalesnav_resolve_industry
    • First observedsalesnav_send_message
    • First observedsalesnav_typeahead
    • First observedscrape_my_posts
    • First observedscrape_post
    • First observedscrape_profile
    • First observedscrape_search
    • First observedsend_message
    • First observedstar_conversation
    • First observedtest_webhook_endpoint
    • First observedupdate_account_quotas
    • First observedupdate_scheduled_post
    • First observedupdate_webhook_endpoint
    • First observedupload_media_from_url
    • First observeduser_posts
    • First observedvisit_profile
    • First observedwithdraw_invitation

Publisher details

Operator
Kanbox · Publisher source
Operator website
https://www.reachmcp.com
Vendor relationship
First-party
Documentation
Not available
Trust center
Not available
Restrictions
Need a paid plan to be run

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Enables brand visibility monitoring across major AI platforms like ChatGPT, Claude, Gemini, and Perplexity. It allows users to track visibility scores, analyze competitor data, and receive actionable insights to improve AI-generated brand recommendations.
    16
    22 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables tracking competitor websites, changelogs, blog feeds, and pricing pages with meaningful diffs, classification, and Markdown digests via MCP tools for listing, adding, removing competitors, running checks, and retrieving digests or changes.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Browse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources