LinkedIn MCP Server (thomascox/LinkedInMCP) is an MCP server listed on the M8ven Trust Index. It scores 52 out of 100, grade D. It declares 23 tools. No publisher has claimed this listing.

D
Caution
52/100

LinkedIn MCP Server

Enables LinkedIn automation including search, profile viewing, connection management, job details, and Easy Apply via Playwright with stealth and rate limiting.

Caution. Specific findings reduced this grade. They are listed on the page. Grades reflect the full trust pyramid: code, verification depth, and reputation. New projects cap at C until adoption is earned.

How we verified

Code Verified⚡ Live Monitored: not connected

Verified is a snapshot. Live keeps it current, and builds your track record.

⚡ Connect GitHub → continuous verification on every pushwhy connect →

Who stands behind it

thomascox

Source: Glama

Is this your MCP?

Claim it to get a verified publisher badge, a free copy of our full audit findings, and direct contact for any high-priority issues we find. Or connect your repo for our deepest verification, Live Monitored: read-only, revoke anytime. What we access →

Install from

The grade above is for the source repository. Registries can serve a different version, so we mark the ones we were not able to read.

// key findings
⚠️
Known vulnerabilities in dependencies: 4 high
Affects packages this MCP installs at runtime. Upgrade or remove the affected dependency.
No credential exfiltration, no sensitive file access, no obfuscation
Static analysis found nothing flowing your secrets to unexpected places.
// tools this server exposes23 tools

These names and descriptions are the publisher's own, read from the source code. We print them as written. Our assessment is the findings above, not this list.

linkedin_ping

Check that the LinkedIn MCP server is running

manage_auth_session

Manage LinkedIn authentication. Use 'capture' to open a browser for manual login and save the session. Use 'verify' to check validity. NOTE: Sessions expire after ~24-48 hours. If any tool returns a session-expired error, re-run with 'capture'. LinkedIn may present CAPTCHA challenges during capture

search_linkedin

Search LinkedIn for people or jobs. Returns structured JSON results including profile URLs (people) or job IDs with Easy Apply status (jobs).

get_messages

Retrieve the last 10 conversation threads from the LinkedIn messaging inbox. Returns sender names and message snippets.

send_linkedin_message

Send a direct message to a LinkedIn user via their profile URL. Only works for 1st-degree connections where the Message button is available.

manage_profile

Manage your LinkedIn profile. Use 'get_profile' to scrape your headline, about, and experience. Use 'update_section' to edit a specific section (headline or about).

start_application

Start an Easy Apply application for a LinkedIn job. Returns structured form fields and a text summary for each step. The browser session stays alive for subsequent fill_application_step calls. IMPORTANT: If you get a session-expired error, call manage_auth_session with 'capture' first. If Easy Appl

fill_application_step

Fill the current Easy Apply form step and advance. Match answers to fields by their 'label' from the previous step's fields array. Tips: Use action='next' for intermediate steps, 'review' for the review page, 'submit' only on the final review step. If validation errors are returned, check required

cancel_application

Cancel and clean up an in-progress Easy Apply session. Call this to abort, on unrecoverable errors mid-application, or before starting a new application (each job requires its own session).

view_profile

View any LinkedIn profile by URL. Returns name, headline, location, about, experience (top 5), education (top 3), and skills (top 10) as compact JSON. The profile_url must be a full LinkedIn URL (e.g. 'https://www.linkedin.com/in/username'). If a profile is private or out-of-network, some sections

send_connection_request

Send a LinkedIn connection request to a profile. Returns status: sent | already_connected | pending | limit_reached | connect_button_not_found. IMPORTANT: If status is 'limit_reached', stop and inform the user — LinkedIn enforces a weekly cap on invitations. Optional note is capped at 300 character

get_job_details

Get full details for a LinkedIn job posting. Returns title, company, location, workplace type, posted date, applicant count, Easy Apply status, and description (capped at 2000 chars). Use the job_id from search_linkedin results. If the listing was removed, you will get an empty response — search ag

save_job

Bookmark/save a LinkedIn job for later. Returns status: saved | already_saved. Use job_id from search_linkedin or get_job_details.

get_saved_jobs

Retrieve your saved/bookmarked LinkedIn jobs. Returns up to 20 jobs with the same structure as search_linkedin (jobId, title, company, location, easyApply).

get_conversation

Read the full message history of a LinkedIn conversation thread. Returns up to 20 messages with sender, text (capped at 500 chars), and timestamp. Use the conversationUrl from get_messages results. Call get_messages first if you don't have a conversation URL.

get_unread_count

Get the count of unread messages and unread notifications from the LinkedIn nav badges. Fast check — navigates to the feed and reads badge numbers without loading full inbox.

get_feed

Fetch the top 10 non-promoted posts from your LinkedIn home feed. Returns author, headline, post text snippet (300 chars), reaction count, comment count, and post URL.

create_post

Create a new LinkedIn post. IMPORTANT: Always confirm the exact post text with the user before calling this tool — posts are immediately visible to your network. Returns status: posted. visibility defaults to 'anyone' (public). Use 'connections' to limit to 1st-degree connections only.

react_to_post

React to a LinkedIn post. Use the postUrl from get_feed results. Available reactions: like | celebrate | support | funny | love | insightful. If the reaction picker does not open, fall back to 'like'.

get_notifications

Fetch your 10 most recent LinkedIn notifications. Returns type (connection | job | reaction | comment | mention | birthday | work_anniversary | profile_view | post_share), actor name, text snippet (200 chars), and timestamp.

get_connections

List your LinkedIn connections. Returns up to 20 connections with name, headline, and profile URL. Use the optional search keyword to filter by name.

manage_connection_requests

Manage incoming LinkedIn connection requests. Use action='list_received' to see pending invites (returns name, headline, profileUrl, mutualConnections). Use 'accept' or 'decline' with a profile_url to respond to a specific request.

manage_experience

Add or edit a LinkedIn experience entry on your profile. Use action='add' to create a new position, or action='edit' with match_title to update an existing entry. For 'edit': match_title is matched case-insensitively against existing entry titles — use get_profile to see current titles. All fields

// known CVEs in dependencies4 high

Disclosed vulnerabilities in this server's declared npm dependencies (via OSV). Whether each is reachable depends on the installed versions.

high@modelcontextprotocol/sdk@1.12.1GHSA-345p-7cg4-v4c7

@modelcontextprotocol/sdk has cross-client data leak via shared server/transport instance reuse

high@modelcontextprotocol/sdk@1.12.1GHSA-8r9q-7v3j-jr4g

Anthropic's MCP TypeScript SDK has a ReDoS vulnerability

high@modelcontextprotocol/sdk@1.12.1GHSA-w48q-cv73-mx4w

Model Context Protocol (MCP) TypeScript SDK does not enable DNS rebinding protection by default

highplaywright@1.52.0GHSA-7mvr-c777-76hp

Playwright downloads and installs browsers without verifying the authenticity of the SSL certificate

Depend on this server? Get alerted when its CVEs change.Watch this server free →
// quality suggestions

Tool annotations

No tools have read-only/destructive annotations

Add readOnlyHint or destructiveHint annotations to every tool so hosts can warn users before invoking.

All four hints declared on every tool

23/23 tools missing one or more hints — linkedin_ping (missing: readOnlyHint, destructiveHint, idempotentHint, openWorldHint); manage_auth_session (missing: readOnlyHint, destructiveHint, idempotentHint, openWorldHint); search_linkedin (missing: readOnlyHint, destructiveHint, idempotentHint, openWorldHint), +20 more. OpenAI's directory rejects tools where any of the four hints are missing or non-boolean.

For every tool, set all four hints (readOnlyHint, destructiveHint, idempotentHint, openWorldHint) to explicit true/false values that match the handler’s actual behaviour.

Tool inputs are validated

Only 6/23 tool handlers declare input schemas (26%)

Declare an inputSchema with zod/joi/yup on every tool definition.

Tool handlers catch errors

22/23 tool handlers wrap calls in try/catch (96%)

Wrap each tool handler body in try/catch and return a structured error response.

License file

No license file

Add a LICENSE file (MIT, Apache-2.0, etc.).

Tests exist

No test files found

Add tests that exercise each declared tool.

Production dependencies are patched

0 critical, 4 high severity in production deps — @modelcontextprotocol/sdk@1.12.1 (high), @modelcontextprotocol/sdk@1.12.1 (high)

Run npm audit fix, or upgrade the affected packages to a non-vulnerable version.

Claim the listing to review these findings one by one and send us a correction where you disagree, straight to the team. Claiming also means we tell you when the grade moves, and reach you first if we find anything urgent.

// full audit trail
The findings above are the summary. The full trail, every check we ran, each deduction, the network hosts observed and the dependency advisories, goes to verified publishers, along with an alert whenever a new one lands. Verified publishers can also review each finding and dispute it in one click. Publisher corrections have sharpened several of our checks this month, because the maintainer knows the codebase better than any scanner.
// improvement guidance — verified publishers only
We have 7 concrete improvements we can share with the publisher of this MCP. Each comes with specific guidance to raise the trust score.
// embed badge in your README
[![M8ven Verified](https://m8ven.ai/badge/mcp/thomascox/linkedinmcp?variant=verified)](https://m8ven.ai/mcp/thomascox/linkedinmcp)
Shows verification status without the grade. Want the grade badge instead? Remove ?variant=verified from the URL.
commit: af65c1a83d7d72988959a206e37e942e6dbdac67
code hash: 353175c076238a30c87ff41381c7cbd55dccf1b55baf4896f1ab8c42c482b07b
view raw JSON →
Check MCPs from inside your assistant
Tool Check · MCP

Vetting this one by hand? Tool Check is an MCP that scores other MCPs. Add it once and ask Claude, ChatGPT, or any MCP client to grade a server, surface CVEs, check the publisher, and suggest safer alternatives — before you install.

https://m8ven.ai/api/mcp/tool-check
check_toolsearch_toolscompare_toolsrecommend_alternativescheck_publisherreport_concern
How to add it →Free · no account needed · works in any MCP client