# LinkedIn MCP Server (oci · ghcr.io/prakharagarwal-dev/linkedin-mcp-server:0.15.0)

Typed, policy-enforced local MCP capabilities over LinkedIn's visible web UI.

- Trust score: 29/100 (low)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- oci · `ghcr.io/prakharagarwal-dev/linkedin-mcp-server:0.15.0`: 29/100 (this document), [markdown](https://verifymcp.io/servers/prakharagarwal-dev-linkedin-mcp-server/ghcr-io-prakharagarwal-dev-linkedin-mcp-server-0-15-0.md), [page](https://verifymcp.io/servers/prakharagarwal-dev-linkedin-mcp-server/ghcr-io-prakharagarwal-dev-linkedin-mcp-server-0-15-0)

## Channel facts

- Registry: `oci`
- Package: `ghcr.io/prakharagarwal-dev/linkedin-mcp-server:0.15.0`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Supply Chain Security**: 0/100
  - Malware scan not yet available for this package.
  - CVE data not yet available for this package.
  - Install-script risk not yet assessed.
  - Dependency-health data not yet available.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (Apache-2.0).
  - Actively maintained (last published 0 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 39/100
  - AI-judged instruction clarity (poor).
  - Context-footprint check failed: tool/resource definitions use about 3666 tokens (~118/item across 31 items; 31 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 76/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 17% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

**Unverified: 2 categories.** Categories scored 0 because we could not verify them: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

## Install

### Claude

```bash
claude mcp add prakharagarwal-dev-linkedin-mcp-server -- docker run --rm -i ghcr.io/prakharagarwal-dev/linkedin-mcp-server:0.15.0
```

### Codex

```bash
codex mcp add prakharagarwal-dev-linkedin-mcp-server -- docker run --rm -i ghcr.io/prakharagarwal-dev/linkedin-mcp-server:0.15.0
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "prakharagarwal-dev-linkedin-mcp-server": {
      "type": "local",
      "command": [
        "docker",
        "run",
        "--rm",
        "-i",
        "ghcr.io/prakharagarwal-dev/linkedin-mcp-server:0.15.0"
      ],
      "enabled": true
    }
  }
}
```

### Hermes

```yaml
mcp_servers:
  prakharagarwal-dev-linkedin-mcp-server:
    command: "docker"
    args: ["run", "--rm", "-i", "ghcr.io/prakharagarwal-dev/linkedin-mcp-server:0.15.0"]
```

### Other

```json
{
  "mcpServers": {
    "prakharagarwal-dev-linkedin-mcp-server": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "ghcr.io/prakharagarwal-dev/linkedin-mcp-server:0.15.0"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-03 (score 29, +20)

- [security] Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window).
- [functional improvement] MCP protocol: unverified → pass
- [functional improvement] Tool coverage: unverified → 100
- [functional] First check of Tool coverage: 100
- [functional] First check of Tool coverage: 17
- [functional] First check of Schema quality: fail
- [functional] First check of Schema quality: poor
- [functional] First check of Schema quality: fail

### 2026-08-02 (score 9)

First indexed and scored.

## MCP tools (31)

### `linkedin.server.status` (~18 tokens)

LinkedIn MCP Server Status

Return non-secret server configuration and readiness metadata.

Output parameters:

- `name` (string)
- `operation_state` (string)
- `transport` (string)
- `version` (string)

### `linkedin.capabilities.list` (~21 tokens)

List LinkedIn Capabilities

List installed capabilities and whether runtime policy enables each one.

Output parameters:

- `capabilities` (array)

### `linkedin.session.status` (~20 tokens)

LinkedIn Session Status

Return non-secret browser-session state for the configured account.

Output parameters:

- `account_id` (string)
- `authentication_state`
- `automatic_login_enabled` (boolean)
- `browser_setup_state`
- `browser_started` (boolean)
- `login_browser_open` (boolean)
- `pause_reason`
- `paused` (boolean)
- `profile_present` (boolean)
- `status_message`

### `linkedin.jobs.search` (~170 tokens)

Search LinkedIn Jobs

Search current visible LinkedIn Jobs pages with optional keywords and typed location, Date posted, sorting, distance, workplace, experience, job type, company, industry, function, title, benefit, commitment, Easy Apply, verification, applicant-count, network, and Fair Chance filters. Hydrates LinkedIn's virtualized result cards and returns one deduplicated cursor page.

Input parameters:

- `context_id` (string, required)
- `cursor`
- `filters`
- `freshness_hours`: Date posted: 24, 168 (past week), 720 (past month), or null for Any time.
- `location`
- `max_results`
- `page_size` (integer): Number of unique items to return in this page.
- `query`
- `request_id` (string, required)

Output parameters:

- `context_id` (string)
- `coverage`
- `jobs` (array)
- `pagination`
- `replayed` (boolean)
- `request_id` (string)
- `sources` (array)
- `status` (string)

### `linkedin.jobs.get` (~65 tokens)

Read LinkedIn Job

Read one current visible LinkedIn job by numeric ID, including its primary header metadata, application method, hiring-team identities, and fully expanded About the job description.

Input parameters:

- `context_id` (string, required)
- `job_id` (string, required)
- `request_id` (string, required)

Output parameters:

- `context_id` (string)
- `job`
- `replayed` (boolean)
- `request_id` (string)
- `sources` (array)
- `status` (string)

### `linkedin.people.search` (~147 tokens)

Search LinkedIn People

Search visible LinkedIn People results using natural-language or Boolean keywords, connection degree, any/specific-title hiring, location, current/past company, connections-of, followers-of, school, industry, profile-language, service-category, and exact first-name, last-name, title, company, and school keyword filters. Returns one cursor page; name-to-ID resolution and traversal safety bounds remain private.

Input parameters:

- `context_id` (string, required)
- `cursor`
- `filters`
- `max_results`
- `page_size` (integer): Number of unique items to return in this page.
- `query`
- `request_id` (string, required)
- `title_keywords`

Output parameters:

- `context_id` (string)
- `coverage`
- `pagination`
- `people` (array)
- `replayed` (boolean)
- `request_id` (string)
- `sources` (array)
- `status` (string)

### `linkedin.people.get` (~124 tokens)

Read LinkedIn Member Profile

Read a visible LinkedIn member profile directly by validated public profile slug. Returns typed introduction, About, experience, education, every visible profile section owned by the member, full retained text, field evidence, and bounded section-page coverage.

Input parameters:

- `context_id` (string, required)
- `profile_slug` (string, required): Public LinkedIn profile slug from linkedin.com/in/{profile_slug}.
- `request_id` (string, required)
- `sections` (array): Visible profile sections to return. Use ['all'] for the complete server-bounded read; the canonical overview is always captured for identity.

Output parameters:

- `context_id` (string)
- `person`
- `replayed` (boolean)
- `request_id` (string)
- `sources` (array)
- `status` (string)

### `linkedin.companies.search` (~126 tokens)

Search LinkedIn Companies

Search visible LinkedIn Company results using LinkedIn's complete current Company-search filter surface: keywords, headquarters location, industry, company-size range, visible job listings, and first-degree connection presence. Exact names are resolved only through visible filter controls; callers may alternatively provide stable facet IDs. Returns one cursor page.

Input parameters:

- `context_id` (string, required)
- `cursor`
- `filters`
- `max_results`
- `page_size` (integer): Number of unique items to return in this page.
- `query`
- `request_id` (string, required)

Output parameters:

- `companies` (array)
- `context_id` (string)
- `coverage`
- `pagination`
- `replayed` (boolean)
- `request_id` (string)
- `sources` (array)
- `status` (string)

### `linkedin.companies.get` (~104 tokens)

Read LinkedIn Company Overview and About

Read an exact visible LinkedIn Company by public slug. Always captures exactly the Company overview and About page, including identity, tagline, description, website, industry, company-size range, associated-member and follower counts, headquarters, organization type, founding year, specialties, and exact field evidence.

Input parameters:

- `company_slug` (string, required): Public LinkedIn company slug from /company/{company_slug}/.
- `context_id` (string, required)
- `request_id` (string, required)

Output parameters:

- `company`
- `context_id` (string)
- `replayed` (boolean)
- `request_id` (string)
- `sources` (array)
- `status` (string)

### `linkedin.posts.search` (~142 tokens)

Search LinkedIn Posts

Search visible LinkedIn content using keywords plus sort, date, content type, From-member/company, posted-by relationship, mentioning-member/company, author-industry/company, and Author Keywords filters. Content type follows LinkedIn's current single-choice Videos, Images, Job posts, Live videos, or Documents control. Names resolve only through exact visible choices. Returns one cursor page while browser traversal remains privately bounded.

Input parameters:

- `context_id` (string, required)
- `cursor`
- `filters`
- `max_results`
- `page_size` (integer): Number of unique items to return in this page.
- `query`
- `request_id` (string, required)

Output parameters:

- `context_id` (string)
- `coverage`
- `pagination`
- `posts` (array)
- `replayed` (boolean)
- `request_id` (string)
- `sources` (array)
- `status` (string)

### `linkedin.posts.get` (~124 tokens)

Read LinkedIn Post

Read one exact visible LinkedIn post by stable activity, share, or ugc-post reference. Returns typed author/header data, fully expanded text, scoped links, mentions and hashtags, current image/video/document/link-card/poll details, viewer reaction and engagement counts, visibility, timestamps, immutable field evidence, and bounded completeness coverage. Reposts retain the wrapper and read the visibly linked original as one additional bounded page.

Input parameters:

- `context_id` (string, required)
- `post_ref` (string, required): Stable post reference returned by LinkedIn post search.
- `request_id` (string, required)

Output parameters:

- `context_id` (string)
- `post`
- `replayed` (boolean)
- `request_id` (string)
- `sources` (array)
- `status` (string)

### `linkedin.posts.comments.list` (~122 tokens)

Read LinkedIn Post Discussion

Read one cursor page of visible top-level comments and bounded nested replies, with relevant/recent ordering, stable comment references, exact author identities, visible text, timestamps, reaction/reply counts, and truncation coverage.

Input parameters:

- `context_id` (string, required)
- `cursor`
- `max_comments`
- `max_replies_per_comment` (integer)
- `page_size` (integer): Number of unique items to return in this page.
- `post_ref` (string, required)
- `request_id` (string, required)
- `sort_by`

Output parameters:

- `context_id` (string)
- `coverage`
- `pagination`
- `replayed` (boolean)
- `request_id` (string)
- `sources` (array)
- `status` (string)
- `threads` (array)

### `linkedin.posts.create.prepare` (~162 tokens)

Prepare Personal LinkedIn Post

Inspect the active personal member composer and prepare one immutable post. Supports typed text/link, up to 20 edited photos with alt text and member/company tags, video with thumbnail/captions, document, poll, celebration, event, existing-job hiring, and expert-request content. Exact audience/group, comment control, brand partnership, eligible collaborators, mentions, local asset hashes, and optional schedule are captured. This tool never publishes and never publishes as a company Page.

Input parameters:

- `audience`
- `brand_partnership` (boolean)
- `collaborators` (array)
- `comment_control`
- `content` (required)
- `context_id` (string, required)
- `group_target`
- `request_id` (string, required)
- `scheduled_at`

Output parameters:

- `approval_preview`
- `context_id` (string)
- `draft`
- `replayed` (boolean)
- `request_id` (string)
- `sources` (array)
- `status` (string)

### `linkedin.posts.create.execute` (~143 tokens)

Publish or Schedule Prepared Personal LinkedIn Post

Destructive account action. Codex must show native user confirmation using the supplied approval_preview before invoking this tool. Publish or schedule exactly one immutable personal-post draft after the server verifies the exact preview, payload and asset hashes, actor, expiry, options, and global idempotency key. An interrupted final action is never retried automatically.

Input parameters:

- `action_id` (string, required): Immutable action ID returned by the matching prepare tool.
- `approval_preview` (required)
- `context_id` (string, required)
- `idempotency_key` (string, required)
- `payload_hash` (string, required): Exact payload hash returned by the matching prepare tool.
- `request_id` (string, required)

Output parameters:

- `context_id` (string)
- `replayed` (boolean)
- `request_id` (string)
- `result`
- `sources` (array)
- `status` (string)

### `linkedin.posts.comment.prepare` (~107 tokens)

Prepare LinkedIn Comment or Reply

Inspect one exact visible post or parent comment and prepare an immutable personal-member comment or reply. Supports text, links, emoji, exact member/company mentions, one local hash-locked photo, or one exact visible GIF result. This tool never submits.

Input parameters:

- `attachment`
- `context_id` (string, required)
- `mentions` (array)
- `parent_comment_ref`
- `post_ref` (string, required)
- `request_id` (string, required)
- `text`

Output parameters:

- `approval_preview`
- `context_id` (string)
- `draft`
- `replayed` (boolean)
- `request_id` (string)
- `sources` (array)
- `status` (string)

### `linkedin.posts.comment.execute` (~135 tokens)

Publish Prepared LinkedIn Comment or Reply

Destructive account action. Codex must show native user confirmation using the supplied approval_preview before invoking this tool. Submit exactly one immutable personal-member comment or reply after the server verifies the preview, actor, target author, exact parent, payload, local asset hash, expiry, and idempotency.

Input parameters:

- `action_id` (string, required): Immutable action ID returned by the matching prepare tool.
- `approval_preview` (required)
- `context_id` (string, required)
- `idempotency_key` (string, required)
- `payload_hash` (string, required): Exact payload hash returned by the matching prepare tool.
- `request_id` (string, required)

Output parameters:

- `context_id` (string)
- `replayed` (boolean)
- `request_id` (string)
- `result`
- `sources` (array)
- `status` (string)

### `linkedin.posts.reaction.prepare` (~89 tokens)

Prepare LinkedIn Post or Comment Reaction

Inspect the exact current reaction state on one visible post or comment and prepare an immutable target state: none, like, celebrate, support, love, insightful, or funny. This tool never changes the reaction.

Input parameters:

- `comment_ref`
- `context_id` (string, required)
- `desired_reaction` (required)
- `post_ref` (string, required)
- `request_id` (string, required)

Output parameters:

- `approval_preview`
- `context_id` (string)
- `draft`
- `replayed` (boolean)
- `request_id` (string)
- `sources` (array)
- `status` (string)

### `linkedin.posts.reaction.execute` (~136 tokens)

Apply Prepared LinkedIn Post or Comment Reaction

Destructive account action. Codex must show native user confirmation using the supplied approval_preview before invoking this tool. Set, change, remove, or safely no-op one prepared exact reaction state after the server verifies the preview, actor, target author, prior state, expiry, and idempotency.

Input parameters:

- `action_id` (string, required): Immutable action ID returned by the matching prepare tool.
- `approval_preview` (required)
- `context_id` (string, required)
- `idempotency_key` (string, required)
- `payload_hash` (string, required): Exact payload hash returned by the matching prepare tool.
- `request_id` (string, required)

Output parameters:

- `context_id` (string)
- `replayed` (boolean)
- `request_id` (string)
- `result`
- `sources` (array)
- `status` (string)

### `linkedin.invitations.list` (~143 tokens)

List LinkedIn Invitations

Capture the complete current received or sent invitation inventory once, including a deduplicated union of LinkedIn's current Focused, Other, Verified, Mutual Connections, Your Company, and Your School received views when invitation_filter is all. Every source view reconciles its own visible count before the server returns an immutable cursor page containing each visible invitation entity type, context, note, time, available action, and field evidence.

Input parameters:

- `context_id` (string, required)
- `cursor`
- `direction`
- `invitation_filter`
- `page_size` (integer): Number of unique items to return in this page.
- `request_id` (string, required)

Output parameters:

- `context_id` (string)
- `coverage`
- `invitations` (array)
- `pagination`
- `replayed` (boolean)
- `request_id` (string)
- `sources` (array)
- `status` (string)

### `linkedin.connections.list` (~88 tokens)

List LinkedIn Connections

List one cursor page of the configured account's visible first-degree connection inventory in LinkedIn's selected visible sort order. This tool does not search.

Input parameters:

- `context_id` (string, required)
- `cursor`
- `max_results`
- `page_size` (integer): Number of unique items to return in this page.
- `request_id` (string, required)
- `sort_by`

Output parameters:

- `connections` (array)
- `context_id` (string)
- `coverage`
- `pagination`
- `replayed` (boolean)
- `request_id` (string)
- `sources` (array)
- `status` (string)

### `linkedin.connections.search` (~163 tokens)

Search LinkedIn Connections

Search only the configured account's established first-degree connections through LinkedIn's current People surface. The server always enforces first degree. Supports the remaining current visible People filters: any/specific-title hiring, locations, current/past companies, connections-of, followers-of, schools, industries, profile languages, service categories, and first-name, last-name, title, company, and school keywords. Use linkedin.people.search for broader second-, third-plus-, or mixed-degree discovery.

Input parameters:

- `context_id` (string, required)
- `cursor`
- `filters`
- `max_results`
- `page_size` (integer): Number of unique items to return in this page.
- `query`
- `request_id` (string, required)
- `title_keywords`

Output parameters:

- `context_id` (string)
- `coverage`
- `pagination`
- `people` (array)
- `replayed` (boolean)
- `request_id` (string)
- `sources` (array)
- `status` (string)

### `linkedin.invitations.send.prepare` (~80 tokens)

Prepare LinkedIn Connection Invitation

Inspect one exact visible profile and create an immutable invitation draft. This does not send the invitation. An optional personalized note is limited to 200 characters and returned with the exact native-approval preview.

Input parameters:

- `context_id` (string, required)
- `note`
- `profile_slug` (string, required)
- `request_id` (string, required)

Output parameters:

- `approval_preview`
- `context_id` (string)
- `draft`
- `replayed` (boolean)
- `request_id` (string)
- `sources` (array)
- `status` (string)

### `linkedin.invitations.send.execute` (~170 tokens)

Send Prepared LinkedIn Connection Invitation

Destructive account action. Codex must show native user confirmation using the supplied approval_preview before invoking this tool. Send exactly one immutable invitation draft after the server verifies the exact preview, payload hash, draft expiry, idempotency key, target identity, and actionable Send control. After the click, one fresh exact-profile read is the complete postcondition: Pending is verified success and Connect is verified LinkedIn failure. An unreadable or ambiguous fresh profile remains uncertain.

Input parameters:

- `action_id` (string, required): Immutable action ID returned by the matching prepare tool.
- `approval_preview` (required)
- `context_id` (string, required)
- `idempotency_key` (string, required)
- `payload_hash` (string, required): Exact payload hash returned by the matching prepare tool.
- `request_id` (string, required)

Output parameters:

- `context_id` (string)
- `replayed` (boolean)
- `request_id` (string)
- `result`
- `sources` (array)
- `status` (string)

### `linkedin.invitations.accept.prepare` (~62 tokens)

Prepare LinkedIn Connection Acceptance

Revalidate the exact member profile's paired visible incoming-request controls and create an immutable acceptance draft. This does not accept the request.

Input parameters:

- `context_id` (string, required)
- `profile_slug` (string, required)
- `request_id` (string, required)

Output parameters:

- `approval_preview`
- `context_id` (string)
- `draft`
- `replayed` (boolean)
- `request_id` (string)
- `sources` (array)
- `status` (string)

### `linkedin.invitations.accept.execute` (~150 tokens)

Accept Prepared LinkedIn Connection Invitation

Destructive account action. Codex must show native user confirmation using the supplied approval_preview before invoking this tool. Accept exactly one immutable incoming-request draft after the server verifies the preview, payload hash, draft expiry, idempotency, exact profile identity, and current request controls; then verify those controls are absent and the exact profile visibly shows a first-degree connection.

Input parameters:

- `action_id` (string, required): Immutable action ID returned by the matching prepare tool.
- `approval_preview` (required)
- `context_id` (string, required)
- `idempotency_key` (string, required)
- `payload_hash` (string, required): Exact payload hash returned by the matching prepare tool.
- `request_id` (string, required)

Output parameters:

- `context_id` (string)
- `replayed` (boolean)
- `request_id` (string)
- `result`
- `sources` (array)
- `status` (string)

### `linkedin.invitations.ignore.prepare` (~62 tokens)

Prepare Ignoring a LinkedIn Connection Request

Revalidate the exact member profile's current visible incoming connection request and create an immutable ignore draft. This does not ignore the request.

Input parameters:

- `context_id` (string, required)
- `profile_slug` (string, required)
- `request_id` (string, required)

Output parameters:

- `approval_preview`
- `context_id` (string)
- `draft`
- `replayed` (boolean)
- `request_id` (string)
- `sources` (array)
- `status` (string)

### `linkedin.invitations.ignore.execute` (~146 tokens)

Ignore Prepared LinkedIn Connection Request

Destructive account action. Codex must show native user confirmation using the supplied approval_preview before invoking this tool. Ignore exactly one immutable incoming-request draft after the server verifies the preview, payload hash, draft expiry, idempotency, exact profile identity, and current request controls; then verify those controls are absent on a fresh exact-profile read.

Input parameters:

- `action_id` (string, required): Immutable action ID returned by the matching prepare tool.
- `approval_preview` (required)
- `context_id` (string, required)
- `idempotency_key` (string, required)
- `payload_hash` (string, required): Exact payload hash returned by the matching prepare tool.
- `request_id` (string, required)

Output parameters:

- `context_id` (string)
- `replayed` (boolean)
- `request_id` (string)
- `result`
- `sources` (array)
- `status` (string)

### `linkedin.messaging.search` (~126 tokens)

Search LinkedIn Messages

Search the current desktop inbox by recipient or message keywords, optionally within Focused, Other, Archived, or Spam and exactly one of Jobs, Unread, Connections, InMail, or Starred. At least one search criterion is required. Results are cursor-paginated current conversation cards.

Input parameters:

- `category`
- `context_id` (string, required)
- `cursor`
- `filter`
- `max_results`
- `page_size` (integer): Number of unique items to return in this page.
- `query`
- `request_id` (string, required)

Output parameters:

- `context_id` (string)
- `conversations` (array)
- `coverage`
- `pagination`
- `replayed` (boolean)
- `request_id` (string)
- `sources` (array)
- `status` (string)

### `linkedin.messaging.conversation.get` (~119 tokens)

Read LinkedIn Conversation

Traverse LinkedIn's reverse-virtualized visible history and read both incoming and outgoing messages, attachments, replies, edits, and reaction summaries by exact profile slug, visible conversation ID, or a conversation_ref returned by messaging.search. Returns explicit history completeness and truncation evidence. Opening a conversation may cause LinkedIn to mark it seen.

Input parameters:

- `context_id` (string, required)
- `conversation_id`
- `conversation_ref`
- `max_messages` (integer)
- `profile_slug`
- `request_id` (string, required)

Output parameters:

- `context_id` (string)
- `conversation`
- `replayed` (boolean)
- `request_id` (string)
- `sources` (array)
- `status` (string)

### `linkedin.messaging.message.prepare` (~165 tokens)

Prepare LinkedIn Message

Open one visible one-to-one standard conversation, using the exact profile's Message button for profile targets and accepting its recipient-bound compact pane or following its exact visible Messaging href in the same operation page, then create an immutable message draft containing exact text/emoji, hash-locked current desktop file attachments, one exact KLIPY GIF title, and optionally an exact reply-to message_ref. This does not send the message. Group chats, message requests, and paid InMail are excluded.

Input parameters:

- `attachments` (array)
- `context_id` (string, required)
- `conversation_id`
- `conversation_ref`
- `gif`
- `message`
- `profile_slug`
- `reply_to_message_ref`
- `request_id` (string, required)

Output parameters:

- `approval_preview`
- `context_id` (string)
- `draft`
- `replayed` (boolean)
- `request_id` (string)
- `sources` (array)
- `status` (string)

### `linkedin.messaging.message.execute` (~150 tokens)

Send Prepared LinkedIn Message

Destructive account action. Codex must show native user confirmation using the supplied approval_preview before invoking this tool. Send exactly one immutable text/file message or immediate-send GIF, optionally as an exact visible reply, after the server verifies the preview, payload and asset hashes, draft expiry, recipient, idempotency, and exact visible outgoing postcondition in the same conversation surface.

Input parameters:

- `action_id` (string, required): Immutable action ID returned by the matching prepare tool.
- `approval_preview` (required)
- `context_id` (string, required)
- `idempotency_key` (string, required)
- `payload_hash` (string, required): Exact payload hash returned by the matching prepare tool.
- `request_id` (string, required)

Output parameters:

- `context_id` (string)
- `replayed` (boolean)
- `request_id` (string)
- `result`
- `sources` (array)
- `status` (string)

## Diagnostics

Captured diagnostic sections: Provenance. The full working is on the page: https://verifymcp.io/servers/prakharagarwal-dev-linkedin-mcp-server/ghcr-io-prakharagarwal-dev-linkedin-mcp-server-0-15-0#diagnostics

## Score history

- 2026-08-03: 29
- 2026-08-02: 9

## Links

- Repository: https://github.com/prakharagarwal-dev/linkedin-mcp-server
- Changelog RSS feed: https://verifymcp.io/servers/prakharagarwal-dev-linkedin-mcp-server/ghcr-io-prakharagarwal-dev-linkedin-mcp-server-0-15-0/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/prakharagarwal-dev-linkedin-mcp-server/ghcr-io-prakharagarwal-dev-linkedin-mcp-server-0-15-0/changelog.json
- HTML version of this page: https://verifymcp.io/servers/prakharagarwal-dev-linkedin-mcp-server/ghcr-io-prakharagarwal-dev-linkedin-mcp-server-0-15-0
