mcpField
L
LinkedIn

LinkedIn

本地服务
github.com社交媒体411 周前更新

关于 LinkedIn

LinkedIn 是 MCP 服务,通过真实的无头浏览器和用户已登录的会话读取 LinkedIn 个人资料、公司、职位、帖子及收件箱内容。它还提供独立的消息发送和连接请求工具,并对操作进行串行处理和限速。

主要功能

  1. 01读取个人资料和公司页面
  2. 02搜索用户、公司、职位和帖子
  3. 03查看收件箱及会话内容
  4. 04发送消息和连接请求
  5. 05将会话 Cookie 存入系统密钥环

适用场景

  1. 01查看成员或公司的资料
  2. 02按关键词和地点查找职位
  3. 03检查近期收件箱会话
  4. 04发送 LinkedIn 消息或连接请求

MCP 相关

它将 LinkedIn 浏览器操作作为 MCP 工具提供,包括 12 个读取工具和 2 个写入工具。所有工具调用共用一个串行浏览器会话。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"johannsenlum-linkedin-api": {
"command": "uvx",
"args": [
"linkedin-api-mcp"
],
"env": {
"LINKEDIN_COOKIE": "<LINKEDIN_COOKIE>",
"LINKEDIN_HEADLESS": "<LINKEDIN_HEADLESS>",
"LINKEDIN_MIN_INTERVAL": "<LINKEDIN_MIN_INTERVAL>",
"LINKEDIN_MAX_PER_HOUR": "<LINKEDIN_MAX_PER_HOUR>"
}
}
}
}
启动命令uvx linkedin-api-mcp
需要配置的环境变量
LINKEDIN_COOKIE密钥Your LinkedIn li_at session cookie. Optional if you have already stored it in the OS keyring with `linkedin-api-mcp auth`, which is the recommended route: this cookie is equivalent to being logged in as you.
LINKEDIN_HEADLESSRun the browser headless. Defaults to true; set to 0 to watch what it does.
LINKEDIN_MIN_INTERVALMinimum seconds between LinkedIn actions. Defaults to 2.
LINKEDIN_MAX_PER_HOURHard ceiling on LinkedIn actions per rolling hour. Defaults to 120. The server refuses past this rather than sleeping, so an agent in a loop is told to stop.

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypilinkedin-api-mcp1.0.1

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

linkedin-api-mcp

免责声明:这是一个独立的社区项目,与 LinkedIn Corporation 或 Microsoft 无关,也未获得其授权、认可或赞助。“LinkedIn”是 LinkedIn Corporation 的注册商标,在此仅用于说明本软件所互操作的第三方服务。

一个用于 LinkedIn 的 MCP 服务。它使用你自己的、已登录 LinkedIn 的会话 Cookie,通过真正的无头浏览器 (patchright,一个未被检测到的 Playwright 分支) 进行操作。这里没有抓取 API、没有撞库,也不会绕过 LinkedIn 的登录。你的 Agent 可以使用 12 个读取工具(个人资料、公司、职位、帖子、收件箱),以及两个刻意分开的写入工具:发送消息和发送连接请求。每项操作都通过单一浏览器会话逐一执行,并按照你控制的限制进行节流。请参阅下方的安全部分。

文档:mcp.johannsenlum.com/linkedin

PyPI Python 3.11+ License: MIT MCP Registry GitHub stars

linkedin-api-mcp 终端演示:Agent 调用 search_people 查找成员,然后调用 send_message 向其发送消息,接着读取对话以确认消息确实已送达。14 个工具、68 项测试、MIT 许可证。

安装(一键安装)

Cursor 和 VS Code 提供了深层链接;其他客户端均没有文档说明的安装链接格式。这些链接会预填下方的命令,无需填写其他内容,因为 Cookie 保存在你的操作系统密钥环中,而不是环境变量里。

Add to Cursor Add to VS Code

所有客户端
客户端深层链接?
Claude Code否,单行命令
Claude Desktop否
Cursor是,见上文
VS Code是,见上文
Codex CLI否
Zed否
Windsurf否(Windsurf 只能解析其自有注册表中的服务)

Claude Code
claude mcp add linkedin -- uvx linkedin-api-mcp

Claude Desktop:claude_desktop_config.json

macOS:~/Library/Application Support/Claude/claude_desktop_config.json Windows:%APPDATA%\Claude\claude_desktop_config.json

Claude Desktop 不支持一键安装(它安装的是 .mcpb bundle,而不是深层链接)。通过设置 → 开发者 → 编辑配置复制以下 JSON:

{
  "mcpServers": {
    "linkedin": {
      "command": "uvx",
      "args": ["linkedin-api-mcp"]
    }
  }
}

Cursor:~/.cursor/mcp.json

如果上方的按钮无法使用,或者你想直接粘贴配置,可使用以下备用方式:

{
  "mcpServers": {
    "linkedin": {
      "command": "uvx",
      "args": ["linkedin-api-mcp"]
    }
  }
}

VS Code:.vscode/mcp.json

如果上方的按钮无法使用,或者你想直接粘贴配置,可使用以下备用方式。请注意,VS Code 使用 servers 键,而非 mcpServers:

{
  "servers": {
    "linkedin": {
      "type": "stdio",
      "command": "uvx",
      "args": ["linkedin-api-mcp"]
    }
  }
}

Codex CLI:~/.codex/config.toml
[mcp_servers.linkedin]
command = "uvx"
args = ["linkedin-api-mcp"]

Codex CLI 的配置架构在不同版本间有所变化,且此配置段未经实际安装验证。如果无法加载,可靠的做法是自行运行 uvx linkedin-api-mcp,并根据 Codex 当前对标准输入输出服务的配置要求进行设置。

Zed:settings.json

Zed 不支持深层链接。请在 Zed 设置中的 context_servers 下添加以下内容:

{
  "context_servers": {
    "linkedin": {
      "source": "custom",
      "command": "uvx",
      "args": ["linkedin-api-mcp"]
    }
  }
}

Windsurf:~/.codeium/windsurf/mcp_config.json

Windsurf 不支持深层链接。它只能解析自有注册表中的服务,因此必须通过Windsurf 设置 → MCP 服务 → 编辑原始配置手动粘贴:

{
  "mcpServers": {
    "linkedin": {
      "command": "uvx",
      "args": ["linkedin-api-mcp"]
    }
  }
}

如果你不想在某个客户端中依赖密钥环(例如在沙盒环境或 CI 中),可以直接传递 Cookie,而不必运行 auth:

{
  "mcpServers": {
    "linkedin": {
      "command": "uvx",
      "args": ["linkedin-api-mcp"],
      "env": { "LINKEDIN_COOKIE": "your-li_at-value" }
    }
  }
}

无论在哪里这样做,都要像保护 Cookie 本身一样谨慎地对待该配置文件:不要提交它,并限制其访问权限。

获取会话 Cookie

LinkedIn 不为此类访问提供 API 密钥,因此该服务会使用浏览器中已有的同一会话 Cookie。

  1. 一次性操作:安装该服务所驱动的 Chromium 版本。
    uvx --from linkedin-api-mcp patchright install chromium
    
  2. 在常规浏览器中登录 linkedin.com。
  3. 打开开发者工具(F12 或 Cmd+Opt+I)→ 应用程序 → Cookie → https://www.linkedin.com。
  4. 找到名为 li_at 的行,并复制其值。

警告

**此 Cookie 就是你的 LinkedIn 登录凭证。**任何持有它的人都可以冒充你操作:阅读你的消息、给你的联系人发消息,并查看你的账户可以看到的所有内容,而且无需你的密码。更改密码后,它仍然有效;LinkedIn 显示的任何会话列表也无法撤销它。切勿将它粘贴到聊天、提交记录、问题、截图中,或粘贴到 linkedin-api-mcp auth 以外的任何地方。

  1. 保存它:
    uvx linkedin-api-mcp auth
    
    按提示粘贴该值;终端不会回显它。默认情况下,它会保存在操作系统的密钥环中(Keychain、Windows Credential Manager 或 Linux 上的 Secret Service),绝不会写入配置文件。
  2. 在配置客户端之前,先验证 LinkedIn 是否接受该 Cookie:
    uvx linkedin-api-mcp --test
    
    该命令会打印服务的脱敏配置,并确认会话有效。它绝不会打印 Cookie 本身。

工具

工具描述
get_profile按 URL 或公开标识符获取成员的个人资料(个人简介、关于、工作经历、教育经历、技能)。
get_my_profile获取此服务登录所用账号的个人资料。
search_people按关键词搜索 LinkedIn 成员。
get_inbox列出最近的消息会话预览。
get_conversation按 ID 获取一个会话的完整消息记录。
search_conversations按参与者或关键词搜索你的消息会话。
send_message ✏️写入。 从你的账号向另一位成员发送真实消息。
connect ✏️写入。 从你的账号向另一位成员发送真实的连接邀请。
get_company获取公司页面(关于、规模、行业、近期帖子)。
search_companies按关键词搜索 LinkedIn 公司。
search_jobs按关键词和可选地点搜索招聘信息。
get_job获取一条完整的招聘信息。
search_posts按关键词搜索 LinkedIn 信息流帖子。
linkedin_status根据安全中的速率限制检查会话是否有效以及当前使用情况。

共 14 个工具:12 个只读,2 个写入。send_message 和 connect 是仅有的两个会产生更改的工具,而且一旦运行,另一位真实用户就能立即看到结果:没有草稿、预览或撤销步骤。其他工具只会读取你的账号已有权限查看的内容。已通过 68 项测试。

已验证和未验证的内容

这是一个刚启动几天的项目。我们不声称所有功能都能正常运行,以下是针对真实账号实际检查过的内容,以及尚未检查的内容。

状态工具/行为备注
已在真实环境中验证get_my_profile、get_profile、search_people、get_company、search_companies、search_jobs、search_posts、get_inbox已针对真实账号调用并返回真实数据。
已在真实环境中验证send_message ✏️已发送真实消息,随后读取会话以确认消息已送达。
尚未验证connect ✏️、get_conversation、search_conversations、get_job、linkedin_status已实现并通过测试,但尚未手动针对真实账号进行验证。
已知缺口get_inbox 返回的 conversation_id返回值为 null。LinkedIn 将收件箱行绑定到内存中的 JS 对象,而不是 URL,因此无法从页面读取 ID。
已知缺口search_posts 的表情回应和评论数返回值为 null。
已知缺口get_profile 中的 experience 和 educationLinkedIn 仅在滚动页面时加载这些部分,因此目前返回空值。

安全性

  • 串行化操作队列。 每次工具调用(包括 linkedin_status)在操作浏览器前都会经过同一个队列:一次只执行一个操作,绝不并行。

  • 强制执行最小间隔和每小时上限,而非仅仅声明:

    设置默认值环境变量作用
    操作之间的最小间隔2 秒LINKEDIN_MIN_INTERVAL根据上一次调用控制调用节奏,不会连续执行。
    每个滚动小时的操作次数120LINKEDIN_MAX_PER_HOUR达到上限后,后续调用会立即失败并返回 rate_limited 错误,而不会排队或等待。

    此上限仅适用于本服务:它的作用是防止循环运行的 Agent 产生大量 LinkedIn 流量,并非 LinkedIn 告诉我们这些数字。调低上限始终安全;调高上限则意味着你愿意承担超出默认设置预期的风险。

  • 对所有抓取到的自由文本进行提示词注入隔离。 从 LinkedIn 页面读取的任何内容(标题、个人简介、消息)都会作为数据传递给你的 Agent。在 Agent 看到这些内容前,它们会经过隔离,因此个人资料或消息中的文本无法伪装成指令。

  • 默认情况下,Cookie 存储在操作系统密钥环中,而非配置文件中。请参阅获取会话 Cookie。

  • send_message 会验证消息是否送达后才报告成功。 它会轮询对话,直到实际看到已发送的文本;如果没有看到,则会抛出 send_unconfirmed,而不会错误地返回 {"sent": true}。

服务还会读取以下环境变量:LINKEDIN_COOKIE(覆盖密钥环中的值)、LINKEDIN_HEADLESS(默认值为 true)、LINKEDIN_NAV_TIMEOUT_MS(默认值为 30000)。

常见问题

使用这个工具安全吗?我会被封禁吗?

此工具控制的是一个真实的浏览器会话;它不会利用未公开的 API,也不会绕过身份验证。LinkedIn 用户协议禁止自动访问,使用自动化工具的账号可能会受到限制或被封禁。使用风险由你自行承担;我们无法保证账号安全。如遇到任何问题,请在 Discussions 中告知我。

如果我的 Agent 执行了过多操作怎么办?

工具调用会通过队列按顺序执行。你需要对运行的自动化操作量负责;请谨慎使用,并合理地向 Agent 提供提示词。

许可证

MIT © 2026 Johannsen Lum。

你可以使用、修改、再分发,也可以基于它构建商业项目:唯一条件是保留版权声明和许可证文本。本项目不提供任何形式的保证。

接受以相同许可证提交的贡献。

贡献

欢迎提交问题和拉取请求: github.com/JohannsenLum/linkedin-api-mcp。 变更记录见 CHANGELOG.md。

运行测试

安装开发依赖,并在仓库根目录运行 pytest:

pip install -e ".[dev]"
python -m pytest -q

默认测试套件不需要 Chromium、LinkedIn 账号、LINKEDIN_COOKIE 或网络访问。浏览器交互由 tests/fakes.py 中的测试替身模拟;它们会解析预置的 HTML,并提供工具使用的少量 Playwright 接口。解析测试示例请参阅 tests/test_people_parsing.py。

这是一个独立项目,与 LinkedIn Corporation 无关联。请参阅本文档顶部的免责声明。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。