Linxa MCP reference

37 tools for a controlled LinkedIn workflow

Linxa is the control plane behind your agent: it owns queueing, pacing, schedules, retries, and idempotency. Your agent decides with context; Linxa executes within the limits you approve.

Connect your MCP client

Create a token in Linxa MCP Setup, keep it in your local environment, then follow the platform-specific instructions below. Every client connects to the same hosted Streamable HTTP endpoint.

Endpoint

https://app.uselinxa.com/api/mcp/rpc

Transport

Streamable HTTP

Authentication

Bearer token from Linxa MCP Setup

Keep the token private

Never paste a token into a chat, screenshot, repository, or shared project file. If it is ever shared, revoke it in Linxa MCP Setup and create a replacement.

Claude Code

Tested on macOSOfficial platform docs ↗

Install Claude Code first if claude --version reports “command not found”. Node.js 18+ is required.

npm install -g @anthropic-ai/claude-code
claude --version

Set the token for this shell, then add Linxa in user scope. User scope makes it available in every local project; local scope only applies to the directory where it was added.

export LINXA_TOKEN=YOUR_NEW_TOKEN
claude mcp add --scope user --transport http linxa https://app.uselinxa.com/api/mcp/rpc \
  --header "Authorization: Bearer $LINXA_TOKEN"
claude mcp list

Restart Claude Code in the target project. Type /mcp to confirm that Linxa is loaded.

Codex CLI, IDE extension, or ChatGPT desktop

Official platform docs ↗

Codex clients on the same computer share ~/.codex/config.toml. Add this user-level configuration, then start or restart Codex with LINXA_TOKEN available in its environment.

[mcp_servers.linxa]
url = "https://app.uselinxa.com/api/mcp/rpc"
bearer_token_env_var = "LINXA_TOKEN"
default_tools_approval_mode = "writes"
export LINXA_TOKEN=YOUR_NEW_TOKEN
codex mcp list
codex

In the Codex terminal UI, type /mcp to verify the server. The writes approval mode keeps external actions behind a confirmation.

Create ~/.cursor/mcp.json to use Linxa in every workspace, or .cursor/mcp.json for one workspace. Restart Cursor after saving.

{
  "mcpServers": {
    "linxa": {
      "url": "https://app.uselinxa.com/api/mcp/rpc",
      "headers": {
        "Authorization": "Bearer ${LINXA_TOKEN}"
      }
    }
  }
}

Set LINXA_TOKEN in the environment that launches Cursor. In Agent chat, open the MCP tools list and leave write tools set to request approval.

Open the Kiro MCP panel and edit the global ~/.kiro/mcp.json, or a workspace .kiro/mcp.json. When prompted, approve LINXA_TOKEN in Settings → “Mcp Approved Env Vars”.

{
  "mcpServers": {
    "linxa": {
      "url": "https://app.uselinxa.com/api/mcp/rpc",
      "headers": {
        "Authorization": "Bearer ${LINXA_TOKEN}"
      }
    }
  }
}

Kiro hot-reloads MCP configuration. Check that Linxa appears in the MCP panel before using it.

Set the token in the environment used by OpenClaw, register Linxa as a Streamable HTTP server, then probe it.

export LINXA_TOKEN=YOUR_NEW_TOKEN
openclaw mcp set linxa '{"url":"https://app.uselinxa.com/api/mcp/rpc","transport":"streamable-http","headers":{"Authorization":"Bearer ${LINXA_TOKEN}"}}'
openclaw mcp doctor linxa --probe

If the running OpenClaw process does not reload automatically, restart it after saving the configuration.

Read-only verification prompt

After the platform reports Linxa as connected, paste this into its chat. It confirms authentication without changing data.

Use the Linxa MCP tool linxa_get_user_settings. Show my current plan and settings. Do not perform any write actions.

Then try the compact inbox workflow. It should use one Linxa call and must not inspect every conversation:

Use linxa_get_next_actions only. Answer “What conversation needs my attention?” in at most 5 bullets. Do not call other Linxa tools or shell commands. Do not perform write actions.

Avoid the common setup failures

claude: command not found

Install Claude Code and confirm claude --version. Do not use sudo npm install -g.

Linxa is missing when Claude starts in another project

Remove the local entry and add it again with --scope user; then restart Claude Code.

HTTP 401 “Invalid MCP token”

The token is empty, expired, or copied incorrectly. Regenerate it in Linxa MCP Setup, export it in the current shell, remove the server, add it again, then run the platform status command.

The server connects but Linxa tools are missing or outdated

Start a new client session or restart the app, then inspect /mcp in Claude Code/Codex or the MCP panel in an IDE. Clients cache the tool catalog when a session begins, so reconnect after Linxa adds methods.

A token was pasted into a chat or committed

Revoke it immediately in Linxa MCP Setup, issue a replacement, then update the client’s private user-level configuration.

Preview before action

Use dry_run for supported writes. A preview is not permission to execute the external action.

Idempotent writes

Send a unique idempotency_key for each write. It is required when a sequence is started.

Status is the source of truth

Queued, drafted, and scheduled are pending. Say an invite was sent only when the status is delivered.

From a user request to the right tools

These are complete workflows, not single-method demos. The agent should keep exact IDs from one step to the next and stop for approval immediately before an external action.

“What conversation needs my attention?”

One Needs Attention thread, or ten recent follow-ups with due status when that folder is empty. No full-inbox dump.

linxa_get_next_actions

“Prepare replies to Akbar, Rajesh, and Ilija. Do not send.”

Names are resolved to exact conversation IDs and drafts are saved with conversation, product, stage, post, and comment context.

linxa_get_next_actions → linxa_prepare_replies → linxa_list_drafts

“Make Rajesh’s reply shorter and send the three approved replies.”

The edited draft is previewed in full. Only the approved conversation IDs are queued, with no implicit “send all”.

linxa_save_draft → linxa_send_drafts (dry_run) → linxa_send_drafts → linxa_get_action_status

“Get the ICP for my product URL, but only fill missing pain points and value proposition.”

Selective sections reduce model work and missing_only preserves product rules that are already populated.

linxa_create_product → linxa_generate_product_rules

“Find people interested in this service URL and prepare an invite, first message, and three follow-ups.”

A source-bound audience and reviewed sequence are prepared. Invitations or messages do not start until explicit approval.

product → rules → search → search status → leads → sequence → audience → start preview

“Pause the sequence, change follow-up two, and resume it.”

Unstarted queued messages are cancelled on pause; the edited version is previewed before delivery resumes.

linxa_pause_sequence → linxa_get_sequence → linxa_update_sequence → linxa_start_sequence (dry_run) → linxa_start_sequence

Tool reference

Read tools can be called directly. Preparing or editing a draft does not send it. Review proposed content and obtain explicit approval immediately before an external action: enabling autopilot, starting a sequence, sending approved drafts, scheduling a message, sending a notification, or queuing an invitation.

Inbox, replies, and action status

Find the conversations that matter, prepare grounded replies, and send only the exact drafts the user approved.

linxa_get_next_actionsRead

Input: None

Return the newest Needs Attention conversation with its Smart Inbox link. If that folder is empty, return ten recent Need Follow Up items with due status and a recommended-for-reply flag.

linxa_list_conversationsRead

Input: Optional: limit, label, search

List or search inbox conversations.

linxa_get_conversationRead

Input: conversation_id

Read the complete message thread for one conversation.

linxa_get_conversation_contextRead

Input: conversation_id; optional include_messages, include_recent_posts, include_private_comments, post_limit

Load the owned thread, relationship stage, product, recent recipient posts, private comments, and a context version in one call. Use this for custom reasoning; normal replies should use linxa_prepare_replies.

linxa_get_profile_postsRead

Input: conversation_id; optional limit

Read recent posts from the participant in an owned conversation for optional personalization.

linxa_list_commentsRead

Input: conversation_id

Read private Linxa comments for one owned conversation.

linxa_get_repliesRead

Input: Optional: since

Retrieve recorded LinkedIn replies.

linxa_get_action_statusRead

Input: action_id

Read the state of an invite, queued message, draft, lead search, or sequence action.

linxa_get_user_settingsRead

Input: None

Read the current plan, timezone, LinkedIn-session state, and Telegram connection state. It does not return usage quotas.

linxa_add_commentWrite

Input: profileId, comment

Add a CRM-style note to a lead.

linxa_mark_as_readWrite

Input: chat_id

Mark an inbox conversation as read.

linxa_prepare_repliesWrite

Input: conversation_ids; optional type, instructions, force_regenerate, allow_no_further_contact, allow_early_follow_up, dry_run

Reuse the Smart Inbox Next Message pipeline to prepare and save drafts for 1–10 exact conversations. It blocks no-further-contact and early follow-ups unless explicitly overridden, and never sends.

linxa_list_draftsRead

Input: Optional: conversation_ids, limit, cursor

List saved Smart Inbox drafts, including staleness and context-version information. The default is the ten newest.

linxa_save_draftWrite

Input: chat_id, text; optional scheduled_at, dry_run

Save or replace the draft for one exact owned conversation. Use it after custom editing.

linxa_delete_draftWrite

Input: chat_id; optional dry_run

Delete the unscheduled draft for one exact owned conversation without deleting the conversation.

linxa_send_draftsExternal action

Input: conversation_ids; dry_run, then approval_token and idempotency_key

Preview recipients and full texts, then queue only the exact approved drafts. Approval expires after 15 minutes and any draft change invalidates it.

linxa_notifyExternal action

Input: message

Send a Linxa notification through the configured channel.

linxa_inviteExternal action

Input: profileId; optional text, comment

Queue a LinkedIn invitation for an eligible profile.

Products and ICP

Put a product definition and ideal-customer profile behind every lead decision.

linxa_list_productsRead

Input: None

List the products and ICP rules in the account.

linxa_get_productRead

Input: product_id

Read one product and its configuration.

linxa_create_productWrite

Input: name; optional description, synonyms, website

Create a product context for matching and outreach.

linxa_update_productWrite

Input: product_id plus changed fields

Update product details or ICP fields.

linxa_generate_product_rulesWrite

Input: product_id; optional sections, mode, dry_run

Generate only the requested description, ICP, pain points, value proposition, benefits, or messaging rules. Use missing_only to preserve populated sections or regenerate to replace them.

Autopilot and lead search

Search asynchronously, work from scored results, and keep delivery limits inside Linxa.

linxa_get_autopilotRead

Input: None

Read the active autopilot configuration.

linxa_set_autopilotExternal action

Input: enabled, daily_limit, schedule, product_id, min_icp_match

Configure a controlled autopilot; schedule accepts any_time, business_hours, morning, afternoon, or evening.

linxa_search_leadsWrite

Input: search_url or persona, product_id; optional limit

Start an asynchronous lead search.

linxa_get_lead_search_statusRead

Input: request_id

Check search progress and retrieve its result reference.

linxa_list_leadsRead

Input: Optional: minScore, productId, source_request_id, limit

List discovered leads and narrow them to a search result.

Sequences

Compose first; send only after the messages, audience, timing, and scope are reviewed.

linxa_list_sequencesRead

Input: None

List configured sequences.

linxa_get_sequenceRead

Input: sequence_id

Read a sequence and its steps.

linxa_get_sequence_statsRead

Input: sequence_id

Read sequence state, enrollments, queued/attempted/delivered/failed messages, and next execution time.

linxa_create_sequenceWrite

Input: name, product_id

Create a draft sequence.

linxa_generate_sequence_stepWrite

Input: sequence_id, step_order, template or prompt

Generate a candidate step for review.

linxa_update_sequenceWrite

Input: sequence_id, steps (1–5)

Save step content, mode, and delays.

linxa_set_sequence_audienceWrite

Input: sequence_id, source_request_ids; optional dry_run

Preview and save exact owned lead-search sources as the audience. A missing audience never means all contacts.

linxa_start_sequenceExternal action

Input: sequence_id, idempotency_key; optional dry_run

Preview, start, or resume delivery. The server blocks incomplete steps and sequences without an explicitly saved audience.

linxa_pause_sequenceWrite

Input: sequence_id; optional idempotency_key

Pause active enrollments and cancel queued messages that have not started, so steps can be edited safely before resume.

Response and approval contract

  • ok means the requested result is available. For asynchronous work, inspect the returned action or request ID rather than assuming completion.
  • preview shows exactly what would happen. It does not authorize the write and must be followed by a separate approved call.
  • drafted, queued, or scheduled are not delivery confirmations. Follow the returned action_id until the terminal status is available.
  • needs_input means the agent should ask for the missing field. It must not invent a target, message, schedule, or limit.
  • error is terminal for that call. Surface its code and message, then adjust only after the user provides direction.
  • SEQUENCE_STEPS_INCOMPLETE and SEQUENCE_AUDIENCE_REQUIRED are safety stops: complete the content and save an explicit owned audience before trying again.

Safe agent recipes

Build only the missing ICP

  1. 1Create or read the product.
  2. 2Call linxa_generate_product_rules with explicit sections and mode=missing_only.
  3. 3Read the product back before using it for lead search.

Find and sequence leads

  1. 1Start a search, retain request_id, and poll its status.
  2. 2Attach that exact source with linxa_set_sequence_audience and preview the matched count.
  3. 3Show every message and delay; start only after explicit approval.

Prepare replies without sending

  1. 1Call linxa_get_next_actions once and retain conversation IDs.
  2. 2Use linxa_prepare_replies for normal Smart Inbox-quality drafts.
  3. 3List the saved drafts and wait for editing or send instructions.

Send exact approved drafts

  1. 1Call linxa_send_drafts with exact conversation_ids and dry_run=true.
  2. 2Show every recipient and full message; ask for explicit approval.
  3. 3Use the returned approval_token within 15 minutes, then check every action_id.