Linkedin Mcp Server — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Linkedin Mcp Server (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Lets Claude Code post to your own LinkedIn: write, preview, save drafts, schedule, comment and react, all by talking to Claude. Nothing is published until you type a confirmation keyword.
node -v to check)LinkedIn only lets software post for you through an "app" that you own. It is free and nobody else sees it.
http://localhost:8585/callback
The easy way: open Claude Code and paste this, with your two values filled in.
Clone https://github.com/ayushnagvanshi101098-ship-it/linkedin-mcp-server.git into ~/linkedin-mcp-server, runnpm installandnpm run buildin it, then add it to Claude Code as a user-scope MCP server namednode ~/linkedin-mcp-server/dist/index.jswith the env vars LINKEDIN_CLIENT_ID=your_client_id and LINKEDIN_CLIENT_SECRET=your_client_secret.
Or by hand in a terminal:
git clone https://github.com/ayushnagvanshi101098-ship-it/linkedin-mcp-server.git ~/linkedin-mcp-server
cd ~/linkedin-mcp-server
npm install
npm run build
claude mcp add linkedin --scope user \
-e LINKEDIN_CLIENT_ID=your_client_id \
-e LINKEDIN_CLIENT_SECRET=your_client_secret \
-- node ~/linkedin-mcp-server/dist/index.jsQuit and reopen Claude Code, then say:
authenticate with linkedin
A browser tab opens. Approve it and you are connected. To check at any time, ask "what's my linkedin status".
LinkedIn logins expire after roughly two months. When posting stops working, say "authenticate with linkedin" again.
Post this to LinkedIn: [your text]
Claude shows a preview of how it will look in the feed. Nothing goes out until you type POST IT.
Every action that changes something waits for you to type a keyword.
| You are about to | Type |
|---|---|
| Publish a post or a draft | POST IT |
| Delete a published post | DELETE IT |
| Send a DM or a connection request | SEND IT |
| Save or delete a draft, schedule, react, comment | CONFIRM |
OVERRIDE LINT. The rules live in src/lint/rules.ts.These tools read things the official API cannot, by driving a real browser logged in as you. You do not need them to post.
cd ~/linkedin-mcp-server && npx playwright install chromium # about 280 MB, onceThen say "linkedin scrape login" and log in by hand in the window that opens.
LinkedIn's terms discourage automated browsing. Calls are slowed down and run one at a time, but this part is at your own risk. The posting tools above use the official API and are unaffected.
All on your machine, nothing is sent anywhere except LinkedIn.
| File | What it is |
|---|---|
~/.linkedin-mcp-tokens.json | Your LinkedIn login token |
~/.linkedin-mcp/data.db | Drafts, schedule, post history |
~/.linkedin-mcp/config.json | Settings |
~/.linkedin-mcp/scrape-session.json | Browser login for the optional reading tools |
Never share these files or your Client Secret. Anyone holding them can act as you on LinkedIn.
| Tool | What it does | Needs |
|---|---|---|
linkedin_auth | Connect your LinkedIn account | |
linkedin_status | Connection, token expiry, database health | |
linkedin_lint | Check a post against the rules | |
linkedin_preview | Show the post as the feed will, with the "see more" fold | |
linkedin_post | Publish a post | POST IT |
linkedin_drafts_save | Save or update a draft | CONFIRM |
linkedin_drafts_list / linkedin_drafts_get | Browse drafts | |
linkedin_drafts_publish | Publish a saved draft | POST IT |
linkedin_drafts_delete | Delete a draft | CONFIRM |
linkedin_schedule_add / linkedin_schedule_remove | Schedule or cancel a draft | CONFIRM |
linkedin_schedule_list | List scheduled posts | |
linkedin_scheduler_install / _status / _uninstall | The background job that fires scheduled posts (macOS) | |
linkedin_posts_history | Posts published through this server | |
linkedin_perf_poll | Record a post's impressions and reactions by hand | CONFIRM |
linkedin_post_engagement | Likes, comments, shares for a post (Community Management API) | |
linkedin_delete | Delete a published post | DELETE IT |
linkedin_react / linkedin_comment | React to or comment on a post | CONFIRM |
linkedin_confirm | Carries your keyword to the waiting action | |
linkedin_scrape_login / linkedin_scrape_status | Browser login for the reading tools | |
linkedin_inbox / linkedin_conversation_get / linkedin_conversation_search | Read your DMs | |
linkedin_message_send / linkedin_connect_send | Send a DM or connection request | SEND IT |
linkedin_profile_get / linkedin_profile_sidebar / linkedin_people_search | Read profiles, search people | |
linkedin_company_get / linkedin_company_posts | Read company pages |
Set these next to the Client ID and Secret if you need them. Most people need none.
| Variable | What it does |
|---|---|
LINKEDIN_MCP_HOME | Where the browser session and diagnostics go (default ~/.linkedin-mcp) |
LINKEDIN_MCP_MEMORY_DIR | A folder holding an optional post_log.md, running_theses.md and narrative_arcs.md. If the files are missing, those features are skipped. |
LINKEDIN_SCRAPE_HEADLESS | Set to false to watch the reading tools' browser window instead of running it hidden |
http://localhost:8585/callback.claude mcp list and check linkedin is connected.~/.linkedin-mcp/diagnostics/.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.