linkedin-mcp

linkedin-mcp

Enables full control over LinkedIn profiles through browser automation, allowing reading, editing, adding, removing entries, and publishing posts directly from conversations.

Category
访问服务器

README

linkedin-mcp

A Model Context Protocol (MCP) server that gives Claude full control over your LinkedIn profile — read, edit, add, remove entries, and publish posts, all from a single conversation.

Built with Playwright for browser automation and the official MCP TypeScript SDK.


Table of Contents


Features

  • No LinkedIn API access required — works through real browser automation, so you don't need an approved LinkedIn developer app.
  • Persistent session — log in once, reuse the session for weeks.
  • Full profile coverage — read and edit every section: experience, education, skills, certifications, languages, projects, honors, volunteer, publications, courses, organizations, test scores, and patents.
  • Remove entries — delete any entry from any section by matching text.
  • Publish posts — text posts and image posts both supported.
  • Portable — profile slug is configured via environment variable; no hardcoded paths.

Tools

Read

Tool Description
linkedin_get_profile Fetch name, headline, location, company, about, industry
linkedin_get_contact_info Read phone, email, website, twitter
linkedin_get_sections Read all profile sections with optional text filter
linkedin_get_recent_posts Fetch recent posts from the activity page

Edit intro / basic info

Tool Description Parameters
linkedin_update_headline Update profile headline headline
linkedin_update_summary Rewrite the About/Summary section summary
linkedin_update_industry Update the Industry/Setor field industry
linkedin_update_contact_info Update phone and/or address phone?, address?
linkedin_set_open_to_work Enable or disable Open to Work enable (boolean)

Add entries

Tool Description
linkedin_add_experience Add a work experience entry
linkedin_add_education Add an education entry
linkedin_add_skill Add a skill
linkedin_add_certification Add a certification
linkedin_add_language Add a language and proficiency level
linkedin_add_project Add a project
linkedin_add_volunteer Add a volunteer experience
linkedin_add_honor Add an honor or award
linkedin_add_publication Add a publication
linkedin_add_course Add a course
linkedin_add_organization Add an organization membership
linkedin_add_test_score Add a test score (e.g. TOEFL, GRE)
linkedin_add_patent Add a patent

Remove

Tool Description Parameters
linkedin_remove_entry Remove any entry from any section by matching text section, search

Valid sections for linkedin_remove_entry: experience, education, skills, certifications, languages, projects, honors, volunteer, publications, courses, organizations, test_scores, patents

Posts

Tool Description Parameters
linkedin_create_text_post Publish a plain text post text
linkedin_create_image_post Publish a post with a local image text, imagePath

Auth / Diagnostics

Tool Description
linkedin_login Open browser for manual login and save session
linkedin_dump_profile_buttons Diagnostic: dump all buttons on the profile page

Prerequisites

  • Node.js v18 or later
  • npm v9 or later
  • Claude Code (or any other MCP-compatible client)
  • A real LinkedIn account you're allowed to automate

Installation

Automated setup (recommended)

git clone https://github.com/khalidstark/linkedin-mcp.git
cd linkedin-mcp
chmod +x setup.sh
./setup.sh

The script will:

  1. Check for Node.js
  2. Install npm dependencies
  3. Install the Playwright Chromium browser
  4. Build the TypeScript source
  5. Ask for your LinkedIn profile slug and output the config block to paste into ~/.claude.json

Manual setup

git clone https://github.com/khalidstark/linkedin-mcp.git
cd linkedin-mcp
npm install
npx playwright install chromium
npm run build

Connect to Claude Code

Add the following to ~/.claude.json under mcpServers (replace the path and slug):

{
  "mcpServers": {
    "linkedin-editor": {
      "type": "stdio",
      "command": "node",
      "args": ["/absolute/path/to/linkedin-mcp/dist/index.js"],
      "env": {
        "LINKEDIN_PROFILE_SLUG": "your-profile-slug"
      }
    }
  }
}

Your profile slug is the last segment of your LinkedIn URL: https://www.linkedin.com/in/your-profile-slug

Restart Claude Code after editing the config. Verify with:

claude mcp list

Other MCP clients

For Claude Desktop, Cursor, and other MCP-compatible clients, use the same node /path/to/linkedin-mcp/dist/index.js command and pass LINKEDIN_PROFILE_SLUG in their environment config.


Usage

1. Log in (first time only)

"Call linkedin_login"

A Chromium window will open. Log in to LinkedIn normally (including 2FA/captcha). Once you land on the feed, the session is persisted in the Chrome profile directory at ~/.linkedin-mcp-chrome-profile/ and reused on future calls.

2. Read your full profile

"Read all my LinkedIn profile sections"

3. Update your profile from a CV

"Here is my CV: [paste]. Update my LinkedIn headline and summary, add all my skills and certifications."

4. Remove an entry

"Remove the 'Old Company' entry from my experience section"

5. Publish a post

"Write a short post about my new certification and publish it on LinkedIn."
"Post this image to LinkedIn with caption 'Excited to share this!': /home/user/photo.jpg"

Image paths must be absolute.


Session Management

The login session is persisted in the Chrome profile directory at ~/.linkedin-mcp-chrome-profile/ (cookies + local storage). It lives in your home directory, outside the repo, so it is never committed. If the session expires, call linkedin_login again.

To force a fresh login:

rm -rf ~/.linkedin-mcp-chrome-profile

Project Structure

linkedin-mcp/
├── src/
│   ├── index.ts      # MCP server + tool registration
│   ├── linkedin.ts   # LinkedIn automation functions
│   └── browser.ts    # Playwright browser/session lifecycle
├── setup.sh          # Automated setup script for new machines
├── dist/             # Compiled output (generated, not committed)
├── package.json
└── tsconfig.json

Development

npm run build   # Compile TypeScript → dist/

Rebuild and restart the MCP client to pick up changes. Claude Code reloads servers on restart, not on file change.


Troubleshooting

Server failed to connect

  • Check that the path to dist/index.js is correct and npm run build has been run.
  • Verify LINKEDIN_PROFILE_SLUG is set in the env block of your MCP config.
  • Ensure Node.js is accessible from the PATH that Claude Code's subprocess inherits.

npx playwright install chromium fails Re-run with: DEBUG=pw:install npx playwright install chromium. On Linux you may also need npx playwright install-deps chromium for system libraries.

LinkedIn shows a captcha or security check Solve it manually in the Chromium window opened by linkedin_login. The session is saved only after you reach the LinkedIn feed.

Session keeps expiring LinkedIn invalidates sessions on password changes or security triggers. Delete ~/.linkedin-mcp-chrome-profile and call linkedin_login again.

A tool runs but the profile doesn't update LinkedIn occasionally ships UI changes that break selectors. Open an issue with the failing tool name and a redacted screenshot.

"Browser closed unexpectedly" Another linkedin-mcp instance may be holding the profile lock. Kill stray chromium processes and retry.


Disclaimer

This project uses browser automation to interact with LinkedIn. Automating LinkedIn actions may violate their User Agreement. Use it on your own account, at your own discretion. The author is not responsible for any account restrictions or suspensions resulting from this tool.


License

MIT

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选