Skip to main content
Glama

List Pending Sent Invitations

li_pending_invites
Read-only

Read the connection invites this account has sent that are still pending, newest-age-last, each with how many days ago it was sent. Opens a browser session on the account. Read-only — pair it with li_withdraw_invites to clean up; the invites this system itself tracks are li_connections (DB, instant).

READ reach BEFORE CONCLUDING ANYTHING: 'complete' = every pending invitation was read; 'partial' = the walk stopped early (limitedBy says why), so somebody absent may simply be further down; 'failed' = the list could not be read, which is NOT an empty backlog. An account with nothing pending comes back 'complete' with pendingOnLinkedIn 0 (LinkedIn's own "No sent invitations" page).

pendingOnLinkedIn is LinkedIn's OWN published total and is null when unreadable, never 0 — do not substitute a count of the rows below. trackedPendingInDb shows how many this system itself is tracking, which is lower for any account with manual outreach.

Input Schema

NameRequiredDescriptionDefault
sessionIdNoAccount id from li_list_accounts. Omit (with sessionLabel) to use your default account.
maxInvitesNoStop after this many, newest first — e.g. 100 for a quick look. Omit to read the WHOLE backlog, which is what you want before bulk-enriching or deciding in one pass, but costs minutes of browser time (~10 invitations per second of scrolling) and holds the browser session for that account throughout, so nothing else on it runs until it finishes.
sessionLabelNoAccount by label, LinkedIn name, profile slug or member id (li_list_accounts). Omit (with sessionId) to use your default account.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedInput schema / properties / sessionId / description
      Added value: +"Account id from li_list_accounts. Omit (with sessionLabel) to use your default account."
    • addedInput schema / properties / sessionLabel / description
      Added value: +"Account by label, LinkedIn name, profile slug or member id (li_list_accounts). Omit (with sessionId) to use your default account."
  2. First observed

TDQS

A4.4/5.0
Behavior5/5

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

Annotations (readOnlyHint true, openWorldHint true, destructiveHint false) are consistent with 'Read-only', and the description goes well beyond them: it discloses that it opens a browser session, that the session is held for the account throughout, and it defines the semantics of the `reach` field ('complete'/'partial' with limitedBy/'failed' ≠ empty backlog). That is exactly the kind of behavioral context annotations cannot carry.

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

Conciseness4/5

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

Front-loaded with the operation and its scope, then the result-interpretation guidance. Every sentence is load-bearing (reach semantics, null handling, DB vs LinkedIn counts), though the all-caps warning and the density of field references make it heavier than it needs to be.

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

Completeness5/5

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

There is no output schema, and the description compensates by explaining the return semantics it would otherwise lack: reach/limitedBy, pendingOnLinkedIn being null-not-0, and trackedPendingInDb tracking fewer than LinkedIn's total for manual-outreach accounts. An agent has what it needs to call this and interpret the result correctly.

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

Parameters3/5

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

Schema coverage is 100% and the schema descriptions themselves already carry the cost/blocking rationale for maxInvites and the sessionId/sessionLabel fallback behavior, so the description adds essentially nothing parameter-specific (it never mentions sessionId/sessionLabel semantics). Baseline 3 applies when the schema does the heavy lifting.

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

Purpose5/5

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

Specific verb+resource+scope: 'Read the connection invites this account has sent that are still pending, newest-age-last, each with how many days ago it was sent.' It also explicitly separates itself from two siblings, li_withdraw_invites (cleanup) and li_connections (DB-tracked, instant), so an agent can pick correctly without opening schemas.

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

Usage Guidelines4/5

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

Names the pairing action ('pair it with li_withdraw_invites to clean up') and the distinguishing alternative ('the invites this system itself tracks are li_connections (DB, instant)'), plus context on when to set maxInvites (quick look vs whole backlog before bulk-enriching). No explicit when-not-to-call or prerequisite statements, hence not a 5.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources