Reach MCP
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.
- Status
- Healthy
- Uptime
- 99.6% over 21 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2024-11-05
- URL
TDQS
Scored across 58 tools
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.
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.
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.
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 toolsaccept_invitationBIdempotentInspect
Accept a pending received connection request. Use to accept a received invitation (invitation_secret from list_received_invitations). Ask the user which ones.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes | Reach id of the LinkedIn account to act on, from list_accounts. | |
| idempotency_key | No | Optional. 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_url | Yes | The LinkedIn member: profile URL, vanity name (the part after /in/), Sales Navigator URL, or internal member id. |
Output Schema
| Name | Required | Description |
|---|---|---|
| accepted | No |
TDQS
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.
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.
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.
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.
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.
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_conversationAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| archive | No | True to archive, False to unarchive. | |
| account_id | Yes | Reach id of the LinkedIn account to act on, from list_accounts. | |
| idempotency_key | No | Optional. 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_id | Yes | Conversation (thread) id, as returned by list_conversations. |
Output Schema
| Name | Required | Description |
|---|---|---|
| archived | No | Current archived state |
TDQS
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.
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.
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.
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.
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.
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_jobADestructiveIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | Job id, as returned by create_job or list_jobs. | |
| idempotency_key | No | Optional. 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
| Name | Required | Description |
|---|---|---|
| id | No | |
| items | No | |
| label | No | |
| action | No | |
| source | No | |
| status | No | |
| totals | No | |
| window | No | |
| resume_at | No | |
| account_id | No | |
| created_at | No | |
| started_at | No | |
| completed_at | No | |
| next_item_at | No | |
| pause_reason | No | quota_reached | account_disconnected | billing | manual |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Comment text. | |
| account_id | Yes | Reach id of the LinkedIn account to act on, from list_accounts. | |
| idempotency_key | No | Optional. 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_urn | Yes | LinkedIn post URL, slug, or URN. |
Output Schema
| Name | Required | Description |
|---|---|---|
| commented | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Weekdays the job may run: mon, tue, wed, thu, fri, sat, sun. Default: the account's window (Monday to Friday unless changed). | |
| items | Yes | One object per action, in the order to execute them; fields depend on the action (see action). | |
| label | No | Short free text shown in the dashboard and in webhook events, e.g. 'Follow-ups week 40'. | |
| action | Yes | 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. | |
| timezone | No | IANA zone such as Europe/Paris. Default: the account's window setting, else the zone of its proxy country. | |
| account_id | Yes | Reach id of the LinkedIn account to act on, from list_accounts. | |
| window_end | No | HH:MM in the job's timezone; default: the account's window (18:00 unless changed). | |
| window_start | No | HH:MM in the job's timezone; default: the account's window (09:00 unless changed). | |
| idempotency_key | No | Optional. 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
| Name | Required | Description |
|---|---|---|
| id | No | |
| items | No | |
| label | No | |
| action | No | |
| source | No | |
| status | No | |
| totals | No | |
| window | No | |
| resume_at | No | |
| account_id | No | |
| created_at | No | |
| started_at | No | |
| completed_at | No | |
| next_item_at | No | |
| pause_reason | No | quota_reached | account_disconnected | billing | manual |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| alt_texts | No | Optional alt text per image (same order as media_urns). | |
| account_id | Yes | Reach id of the LinkedIn account to act on, from list_accounts. | |
| author_urn | Yes | Only messages from this author URN. | |
| media_urns | Yes | List of urn:li:digitalmediaAsset:… URNs. | |
| idempotency_key | No | Optional. 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
| Name | Required | Description |
|---|---|---|
| identifier_urn | No | URN to pass as media_urn of create_post |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Plain text to send or post. | |
| media_urn | No | Optional media URN to attach. | |
| account_id | Yes | Reach id of the LinkedIn account to act on, from list_accounts. | |
| visibility | No | 'ANYONE' or 'CONNECTIONS_ONLY'. | ANYONE |
| scheduled_at | No | Scheduled publish time in Unix milliseconds. Omit to publish now. | |
| idempotency_key | No | Optional. 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_scope | No | 'ALL' or 'CONNECTIONS_ONLY'. | ALL |
Output Schema
| Name | Required | Description |
|---|---|---|
| resource_key | No | Identifier of the created or scheduled post |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | https URL that accepts a JSON POST. | |
| events | Yes | Event types, or ['*']. | |
| account_ids | No | Optional: only these LinkedIn account ids. | |
| description | No | Free-text label for your own reference. | |
| idempotency_key | No | Optional. 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
| Name | Required | Description |
|---|---|---|
| id | No | |
| url | No | |
| note | No | |
| events | No | |
| secret | No | Signing secret, returned once |
| is_active | No | |
| created_at | No | |
| account_ids | No | |
| description | No | |
| disabled_reason | No | |
| last_delivery_at | No | |
| consecutive_failures | No |
TDQS
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.
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.
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.
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.
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.
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_invitationADestructiveIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes | Reach id of the LinkedIn account to act on, from list_accounts. | |
| idempotency_key | No | Optional. 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_url | Yes | The LinkedIn member: profile URL, vanity name (the part after /in/), Sales Navigator URL, or internal member id. |
Output Schema
| Name | Required | Description |
|---|---|---|
| declined | No |
TDQS
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.
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.
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.
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.
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.
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_accountADestructiveIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes | Reach id of the LinkedIn account to act on, from list_accounts. | |
| idempotency_key | No | Optional. 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
| Name | Required | Description |
|---|---|---|
| deleted | No | |
| account_id | No |
TDQS
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.
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.
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.
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.
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.
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_conversationADestructiveIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes | Reach id of the LinkedIn account to act on, from list_accounts. | |
| idempotency_key | No | Optional. 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_id | Yes | Conversation (thread) id, as returned by list_conversations. |
Output Schema
| Name | Required | Description |
|---|---|---|
| deleted | No |
TDQS
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.
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.
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.
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.
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.
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_postADestructiveIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| post_urn | Yes | URN of the scheduled post (urn:li:…), from list_scheduled_posts. | |
| account_id | Yes | Reach id of the LinkedIn account to act on, from list_accounts. | |
| idempotency_key | No | Optional. 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
| Name | Required | Description |
|---|---|---|
| deleted | No | |
| post_urn | No |
TDQS
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.
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.
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.
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.
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.
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_endpointADestructiveIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| endpoint_id | Yes | Webhook endpoint id, from list_webhook_endpoints. | |
| idempotency_key | No | Optional. 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
| Name | Required | Description |
|---|---|---|
| deleted | No | |
| endpoint_id | No |
TDQS
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.
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.
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.
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.
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.
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_memberAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| follow | No | True to follow, False to unfollow. | |
| account_id | Yes | Reach id of the LinkedIn account to act on, from list_accounts. | |
| idempotency_key | No | Optional. 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_url | Yes | The LinkedIn member: profile URL, vanity name (the part after /in/), Sales Navigator URL, or internal member id. |
Output Schema
| Name | Required | Description |
|---|---|---|
| following | No | Current follow state |
TDQS
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.
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.
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.
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.
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.
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_quotasARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes | Reach id of the LinkedIn account to act on, from list_accounts. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| window | No | The activity window jobs run in by default. |
| timezone | No | |
| window_end | No | |
| window_days | No | |
| window_start | No | |
| daily_posts_conf | No | |
| daily_posts_used | No | |
| daily_visits_conf | No | |
| daily_visits_used | No | |
| daily_comments_conf | No | |
| daily_comments_used | No | |
| daily_messages_conf | No | |
| daily_messages_used | No | |
| daily_reactions_conf | No | |
| daily_reactions_used | No | |
| daily_invitations_conf | No | |
| daily_invitations_used | No | |
| daily_imports_salesnav_conf | No | |
| daily_imports_salesnav_used | No | |
| daily_imports_standard_conf | No | |
| daily_imports_standard_used | No | |
| daily_imports_recruiter_conf | No | |
| daily_imports_recruiter_used | No |
TDQS
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.
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.
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.
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.
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.
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_logsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of rows to return. | |
| offset | No | Number of rows to skip. | |
| account_id | Yes | Reach id of the LinkedIn account to act on, from list_accounts. | |
| request_type | No | Only rows of this request type (for example send_message, list_conversations, connect). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | Request log rows, newest first. |
TDQS
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.
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.
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.
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.
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.
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_statsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | End of the period, ISO 8601 (default: now). | |
| group_by | No | Bucket size for the statistics: day, week or month. | |
| account_id | Yes | Reach id of the LinkedIn account to act on, from list_accounts. | |
| start_date | No | Start of the period, ISO 8601 (default: 30 days ago). | |
| request_type | No | Only rows of this request type (for example send_message, list_conversations, connect). |
Output Schema
| Name | Required | Description |
|---|---|---|
| buckets | No | |
| end_date | No | |
| group_by | No | |
| start_date | No | |
| request_type | No | |
| available_actions | No |
TDQS
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.
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.
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.
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.
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.
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_statusARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes | Reach id of the LinkedIn account to act on, from list_accounts. | |
| linkedin_id_or_url | Yes | The LinkedIn member: profile URL, vanity name (the part after /in/), Sales Navigator URL, or internal member id. |
Output Schema
| Name | Required | Description |
|---|---|---|
| degree | No | Connection distance (1, 2 or 3). |
| invitation_id | No | Invitation URN, if any. |
| is_connection | No | True if the member is a 1st-degree connection. |
| invitation_type | No | 'SENT' (pending sent), 'PENDING' (received, awaiting acceptance), 'WITHDRAWN', or 'REFUSED'. |
| invitation_secret | No | Shared secret, required to accept a received invitation. |
TDQS
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.
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.
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.
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.
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.
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_jobARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | Job id, as returned by create_job or list_jobs. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| items | No | |
| label | No | |
| action | No | |
| source | No | |
| status | No | |
| totals | No | |
| window | No | |
| resume_at | No | |
| account_id | No | |
| created_at | No | |
| started_at | No | |
| completed_at | No | |
| next_item_at | No | |
| pause_reason | No | quota_reached | account_disconnected | billing | manual |
TDQS
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.
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.
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.
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.
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.
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_meARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes | Reach id of the LinkedIn account to act on, from list_accounts. |
Output Schema
| Name | Required | Description |
|---|---|---|
| picture | No | Profile picture URL derived from VectorImage artifacts. |
| headline | No | |
| lastname | No | |
| firstname | No | |
| is_premium | No | |
| linkedin_id | No | MiniProfile id (entityUrn suffix after fs_miniProfile:). |
| linkedin_plain_id | No | Numeric member id from objectUrn. |
| linkedin_public_id | No | Public / vanity identifier. |
TDQS
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.
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.
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.
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.
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.
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_postAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes | Reach id of the LinkedIn account to act on, from list_accounts. | |
| idempotency_key | No | Optional. 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_urn | Yes | LinkedIn post URL, slug, or urn:li:activity:…. |
Output Schema
| Name | Required | Description |
|---|---|---|
| liked | No |
TDQS
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.
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.
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.
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.
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.
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_accountsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | Connected LinkedIn accounts visible to this key. |
TDQS
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.
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.
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.
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.
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.
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_connectionsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Page size. | |
| start | No | Pagination offset, 0-based. | |
| account_id | Yes | Reach id of the LinkedIn account to act on, from list_accounts. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | Requested page size. |
| items | No | |
| start | No | Offset used for this request. |
| total | No | Total connections reported by LinkedIn ``paging.total``. |
| next_start | No | If set, use as the ``start`` query param for the next page (Kanbox-style paging). |
TDQS
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.
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.
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.
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.
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.
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_messagesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes | Reach id of the LinkedIn account to act on, from list_accounts. | |
| created_before | No | Only messages created before this Unix timestamp in milliseconds, to page back in time. | |
| conversation_linkedin_id | Yes | Conversation (thread) id, as returned by list_conversations. |
Output Schema
| Name | Required | Description |
|---|---|---|
| has_more | No | True when LinkedIn likely has older events (page size 20). |
| messages | No | |
| total_count | No | Number of messages in this response. |
| next_created_before | No | Pass as ``created_before`` to fetch the next (older) page. |
| conversation_linkedin_id | No | Kanbox ``Conversation.linkedin_id`` / conversation key. |
TDQS
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.
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.
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.
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.
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.
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_conversationsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Page size. | |
| unread | No | Only conversations with unread messages. | |
| starred | No | Only starred conversations. | |
| archived | No | Only archived conversations. | |
| account_id | Yes | Reach id of the LinkedIn account to act on, from list_accounts. | |
| next_cursor | No | Cursor returned by the previous page; omit for the first page. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | Requested page size (LinkedIn typically caps at 25). |
| items | No | |
| unread | No | Matches query: unread filter (search query with ``read:false``). |
| starred | No | Matches query: starred folder or client filter when combined. |
| archived | No | Matches query: archived folder (``category:ARCHIVE``) when not unread. |
| next_cursor | No | Pass as ``next_cursor`` for the following page when present. |
TDQS
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.
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.
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.
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.
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.
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_jobsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of jobs; default 50. | |
| status | No | Only jobs in this status. | |
| account_id | No | Reach id of the LinkedIn account to act on, from list_accounts. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| items | No | Jobs, newest first. |
TDQS
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.
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.
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.
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.
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.
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_invitationsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Page size (max 100). | |
| start | No | Pagination offset, 0-based. | |
| account_id | Yes | Reach id of the LinkedIn account to act on, from list_accounts. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| start | No | |
| total | No | |
| invitations | No |
TDQS
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.
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.
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.
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.
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.
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_postsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Page size. | |
| start | No | Pagination offset, 0-based. | |
| account_id | Yes | Reach id of the LinkedIn account to act on, from list_accounts. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| posts | No | |
| start | No | |
| total | No | Total number of scheduled posts. |
TDQS
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.
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.
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.
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.
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.
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_invitationsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Page size (max 100). | |
| start | No | Pagination offset, 0-based. | |
| account_id | Yes | Reach id of the LinkedIn account to act on, from list_accounts. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| start | No | |
| total | No | |
| invitations | No |
TDQS
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.
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.
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.
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.
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.
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_postsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of posts (max 50). | |
| start | No | Pagination offset. | |
| account_id | Yes | Reach id of the LinkedIn account to act on, from list_accounts. | |
| linkedin_id_or_url | Yes | LinkedIn member ID, vanity name, or profile URL. |
Output Schema
| Name | Required | Description |
|---|---|---|
| posts | No | |
| total_posts | No |
TDQS
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.
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.
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.
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.
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.
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_endpointsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| endpoints | No | |
| event_types | No |
TDQS
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.
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.
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.
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.
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.
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_jobAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | Job id, as returned by create_job or list_jobs. | |
| idempotency_key | No | Optional. 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
| Name | Required | Description |
|---|---|---|
| id | No | |
| items | No | |
| label | No | |
| action | No | |
| source | No | |
| status | No | |
| totals | No | |
| window | No | |
| resume_at | No | |
| account_id | No | |
| created_at | No | |
| started_at | No | |
| completed_at | No | |
| next_item_at | No | |
| pause_reason | No | quota_reached | account_disconnected | billing | manual |
TDQS
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.
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.
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.
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.
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.
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_viewersARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes | Reach id of the LinkedIn account to act on, from list_accounts. |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | No | |
| viewers | No |
TDQS
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.
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.
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.
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.
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.
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_playbooksARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| playbook_id | No | Id of one playbook from the catalogue, to get its full instructions. | |
| include_instructions | No | Also return the full instruction text of every playbook (longer output). |
Output Schema
| Name | Required | Description |
|---|---|---|
| playbook | No | |
| playbooks | No | |
| how_to_use | No |
TDQS
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.
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.
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.
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.
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.
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_messageAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| emoji | Yes | Unicode emoji character (e.g. 👍, ❤️). | |
| react | No | True to add the reaction, False to remove it. | |
| account_id | Yes | Reach id of the LinkedIn account to act on, from list_accounts. | |
| message_urn | Yes | Full message URN to react to. | |
| idempotency_key | No | Optional. 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_id | No | Conversation ID — when provided the conversation is marked as read. |
Output Schema
| Name | Required | Description |
|---|---|---|
| emoji | No | |
| reacted | No |
TDQS
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.
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.
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.
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.
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.
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_connectionADestructiveIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes | Reach id of the LinkedIn account to act on, from list_accounts. | |
| idempotency_key | No | Optional. 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_url | Yes | The LinkedIn member: profile URL, vanity name (the part after /in/), Sales Navigator URL, or internal member id. |
Output Schema
| Name | Required | Description |
|---|---|---|
| removed | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Reply text. | |
| account_id | Yes | Reach id of the LinkedIn account to act on, from list_accounts. | |
| comment_urn | Yes | URN of the comment to reply to (comment_id from scrape-post). | |
| idempotency_key | No | Optional. 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
| Name | Required | Description |
|---|---|---|
| replied | No |
TDQS
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.
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.
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.
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.
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.
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_jobAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | Job id, as returned by create_job or list_jobs. | |
| idempotency_key | No | Optional. 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
| Name | Required | Description |
|---|---|---|
| id | No | |
| items | No | |
| label | No | |
| action | No | |
| source | No | |
| status | No | |
| totals | No | |
| window | No | |
| resume_at | No | |
| account_id | No | |
| created_at | No | |
| started_at | No | |
| completed_at | No | |
| next_item_at | No | |
| pause_reason | No | quota_reached | account_disconnected | billing | manual |
TDQS
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.
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.
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.
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.
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.
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.
scrape_my_postsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| liked | No | Include the people who liked. | |
| comments | No | Include the people who commented, with their comment text. | |
| max_posts | No | Max posts to process (max 20). | |
| account_id | Yes | Reach id of the LinkedIn account to act on, from list_accounts. | |
| since_hours | No | Only posts from the last N hours (max 720). |
Output Schema
| Name | Required | Description |
|---|---|---|
| posts | No | |
| total_posts | No |
TDQS
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.
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.
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.
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.
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.
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_postARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| liked | No | Include likers. | |
| comments | No | Include commenters. | |
| account_id | Yes | Reach id of the LinkedIn account to act on, from list_accounts. | |
| post_id_or_url | Yes | LinkedIn post URL or slug. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | No | |
| post_id | No | |
| total_likes | No | |
| total_comments | No |
TDQS
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.
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.
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.
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.
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.
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_profileARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes | Reach id of the LinkedIn account to act on, from list_accounts. | |
| linkedin_id_or_url | Yes | LinkedIn profile URL, vanity name, Sales Navigator URL, or internal member ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| job | No | Current job title. |
| degree | No | Network degree: 1, 2, or 3. |
| skills | No | |
| company | No | Current company name. |
| picture | No | Profile picture URL. |
| summary | No | |
| headline | No | |
| industry | No | |
| lastname | No | |
| location | No | |
| firstname | No | |
| full_name | No | Full name as returned by LinkedIn (standard search only). |
| languages | No | |
| company_id | No | LinkedIn company ID. |
| is_premium | No | |
| connections | No | |
| linkedin_id | No | Profile ID (fsd_profile or ts_profile suffix). |
| profile_url | No | Public LinkedIn profile URL. |
| company_logo | No | |
| company_type | No | |
| year_company | No | Tenure at current company (years). |
| is_opentowork | No | |
| month_company | No | Tenure at current company (months). |
| year_position | No | Tenure at current position (years). |
| month_position | No | Tenure at current position (months). |
| company_website | No | |
| is_open_profile | No | |
| job_description | No | |
| company_industry | No | |
| company_linkedin | No | LinkedIn company page URL. |
| company_location | No | |
| linkedin_plain_id | No | Numeric member ID (objectUrn suffix). |
| linkedin_public_id | No | Vanity URL slug (/in/<slug>). |
| salesnavigator_url | No | Sales Navigator profile URL (SalesNav searches only). |
| startyear_position | No | |
| company_description | No | |
| company_specialties | No | |
| startmonth_position | No | |
| company_year_founded | No | |
| company_employee_count | No | |
| company_employee_range | No |
TDQS
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.
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.
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.
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.
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.
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.
scrape_searchARead-onlyIdempotentInspect
Run one page of a LinkedIn, Sales Navigator, or Recruiter search and return normalized profile rows. Pass the full search URL. Use start+count to paginate (count ignored for standard LinkedIn, fixed ~10/page). Use to run a search URL you have (LinkedIn, Sales Navigator, Recruiter) one page at a time; build the Sales Navigator URL with salesnav_build_search_url first. Counts against the imports quota.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Full LinkedIn / SalesNav / Recruiter search URL. | |
| count | No | Page size (max 25). Ignored for standard LinkedIn. | |
| start | No | Pagination offset. | |
| account_id | Yes | Reach id of the LinkedIn account to act on, from list_accounts. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | Requested page size. |
| items | No | |
| start | No | Offset used for this request. |
| total | No | Total results reported by LinkedIn. |
| next_start | No | Pass as ``start`` for the next page when present. |
TDQS
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 beyond annotations: it counts against the imports quota and that count is ignored (fixed ~10/page) for standard LinkedIn. It stops short of describing output shape, but the output schema 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose and quota note are front-loaded, which is good. However, the description restates the resource list twice ('LinkedIn, Sales Navigator, or Recruiter' appears in both the first and third clauses), which is redundant and slightly dilutes a short description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a paged read tool with full schema coverage, an output schema, and annotations handling the safety profile, the description covers the remaining gaps: quota cost, pagination limits, and the salesnav_build_search_url prerequisite. Nothing an agent needs 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage the baseline is 3, and the schema already documents url, count, start, and account_id. The description adds real meaning beyond the schema by clarifying the count behavior for standard LinkedIn (fixed ~10/page) and framing start+count as a pagination pair, which the per-parameter schema text does not convey as a workflow.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Run one page of a LinkedIn, Sales Navigator, or Recruiter search and return normalized profile rows'), making clear it is a paged search-scrape, not a profile or post scraper. This distinguishes it cleanly from siblings like scrape_profile, scrape_post, and salesnav_build_search_url.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to run a search URL you already have, one page at a time, and names the prerequisite step ('build the Sales Navigator URL with salesnav_build_search_url first'). Pagination mechanics with start+count are also given, 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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| message | No | Optional personalised invitation note. | |
| account_id | Yes | Reach id of the LinkedIn account to act on, from list_accounts. | |
| idempotency_key | No | Optional. 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_url | Yes | LinkedIn member ID, vanity name, or profile URL. |
Output Schema
| Name | Required | Description |
|---|---|---|
| connected | No | Invitation sent |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | Plain text to send or post. | |
| account_id | Yes | Reach id of the LinkedIn account to act on, from list_accounts. | |
| idempotency_key | No | Optional. 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_premium | No | Send as InMail to someone outside the network (premium accounts); requires recipient_linkedin_id. | |
| recipient_linkedin_id | No | Recipient 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_id | No | Conversation (thread) id, as returned by list_conversations. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | |
| status_code | No | HTTP status from LinkedIn (e.g. 201 on success). |
TDQS
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.
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.
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.
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.
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.
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_conversationAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| star | No | True to star, False to unstar. | |
| account_id | Yes | Reach id of the LinkedIn account to act on, from list_accounts. | |
| idempotency_key | No | Optional. 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_id | Yes | Conversation (thread) id, as returned by list_conversations. |
Output Schema
| Name | Required | Description |
|---|---|---|
| starred | No | Current starred state |
TDQS
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.
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.
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.
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.
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.
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_endpointARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| endpoint_id | Yes | Webhook endpoint id, from list_webhook_endpoints. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| response_status | No | |
| response_excerpt | No |
TDQS
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.
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.
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.
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.
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.
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_quotasAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| timezone | No | IANA zone for the window, e.g. Europe/Paris. Empty string resets to the zone of the account's proxy country. | |
| account_id | Yes | Reach id of the LinkedIn account to act on, from list_accounts. | |
| window_end | No | HH:MM: jobs on this account stop at this time. Empty string resets to 18:00. | |
| window_days | No | Weekdays jobs may run: mon, tue, wed, thu, fri, sat, sun. Empty list resets to Monday–Friday. | |
| window_start | No | HH:MM, in the account's timezone: jobs on this account start no earlier. Empty string resets to 09:00. | |
| idempotency_key | No | Optional. 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_conf | No | Daily limit for 'posts' on this account; 0 means unlimited. | |
| daily_visits_conf | No | Daily limit for 'visits' on this account; 0 means unlimited. | |
| daily_comments_conf | No | Daily limit for 'comments' on this account; 0 means unlimited. | |
| daily_messages_conf | No | Daily limit for 'messages' on this account; 0 means unlimited. | |
| daily_reactions_conf | No | Daily limit for 'reactions' on this account; 0 means unlimited. | |
| daily_invitations_conf | No | Daily limit for 'invitations' on this account; 0 means unlimited. | |
| daily_imports_salesnav_conf | No | Daily limit for 'imports_salesnav' on this account; 0 means unlimited. | |
| daily_imports_standard_conf | No | Daily limit for 'imports_standard' on this account; 0 means unlimited. | |
| daily_imports_recruiter_conf | No | Daily limit for 'imports_recruiter' on this account; 0 means unlimited. |
Output Schema
| Name | Required | Description |
|---|---|---|
| quotas | No | |
| window | No | |
| updated | No | |
| account_id | No |
TDQS
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.
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.
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.
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.
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.
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_postAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | Plain text to send or post. | |
| post_urn | Yes | URN of the scheduled post (urn:li:…), from list_scheduled_posts. | |
| account_id | Yes | Reach id of the LinkedIn account to act on, from list_accounts. | |
| scheduled_at | No | Unix timestamp in milliseconds. | |
| idempotency_key | No | Optional. 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
| Name | Required | Description |
|---|---|---|
| updated | No | |
| post_urn | No |
TDQS
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.
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.
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.
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.
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.
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_endpointAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | https URL that receives the signed JSON POST (http accepted for localhost only). | |
| events | No | Event types to subscribe to (message.received, connection.new, account.status_changed, quota.threshold_reached, quota.reached) or ['*']. | |
| is_active | No | Pause (false) or resume (true) deliveries. | |
| account_ids | No | Only these LinkedIn account ids; omit for every account of the user. | |
| description | No | Free-text label for your own reference. | |
| endpoint_id | Yes | Webhook endpoint id, from list_webhook_endpoints. | |
| idempotency_key | No | Optional. 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
| Name | Required | Description |
|---|---|---|
| id | No | |
| url | No | |
| events | No | |
| is_active | No | |
| created_at | No | |
| account_ids | No | |
| description | No | |
| disabled_reason | No | |
| last_delivery_at | No | |
| consecutive_failures | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| image_url | Yes | Publicly accessible URL of the image to upload. | |
| account_id | Yes | Reach id of the LinkedIn account to act on, from list_accounts. | |
| idempotency_key | No | Optional. 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_type | No | LinkedIn media upload type (default: IMAGE_SHARING). | IMAGE_SHARING |
Output Schema
| Name | Required | Description |
|---|---|---|
| urn | No | urn:li:digitalmediaAsset:… to pass as media_urn |
TDQS
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.
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.
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.
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.
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.
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_profileAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes | Reach id of the LinkedIn account to act on, from list_accounts. | |
| idempotency_key | No | Optional. 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_url | Yes | LinkedIn member ID, vanity name, or profile URL. |
Output Schema
| Name | Required | Description |
|---|---|---|
| visited | No |
TDQS
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.
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.
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.
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.
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.
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_invitationADestructiveIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes | Reach id of the LinkedIn account to act on, from list_accounts. | |
| idempotency_key | No | Optional. 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_url | Yes | The LinkedIn member: profile URL, vanity name (the part after /in/), Sales Navigator URL, or internal member id. |
Output Schema
| Name | Required | Description |
|---|---|---|
| withdrawn | No |
TDQS
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.
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.
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.
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.
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.
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.
9 tool updates
- Removed
connect - Changed
create_job2 fields changed- changed
Input schema / properties / action / descriptionPrevious 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." - changed
Input schema / properties / action / enumPrevious value: -[ - "send_message", - "connect", - "visit_profile", - "comment_post" -]New value: +[ + "send_message", + "send_invitation", + "visit_profile", + "comment_post" +]
- Removed
follow - Added
follow_member - Added
get_invitation_status - Removed
invitation_status - Added
list_user_posts - Added
send_invitation - Removed
user_posts
8 tool updates
- Added
cancel_job - Added
create_job - Changed
get_account_quotas6 fields changed- added
Output schema / properties / timezoneAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Timezone" +} - added
Output schema / properties / windowAdded 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" +} - added
Output schema / properties / window_daysAdded value: +{ + "anyOf": [ + { + "items": { + "type": "integer" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Window Days" +} - added
Output schema / properties / window_endAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Window End" +} - added
Output schema / properties / window_startAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Window Start" +} - removed
Output schema / titleRemoved value: -"QuotasOut"
- Added
get_job - Added
list_jobs - Added
pause_job - Added
resume_job - Changed
update_account_quotas5 fields changed- added
Input schema / properties / timezoneAdded 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" +} - added
Input schema / properties / window_daysAdded value: +{ + "description": "Weekdays jobs may run: mon, tue, wed, thu, fri, sat, sun. Empty list resets to Monday–Friday.", + "items": { + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / window_endAdded value: +{ + "description": "HH:MM: jobs on this account stop at this time. Empty string resets to 18:00.", + "type": "string" +} - added
Input schema / properties / window_startAdded value: +{ + "description": "HH:MM, in the account's timezone: jobs on this account start no earlier. Empty string resets to 09:00.", + "type": "string" +} - added
Output schema / properties / windowAdded value: +{ + "additionalProperties": true, + "type": "object" +}
52 tool updates
- First observed
accept_invitation - First observed
archive_conversation - First observed
comment_post - First observed
connect - First observed
create_multi_photo - First observed
create_post - First observed
create_webhook_endpoint - First observed
decline_invitation - First observed
delete_account - First observed
delete_conversation - First observed
delete_scheduled_post - First observed
delete_webhook_endpoint - First observed
follow - First observed
get_account_quotas - First observed
get_account_request_logs - First observed
get_account_request_logs_stats - First observed
get_me - First observed
invitation_status - First observed
like_post - First observed
list_accounts - First observed
list_connections - First observed
list_conversation_messages - First observed
list_conversations - First observed
list_received_invitations - First observed
list_scheduled_posts - First observed
list_sent_invitations - First observed
list_webhook_endpoints - First observed
profile_viewers - First observed
reach_playbooks - First observed
react_message - First observed
remove_connection - First observed
reply_comment - First observed
salesnav_build_search_url - First observed
salesnav_list_messaging_threads - First observed
salesnav_list_thread_messages - First observed
salesnav_resolve_industry - First observed
salesnav_send_message - First observed
salesnav_typeahead - First observed
scrape_my_posts - First observed
scrape_post - First observed
scrape_profile - First observed
scrape_search - First observed
send_message - First observed
star_conversation - First observed
test_webhook_endpoint - First observed
update_account_quotas - First observed
update_scheduled_post - First observed
update_webhook_endpoint - First observed
upload_media_from_url - First observed
user_posts - First observed
visit_profile - First observed
withdraw_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
- AlicenseAqualityCmaintenanceEnables 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.1622 npm1MIT
- AlicenseCqualityAmaintenanceCompetitor Monitor AI - MCP server providing AI-powered tools and automation by MEOK AI Labs119 npm37 PyPIMIT
- AlicenseNot gradedqualityBmaintenanceEnables 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

industrylens-mcpofficial
AlicenseNot gradedqualityBmaintenanceBrowse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.