PoliteReach
Server Details
LinkedIn outreach from Claude: invites under safe caps, follow-ups, replies and inbox triage.
The last two health checks of this connector failed. If this server requires authentication, missing or expired test credentials may be the cause. A test profile lets Glama authenticate for health checks and discover tools; it is separate from your personal connections.
If you are the author, claim ownership, then add or update a test profile under Admin → Test Profile.
- Status
- Unhealthy
- Uptime
- 0.0% over the last 24 hours
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP
- URL
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 104 tools
Given ~100 tools in one domain, the boundaries are unusually explicit: descriptions name their neighbours and say when NOT to use a tool (li_cancel_steps vs li_mark_stopped, li_conversation_history vs li_read_conversation, li_send_reply vs li_send_message vs li_send_bulk_messages, li_check_targets vs the built-in collision report). Overlap remains in the read surfaces — list_conversations / read_conversation / read_conversations_bulk / conversation_history / replies_to_answer all expose threads — and several near-synonym pairs (li_pending_invites vs li_connections, li_connections vs li_new_connections) require careful reading rather than being self-evident from the name.
Almost everything follows li_<verb>_<noun> snake_case (li_create_campaign, li_mark_outcome, li_cancel_steps), with the li_ prefix applied uniformly across all 104 tools. Deviations are few but real: a handful are bare nouns or noun phrases (li_connections, li_bookings, li_proxies, li_replies_to_answer, li_account_activity, li_outcome_summary, li_selector_canary), so the verb is not always predictive of read-vs-write.
At 104 tools this is far past any practical ceiling for reliable agent selection, and the surface spans at least four unrelated domains in one server: outreach operations, enrichment/research, triage, and operator-only billing/proxy/infrastructure admin. Whole clusters could be collapsed (e.g. one conversation-read tool with a scope flag, one bulk-vs-single send, one campaign-create/ingest) rather than each variant being its own tool.
Every lifecycle has full coverage including the awkward parts: create/edit/cancel/launch/pause/resume campaigns, hold steps, reset contacts, undo mistaken marks, per-person and campaign-wide copy edits, dry-run previews, pagination with explicit truncation flags, and job-based recovery for timed-out async work. Operator surfaces (billing, proxies, invites breaker, health) and safety surfaces (do-not-contact, install-wide holds, send confirmations) are all present rather than left as gaps.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
- Changed
li_fetch_posts2 fields changed- changed
Input schema / properties / maxPosts / descriptionPrevious value: -"How many of each person's latest posts to return, 1 to 3. Default 3. Costs the same either way: 1 lookup per person."New value: +"How many of each person's latest posts to return, 1 to 2 (more is read as 2). Default 2. Costs the same either way: 1 lookup per person." - removed
Input schema / properties / maxPosts / maximumRemoved value: -3
- Changed
li_search_leads2 fields changed- changed
Input schema / properties / currentCompanies / descriptionPrevious value: -"People who work at these companies NOW, as LinkedIn company page URLs (https://www.linkedin.com/company/<name>/). A company name alone is refused. Up to 50."New value: +"People who work at these companies NOW, as LinkedIn company page URLs (https://www.linkedin.com/company/<name>/). A company name alone is refused. Up to 50, matched as ANY of them: put every target company in this one call, never one call per company." - changed
Input schema / properties / maxResults / descriptionPrevious value: -"How many people to return, default 25, at most 100. Rounded UP to whole pages of 25 (pages are billed whole), and charged per person actually returned."New value: +"How many people to return, default 25, at most 100. Rounded UP to whole pages of 25; each page that returns anyone is charged whole (25 lookups), and a search that finds nobody costs nothing."
3 tool updates
- Changed
li_create_campaign2 fields changed- changed
Input schema / properties / csvText / descriptionPrevious value: -"CSV text with profile_url plus optional connection_note and step text columns (first_message, follow_up_1, follow_up_2, follow_up_3, closer), and optional engage_post_url / engage_reaction (a post of theirs the account reacts to a day or more before the invite; see engagePostUrl on targets). At most 50 rows, shared with `targets`."New value: +"CSV text with profile_url plus optional connection_note and step text columns (first_message, follow_up_1, follow_up_2, follow_up_3, closer), and optional engage_post_url / engage_reaction (a post of theirs the account reacts to about a day before the invite, never less than 16 hours; see engagePostUrl on targets). At most 50 rows, shared with `targets`." - changed
Input schema / properties / targets / items / properties / engagePostUrl / descriptionPrevious value: -"Engage-before-invite: ONE of this person's own recent posts (https://www.linkedin.com/feed/update/urn:li:activity:<id>/ or a /posts/ link), the one the note and first message mention. The sending account visits their profile and reacts to it a day or more BEFORE the invite goes out (about one in seven is only viewed), and the invite then waits 20-60 hours. Connection stage only: ignored for message-stage prospects. A link that is not a LinkedIn post refuses the row. If the post is gone or turns out not to be theirs, nothing is clicked and the invite goes ahead without it."New value: +"Engage-before-invite: ONE of this person's own recent posts (https://www.linkedin.com/feed/update/urn:li:activity:<id>/ or a /posts/ link), the one the note and first message mention. The sending account visits their profile and reacts to it first (about one in seven is only viewed). The invite follows about a day later, never sooner than 16 hours, inside the window it goes out in: the person's own morning invite window when the account times invites to each prospect, otherwise the account's sending hours (18-30 hours when there is no window to aim at, such as sending hours switched off). Connection stage only: ignored for message-stage prospects. A link that is not a LinkedIn post refuses the row. If the post is gone or turns out not to be theirs, nothing is clicked and the invite goes ahead without it."
- Changed
li_experiment_assign1 field changed- changed
Input schema / properties / prospects / items / properties / engagePostUrl / descriptionPrevious value: -"Engage-before-invite: ONE of this person's own recent posts (https://www.linkedin.com/feed/update/urn:li:activity:<id>/ or a /posts/ link), the one the note and first message mention. The sending account visits their profile and reacts to it a day or more BEFORE the invite goes out (about one in seven is only viewed), and the invite then waits 20-60 hours. Connection stage only: ignored for message-stage prospects. A link that is not a LinkedIn post refuses the row. If the post is gone or turns out not to be theirs, nothing is clicked and the invite goes ahead without it."New value: +"Engage-before-invite: ONE of this person's own recent posts (https://www.linkedin.com/feed/update/urn:li:activity:<id>/ or a /posts/ link), the one the note and first message mention. The sending account visits their profile and reacts to it first (about one in seven is only viewed). The invite follows about a day later, never sooner than 16 hours, inside the window it goes out in: the person's own morning invite window when the account times invites to each prospect, otherwise the account's sending hours (18-30 hours when there is no window to aim at, such as sending hours switched off). Connection stage only: ignored for message-stage prospects. A link that is not a LinkedIn post refuses the row. If the post is gone or turns out not to be theirs, nothing is clicked and the invite goes ahead without it."
- Changed
li_ingest_prospects1 field changed- changed
Input schema / properties / prospects / items / properties / engagePostUrl / descriptionPrevious value: -"Engage-before-invite: ONE of this person's own recent posts (https://www.linkedin.com/feed/update/urn:li:activity:<id>/ or a /posts/ link), the one the note and first message mention. The sending account visits their profile and reacts to it a day or more BEFORE the invite goes out (about one in seven is only viewed), and the invite then waits 20-60 hours. Connection stage only: ignored for message-stage prospects. A link that is not a LinkedIn post refuses the row. If the post is gone or turns out not to be theirs, nothing is clicked and the invite goes ahead without it."New value: +"Engage-before-invite: ONE of this person's own recent posts (https://www.linkedin.com/feed/update/urn:li:activity:<id>/ or a /posts/ link), the one the note and first message mention. The sending account visits their profile and reacts to it first (about one in seven is only viewed). The invite follows about a day later, never sooner than 16 hours, inside the window it goes out in: the person's own morning invite window when the account times invites to each prospect, otherwise the account's sending hours (18-30 hours when there is no window to aim at, such as sending hours switched off). Connection stage only: ignored for message-stage prospects. A link that is not a LinkedIn post refuses the row. If the post is gone or turns out not to be theirs, nothing is clicked and the invite goes ahead without it."
2 tool updates
- Added
li_ignore_calendar_event - Changed
li_send_reply1 field changed- changed
Input schema / properties / bookingNudge / descriptionPrevious value: -"These messages are BOOKING NUDGES for people li_booking_due listed with nextAction \"nudge\". Each is REFUSED unless that person agreed (li_track_booking), their check date has arrived, they have nudges left, no nudge went out in the last 20 hours, they have not written since the link/agreement, they are not on the do-not-contact list and the account is not paused. The booking state moves in the same step as the queueing (nudge count +1, next check = send time + the account's close-after days), and outside the account's office hours the send is queued for when they open. Applies to every reply in the call."New value: +"These messages are BOOKING NUDGES for people li_booking_due listed with nextAction \"nudge\". Each is REFUSED unless that person agreed (li_track_booking), their check date has arrived, they have nudges left, no nudge went out in the last 20 hours, they have not written since the link/agreement, they are not on the do-not-contact list and the account is not paused. The booking state moves in the same step as the queueing (nudge count +1, next check = send time + the account's close-after days), and outside the account's office hours the send is queued for when they open. With no account named, each person is sent from the account their agreed booking is on (li_booking_due's accountId), even when they are in campaigns on more than one of your accounts. Applies to every reply in the call."
5 tool updates
- Changed
li_enrich_profiles1 field changed- changed
Input schema / properties / fields / descriptionPrevious value: -"Return only these parts of each profile, so a large batch does not flood the reply. The identity — profileUrl, status, name, headline, company, role, location, fetchedAt, error — comes back on EVERY profile and never needs asking for. The sections you can add are: about, audience, signals, currentRole, experience, education, skills (audience is follower and connection counts; signals is open-to-work, hiring, premium, influencer, verified), plus companyPage for each person's employer block (it rides on the default view, and on this trimmed one only when named). Pass an empty array for identity only. An unknown name is refused naming the accepted set, and nothing is looked up or charged. Costs exactly the same as the full record — it only changes what is sent back."New value: +"Return only these parts of each profile, so a large batch does not flood the reply. The identity — profileUrl, publicProfileUrl, memberId, searchId, status, name, headline, company, role, location, fetchedAt, error — comes back on EVERY profile and never needs asking for. The sections you can add are: about, audience, signals, currentRole, experience, education, skills (audience is follower and connection counts; signals is open-to-work, hiring, premium, influencer, verified), plus companyPage for each person's employer block (it rides on the default view, and on this trimmed one only when named). Pass an empty array for identity only. An unknown name is refused naming the accepted set, and nothing is looked up or charged. Costs exactly the same as the full record — it only changes what is sent back."
- Changed
li_experiment_assign1 field changed- changed
Input schema / properties / prospects / items / properties / profileUrl / descriptionPrevious value: -"Canonical LinkedIn profile URL"New value: +"LinkedIn profile URL. A search id from li_search_leads (/in/ACwAA…) is accepted as is and resolved to the public profile URL before anything is written (reported as `searchIds`)."
- Changed
li_ingest_prospects1 field changed- changed
Input schema / properties / prospects / items / properties / profileUrl / descriptionPrevious value: -"Canonical LinkedIn profile URL"New value: +"LinkedIn profile URL. A search id from li_search_leads (/in/ACwAA…) is accepted as is and resolved to the public profile URL before anything is written (reported as `searchIds`)."
- Added
li_resolve_profile_url - Changed
li_send_connection_now1 field changed- changed
Input schema / properties / profileUrl / descriptionPrevious value: -"One recipient LinkedIn profile URL (or use profileUrls for several)"New value: +"One recipient LinkedIn profile URL (or use profileUrls for several). A search id from li_search_leads (/in/ACwAA…) is resolved to the public profile URL first."
16 tool updates
- Changed
li_campaign_contacts6 fields changed- added
Input schema / properties / connectionStatusAdded value: +{ + "description": "Only contacts whose invite is in one of these statuses (\"none\" = imported already connected)", + "items": { + "enum": [ + "not_sent", + "invited", + "accepted", + "withdrawn", + "declined", + "failed", + "none" + ], + "type": "string" + }, + "minItems": 1, + "type": "array" +} - added
Input schema / properties / conversationStateAdded value: +{ + "description": "Only contacts whose `conversation.state` is one of these (a marked outcome wins)", + "items": { + "enum": [ + "not_started", + "invite_pending", + "invite_failed", + "queued", + "awaiting_reply", + "needs_reply", + "answered", + "stopped", + "no_reply", + "send_failed", + "won", + "meeting_booked", + "interested", + "not_interested", + "no_outcome" + ], + "type": "string" + }, + "minItems": 1, + "type": "array" +} - added
Input schema / properties / formatAdded value: +{ + "description": "\"csv\" = one header + rows string instead of the `contacts` array (rows view only)", + "enum": [ + "json", + "csv" + ], + "type": "string" +} - added
Input schema / properties / hasInboundAdded value: +{ + "description": "true = only contacts who have written to you; false = only those who have not", + "type": "boolean" +} - added
Input schema / properties / includeStepsAdded value: +{ + "description": "true = each row carries its `steps` (ids for li_edit_step / li_cancel_steps). Default false: rows carry `stepCounts` only.", + "type": "boolean" +} - changed
Input schema / properties / text / descriptionPrevious value: -"How much of the stored COPY each row carries — the connection note and every step text. \"preview\" (the default) clips each one to 120 characters and says so per field. \"full\" returns them complete: pass this when reviewing what a campaign will actually send. \"none\" omits the copy and keeps only its length, which is much the cheapest page."New value: +"How much COPY each row carries — the connection note and every step text. Setting it includes the steps. \"preview\" (the default with steps) clips each to 120 characters and says so per field; \"full\" returns them complete (to review what will send); \"none\" keeps only lengths."
- Changed
li_check_targets5 fields changed- added
Input schema / properties / campaignNamePrefixAdded value: +{ + "description": "The campaigns you are BUILDING, by name prefix (case-insensitive), e.g. \"PR test Oct\". Anyone already in one of them is listed in `batch.members` (never capped) and marked `inBatch`, whatever their bucket says. Use it when splitting a list across several new campaigns.", + "maxLength": 200, + "minLength": 1, + "type": "string" +} - added
Input schema / properties / fieldsAdded value: +{ + "description": "view \"people\" only: which columns besides profile and campaign, from name, bucket, connection, message, outcome, inbound. Default all.", + "items": { + "enum": [ + "name", + "bucket", + "connection", + "message", + "outcome", + "inbound" + ], + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / formatAdded value: +{ + "description": "view \"people\" only: \"json\" (default) returns `rows` as arrays matching `columns`; \"csv\" returns the same table as `csv` text.", + "enum": [ + "json", + "csv" + ], + "type": "string" +} - changed
Input schema / properties / view / descriptionPrevious value: -"How much to return. \"summary\" (the default) groups the colliding people by bucket and lists each campaign once in `sites`, naming up to 50 people per bucket and saying in `peopleHidden` how many it did not. \"full\" returns one flat row per person, each carrying its own copy of the same sentence and campaign name, in submission order."New value: +"How much to return. \"summary\" (the default) groups the colliding people by bucket and lists each campaign once in `sites`, naming up to 50 people per bucket (`peopleHidden` counts the rest) and `otherCampaigns` per person. \"people\" is EVERY campaign each person is in, one table row per person per campaign (account, campaign status, connection, message, outcome, inbound), uncapped and compact — for \"which of these URLs are in which campaigns\". \"full\" returns flat rows with every sentence, plus `people` with whole membership objects." - changed
Input schema / properties / view / enumPrevious value: -[ - "summary", - "full" -]New value: +[ + "summary", + "full", + "people" +]
- Changed
li_create_campaign1 field changed- changed
Input schema / properties / targets / descriptionPrevious value: -"Prefilled targets, at most 50 per call (CSV rows count toward the same limit). For a longer list, split it across calls under the same strategy, or use li_ingest_prospects, which takes 200."New value: +"Prefilled targets, at most 50 per call (CSV rows count toward the same limit). For a longer list, split it across calls under the same strategy, or use li_ingest_prospects, which takes 500."
- Changed
li_create_icp3 fields changed- added
Input schema / properties / sessionIdAdded value: +{ + "description": "Operator only: the account whose TEAM owns it. Members' creates are their team's.", + "type": "string" +} - added
Input schema / properties / sessionLabelAdded value: +{ + "description": "Operator only: the account whose TEAM owns it. Members' creates are their team's.", + "type": "string" +} - added
Input schema / properties / sharedAdded value: +{ + "description": "Operator only: true publishes it as a shared template every team sees. Never the default.", + "type": "boolean" +}
- Changed
li_create_strategy3 fields changed- added
Input schema / properties / sessionIdAdded value: +{ + "description": "Operator only: the account whose TEAM owns it. Members' creates are their team's.", + "type": "string" +} - added
Input schema / properties / sessionLabelAdded value: +{ + "description": "Operator only: the account whose TEAM owns it. Members' creates are their team's.", + "type": "string" +} - added
Input schema / properties / sharedAdded value: +{ + "description": "Operator only: true publishes it as a shared template every team sees. Never the default.", + "type": "boolean" +}
- Changed
li_edit_campaign4 fields changed- added
Input schema / properties / dryRunAdded value: +{ + "description": "With resnapshot: preview who would be re-copied, write nothing.", + "type": "boolean" +} - added
Input schema / properties / resnapshotAdded value: +{ + "description": "Re-copy every member's step kinds and delays from strategyId (or, without one, from the campaign's own strategy), keeping each person's own text. Only while EVERY member is untouched: invite not sent, no step sent or scheduled, nothing launched for them. Otherwise refused, naming who. Writes nothing on refusal.", + "type": "boolean" +} - added
Input schema / properties / stepTextsAdded value: +{ + "description": "Per-person text for step kinds a person has no text for under the new strategy (or to replace theirs). Implies resnapshot. Text is never invented: a person missing text for a new step is named and nothing is written.", + "items": { + "additionalProperties": false, + "properties": { + "closer": { + "description": "Text for the \"closer\" step", + "maxLength": 8000, + "type": "string" + }, + "firstMessage": { + "description": "Text for the \"first\" step", + "maxLength": 8000, + "type": "string" + }, + "followUp1": { + "description": "Text for the \"followup_1\" step", + "maxLength": 8000, + "type": "string" + }, + "followUp2": { + "description": "Text for the \"followup_2\" step", + "maxLength": 8000, + "type": "string" + }, + "followUp3": { + "description": "Text for the \"followup_3\" step", + "maxLength": 8000, + "type": "string" + }, + "profileUrl": { + "description": "The person, as stored or as any spelling of them", + "minLength": 1, + "type": "string" + } + }, + "required": [ + "profileUrl" + ], + "type": "object" + }, + "maxItems": 500, + "type": "array" +} - changed
Input schema / properties / strategyId / descriptionPrevious value: -"Accepted so it can be REFUSED with the reason, rather than dropped as an unknown key. Allowed only while the campaign still holds nobody."New value: +"A new strategy. On an EMPTY campaign it simply applies. On one holding people it is refused unless resnapshot=true."
- Added
li_experiment_assign - Changed
li_ingest_prospects11 fields changed- added
Input schema / properties / defaultStepsAdded value: +{ + "additionalProperties": false, + "description": "Shared copy: text per step (connectionNote, firstMessage, followUp1, followUp2, followUp3, closer) for every row that brings none of its own. {first} is the row's first name (firstName, else the first word of name), filled in at import; no other variable exists. A row with no first name for a template that uses {first} is not imported, and says why.", + "properties": { + "closer": { + "description": "Default text for the \"closer\" step", + "maxLength": 8000, + "type": "string" + }, + "connectionNote": { + "description": "Default invite note (connection-stage rows only)", + "maxLength": 8000, + "type": "string" + }, + "firstMessage": { + "description": "Default text for the \"firstMessage\" step", + "maxLength": 8000, + "type": "string" + }, + "followUp1": { + "description": "Default text for the \"followUp1\" step", + "maxLength": 8000, + "type": "string" + }, + "followUp2": { + "description": "Default text for the \"followUp2\" step", + "maxLength": 8000, + "type": "string" + }, + "followUp3": { + "description": "Default text for the \"followUp3\" step", + "maxLength": 8000, + "type": "string" + } + }, + "type": "object" +} - added
Input schema / properties / idempotencyKeyAdded value: +{ + "description": "Any unique string for THIS request (e.g. a UUID). Pass the same key when retrying after a timeout, 502 or 503: a call that already finished returns its stored answer (24h) instead of importing twice. Ignored on a dry run.", + "maxLength": 200, + "minLength": 8, + "type": "string" +} - changed
Input schema / properties / prospects / descriptionPrevious value: -"1-200 prospects, each with profileUrl and the prefilled text for every strategy step (plus connectionNote for invites)"New value: +"1-500 prospects, each with profileUrl and the prefilled text for every strategy step (plus connectionNote for invites), or that text from defaultSteps. Each may name its own account, campaign, strategy and ICP." - added
Input schema / properties / prospects / items / properties / campaignIdAdded value: +{ + "description": "Land this ONE prospect in this existing campaign (id from li_list_campaigns), overriding the call's. Its account is the campaign's when the row names none; it takes the campaign's own strategy and ICP.", + "type": "string" +} - added
Input schema / properties / prospects / items / properties / campaignNameAdded value: +{ + "description": "Land this ONE prospect in the campaign of this name on its account (created if missing), overriding the call's campaign. Stored and matched exactly as given (nothing is appended), so the same name reaches the same campaign.", + "type": "string" +} - added
Input schema / properties / prospects / items / properties / firstNameAdded value: +{ + "description": "First name for {first} in defaultSteps; else the first word of name. Not stored.", + "type": "string" +} - added
Input schema / properties / prospects / items / properties / icpIdAdded value: +{ + "description": "ICP label for this prospect's campaign, overriding the call's (or icpName)", + "type": "string" +} - added
Input schema / properties / prospects / items / properties / icpNameAdded value: +{ + "description": "ICP label by name, for this prospect only", + "type": "string" +} - added
Input schema / properties / prospects / items / properties / strategyIdAdded value: +{ + "description": "Strategy for this prospect's campaign, overriding the call's (or strategyName)", + "type": "string" +} - added
Input schema / properties / prospects / items / properties / strategyNameAdded value: +{ + "description": "Strategy by name, for this prospect only", + "type": "string" +} - changed
Input schema / properties / prospects / maxItemsPrevious value: -200New value: +500
- Changed
li_job_result1 field changed- added
Input schema / properties / offsetAdded value: +{ + "description": "Only with a research jobId (from li_research_profiles): the first row to return. Pass the previous reply's nextOffset.", + "minimum": 0, + "type": "integer" +}
- Changed
li_launch_campaign8 fields changed- changed
Input schema / properties / campaignId / descriptionPrevious value: -"Campaign id from li_create_campaign or li_list_campaigns"New value: +"One campaign id from li_list_campaigns. Or campaignIds / namePrefix." - added
Input schema / properties / campaignId / minLengthAdded value: +1 - added
Input schema / properties / campaignIdsAdded value: +{ + "description": "Bulk: up to 100 campaign ids, each launched as the single form would be", + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "minItems": 1, + "type": "array" +} - added
Input schema / properties / expectCountAdded value: +{ + "description": "With namePrefix only: the number of campaigns the preview listed. Required to confirm, so nothing is launched that the preview did not show.", + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / namePrefixAdded value: +{ + "description": "Bulk: every campaign you can see whose name starts with this (case-insensitive, the same match as li_list_campaigns), at most 100; listed before anything is launched", + "maxLength": 200, + "minLength": 1, + "type": "string" +} - added
Input schema / properties / sessionIdAdded value: +{ + "description": "With namePrefix only: match on this account only", + "type": "string" +} - added
Input schema / properties / sessionLabelAdded value: +{ + "description": "With namePrefix only: match on this account only", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "campaignId", - "confirmLaunch" -]New value: +[ + "confirmLaunch" +]
- Changed
li_list_campaigns8 fields changed- added
Input schema / properties / fieldsAdded value: +{ + "description": "Only these columns per row (campaignId is always kept). Omit for every column.", + "items": { + "enum": [ + "name", + "status", + "accountId", + "accountLabel", + "strategyName", + "icpName", + "contactCount", + "launchedAt", + "priority", + "createdAt", + "state" + ], + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / formatAdded value: +{ + "description": "\"csv\" = one header + rows string instead of the `campaigns` array", + "enum": [ + "json", + "csv" + ], + "type": "string" +} - added
Input schema / properties / maxContactsAdded value: +{ + "description": "Only campaigns holding at most this many people (0 = empty ones)", + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / minContactsAdded value: +{ + "description": "Only campaigns holding at least this many people", + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / namePrefixAdded value: +{ + "description": "Only campaigns whose name starts with this (case-insensitive)", + "minLength": 1, + "type": "string" +} - added
Input schema / properties / offsetAdded value: +{ + "description": "Skip this many matching campaigns — pass the last reply's `nextOffset`", + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / sessionIdAdded value: +{ + "description": "Limit to one account by id (li_list_accounts). Omit to cover every account you can see.", + "type": "string" +} - added
Input schema / properties / sessionLabelAdded value: +{ + "description": "Limit to one account by label, LinkedIn name, profile slug or member id. Omit to cover every account you can see.", + "type": "string" +}
- Changed
li_move_contact4 fields changed- added
Input schema / properties / dryRunAdded value: +{ + "description": "Preview the move (and the re-copy) without writing.", + "type": "boolean" +} - added
Input schema / properties / idempotencyKeyAdded value: +{ + "description": "Any unique string for THIS request (e.g. a UUID). Reuse it only to retry the same call.", + "maxLength": 200, + "minLength": 8, + "type": "string" +} - added
Input schema / properties / resnapshotAdded value: +{ + "description": "Re-copy each mover's steps from the target campaign's strategy before moving (kinds and delays; their own text kept). Untouched people only. Not with contactId.", + "type": "boolean" +} - added
Input schema / properties / stepTextsAdded value: +{ + "description": "Per-person text for target step kinds a mover has no text for (or to replace theirs). Implies resnapshot.", + "items": { + "additionalProperties": false, + "properties": { + "closer": { + "description": "Text for the \"closer\" step", + "maxLength": 8000, + "type": "string" + }, + "firstMessage": { + "description": "Text for the \"first\" step", + "maxLength": 8000, + "type": "string" + }, + "followUp1": { + "description": "Text for the \"followup_1\" step", + "maxLength": 8000, + "type": "string" + }, + "followUp2": { + "description": "Text for the \"followup_2\" step", + "maxLength": 8000, + "type": "string" + }, + "followUp3": { + "description": "Text for the \"followup_3\" step", + "maxLength": 8000, + "type": "string" + }, + "profileUrl": { + "description": "The person, as stored or as any spelling of them", + "minLength": 1, + "type": "string" + } + }, + "required": [ + "profileUrl" + ], + "type": "object" + }, + "maxItems": 500, + "type": "array" +}
- Changed
li_outreach_analytics3 fields changed- added
Input schema / properties / experimentIdAdded value: +{ + "description": "groupBy \"arm\" only: the experiment (omit to list yours)", + "type": "string" +} - changed
Input schema / properties / groupBy / descriptionPrevious value: -"Row grouping: strategy, icp, campaign or account"New value: +"Row grouping: strategy, icp, campaign, account, or arm (an experiment's arms; needs experimentId)" - changed
Input schema / properties / groupBy / enumPrevious value: -[ - "strategy", - "icp", - "campaign", - "account" -]New value: +[ + "strategy", + "icp", + "campaign", + "account", + "arm" +]
- Changed
li_pause_campaign8 fields changed- changed
Input schema / properties / campaignId / descriptionPrevious value: -"Campaign id from li_list_campaigns"New value: +"One campaign id from li_list_campaigns. Or campaignIds / namePrefix." - added
Input schema / properties / campaignId / minLengthAdded value: +1 - added
Input schema / properties / campaignIdsAdded value: +{ + "description": "Bulk: up to 100 campaign ids, each paused as the single form would be", + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "minItems": 1, + "type": "array" +} - added
Input schema / properties / confirmAdded value: +{ + "description": "Bulk forms only: true to act. Without it the call lists what matched.", + "type": "boolean" +} - added
Input schema / properties / namePrefixAdded value: +{ + "description": "Bulk: every campaign you can see whose name starts with this (case-insensitive, the same match as li_list_campaigns), at most 100; listed before anything is paused", + "maxLength": 200, + "minLength": 1, + "type": "string" +} - added
Input schema / properties / sessionIdAdded value: +{ + "description": "With namePrefix only: match on this account only", + "type": "string" +} - added
Input schema / properties / sessionLabelAdded value: +{ + "description": "With namePrefix only: match on this account only", + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "campaignId" -]
- Added
li_research_profiles - Changed
li_resume_campaign9 fields changed- changed
Input schema / properties / campaignId / descriptionPrevious value: -"Campaign id from li_list_campaigns"New value: +"One campaign id from li_list_campaigns. Or campaignIds / namePrefix." - added
Input schema / properties / campaignId / minLengthAdded value: +1 - added
Input schema / properties / campaignIdsAdded value: +{ + "description": "Bulk: up to 100 campaign ids, each resumed as the single form would be", + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "minItems": 1, + "type": "array" +} - added
Input schema / properties / confirmAdded value: +{ + "description": "Bulk forms only: true to act. Without it the call lists what matched.", + "type": "boolean" +} - added
Input schema / properties / expectCountAdded value: +{ + "description": "With namePrefix only: the number of campaigns the preview listed. Required to confirm, so nothing is resumed that the preview did not show.", + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / namePrefixAdded value: +{ + "description": "Bulk: every campaign you can see whose name starts with this (case-insensitive, the same match as li_list_campaigns), at most 100; listed before anything is resumed", + "maxLength": 200, + "minLength": 1, + "type": "string" +} - added
Input schema / properties / sessionIdAdded value: +{ + "description": "With namePrefix only: match on this account only", + "type": "string" +} - added
Input schema / properties / sessionLabelAdded value: +{ + "description": "With namePrefix only: match on this account only", + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "campaignId" -]
1 tool update
- Changed
li_list_conversations1 field changed- changed
Input schema / properties / onlyAddressable / descriptionPrevious value: -"Drop threads with no identifiable participant — LinkedIn sponsored/InMail blasts, which still count as \"they spoke last\" but cannot be replied to. Off by default so nothing is hidden; the response always reports how many were unaddressable."New value: +"Drop threads that cannot be replied to — LinkedIn sponsored/InMail blasts, with or without a named sender, which still count as \"they spoke last\". Off by default so nothing is hidden; the response always reports how many were unaddressable."
1 tool update
- Changed
li_edit_campaign1 field changed- added
Input schema / properties / priorityAdded value: +{ + "description": "true = send this campaign's invites before every non-priority campaign on its LinkedIn account (they wait while it has anyone to invite); false = take turns again. Only when the user asks. It reorders invites only: it NEVER raises a daily or weekly cap and never changes sending hours or messages. Omitted leaves it alone.", + "type": "boolean" +}
2 tool updates
- Added
li_set_team_discount - Added
li_set_trial_end_offer
1 tool update
- Added
li_clear_invite_hold
1 tool update
- Changed
li_send_reply1 field changed- added
Input schema / properties / calendarCheckedAdded value: +{ + "description": "REQUIRED (true) for anyone with our booking link out (bookingPending / bookingCheckRequired in li_replies_to_answer) or a call already booked: it says you searched the calendar for THIS person just before this call. This server reads no calendar, so a booking made minutes ago is invisible here until li_mark_booked records it. If they booked: send NOTHING (no \"grab a slot\", no \"see you then\") and record it with li_mark_booked. Without it such a row is refused and nothing is queued. Implied by bookingNudge / bookingClose (their routine sweeps the calendar first), but search again right before those too. Applies to every reply in the call.", + "type": "boolean" +}
2 tool updates
- Changed
li_enrich_profiles7 fields changed- changed
Input schema / properties / fields / descriptionPrevious value: -"Return only these parts of each profile, so a large batch does not flood the reply. The identity — profileUrl, status, name, headline, company, role, location, fetchedAt, error — comes back on EVERY profile and never needs asking for. The sections you can add are: about, audience, signals, currentRole, experience, education, skills (audience is follower and connection counts; signals is open-to-work, hiring, premium, influencer, verified), plus companyPage for each person's employer block (it rides on the default view, and on this trimmed one only when named). Pass an empty array for identity only. An unknown name is refused naming the accepted set, and nothing is looked up or charged. Costs exactly the same as the full record — it only changes what is sent back. Cannot be combined with includeRaw."New value: +"Return only these parts of each profile, so a large batch does not flood the reply. The identity — profileUrl, status, name, headline, company, role, location, fetchedAt, error — comes back on EVERY profile and never needs asking for. The sections you can add are: about, audience, signals, currentRole, experience, education, skills (audience is follower and connection counts; signals is open-to-work, hiring, premium, influencer, verified), plus companyPage for each person's employer block (it rides on the default view, and on this trimmed one only when named). Pass an empty array for identity only. An unknown name is refused naming the accepted set, and nothing is looked up or charged. Costs exactly the same as the full record — it only changes what is sent back." - removed
Input schema / properties / includeRawRemoved value: -{ - "description": "Return the data provider's record verbatim instead of the compact profile. Costs NO extra lookups, but the reply is MUCH larger — one profile measured ~8KB, so twenty is ~160KB of mostly unrelated people, followed companies and image URLs. Ask for it only when the compact profile is genuinely missing something, and prefer a small batch when you do.", - "type": "boolean" -} - removed
Input schema / properties / maxAgeDaysRemoved value: -{ - "description": "Treat a cached profile older than this as stale. Default 30.", - "maximum": 365, - "minimum": 1, - "type": "integer" -} - changed
Input schema / properties / profileUrls / descriptionPrevious value: -"LinkedIn profile URLs. One real lookup takes at most 100 and a longer list is refused rather than silently truncated; estimateOnly answers for up to 500 and says how many calls to split it into."New value: +"The LinkedIn profile URLs of the people to look up — the only input passed to the data provider. One real lookup takes at most 100 and a longer list is refused rather than silently truncated; estimateOnly answers for up to 500 and says how many calls to split it into." - changed
Input schema / properties / refresh / descriptionPrevious value: -"Ignore the cache and re-fetch. Costs a lookup for every URL."New value: +"Ignore the cache and re-fetch, for when a cached profile is known to be out of date. Costs a lookup for every URL." - changed
Input schema / properties / sessionId / descriptionPrevious value: -"Account id from li_list_accounts. Needed (or sessionLabel) when you have more than one account; never guessed."New value: +"Only when you have more than one LinkedIn account: which one pays for the lookup (its plan and allowance gate the run). Account id from li_list_accounts. Never sent to the data provider." - changed
Input schema / properties / sessionLabel / descriptionPrevious value: -"Account by label, LinkedIn name, profile slug or member id (li_list_accounts). Needed (or sessionId) when you have more than one account; never guessed."New value: +"Same as sessionId, by account label, LinkedIn name, profile slug or member id (li_list_accounts). Only when you have more than one account. Never sent to the data provider."
- Changed
li_list_conversations1 field changed- changed
Input schema / properties / limit / descriptionPrevious value: -"How many to return AFTER filtering (default 20). The inbox is walked by cursor, 20 threads per round trip, until this many MATCH or the inbox runs out — so a large number with onlyNeedsReply is honest but costs browser time. Check `reachedEnd`."New value: +"How many threads to collect (default 20, max 200), counted after onlyNeedsReply / onlyAddressable / sinceDays / profileUrl but BEFORE the decided / internal / system / reviewed drops, so the reply can hold fewer. The inbox is walked by cursor, 20 threads per round trip, until this many match, the inbox runs out or the page ceiling is hit — a large number costs browser time. Check `reachedEnd`."
6 tool updates
- Changed
li_contact_dossier2 fields changed- changed
Input schema / properties / fields / descriptionPrevious value: -"Which blocks to return: contact, sequences, steps, events, conversation, enriched, company. Naming one of about, audience, signals, currentRole, experience, education, skills narrows \"enriched\" to that part of the bought research. profileUrl and name always come back. Omit this and one profileUrl returns everything, while profileUrls returns everything except the bought research."New value: +"Which blocks to return: contact, sequences, steps, events, conversation, enriched, company, posts. Naming one of about, audience, signals, currentRole, experience, education, skills narrows \"enriched\" to that part of the bought research. profileUrl and name always come back. Omit this and one profileUrl returns everything, while profileUrls returns everything except the bought research." - changed
Input schema / properties / profileUrls / descriptionPrevious value: -"Several contacts in ONE call, max 50. Each is resolved independently: one refusal does not stop the rest, and the reply reports every one by URL. Unless `fields` says otherwise this leaves out enriched and company — they are the largest blocks and a whole queue rarely wants them — and says so in the reply."New value: +"Several contacts in ONE call, max 50. Each is resolved independently: one refusal does not stop the rest, and the reply reports every one by URL. Unless `fields` says otherwise this leaves out enriched and company and posts — they are the largest blocks and a whole queue rarely wants them — and says so in the reply."
- Changed
li_create_campaign3 fields changed- changed
Input schema / properties / csvText / descriptionPrevious value: -"CSV text with profile_url plus optional connection_note and step text columns (first_message, follow_up_1, follow_up_2, follow_up_3, closer). At most 50 rows, shared with `targets`."New value: +"CSV text with profile_url plus optional connection_note and step text columns (first_message, follow_up_1, follow_up_2, follow_up_3, closer), and optional engage_post_url / engage_reaction (a post of theirs the account reacts to a day or more before the invite; see engagePostUrl on targets). At most 50 rows, shared with `targets`." - added
Input schema / properties / targets / items / properties / engagePostUrlAdded value: +{ + "description": "Engage-before-invite: ONE of this person's own recent posts (https://www.linkedin.com/feed/update/urn:li:activity:<id>/ or a /posts/ link), the one the note and first message mention. The sending account visits their profile and reacts to it a day or more BEFORE the invite goes out (about one in seven is only viewed), and the invite then waits 20-60 hours. Connection stage only: ignored for message-stage prospects. A link that is not a LinkedIn post refuses the row. If the post is gone or turns out not to be theirs, nothing is clicked and the invite goes ahead without it.", + "type": "string" +} - added
Input schema / properties / targets / items / properties / engageReactionAdded value: +{ + "description": "Which reaction to leave on engagePostUrl: LIKE (default), PRAISE (Celebrate), EMPATHY (Love), INTEREST (Insightful), APPRECIATION (Support) or ENTERTAINMENT (Funny). Needs engagePostUrl.", + "type": "string" +}
- Added
li_fetch_posts - Changed
li_ingest_prospects2 fields changed- added
Input schema / properties / prospects / items / properties / engagePostUrlAdded value: +{ + "description": "Engage-before-invite: ONE of this person's own recent posts (https://www.linkedin.com/feed/update/urn:li:activity:<id>/ or a /posts/ link), the one the note and first message mention. The sending account visits their profile and reacts to it a day or more BEFORE the invite goes out (about one in seven is only viewed), and the invite then waits 20-60 hours. Connection stage only: ignored for message-stage prospects. A link that is not a LinkedIn post refuses the row. If the post is gone or turns out not to be theirs, nothing is clicked and the invite goes ahead without it.", + "type": "string" +} - added
Input schema / properties / prospects / items / properties / engageReactionAdded value: +{ + "description": "Which reaction to leave on engagePostUrl: LIKE (default), PRAISE (Celebrate), EMPATHY (Love), INTEREST (Insightful), APPRECIATION (Support) or ENTERTAINMENT (Funny). Needs engagePostUrl.", + "type": "string" +}
- Added
li_react_to_post - Added
li_search_leads
62 tool updates
- Changed
li_accept_invitations2 fields changed- added
Input schema / properties / sessionId / descriptionAdded value: +"Account id from li_list_accounts. Needed (or sessionLabel) when you have more than one account; never guessed." - added
Input schema / properties / sessionLabel / descriptionAdded value: +"Account by label, LinkedIn name, profile slug or member id (li_list_accounts). Needed (or sessionId) when you have more than one account; never guessed."
- Changed
li_accepted_pending_message3 fields changed- added
Input schema / properties / limit / descriptionAdded value: +"Most rows to return (default 100); `truncated` says when there are more" - changed
Input schema / properties / sessionId / descriptionPrevious value: -"Scope to one account id"New value: +"Limit to one account by id (li_list_accounts). Needed (or sessionLabel) when you have more than one account." - changed
Input schema / properties / sessionLabel / descriptionPrevious value: -"Scope to one account label (omit for all accounts)"New value: +"Limit to one account by label, LinkedIn name, profile slug or member id. Needed (or sessionId) when you have more than one account."
- Changed
li_booking_due2 fields changed- added
Input schema / properties / limit / descriptionAdded value: +"Most rows to return (default 50, max 200); more are flagged" - added
Input schema / properties / sessionId / descriptionAdded value: +"Limit to one account by id (li_list_accounts). Omit to cover every account you can see."
- Changed
li_bookings4 fields changed- added
Input schema / properties / limit / descriptionAdded value: +"Most rows to return (default 100, max 500)" - added
Input schema / properties / sessionId / descriptionAdded value: +"Limit to one account by id (li_list_accounts). Omit to cover every account you can see." - added
Input schema / properties / sessionLabel / descriptionAdded value: +"Limit to one account by label, LinkedIn name, profile slug or member id. Omit to cover every account you can see." - added
Input schema / properties / status / descriptionAdded value: +"Booking states to include (default [\"booked\"])"
- Changed
li_campaign_contacts1 field changed- added
Input schema / properties / campaignId / descriptionAdded value: +"Campaign id from li_list_campaigns"
- Changed
li_campaign_status1 field changed- added
Input schema / properties / campaignId / descriptionAdded value: +"Campaign id from li_list_campaigns"
- Changed
li_check_acceptance2 fields changed- changed
Input schema / properties / sessionId / descriptionPrevious value: -"Optional saved LinkedIn session selector"New value: +"Account id from li_list_accounts. Omit (with sessionLabel) to use your default account." - changed
Input schema / properties / sessionLabel / descriptionPrevious value: -"Optional saved LinkedIn session selector"New value: +"Account by label, LinkedIn name, profile slug or member id (li_list_accounts). Omit (with sessionId) to use your default account."
- Changed
li_connections2 fields changed- added
Input schema / properties / limit / descriptionAdded value: +"Most invite rows to return (default 50, max 200); `total` is the full count" - added
Input schema / properties / sessionId / descriptionAdded value: +"Limit to one account by id (li_list_accounts). Needed (or sessionLabel) when you have more than one account."
- Changed
li_create_campaign13 fields changed- added
Input schema / properties / name / descriptionAdded value: +"Campaign name, shown on the dashboard and in li_list_campaigns" - added
Input schema / properties / targets / items / properties / collaborationAngle / descriptionAdded value: +"The angle the sequence leads with" - added
Input schema / properties / targets / items / properties / company / descriptionAdded value: +"Current employer" - added
Input schema / properties / targets / items / properties / context / descriptionAdded value: +"Free-text notes on how you found them or why now" - added
Input schema / properties / targets / items / properties / fitQuality / descriptionAdded value: +"Your fit grade, e.g. strong / medium / weak" - added
Input schema / properties / targets / items / properties / headline / descriptionAdded value: +"LinkedIn headline" - added
Input schema / properties / targets / items / properties / icpBucket / descriptionAdded value: +"Your ICP bucket for them (free text)" - added
Input schema / properties / targets / items / properties / location / descriptionAdded value: +"Location as shown on the profile" - added
Input schema / properties / targets / items / properties / name / descriptionAdded value: +"Full name" - added
Input schema / properties / targets / items / properties / productUrl / descriptionAdded value: +"Their product or company URL" - added
Input schema / properties / targets / items / properties / role / descriptionAdded value: +"Current job title" - added
Input schema / properties / targets / items / properties / whatTheySell / descriptionAdded value: +"What their company sells, in a line" - added
Input schema / properties / targets / items / properties / whyTheyFit / descriptionAdded value: +"Why they fit, in a line"
- Changed
li_create_icp2 fields changed- added
Input schema / properties / description / descriptionAdded value: +"Optional note on who this audience is" - added
Input schema / properties / name / descriptionAdded value: +"Label name, unique within your team (check li_list_icps first)"
- Changed
li_create_post2 fields changed- changed
Input schema / properties / sessionId / descriptionPrevious value: -"Optional saved LinkedIn session selector"New value: +"Account id from li_list_accounts. Needed (or sessionLabel) when you have more than one account; never guessed." - changed
Input schema / properties / sessionLabel / descriptionPrevious value: -"Optional saved LinkedIn session selector"New value: +"Account by label, LinkedIn name, profile slug or member id (li_list_accounts). Needed (or sessionId) when you have more than one account; never guessed."
- Changed
li_create_strategy3 fields changed- added
Input schema / properties / description / descriptionAdded value: +"Optional note on when to use this template" - added
Input schema / properties / name / descriptionAdded value: +"Template name, unique within your team (check li_list_strategies first)" - added
Input schema / properties / steps / items / properties / kind / descriptionAdded value: +"Which message this step is; each kind at most once"
- Changed
li_daily_digest1 field changed- added
Input schema / properties / sessionId / descriptionAdded value: +"Account id from li_list_accounts. Omit (with sessionLabel) to use your default account."
- Changed
li_detect_account_tier1 field changed- added
Input schema / properties / sessionId / descriptionAdded value: +"Account id from li_list_accounts. Needed (or sessionLabel) when you have more than one account; never guessed."
- Changed
li_due_messages3 fields changed- added
Input schema / properties / limit / descriptionAdded value: +"Most rows to return (default 100); `truncated` says when there are more" - changed
Input schema / properties / sessionId / descriptionPrevious value: -"Scope to one account id"New value: +"Limit to one account by id (li_list_accounts). Needed (or sessionLabel) when you have more than one account." - changed
Input schema / properties / sessionLabel / descriptionPrevious value: -"Scope to one account label (omit for all accounts)"New value: +"Limit to one account by label, LinkedIn name, profile slug or member id. Needed (or sessionId) when you have more than one account."
- Changed
li_enrich_company2 fields changed- added
Input schema / properties / sessionId / descriptionAdded value: +"Account id from li_list_accounts. Needed (or sessionLabel) when you have more than one account; never guessed." - added
Input schema / properties / sessionLabel / descriptionAdded value: +"Account by label, LinkedIn name, profile slug or member id (li_list_accounts). Needed (or sessionId) when you have more than one account; never guessed."
- Changed
li_enrich_profiles2 fields changed- added
Input schema / properties / sessionId / descriptionAdded value: +"Account id from li_list_accounts. Needed (or sessionLabel) when you have more than one account; never guessed." - added
Input schema / properties / sessionLabel / descriptionAdded value: +"Account by label, LinkedIn name, profile slug or member id (li_list_accounts). Needed (or sessionId) when you have more than one account; never guessed."
- Changed
li_ingest_prospects23 fields changed- added
Input schema / properties / icpId / descriptionAdded value: +"ICP label id from li_list_icps (or use icpName); optional" - added
Input schema / properties / icpName / descriptionAdded value: +"ICP label by name, from li_list_icps; optional" - added
Input schema / properties / prospects / descriptionAdded value: +"1-200 prospects, each with profileUrl and the prefilled text for every strategy step (plus connectionNote for invites)" - added
Input schema / properties / prospects / items / properties / closer / descriptionAdded value: +"Text for the \"closer\" step" - added
Input schema / properties / prospects / items / properties / collaborationAngle / descriptionAdded value: +"The angle the sequence leads with" - added
Input schema / properties / prospects / items / properties / company / descriptionAdded value: +"Current employer" - added
Input schema / properties / prospects / items / properties / connectionNote / descriptionAdded value: +"Note sent WITH the invite (connection stage only; free accounts cannot deliver notes)" - added
Input schema / properties / prospects / items / properties / context / descriptionAdded value: +"Free-text notes on how you found them or why now" - added
Input schema / properties / prospects / items / properties / firstMessage / descriptionAdded value: +"Text for the \"first\" step, sent connectionWaitHours after acceptance" - added
Input schema / properties / prospects / items / properties / fitQuality / descriptionAdded value: +"Your fit grade, e.g. strong / medium / weak" - added
Input schema / properties / prospects / items / properties / followUp1 / descriptionAdded value: +"Text for the \"followup_1\" step" - added
Input schema / properties / prospects / items / properties / followUp2 / descriptionAdded value: +"Text for the \"followup_2\" step" - added
Input schema / properties / prospects / items / properties / followUp3 / descriptionAdded value: +"Text for the \"followup_3\" step" - added
Input schema / properties / prospects / items / properties / headline / descriptionAdded value: +"LinkedIn headline" - added
Input schema / properties / prospects / items / properties / icpBucket / descriptionAdded value: +"Your ICP bucket for them (free text)" - added
Input schema / properties / prospects / items / properties / location / descriptionAdded value: +"Location as shown on the profile" - added
Input schema / properties / prospects / items / properties / name / descriptionAdded value: +"Full name" - added
Input schema / properties / prospects / items / properties / productUrl / descriptionAdded value: +"Their product or company URL" - added
Input schema / properties / prospects / items / properties / role / descriptionAdded value: +"Current job title" - added
Input schema / properties / prospects / items / properties / timezone / descriptionAdded value: +"IANA timezone, e.g. Asia/Kolkata; used by prospect-local sending windows" - added
Input schema / properties / prospects / items / properties / whatTheySell / descriptionAdded value: +"What their company sells, in a line" - added
Input schema / properties / prospects / items / properties / whyTheyFit / descriptionAdded value: +"Why they fit, in a line" - added
Input schema / properties / strategyId / descriptionAdded value: +"Sequence template id from li_list_strategies (or use strategyName)"
- Changed
li_invitation_decisions6 fields changed- added
Input schema / properties / changedSinceDecision / descriptionAdded value: +"true = only people whose headline or company moved since they were judged" - added
Input schema / properties / decision / descriptionAdded value: +"Only this decision: accepted, rejected, wrong_lane, failed or deferred" - added
Input schema / properties / icp / descriptionAdded value: +"Only decisions filed under this ICP label" - added
Input schema / properties / offset / descriptionAdded value: +"Rows to skip, for paging (default 0)" - added
Input schema / properties / sessionId / descriptionAdded value: +"Limit to one account by id (li_list_accounts). Omit to cover every account you can see." - added
Input schema / properties / sessionLabel / descriptionAdded value: +"Limit to one account by label, LinkedIn name, profile slug or member id. Omit to cover every account you can see."
- Changed
li_job_result2 fields changed- added
Input schema / properties / sessionId / descriptionAdded value: +"Limit to one account by id (li_list_accounts). Omit to cover every account you can see." - added
Input schema / properties / sessionLabel / descriptionAdded value: +"Limit to one account by label, LinkedIn name, profile slug or member id. Omit to cover every account you can see."
- Changed
li_launch_campaign1 field changed- added
Input schema / properties / campaignId / descriptionAdded value: +"Campaign id from li_create_campaign or li_list_campaigns"
- Changed
li_list_conversations2 fields changed- changed
Input schema / properties / sessionId / descriptionPrevious value: -"Optional saved LinkedIn session selector"New value: +"Account id from li_list_accounts. Omit (with sessionLabel) to use your default account." - changed
Input schema / properties / sessionLabel / descriptionPrevious value: -"Optional saved LinkedIn session selector"New value: +"Account by label, LinkedIn name, profile slug or member id (li_list_accounts). Omit (with sessionId) to use your default account."
- Changed
li_mark_booked2 fields changed- added
Input schema / properties / contactId / descriptionAdded value: +"One contact by id (from li_contact_dossier or li_campaign_contacts), instead of profileUrl" - added
Input schema / properties / note / descriptionAdded value: +"Optional note for the contact timeline"
- Changed
li_mark_booking_cancelled2 fields changed- added
Input schema / properties / calendarEventId / descriptionAdded value: +"The calendar event id recorded with li_mark_booked" - added
Input schema / properties / note / descriptionAdded value: +"Optional note for the contact timeline"
- Changed
li_mark_invitations9 fields changed- added
Input schema / properties / decisions / descriptionAdded value: +"1-200 decisions, one per inviter; each is applied or refused on its own" - added
Input schema / properties / decisions / items / properties / campaignId / descriptionAdded value: +"The campaign they joined, for an accepted person" - added
Input schema / properties / decisions / items / properties / decision / descriptionAdded value: +"accepted (only after a confirmed accept), rejected, wrong_lane, failed or deferred" - added
Input schema / properties / decisions / items / properties / icp / descriptionAdded value: +"ICP label you judged them against" - added
Input schema / properties / decisions / items / properties / profileUrl / descriptionAdded value: +"The inviter, by profile URL (or memberId)" - added
Input schema / properties / decisions / items / properties / reason / descriptionAdded value: +"Why; required for rejected and wrong_lane" - added
Input schema / properties / decisions / items / properties / routeTo / descriptionAdded value: +"wrong_lane only: the account that should reach them cold instead" - added
Input schema / properties / sessionId / descriptionAdded value: +"Account id from li_list_accounts. Needed (or sessionLabel) when you have more than one account; never guessed." - added
Input schema / properties / sessionLabel / descriptionAdded value: +"Account by label, LinkedIn name, profile slug or member id (li_list_accounts). Needed (or sessionId) when you have more than one account; never guessed."
- Changed
li_mark_outcome1 field changed- added
Input schema / properties / contactId / descriptionAdded value: +"One contact by id (from li_contact_dossier or li_campaign_contacts), instead of profileUrl"
- Changed
li_mark_replied2 fields changed- added
Input schema / properties / contactId / descriptionAdded value: +"One contact by id (from li_contact_dossier or li_campaign_contacts), instead of profileUrl" - added
Input schema / properties / note / descriptionAdded value: +"Optional note for the contact timeline"
- Changed
li_mark_reply_handled2 fields changed- added
Input schema / properties / contactId / descriptionAdded value: +"One contact by id (from li_contact_dossier or li_campaign_contacts), instead of profileUrl" - added
Input schema / properties / note / descriptionAdded value: +"Optional note for the contact timeline, e.g. what you answered"
- Changed
li_mark_stopped2 fields changed- added
Input schema / properties / contactId / descriptionAdded value: +"One contact by id (from li_contact_dossier or li_campaign_contacts), instead of profileUrl" - added
Input schema / properties / reason / descriptionAdded value: +"Why they are finished with, stored on the timeline (e.g. \"not a fit\")"
- Changed
li_marked_conversations2 fields changed- added
Input schema / properties / limit / descriptionAdded value: +"Most rows to return (default 100, max 200)" - added
Input schema / properties / sessionId / descriptionAdded value: +"Limit to one account by id (li_list_accounts). Omit to cover every account you can see."
- Changed
li_match_contacts2 fields changed- added
Input schema / properties / candidates / descriptionAdded value: +"1-200 calendar bookings to match, one per event, as read from the calendar" - added
Input schema / properties / sessionId / descriptionAdded value: +"Limit to one account by id (li_list_accounts). Omit to cover every account you can see."
- Changed
li_move_contact1 field changed- added
Input schema / properties / contactId / descriptionAdded value: +"One contact by id, instead of profileUrl"
- Changed
li_new_connections1 field changed- added
Input schema / properties / limit / descriptionAdded value: +"Most new people to return (1-500)"
- Changed
li_outcome_summary1 field changed- added
Input schema / properties / sessionId / descriptionAdded value: +"Limit to one account by id (li_list_accounts). Omit to cover every account you can see."
- Changed
li_outreach_analytics4 fields changed- added
Input schema / properties / groupBy / descriptionAdded value: +"Row grouping: strategy, icp, campaign or account" - added
Input schema / properties / sendWindowMode / descriptionAdded value: +"Filter `localHours` to accounts in this send-window mode (account | prospect | both); rows are not filtered" - added
Input schema / properties / sessionId / descriptionAdded value: +"Limit to one account by id (li_list_accounts). Omit to cover every account you can see." - added
Input schema / properties / sessionLabel / descriptionAdded value: +"Limit to one account by label, LinkedIn name, profile slug or member id. Omit to cover every account you can see."
- Changed
li_pause_campaign1 field changed- added
Input schema / properties / campaignId / descriptionAdded value: +"Campaign id from li_list_campaigns"
- Changed
li_pending_invites2 fields changed- added
Input schema / properties / sessionId / descriptionAdded value: +"Account id from li_list_accounts. Omit (with sessionLabel) to use your default account." - added
Input schema / properties / sessionLabel / descriptionAdded value: +"Account by label, LinkedIn name, profile slug or member id (li_list_accounts). Omit (with sessionId) to use your default account."
- Changed
li_read_conversation2 fields changed- changed
Input schema / properties / sessionId / descriptionPrevious value: -"Optional saved LinkedIn session selector"New value: +"Account id from li_list_accounts. Omit (with sessionLabel) to use your default account." - changed
Input schema / properties / sessionLabel / descriptionPrevious value: -"Optional saved LinkedIn session selector"New value: +"Account by label, LinkedIn name, profile slug or member id (li_list_accounts). Omit (with sessionId) to use your default account."
- Changed
li_read_conversations_bulk2 fields changed- added
Input schema / properties / sessionId / descriptionAdded value: +"Account id from li_list_accounts. Omit (with sessionLabel) to use your default account." - added
Input schema / properties / sessionLabel / descriptionAdded value: +"Account by label, LinkedIn name, profile slug or member id (li_list_accounts). Omit (with sessionId) to use your default account."
- Changed
li_received_invitations2 fields changed- added
Input schema / properties / sessionId / descriptionAdded value: +"Account id from li_list_accounts. Omit (with sessionLabel) to use your default account." - added
Input schema / properties / sessionLabel / descriptionAdded value: +"Account by label, LinkedIn name, profile slug or member id (li_list_accounts). Omit (with sessionId) to use your default account."
- Changed
li_replies_to_answer3 fields changed- added
Input schema / properties / limit / descriptionAdded value: +"Most rows to return (default 100); `truncated` says when there are more" - changed
Input schema / properties / sessionId / descriptionPrevious value: -"Scope to one account id"New value: +"Limit to one account by id (li_list_accounts). Needed (or sessionLabel) when you have more than one account." - changed
Input schema / properties / sessionLabel / descriptionPrevious value: -"Scope to one account label (omit for all accounts)"New value: +"Limit to one account by label, LinkedIn name, profile slug or member id. Needed (or sessionId) when you have more than one account."
- Changed
li_reset_contact2 fields changed- added
Input schema / properties / contactId / descriptionAdded value: +"The contact id from li_contact_dossier or li_campaign_contacts" - added
Input schema / properties / profileUrl / descriptionAdded value: +"The contact, by LinkedIn profile URL (or use contactId)"
- Changed
li_resume_campaign1 field changed- added
Input schema / properties / campaignId / descriptionAdded value: +"Campaign id from li_list_campaigns"
- Changed
li_schedule_post1 field changed- added
Input schema / properties / sessionId / descriptionAdded value: +"Account id from li_list_accounts. Needed (or sessionLabel) when you have more than one account; never guessed."
- Changed
li_scheduled_posts3 fields changed- added
Input schema / properties / limit / descriptionAdded value: +"Most posts to return, newest scheduled time first (default 50, max 200)" - added
Input schema / properties / sessionId / descriptionAdded value: +"Limit to one account by id (li_list_accounts). Needed (or sessionLabel) when you have more than one account." - changed
Input schema / properties / sessionLabel / descriptionPrevious value: -"Omit to list across every account"New value: +"Limit to one account by label, LinkedIn name, profile slug or member id. Needed (or sessionId) when you have more than one account."
- Changed
li_selector_canary2 fields changed- added
Input schema / properties / sessionId / descriptionAdded value: +"Account id from li_list_accounts. Omit (with sessionLabel) to use your default account." - added
Input schema / properties / sessionLabel / descriptionAdded value: +"Account by label, LinkedIn name, profile slug or member id (li_list_accounts). Omit (with sessionId) to use your default account."
- Changed
li_send_bulk_messages3 fields changed- added
Input schema / properties / items / descriptionAdded value: +"Recipients and their exact text, one per person; batches of 15 or fewer are safest" - added
Input schema / properties / items / items / properties / message / descriptionAdded value: +"Exact text for this recipient, never generated" - added
Input schema / properties / items / items / properties / profileUrl / descriptionAdded value: +"Recipient profile URL"
- Changed
li_send_connection_now2 fields changed- changed
Input schema / properties / sessionId / descriptionPrevious value: -"Optional saved LinkedIn session selector"New value: +"Account id from li_list_accounts. Needed (or sessionLabel) when you have more than one account; never guessed." - changed
Input schema / properties / sessionLabel / descriptionPrevious value: -"Optional saved LinkedIn session selector"New value: +"Account by label, LinkedIn name, profile slug or member id (li_list_accounts). Needed (or sessionId) when you have more than one account; never guessed."
- Changed
li_send_message3 fields changed- added
Input schema / properties / debugArtifactsDir / descriptionAdded value: +"Ignored; accepted only so older callers do not fail validation." - changed
Input schema / properties / sessionId / descriptionPrevious value: -"Optional saved LinkedIn session selector"New value: +"Account id from li_list_accounts. Needed (or sessionLabel) when you have more than one account; never guessed." - changed
Input schema / properties / sessionLabel / descriptionPrevious value: -"Optional saved LinkedIn session selector"New value: +"Account by label, LinkedIn name, profile slug or member id (li_list_accounts). Needed (or sessionId) when you have more than one account; never guessed."
- Changed
li_session_status2 fields changed- added
Input schema / properties / sessionId / descriptionAdded value: +"Account id from li_list_accounts. Omit (with sessionLabel) to use your default account." - added
Input schema / properties / sessionLabel / descriptionAdded value: +"Account by label, LinkedIn name, profile slug or member id (li_list_accounts). Omit (with sessionId) to use your default account."
- Changed
li_set_account_proxy2 fields changed- added
Input schema / properties / sessionId / descriptionAdded value: +"Account id from li_list_accounts. Needed (or sessionLabel) when you have more than one account; never guessed." - added
Input schema / properties / sessionLabel / descriptionAdded value: +"Account by label, LinkedIn name, profile slug or member id (li_list_accounts). Needed (or sessionId) when you have more than one account; never guessed."
- Changed
li_set_booking_settings6 fields changed- added
Input schema / properties / cancelRecheckHours / descriptionAdded value: +"Hours after a cancelled booking before it is due again (default 24, 1-336)" - added
Input schema / properties / closeAfterDays / descriptionAdded value: +"Days after a nudge before the next action becomes a close (default 3, 1-30)" - added
Input schema / properties / firstNudgeHours / descriptionAdded value: +"Hours after the booking link before the first check (default 48, 1-336)" - added
Input schema / properties / maxNudges / descriptionAdded value: +"Nudges before a close (default 1, 0-3)" - added
Input schema / properties / sessionId / descriptionAdded value: +"Account id from li_list_accounts. Needed (or sessionLabel) when you have more than one account; never guessed." - added
Input schema / properties / sessionLabel / descriptionAdded value: +"Account by label, LinkedIn name, profile slug or member id (li_list_accounts). Needed (or sessionId) when you have more than one account; never guessed."
- Changed
li_set_default_pricing_tier1 field changed- added
Input schema / properties / tier / descriptionAdded value: +"'founding' or 'standard'; omit to read the current default"
- Changed
li_set_office_hours10 fields changed- added
Input schema / properties / prospectWindow / descriptionAdded value: +"Prospect-local hours used by the prospect and both modes; omitted fields keep their stored values" - added
Input schema / properties / prospectWindow / properties / inviteEnd / descriptionAdded value: +"Prospect's local hour invites stop, EXCLUSIVE" - added
Input schema / properties / prospectWindow / properties / inviteStart / descriptionAdded value: +"Prospect's local hour invites may start, inclusive" - added
Input schema / properties / prospectWindow / properties / maxDeferHours / descriptionAdded value: +"Hours an invite may wait for the prospect window before the account window applies (default 72)" - added
Input schema / properties / prospectWindow / properties / messageEnd / descriptionAdded value: +"Prospect's local hour scheduled steps stop, EXCLUSIVE" - added
Input schema / properties / prospectWindow / properties / messageStart / descriptionAdded value: +"Prospect's local hour scheduled steps may start, inclusive" - added
Input schema / properties / prospectWindow / properties / weekdaysOnly / descriptionAdded value: +"true = never on the prospect's Saturday or Sunday" - added
Input schema / properties / sendWindowMode / descriptionAdded value: +"account (default): the account window gates everything; prospect: each contact's local window gates invites and scheduled steps; both: both must be open" - added
Input schema / properties / sessionId / descriptionAdded value: +"Account id from li_list_accounts. Needed (or sessionLabel) when you have more than one account; never guessed." - added
Input schema / properties / sessionLabel / descriptionAdded value: +"Account by label, LinkedIn name, profile slug or member id (li_list_accounts). Needed (or sessionId) when you have more than one account; never guessed."
- Changed
li_set_team_billing3 fields changed- added
Input schema / properties / billingCurrency / descriptionAdded value: +"'INR' (Razorpay) or 'USD' (PayPal); cannot change while a subscription is live" - added
Input schema / properties / pricingTier / descriptionAdded value: +"'founding' or 'standard' — the plan the team checks out on next" - added
Input schema / properties / teamId / descriptionAdded value: +"Team id (or use email)"
- Changed
li_set_team_complimentary1 field changed- added
Input schema / properties / teamId / descriptionAdded value: +"Team id (or use the email of anyone in it)"
- Changed
li_snooze_reply1 field changed- added
Input schema / properties / contactId / descriptionAdded value: +"One contact by id (from li_contact_dossier or li_campaign_contacts), instead of profileUrl"
- Changed
li_track_booking1 field changed- added
Input schema / properties / contactId / descriptionAdded value: +"One contact by id (from li_contact_dossier or li_campaign_contacts), instead of profileUrl"
- Changed
li_unmark_invitation5 fields changed- added
Input schema / properties / confirm / descriptionAdded value: +"Must be true to delete the decision" - added
Input schema / properties / memberId / descriptionAdded value: +"The inviter's member id (ACoAA…), as li_received_invitations returns it" - added
Input schema / properties / profileUrl / descriptionAdded value: +"The inviter, by profile URL (or use memberId)" - added
Input schema / properties / sessionId / descriptionAdded value: +"Account id from li_list_accounts. Needed (or sessionLabel) when you have more than one account; never guessed." - added
Input schema / properties / sessionLabel / descriptionAdded value: +"Account by label, LinkedIn name, profile slug or member id (li_list_accounts). Needed (or sessionId) when you have more than one account; never guessed."
- Changed
li_verify_account1 field changed- added
Input schema / properties / sessionId / descriptionAdded value: +"Account id from li_list_accounts. Needed (or sessionLabel) when you have more than one account; never guessed."
- Changed
li_withdraw_invites2 fields changed- added
Input schema / properties / sessionId / descriptionAdded value: +"Account id from li_list_accounts. Needed (or sessionLabel) when you have more than one account; never guessed." - added
Input schema / properties / sessionLabel / descriptionAdded value: +"Account by label, LinkedIn name, profile slug or member id (li_list_accounts). Needed (or sessionId) when you have more than one account; never guessed."
- Changed
li_withdraw_status2 fields changed- added
Input schema / properties / sessionId / descriptionAdded value: +"Account id from li_list_accounts. Omit (with sessionLabel) to use your default account." - added
Input schema / properties / sessionLabel / descriptionAdded value: +"Account by label, LinkedIn name, profile slug or member id (li_list_accounts). Omit (with sessionId) to use your default account."
1 tool update
- Added
li_hold_sending
Related MCP Connectors
LinkedIn outreach from Claude with a human veto: review, approve and send drafts, triage replies.
LinkedIn outreach in Claude or ChatGPT: campaign stats, replies, leads, drafts. Never sends.
Run LinkedIn and email outbound from Claude, ChatGPT, or any AI agent.
LinkedIn prospecting, daily post signals, outreach campaigns and inbox management.
Related MCP Servers
- AlicenseAqualityBmaintenanceAI agent for LinkedIn outreach: finds the right people, writes in your voice, follows up, replies. Six campaign goals: sell a product or service, find a job, hire people, find partners or investors, find a vendor, research interviews. Campaigns stay drafts until you launch them.222,088 PyPI12MIT
- AlicenseAqualityDmaintenanceEnables automated LinkedIn growth by posting, commenting, and managing connections through Claude Code, with daily scheduled tasks for inbox replies and connection requests.17MIT
- AlicenseNot gradedqualityDmaintenanceEnables running the entire LinkedIn sales motion inside Claude Code, including content creation, audience warming, outreach, and booking calls.9MIT
- AlicenseAqualityBmaintenanceLinkedIn prospect intelligence inside Claude. It automates the research behind outreach, not the sending: scrapes posts, profiles and comment threads into a local SQLite database, classifies what a person or company actually posts about, mines comment threads for people already describing your problem, and surfaces uncommon commonalities worth opening with.1834MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.