关于 LinkedIn
LinkedIn 是 MCP 服务,通过真实的无头浏览器和用户已登录的会话读取 LinkedIn 个人资料、公司、职位、帖子及收件箱内容。它还提供独立的消息发送和连接请求工具,并对操作进行串行处理和限速。
主要功能
- 01读取个人资料和公司页面
- 02搜索用户、公司、职位和帖子
- 03查看收件箱及会话内容
- 04发送消息和连接请求
- 05将会话 Cookie 存入系统密钥环
适用场景
- 01查看成员或公司的资料
- 02按关键词和地点查找职位
- 03检查近期收件箱会话
- 04发送 LinkedIn 消息或连接请求
MCP 相关
它将 LinkedIn 浏览器操作作为 MCP 工具提供,包括 12 个读取工具和 2 个写入工具。所有工具调用共用一个串行浏览器会话。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
uvx linkedin-api-mcpLINKEDIN_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+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
linkedin-api-mcp
免责声明:这是一个独立的社区项目,与 LinkedIn Corporation 或 Microsoft 无关,也未获得其授权、认可或赞助。“LinkedIn”是 LinkedIn Corporation 的注册商标,在此仅用于说明本软件所互操作的第三方服务。
一个用于 LinkedIn 的 MCP 服务。它使用你自己的、已登录 LinkedIn 的会话 Cookie,通过真正的无头浏览器 (patchright,一个未被检测到的 Playwright 分支) 进行操作。这里没有抓取 API、没有撞库,也不会绕过 LinkedIn 的登录。你的 Agent 可以使用 12 个读取工具(个人资料、公司、职位、帖子、收件箱),以及两个刻意分开的写入工具:发送消息和发送连接请求。每项操作都通过单一浏览器会话逐一执行,并按照你控制的限制进行节流。请参阅下方的安全部分。
文档:mcp.johannsenlum.com/linkedin
安装(一键安装)
Cursor 和 VS Code 提供了深层链接;其他客户端均没有文档说明的安装链接格式。这些链接会预填下方的命令,无需填写其他内容,因为 Cookie 保存在你的操作系统密钥环中,而不是环境变量里。
所有客户端
| 客户端 | 深层链接? |
|---|---|
| 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。
- 一次性操作:安装该服务所驱动的 Chromium 版本。
uvx --from linkedin-api-mcp patchright install chromium - 在常规浏览器中登录 linkedin.com。
- 打开开发者工具(
F12或Cmd+Opt+I)→ 应用程序 → Cookie →https://www.linkedin.com。 - 找到名为
li_at的行,并复制其值。
警告
**此 Cookie 就是你的 LinkedIn 登录凭证。**任何持有它的人都可以冒充你操作:阅读你的消息、给你的联系人发消息,并查看你的账户可以看到的所有内容,而且无需你的密码。更改密码后,它仍然有效;LinkedIn 显示的任何会话列表也无法撤销它。切勿将它粘贴到聊天、提交记录、问题、截图中,或粘贴到
linkedin-api-mcp auth以外的任何地方。
- 保存它:
按提示粘贴该值;终端不会回显它。默认情况下,它会保存在操作系统的密钥环中(Keychain、Windows Credential Manager 或 Linux 上的 Secret Service),绝不会写入配置文件。uvx linkedin-api-mcp auth - 在配置客户端之前,先验证 LinkedIn 是否接受该 Cookie:
该命令会打印服务的脱敏配置,并确认会话有效。它绝不会打印 Cookie 本身。uvx linkedin-api-mcp --test
工具
| 工具 | 描述 |
|---|---|
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 和 education | LinkedIn 仅在滚动页面时加载这些部分,因此目前返回空值。 |
安全性
-
串行化操作队列。 每次工具调用(包括
linkedin_status)在操作浏览器前都会经过同一个队列:一次只执行一个操作,绝不并行。 -
强制执行最小间隔和每小时上限,而非仅仅声明:
设置 默认值 环境变量 作用 操作之间的最小间隔 2 秒 LINKEDIN_MIN_INTERVAL根据上一次调用控制调用节奏,不会连续执行。 每个滚动小时的操作次数 120 LINKEDIN_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 无关联。请参阅本文档顶部的免责声明。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。