# MCP tools reference

Source: https://finchreach.com/docs/tools

Finchreach's MCP server registers 27 tools: 13 reads and 14 writes. Writes wait in the approval queue when approval is on. Beta tools use LinkedIn request shapes not yet verified against a capture: they work but may change or fail.

## linkedin_list_accounts

List LinkedIn accounts. Lists the LinkedIn accounts connected to this tenant: id, status (active / unverified / expired / checkpoint), member urn, exit country and whether the account is paused.

Read · Scopes: `accounts:read`

No parameters.

## linkedin_get_profile

Get my LinkedIn profile. The connected member's own profile (/me plus the full profile): name, headline, public id, urns.

Read · Scopes: `linkedin:read`

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `accountId` | `string` | No | The LinkedIn account id (from linkedin_list_accounts). May be omitted when the tenant has exactly one connected account.; max 64 chars |

## linkedin_get_feed

Read the LinkedIn feed. Posts from the member's home feed. Pass the previous page's `next` as cursor for more.

Read · Scopes: `linkedin:read`

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `accountId` | `string` | No | The LinkedIn account id (from linkedin_list_accounts). May be omitted when the tenant has exactly one connected account.; max 64 chars |
| `sort` | `"relevance" or "recent"` | No | relevance (default) or recent |
| `cursor` | `object` | No | The `next` object of the previous page |

## linkedin_get_notifications

Read LinkedIn notifications. The member's latest notifications and unseen badge counts.

Read · Scopes: `linkedin:read`

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `accountId` | `string` | No | The LinkedIn account id (from linkedin_list_accounts). May be omitted when the tenant has exactly one connected account.; max 64 chars |

## linkedin_get_conversations

List LinkedIn conversations. The member's messaging inbox: conversations with participants and the last message. Pass the previous page's cursor for older ones.

Read · Scopes: `linkedin:read`

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `accountId` | `string` | No | The LinkedIn account id (from linkedin_list_accounts). May be omitted when the tenant has exactly one connected account.; max 64 chars |
| `cursor` | `string` | No | max 2000 chars |

## linkedin_get_messages

Read a LinkedIn conversation. Messages of one conversation (conversationUrn from linkedin_get_conversations).

Read · Scopes: `linkedin:read`

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `accountId` | `string` | No | The LinkedIn account id (from linkedin_list_accounts). May be omitted when the tenant has exactly one connected account.; max 64 chars |
| `conversationUrn` | `string` | Yes | urn:li:msg_conversation:(urn:li:fsd_profile:<id>,<thread>); max 400 chars |
| `syncToken` | `string` | No | max 2000 chars |

## linkedin_search

Search LinkedIn. LinkedIn search by keywords. vertical: all (default, blended) or content (posts) — page with cursor; people (optional filters: network F=1st, S=2nd, O=3rd+; geoUrn location ids; currentCompany ids) or companies — page with page.

Read · Scopes: `linkedin:read`

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `accountId` | `string` | No | The LinkedIn account id (from linkedin_list_accounts). May be omitted when the tenant has exactly one connected account.; max 64 chars |
| `keywords` | `string` | Yes | max 200 chars |
| `vertical` | `"all" or "content" or "people" or "companies"` | No |  |
| `page` | `integer` | No |  |
| `cursor` | `object` | No | all/content: the `next` object of the previous page |
| `network` | `"F" or "S" or "O"[]` | No | max 3 items |
| `geoUrn` | `string[]` | No | people: location geo ids (e.g. "100446943" = Argentina); max 10 items |
| `currentCompany` | `string[]` | No | people: current company organization ids (e.g. "1441" = Google); max 10 items |

## linkedin_get_post_comments

Read comments on a LinkedIn post. Comments on a post (most relevant first): author (name, headline, degree, profile), text, age, reaction counts and reply counts. Pass the previous page's `next` as cursor for more.

Read · Scopes: `linkedin:read`

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `accountId` | `string` | No | The LinkedIn account id (from linkedin_list_accounts). May be omitted when the tenant has exactly one connected account.; max 64 chars |
| `activityId` | `string` | Yes | The post: its numeric activity id or urn:li:activity:<id> (from linkedin_get_feed / linkedin_search); max 64 chars |
| `trackingId` | `string` | No | The feed item's trackingId, when known (from linkedin_get_feed); max 300 chars |
| `cursor` | `object` | No | The `next` object of the previous page |

## linkedin_get_post_reactions

Read reactions on a LinkedIn post. Who reacted to a post: name, reaction, degree, headline and profile. Optionally only one reactionType. Pass the previous page's next.pageToken for more.

Read · Scopes: `linkedin:read`

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `accountId` | `string` | No | The LinkedIn account id (from linkedin_list_accounts). May be omitted when the tenant has exactly one connected account.; max 64 chars |
| `activityId` | `string` | Yes | The post: numeric activity id, urn:li:activity:<id> or urn:li:ugcPost:<id> (from linkedin_get_feed / linkedin_search); max 64 chars |
| `reactionType` | `"LIKE" or "PRAISE" or "APPRECIATION" or "EMPATHY" or "INTEREST" or "ENTERTAINMENT"` | No |  |
| `pageToken` | `string` | No | max 2000 chars |

## linkedin_get_person_profile

View a person's LinkedIn profile. Another member's profile card by URL (https://www.linkedin.com/in/<id>/) or public id: name, headline, location, followers, connections, profile urn and connection state. LinkedIn shows the member that you viewed them; this has a tighter daily budget than other reads.

Read · Scopes: `linkedin:read`

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `accountId` | `string` | No | The LinkedIn account id (from linkedin_list_accounts). May be omitted when the tenant has exactly one connected account.; max 64 chars |
| `profile` | `string` | Yes | linkedin.com/in/<public id> URL or the public id; max 400 chars |

## linkedin_create_post

Publish a LinkedIn post. Publishes a post as the member (LIVE on LinkedIn): text, text with up to 9 images (https URL or base64; JPEG, PNG or GIF, max 10 MB each, 40 MB together), or text with an article link (LinkedIn builds its preview from the URL; description and thumbnailUrl are not sent and produce a warning). If approval mode is on for this account, nothing is sent yet: the result is { status: "pending_approval", action } and a human approves it in Finchreach; poll it with linkedin_get_action.

Write (waits for approval when approval is on) · Scopes: `linkedin:write`

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `accountId` | `string` | No | The LinkedIn account id (from linkedin_list_accounts). May be omitted when the tenant has exactly one connected account.; max 64 chars |
| `text` | `string` | Yes | max 3000 chars |
| `visibility` | `"Anyone" or "Connections Only"` | No | Default: Connections Only |
| `images` | `object[]` | No | Images to attach; each needs exactly one of url or base64; max 9 items |
| `article` | `object` | No | Article link preview (cannot be combined with images) |

## linkedin_send_dm

Send a LinkedIn message. Sends a direct message as the member: into an existing conversation (conversationUrn) or to new recipients (recipientUrns, urn:li:fsd_profile:…). If approval mode is on for this account, nothing is sent yet: the result is { status: "pending_approval", action } and a human approves it in Finchreach; poll it with linkedin_get_action.

Write (waits for approval when approval is on) · Scopes: `linkedin:write`

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `accountId` | `string` | No | The LinkedIn account id (from linkedin_list_accounts). May be omitted when the tenant has exactly one connected account.; max 64 chars |
| `text` | `string` | Yes | max 8000 chars |
| `conversationUrn` | `string` | No | max 400 chars |
| `recipientUrns` | `string[]` | No | max 20 items |

## linkedin_send_invitation

Send a LinkedIn connection invitation. Sends a connection invitation, optionally with a note (max 300 characters). If approval mode is on for this account, nothing is sent yet: the result is { status: "pending_approval", action } and a human approves it in Finchreach; poll it with linkedin_get_action.

Write (waits for approval when approval is on) · Scopes: `linkedin:write`

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `accountId` | `string` | No | The LinkedIn account id (from linkedin_list_accounts). May be omitted when the tenant has exactly one connected account.; max 64 chars |
| `fsdProfileId` | `string` | Yes | The ACoA… profile id (or urn:li:fsd_profile:ACoA…); max 200 chars |
| `note` | `string` | No | max 300 chars |

## linkedin_react_to_post

React to a LinkedIn post. Reacts to a post as the member (default LIKE). If approval mode is on for this account, nothing is sent yet: the result is { status: "pending_approval", action } and a human approves it in Finchreach; poll it with linkedin_get_action.

Write (waits for approval when approval is on) · Scopes: `linkedin:write`

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `accountId` | `string` | No | The LinkedIn account id (from linkedin_list_accounts). May be omitted when the tenant has exactly one connected account.; max 64 chars |
| `activityId` | `string` | Yes | The post: its numeric activity id or urn:li:activity:<id> (from linkedin_get_feed / linkedin_search); max 64 chars |
| `reactionType` | `"LIKE" or "PRAISE" or "APPRECIATION" or "EMPATHY" or "INTEREST" or "ENTERTAINMENT"` | No | Default: LIKE |

## linkedin_unreact

Remove a reaction from a LinkedIn post. Removes the member's reaction from a post; pass the reactionType that was given (default LIKE). If approval mode is on for this account, nothing is sent yet: the result is { status: "pending_approval", action } and a human approves it in Finchreach; poll it with linkedin_get_action.

Write (waits for approval when approval is on) · Scopes: `linkedin:write`

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `accountId` | `string` | No | The LinkedIn account id (from linkedin_list_accounts). May be omitted when the tenant has exactly one connected account.; max 64 chars |
| `activityId` | `string` | Yes | The post: its numeric activity id or urn:li:activity:<id> (from linkedin_get_feed / linkedin_search); max 64 chars |
| `reactionType` | `"LIKE" or "PRAISE" or "APPRECIATION" or "EMPATHY" or "INTEREST" or "ENTERTAINMENT"` | No | Default: LIKE |

## linkedin_comment_on_post

Comment on a LinkedIn post. Posts a comment on a post as the member (LIVE on LinkedIn). The result's outcome.ids.commentId is what linkedin_delete_comment takes. If approval mode is on for this account, nothing is sent yet: the result is { status: "pending_approval", action } and a human approves it in Finchreach; poll it with linkedin_get_action.

Write (waits for approval when approval is on) · Scopes: `linkedin:write`

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `accountId` | `string` | No | The LinkedIn account id (from linkedin_list_accounts). May be omitted when the tenant has exactly one connected account.; max 64 chars |
| `activityId` | `string` | Yes | The post: its numeric activity id or urn:li:activity:<id> (from linkedin_get_feed / linkedin_search); max 64 chars |
| `text` | `string` | Yes | max 1250 chars |
| `trackingId` | `string` | No | The feed item's trackingId, when known (from linkedin_get_feed); max 300 chars |

## linkedin_delete_comment

Delete a LinkedIn comment. Deletes one of the member's comments on a post. If approval mode is on for this account, nothing is sent yet: the result is { status: "pending_approval", action } and a human approves it in Finchreach; poll it with linkedin_get_action.

Write (waits for approval when approval is on) · Scopes: `linkedin:write`

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `accountId` | `string` | No | The LinkedIn account id (from linkedin_list_accounts). May be omitted when the tenant has exactly one connected account.; max 64 chars |
| `activityId` | `string` | Yes | The post: its numeric activity id or urn:li:activity:<id> (from linkedin_get_feed / linkedin_search); max 64 chars |
| `commentId` | `string` | Yes | The comment id (outcome.ids.commentId of linkedin_comment_on_post); max 300 chars |
| `trackingId` | `string` | No | The feed item's trackingId, when known (from linkedin_get_feed); max 300 chars |

## linkedin_edit_post

Edit the text of one of the member's LinkedIn posts. Replaces the text of a post the member published (LIVE on LinkedIn). Unverified LinkedIn request shape: refused live (501 unverified_operation) unless the server enables it. If approval mode is on for this account, nothing is sent yet: the result is { status: "pending_approval", action } and a human approves it in Finchreach; poll it with linkedin_get_action.

Write (waits for approval when approval is on) · Beta · Scopes: `linkedin:write`

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `accountId` | `string` | No | The LinkedIn account id (from linkedin_list_accounts). May be omitted when the tenant has exactly one connected account.; max 64 chars |
| `activityId` | `string` | Yes | The post: its numeric activity id or urn:li:activity:<id> (from linkedin_get_feed / linkedin_search); max 64 chars |
| `text` | `string` | Yes | max 3000 chars |
| `trackingId` | `string` | No | The feed item's trackingId, when known (from linkedin_get_feed); max 300 chars |

## linkedin_delete_post

Delete one of the member's LinkedIn posts. Deletes a post the member published (LIVE on LinkedIn; LinkedIn refuses posts that are not the member's). If approval mode is on for this account, nothing is sent yet: the result is { status: "pending_approval", action } and a human approves it in Finchreach; poll it with linkedin_get_action.

Write (waits for approval when approval is on) · Scopes: `linkedin:write`

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `accountId` | `string` | No | The LinkedIn account id (from linkedin_list_accounts). May be omitted when the tenant has exactly one connected account.; max 64 chars |
| `activityId` | `string` | Yes | The post: its numeric activity id or urn:li:activity:<id> (from linkedin_get_feed / linkedin_search); max 64 chars |
| `trackingId` | `string` | No | The feed item's trackingId, when known (from linkedin_get_feed); max 300 chars |

## linkedin_reply_to_comment

Reply to a LinkedIn comment. Posts a threaded reply under a comment as the member (LIVE on LinkedIn). parentCommentId is the comment's id or urn:li:comment:(activity:<postId>,<commentId>) (from linkedin_get_post_comments). Unverified LinkedIn request shape: refused live (501 unverified_operation) unless the server enables it. If approval mode is on for this account, nothing is sent yet: the result is { status: "pending_approval", action } and a human approves it in Finchreach; poll it with linkedin_get_action.

Write (waits for approval when approval is on) · Beta · Scopes: `linkedin:write`

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `accountId` | `string` | No | The LinkedIn account id (from linkedin_list_accounts). May be omitted when the tenant has exactly one connected account.; max 64 chars |
| `activityId` | `string` | Yes | The post: its numeric activity id or urn:li:activity:<id> (from linkedin_get_feed / linkedin_search); max 64 chars |
| `parentCommentId` | `string` | Yes | The comment to reply to: its numeric id or urn:li:comment:(activity:<postId>,<commentId>); max 300 chars |
| `text` | `string` | Yes | max 1250 chars |
| `trackingId` | `string` | No | The feed item's trackingId, when known (from linkedin_get_feed); max 300 chars |

## linkedin_mark_conversation_read

Mark a LinkedIn conversation as read. Marks one of the member's conversations as read (conversationUrn from linkedin_get_conversations). Unverified LinkedIn request shape: refused live (501 unverified_operation) unless the server enables it. If approval mode is on for this account, nothing is sent yet: the result is { status: "pending_approval", action } and a human approves it in Finchreach; poll it with linkedin_get_action.

Write (waits for approval when approval is on) · Beta · Scopes: `linkedin:write`

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `accountId` | `string` | No | The LinkedIn account id (from linkedin_list_accounts). May be omitted when the tenant has exactly one connected account.; max 64 chars |
| `conversationUrn` | `string` | Yes | urn:li:msg_conversation:(urn:li:fsd_profile:<own id>,<thread>); max 400 chars |

## linkedin_get_received_invitations

List received LinkedIn invitations. Pending invitations sent to the member: inviter (name, headline, profile), note, sent time and the `accept` arguments ({ invitationId, sharedSecret }) for linkedin_accept_invitation / linkedin_decline_invitation. Page with start (the previous page's next.start).

Read · Beta · Scopes: `linkedin:read`

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `accountId` | `string` | No | The LinkedIn account id (from linkedin_list_accounts). May be omitted when the tenant has exactly one connected account.; max 64 chars |
| `start` | `integer` | No |  |
| `count` | `integer` | No | Default: 10 |

## linkedin_accept_invitation

Accept a LinkedIn invitation. Accepts a received invitation (the member gains a connection). Pass the invitation's accept arguments from linkedin_get_received_invitations. If approval mode is on for this account, nothing is sent yet: the result is { status: "pending_approval", action } and a human approves it in Finchreach; poll it with linkedin_get_action.

Write (waits for approval when approval is on) · Beta · Scopes: `linkedin:write`

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `accountId` | `string` | No | The LinkedIn account id (from linkedin_list_accounts). May be omitted when the tenant has exactly one connected account.; max 64 chars |
| `invitationId` | `string` | Yes | accept.invitationId from linkedin_get_received_invitations; max 80 chars |
| `sharedSecret` | `string` | Yes | accept.sharedSecret from linkedin_get_received_invitations; max 200 chars |

## linkedin_decline_invitation

Decline (ignore) a LinkedIn invitation. Ignores a received invitation (LinkedIn's Ignore button; the inviter is not notified). Pass the invitation's accept arguments from linkedin_get_received_invitations. If approval mode is on for this account, nothing is sent yet: the result is { status: "pending_approval", action } and a human approves it in Finchreach; poll it with linkedin_get_action.

Write (waits for approval when approval is on) · Beta · Scopes: `linkedin:write`

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `accountId` | `string` | No | The LinkedIn account id (from linkedin_list_accounts). May be omitted when the tenant has exactly one connected account.; max 64 chars |
| `invitationId` | `string` | Yes | accept.invitationId from linkedin_get_received_invitations; max 80 chars |
| `sharedSecret` | `string` | Yes | accept.sharedSecret from linkedin_get_received_invitations; max 200 chars |

## linkedin_get_sent_invitations

List sent LinkedIn invitations. Pending connection invitations the member sent: invitee (name, headline, profile), sent age, note and the `withdraw` arguments for linkedin_withdraw_invitation. Page with startIndex (the previous page's next.startIndex).

Read · Scopes: `linkedin:read`

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `accountId` | `string` | No | The LinkedIn account id (from linkedin_list_accounts). May be omitted when the tenant has exactly one connected account.; max 64 chars |
| `startIndex` | `integer` | No |  |

## linkedin_withdraw_invitation

Withdraw a sent LinkedIn invitation. Withdraws a pending invitation the member sent. Pass the invitation's withdraw arguments from linkedin_get_sent_invitations. If approval mode is on for this account, nothing is sent yet: the result is { status: "pending_approval", action } and a human approves it in Finchreach; poll it with linkedin_get_action.

Write (waits for approval when approval is on) · Scopes: `linkedin:write`

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `accountId` | `string` | No | The LinkedIn account id (from linkedin_list_accounts). May be omitted when the tenant has exactly one connected account.; max 64 chars |
| `invitationId` | `string` | Yes | withdraw.invitationId; max 80 chars |
| `profileUrn` | `string` | Yes | withdraw.profileUrn (the ACoA… profile id); max 200 chars |
| `inviteeVanityName` | `string` | Yes | withdraw.inviteeVanityName; max 200 chars |
| `firstName` | `string` | Yes | withdraw.firstName; max 200 chars |
| `lastName` | `string` | Yes | withdraw.lastName; max 200 chars |

## linkedin_get_action

Get a pending action. The status of a write queued for approval (pending_approval, approved, rejected, executed, failed, expired) and, once run, its result. A key can read the actions it proposed.

Read · Scopes: `actions:read` or `linkedin:write`

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `actionId` | `string` | Yes | max 64 chars |

## Related

- [Approvals](https://finchreach.com/docs/approvals)
- [REST API reference](https://finchreach.com/docs/api)
