SalesTouch Docs
All MCP tools
Writes to LinkedInLinkedIn

LinkedIn message

linkedin_message

Send a direct LinkedIn message to a member target.

When to use it

Send a direct message to an existing LinkedIn connection or known thread.

Required scopes
linkedin:accesssalestouch:use
Execution
Synchronous MCP tool call

Requirements

Provide one member target: identifier, recipient, linkedin_url, profile_url, or handle.
Provide message content with text, message, or content.
Optional attachments uses an uploaded attachment_id, content_base64, or a public HTTPS url. At most 5 files and 60 MB combined; inline content_base64 is limited to 3 MB per request, so send larger files by url or attachment_id. HTML and local paths are unsupported. Reuse idempotency_key on retries.

Example

Ask your agent

Send “Thanks for connecting, happy to compare notes.” to https://www.linkedin.com/in/example.

Tool arguments
{
  "linkedin_url": "https://www.linkedin.com/in/example",
  "text": "Thanks for connecting, happy to compare notes.",
  "queue": true
}
MCP response envelope
{
  "content": [
    {
      "type": "text",
      "text": "{\n  \"data\": { ... },\n  \"meta\": null\n}"
    }
  ],
  "isError": false
}

Expected: A sent or queued message result with its action identifier.

Parameters

account_id
string

Connected SalesTouch account id, username, email, handle, or account URL.

identifier
string

LinkedIn member handle, public id, account id, or profile URL.

queue
boolean

Set true to queue this action when it cannot run now.

scheduled_for
string

Future ISO 8601 datetime with timezone. The action will never run before this time and queueing is implicit.

text
string

Message text to send. Required unless attachments are provided.

attachments
array

Native message files, at most 5 and 60 MB combined. Use an uploaded attachment_id, a public HTTPS URL, or base64 bytes; inline base64 is limited to 3 MB per request, so send larger files by url or attachment_id. Local paths and HTML are unsupported. Upload selected local files through /api/linkedin/attachments in the app, then pass their attachment_id.

idempotency_key
string

Stable key for an attachment message, at most 120 characters. Same key and content never sends twice. Omit to deduplicate identical attachment messages; change deliberately only for a new send.

linkedin_conversation_id
string

Optional existing LinkedIn conversation id. conversation_id is reserved for the MCP analytics session.

bypass_rate_limit
boolean

Override reply-aware queue behavior. Messages to leads who already replied bypass queued send limits by default unless queue or scheduled_for is set.

Aliases are shown independently because MCP clients send a flat JSON object. Use one alias from each required group, not every alias.

Common errors

insufficient_scope

Reconnect the MCP and approve the requested LinkedIn permission.

paid_plan_required

Follow the error's action_url: start the free trial, choose a plan after a trial or subscription ended, or update the payment method after a failed payment. details.reason names which one.

trial_payment_method_required

Retry after a minute if checkout was just completed; otherwise add a payment method in SalesTouch billing to activate the trial and LinkedIn MCP access.

action_limit_queue_required

Repeat the call with queue set to true.

message_requires_connection

The member is not a 1st-degree connection and the seat cannot InMail them. Call retry_tool (linkedin_invite_then_message) with retry_with; do not retry linkedin_message.

inmail_credits_exhausted

The seat has no InMail credits left. Use linkedin_invite_then_message, or wait for the credits to refill.

message_too_long

Shorten the text and send again.

recipient_unreachable

LinkedIn will not deliver to this member from this seat. Do not retry.