关于 LinkedIn MCP Server
LinkedIn MCP Server 是开源服务,供需要读取 LinkedIn 个人资料、研究公司、查找职位和处理对话的 Agent 使用。它通过本地浏览器会话访问 LinkedIn,并提供搜索及部分账户操作工具。
主要功能
- 01读取个人资料和公司信息
- 02搜索人员、公司和职位
- 03查看动态和对话
- 04发送消息并管理连接请求
- 05复用本地浏览器登录会话
适用场景
- 01研究公司及其员工
- 02查找人员或职位
- 03查看 LinkedIn 收件箱对话
- 04发送经确认的消息或连接请求
MCP 相关
该服务向 MCP 客户端提供 LinkedIn 个人资料、公司、职位、动态和消息工具。支持 stdio 与 Streamable HTTP 传输,并通过本地浏览器会话进行身份验证。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
20收录的工具列表 · 更新于 3 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| sections | any | 否 | 要读取的额外分区,以逗号分隔。 始终包含主个人资料页面。 可用分区:experience、education、interests、honors、languages、certifications、skills、projects、contact_info、posts 示例:"experience,education"、"contact_info"、"skills,projects"、"honors,languages"、"posts" 默认值(None)仅读取主个人资料页面。 |
| max_scrolls | any | 否 | 每个分区加载更多内容时的最大分页尝试次数。 对于详细信息分区(experience、certifications、skills 等),这是点击 "Show more" 按钮的最大次数。对于动态/posts,这是滚动到底部的最大迭代次数。本次调用中的所有分区均适用。默认值(None)为详细信息分区 5 次,posts 10 次。如果某个分区中的条目很多(例如 30+ 个 certifications),请增加此值(max_scrolls=20)。为避免拖慢其他分区,请在单独的调用中请求内容较多的分区。 |
| linkedin_username | string | 是 | LinkedIn 用户名(例如:"stickerdaniel"、"williamhgates")。也接受完整个人资料 URL,并会提取其中的用户名。 |
详细介绍
LinkedIn 的 MCP 服务
通过你自己的浏览器会话,让 AI Agent 使用 LinkedIn。查看个人资料、调研公司、查找工作,并管理对话和好友请求。
这是一个独立的开源项目,与 LinkedIn 或 Microsoft 无关。LinkedIn 是 LinkedIn Corporation 的商标,在此仅用于标识本软件交互的服务。
LinkedIn MCP 赞助商
不想运行服务?Cadenza 是为你的 Agent 提供的托管式 LinkedIn MCP 服务,可在网页、桌面和移动端使用,支持 LinkedIn Classic、Sales Navigator 和 Recruiter 的 100 多项操作。内置请求限制,你可以为每项操作微调每分钟和每日预算。
使用代码 FOUNDING20,首年可享 8 折优惠。试用 Cadenza →
本 MCP 服务由 Unipile 支持。Unipile 为开发者提供全托管云端方案:一个托管式 LinkedIn API,支持 Classic、Sales Navigator 和 Recruiter,并为你处理身份验证、会话和基础设施。
安装方式 - LinkedIn MCP 服务
| 工具 | 描述 |
|---|---|
get_person_profile | 读取个人资料版块,例如工作经历、教育背景、技能、项目和帖子。 |
get_my_profile | 读取你自己的个人资料,版块选择方式与其他个人资料相同。 |
connect_with_person | 发送附带可选备注的好友邀请,或接受收到的邀请。 |
get_sidebar_profiles | 查找推荐的个人资料链接,包括你可能认识的人。 |
get_inbox | 列出最近的收件箱对话,并提供打开单个对话的链接。 |
get_conversation | 使用 LinkedIn 用户名或会话 ID 读取对话消息。 |
search_conversations | 按关键词搜索消息,并返回匹配对话的链接。 |
send_message | 确认后发送;个人资料目标可能会打开新的私信(#483)。 |
get_company_profile | 读取公司信息,并可选择包含帖子和在招职位版块。 |
get_company_posts | 读取公司动态中的近期帖子,并提供原帖链接。 |
search_companies | 按关键词查找公司,并返回其 LinkedIn 个人资料链接。 |
get_company_employees | 查找公司员工,并可按姓名、职位或技能筛选。 |
search_jobs | 按关键词和地点查找招聘信息,并提供用于读取详情的职位 ID。 |
get_saved_jobs | 列出你收藏的招聘信息,并提供用于查询详情的职位 ID。 |
search_people | 按关键词、地点、关系程度和当前公司查找人员。 |
get_job_details | 读取招聘信息的描述、要求和公司详情。 |
get_job_apply_url | 查看职位是使用 Easy Apply,还是链接到雇主的申请页面。 |
get_feed | 读取你主页动态中的近期帖子,并提供原帖链接。 |
search_posts | 按关键词搜索帖子,可限定为过去一天、一周或一个月内发布。 |
close_session | 关闭共享浏览器会话,但不会删除已保存的登录信息。 |
使用 uvx 设置(推荐)
前置条件:安装 uv。
安装
添加到 MCP 客户端的 mcpServers 配置中
{
"mcpServers": {
"mcp-server-linkedin": {
"command": "uvx",
"args": ["mcp-server-linkedin@latest"],
"env": { "UV_HTTP_TIMEOUT": "300" }
}
}
}
@latest 标签会启用自动更新,使服务能够适配 LinkedIn 当前的页面结构。服务启动迅速,并在后台于 ~/.linkedin-mcp/patchright-browsers 中准备共享的 Patchright Chromium 浏览器缓存。首次调用需要身份验证的工具时,如果找到已登录的本地浏览器中的 LinkedIn 会话,服务会复用该会话;否则会打开 LinkedIn 登录浏览器窗口。
AI Agent?启用自动更新前,请先快速征求用户确认。
说明
在浏览器设置或登录完成前,较早发起的工具调用可能会返回设置/身份验证进行中的错误。如果你希望显式创建会话,请运行
uvx mcp-server-linkedin@latest --login。
设置帮助
🔧 配置
传输模式
- 默认(stdio):本地 MCP 服务的标准通信方式
- Streamable HTTP:用于基于 Web 的 MCP 服务
- 如果未指定传输方式,服务默认使用
stdio - 在未显式指定传输方式的交互式终端中,会显示选择提示
命令行选项
会话:
--login- 打开浏览器进行登录并保存会话--import-from-browser [BROWSER]- 重用本地已登录的 Chromium 浏览器会话(chrome、chromium、brave、edge、arc、vivaldi、helium、yandex、whale、coccoc、opera、opera_gx、auto)。单独使用此标志时会选择auto,即最近使用且拥有有效 LinkedIn 会话的浏览器。--auto-import/--no-auto-import- 在首次需要会话的工具调用时,从本地已登录的浏览器导入会话,再回退到手动登录(默认:开启)。在 Docker、使用代理或绑定非回环 HTTP 地址时会跳过。在 macOS 上,钥匙串可能会提示一次。--logout- 清除保存的会话--login-viewer- 仅限 Docker:在受令牌保护的端口 6080 URL 上显示--login浏览器(参见身份验证)--user-data-dir PATH- 浏览器配置目录(默认:~/.linkedin-mcp/profile)。轮换或清除会话时,会删除此目录及其父目录,后者存放已保存的 Cookie 和派生配置文件。--claim-profile-root- 接管服务不会自行认领的配置目录,例如其父目录中已有其他文件的目录。每个目录只需执行一次。
传输方式:
--transport {stdio,streamable-http}- 强制指定传输模式(默认:stdio)--host HOST/--port PORT/--path PATH- HTTP 服务地址(默认:127.0.0.1、8000、/mcp)
超时:
--timeout MS- 单次页面操作的超时时间(默认:5000)--tool-timeout SECONDS- 整个工具调用的超时时间(默认:180)。对于需要读取许多页面、网络较慢或浏览器冷启动的调用,请调高此值。--login-timeout SECONDS- 登录浏览器等待你完成登录的时长(默认:1800;0 = 不限时)。无论如何,--login-viewer都会在 30 分钟后结束会话。--login-inline-wait SECONDS- 工具调用等待登录完成后再提示模型重试的时长(默认:25,最大:45;0 = 立即返回)
共享浏览器:
--browser-wait SECONDS- 等待另一个服务进程移交共享浏览器的时长(默认:25,最大:45;0 = 立即报告繁忙)。仅在同时运行多个 MCP 客户端时有效。--browser-min-hold SECONDS- 此进程移交共享浏览器前至少保留它的时长(默认:20)。此值会限制在比--browser-wait少 3 秒以内,因此调高此值时也要调高后者。值越大,浏览器重启次数越少,但其他客户端的等待时间越长。--browser-idle-timeout SECONDS- 无工具调用达到此时长后,关闭空闲浏览器并释放配置文件(默认:600;0 = 保持打开)
浏览器:
--no-headless- 显示浏览器窗口(便于调试)--chrome-path PATH- Chrome/Chromium 可执行文件的路径--proxy-server URL- 通过代理转发浏览器流量,格式为scheme://host:port。请在--login之前完成配置;参见使用代理。
其他:
--log-level {DEBUG,INFO,WARNING,ERROR}- 日志级别(默认:WARNING)
从日常使用的浏览器导入会话
如果你已在 Chrome、Chromium、Brave、Edge、Arc、Vivaldi、Helium、Yandex、Naver Whale、Cốc Cốc、Opera 或 Opera GX 中登录 LinkedIn,可以跳过手动执行 --login 的步骤,直接重用该会话:
# Auto-pick the most recently used browser with a live LinkedIn session
uvx mcp-server-linkedin@latest --import-from-browser
# Or target a specific browser
uvx mcp-server-linkedin@latest --import-from-browser brave
此操作会读取浏览器中的 LinkedIn Cookie,通过你的动态消息验证 Cookie,并将其保存到 ~/.linkedin-mcp/profile/,与 --login 保存的位置相同。注意:
- 如果登录了多个浏览器,会优先尝试最近使用的有效 LinkedIn 会话。如果 LinkedIn 拒绝该会话(已撤销或已从远程退出登录),则会自动尝试下一个最近使用的会话;服务器接受的第一个会话会被导入。系统不会提示你选择。传入浏览器名称即可指定某个浏览器。
- 在 macOS 上,系统钥匙串可能会提示是否允许访问浏览器的 Safe Storage。为确保读取可靠,请先关闭源浏览器。
- Chrome 127+ 使用应用绑定加密(
v20)保护的 Cookie 无法在不提升系统权限的情况下解密;此时请改用--login。 - 导入的 Cookie 与真实登录后磁盘上的 Cookie 集合一致。本地服务器会从已保存的配置文件中完整读取这些 Cookie;Docker 桥接会将其缩减为正常会话所用的同一最小身份验证子集。
HTTP 模式和调试
基本用法示例:
# Run with debug logging
uvx mcp-server-linkedin@latest --log-level DEBUG
HTTP 模式示例(适用于基于 Web 的 MCP 客户端):
uvx mcp-server-linkedin@latest --transport streamable-http --host 127.0.0.1 --port 8080 --path /mcp
运行时服务器日志由 FastMCP/Uvicorn 输出。
工具调用会被串行化,以保护共享的 LinkedIn 浏览器会话;无论是在单个服务器进程内,还是在多个独立进程之间,都是如此。如果你同时运行多个 MCP 客户端,每个客户端都会启动自己的服务器进程,但同一时间只有一个客户端能使用浏览器;其他客户端会短暂等待,并在当前调用结束后立即接管。等待时间过长的客户端会收到“浏览器正忙”消息,此时只需重试即可。使用 --log-level DEBUG 查看等待/获取/释放日志。
此机制适用于同一台计算机和同一运行环境中的进程。它不适用于共享同一个 ~/.linkedin-mcp 目录的主机和 Docker 容器之间的进程,因此,在容器运行期间,请勿在主机上运行 --login 或 --logout。
使用 mcp inspector 测试:
- 安装并运行 mcp inspector:
bunx @modelcontextprotocol/inspector - 点击预填充的令牌 URL,在浏览器中打开 inspector
- 将
Transport Type选择为Streamable HTTP - 将
URL设为http://localhost:8080/mcp - 连接
- 测试工具
❗ 故障排除
安装问题
- 确保已安装 uv:
curl -LsSf https://astral.sh/uv/install.sh | sh - 检查 uv 版本:
uv --version(应为 0.4.0 或更高版本) - 首次运行时,
uvx会下载所有 Python 依赖项。在网络连接较慢时,uv 默认的 30s HTTP 超时时间可能过短。上方推荐的配置已设置UV_HTTP_TIMEOUT=300(秒)以避免此问题。 - Windows,
DLL load failed while importing _greenlet:请升级到 greenlet 3.5.5 或更高版本;这些版本发布的 Windows wheel 会再次将 C++ 运行时包含在扩展中。重新运行uvx即可自动解决此问题;如果环境锁定了依赖项,则需要运行uv lock --upgrade-package greenlet。只有 greenlet 3.3.1 到 3.5.4 需要MSVCP140.dll,而 python.org 安装程序和由uv管理的构建都不包含该 DLL;从源代码构建的 greenlet 则可能在任何版本中都需要它。如果无法升级版本,Microsoft Visual C++ Redistributable 可提供该 DLL。相关问题见 greenlet#525,并已在 greenlet#526 中修复。
会话问题
- 浏览器配置文件存储在 `~/.linkedin-mcp/profile/` - 托管的浏览器下载文件缓存于 `~/.linkedin-mcp/patchright-browsers/` - *浏览器缓存不断增长*:服务升级可能会带来新的 Chromium 修订版,而只要任何已安装版本仍引用旧版本,Patchright 就会保留它。`uvx` 会为你运行过的每个版本保留一个存档,因此每个存档都会持有这样的引用,旧修订版也就会一直保留。服务日志会发出警告,列出正在保留的修订版及其占用的空间。要回收空间,请停止所有 LinkedIn MCP 服务实例,删除 `~/.linkedin-mcp/patchright-browsers/`,然后在下次启动时下载当前浏览器。登录问题
- 确保同一时间只登录一个 LinkedIn 会话
- 使用
--login时,LinkedIn 可能会要求你在 LinkedIn 移动应用中确认登录 - 登录期间,LinkedIn 可能会显示验证码挑战。运行
uvx mcp-server-linkedin@latest --login,它会打开一个浏览器,你可以在其中手动完成验证。
超时问题
- 页面操作失败(找不到元素、导航卡住):增大浏览器页面操作超时时间:
--timeout 10000或TIMEOUT=10000(毫秒,默认值为 5000)。 - 整个工具调用超时(例如,多分区个人资料、冷启动 Chromium、运行缓慢的容器):增大每个工具的执行超时时间:
--tool-timeout 300或TOOL_TIMEOUT=300(秒,默认值为 180)。 - 没有会话时的首次工具调用:如果本地已登录的浏览器中存在有效的 LinkedIn 会话,服务会自动导入该会话(参见
AUTO_IMPORT_FROM_BROWSER/--auto-import),而不是强制要求手动登录。在 macOS 上,系统可能会提示你一次,要求授权访问 Safe Storage。如果不存在可导入的浏览器会话,服务会改为打开登录窗口,并等待最多LOGIN_INLINE_WAIT秒(默认值为 25,最大值为 45;--login-inline-wait),这样快速登录即可在一次调用中完成。如果等待时间结束,工具会返回待处理信号,模型会在约 30 秒后重试。在 Docker 环境下,或服务绑定到非回环 HTTP 主机时,自动导入和内联等待均不会生效。请在主机上使用--login创建会话,或使用 Docker 专用的--login --login-viewer命令。 - 网络连接较慢的用户可能需要调高上述任一超时值。
明明已经在主机上运行过 --login,却仍被要求运行
- 如果工具调用在非容器环境的机器上返回“Docker 中没有可用的 LinkedIn 会话”,则说明运行环境检测有误。这种情况曾发生在运行 Docker 守护进程以提供其他服务的 Linux 主机上。设置
LINKEDIN_MCP_CONTAINER=false可覆盖检测结果;设置为true则会强制采用相反的检测结果。
自定义 Chrome 路径
- 如果 Chrome 安装在非标准位置,请使用 `--chrome-path /path/to/chrome` - 也可以通过环境变量设置:`CHROME_PATH=/path/to/chrome` - 在 macOS 和 Linux 上,浏览器的版本必须不低于上次打开你的个人资料时所用的版本,否则服务会拒绝启动。(Windows 除外:在 Windows 上,无法在不启动浏览器的情况下查询其版本,因此不会执行此项检查。)较旧的浏览器可能会静默丢弃较新浏览器写入的数据,其中包括保存的会话,随后出现的问题看起来就和登录已过期完全一样。提示信息会列出两个版本。通常,运行过一次较新版本的 Chrome 后,再切回随附的 Chromium 就会触发此情况;你可以重新运行那个较新的浏览器,也可以运行 `--login`,将存储的会话移到一边,然后使用当前浏览器重新登录。`--logout` 也会清除会话,但会直接丢弃旧会话,而不是保留以便恢复;它还会在终端中要求确认,因此无法通过 MCP 客户端启动的服务使用。 - 只有 Chrome、Chromium 和 Chrome for Testing 会进行这种版本比较。各类衍生浏览器的版本编号方式不同(Vivaldi 使用 7.x,Edge 在相同主版本下的构建号远低于 Chrome),因此将 `CHROME_PATH` 指向这类浏览器时会关闭检查,而不是导致无法满足条件的启动拒绝。Claude Desktop MCP Bundle(以前称为 DXT)
前提条件:Claude Desktop。
安装
- 从 releases 下载最新的
.mcpb文件 - 点击下载的
.mcpb文件,将其安装到 Claude Desktop - 调用任意 LinkedIn 工具
启动时,MCP Bundle 会在后台准备共享的 Patchright Chromium 浏览器缓存。首次调用需要身份验证的工具时,如果服务器找到已登录的本地浏览器,就会复用其中的 LinkedIn 会话;否则会打开 LinkedIn 登录浏览器窗口。
说明
在浏览器设置或登录完成前,较早发起的工具调用可能会返回“正在设置/进行身份验证”错误。浏览器下载或登录完成后,请重试该工具调用。
设置帮助
❗ 故障排查
首次设置时的行为
- Claude Desktop 会立即启动该捆绑包;浏览器设置会在后台继续进行
- 如果 Patchright Chromium 浏览器仍在下载,请稍等片刻后重试工具
- 托管的浏览器下载内容会共享存放在
~/.linkedin-mcp/patchright-browsers/下 - 浏览器缓存不断增大:只要仍有任何已安装版本引用旧版 Chromium,Patchright 就会保留该版本,因此升级后磁盘上可能同时存在多个版本。服务器日志会发出警告,指出它保留了哪些内容。要释放空间,请停止所有 LinkedIn MCP Server 实例,删除
~/.linkedin-mcp/patchright-browsers/,然后在下次启动时下载当前浏览器。 - Windows 上,捆绑包因
DLL load failed while importing _greenlet退出:请安装 Microsoft Visual C++ Redistributable,或重新安装固定使用 greenlet 3.5.5 或更高版本的捆绑包;这些版本发布的 Windows wheel 会再次将 C++ 运行时包含在扩展中。固定使用 greenlet 3.3.1 至 3.5.4 的捆绑包需要该可再发行组件提供的MSVCP140.dll,而 python.org 安装程序和由uv管理的构建都不包含此 DLL;从源码构建的 greenlet 在任何版本中都可能需要它。服务器会在启动时自行指出这一问题,并且只有在确认加载器无法提供该 DLL 后才会提示。此问题已在 greenlet#525 中报告,并在 greenlet#526 中修复。
登录问题
- 确保同一时间只有一个活跃的 LinkedIn 会话
- 使用
--login时,LinkedIn 可能要求你在 LinkedIn 移动应用中确认登录 - 登录期间,LinkedIn 可能会显示验证码挑战。运行
uvx mcp-server-linkedin@latest --login,这会打开一个浏览器,你可以在其中手动完成验证码。先决条件请参阅 uvx 设置。
超时问题
- 页面操作失败(未找到元素、导航卡住):增大浏览器页面操作超时时间:
--timeout 10000或TIMEOUT=10000(毫秒,默认值为 5000)。 - 整个工具调用超时(例如,多部分个人资料、Chromium 冷启动、容器运行缓慢):增大每个工具的执行超时时间:
--tool-timeout 300或TOOL_TIMEOUT=300(秒,默认值为 180)。 - 首次调用工具时没有会话:如果本地已登录的浏览器中有有效的 LinkedIn 会话,服务器会自动导入该会话(参见
AUTO_IMPORT_FROM_BROWSER/--auto-import),而不是强制要求手动登录。在 macOS 上,钥匙串可能会提示一次,要求访问安全存储。如果没有可导入的浏览器会话,服务器会改为打开登录窗口,并等待最多LOGIN_INLINE_WAIT秒(默认值为 25,最大值为 45;--login-inline-wait),以便快速登录后通过一次调用完成操作。如果等待时间结束,工具会返回待处理信号,模型会在约 30 秒后重试。在 Docker 环境下,或服务器绑定到非环回 HTTP 主机时,自动导入和内嵌等待均不适用。请在主机上使用--login创建会话,或使用明确的 Docker--login --login-viewer命令。 - 网络连接较慢的用户可能需要提高上述任一参数的值。
已在主机上运行过 --login,但仍被要求运行
- 如果工具调用返回“Docker 中没有可用的有效 LinkedIn 会话”,但你的机器并非容器,则说明运行环境检测有误。这种情况曾发生在运行 Docker 守护进程以提供无关服务的 Linux 主机上。设置
LINKEDIN_MCP_CONTAINER=false可覆盖检测结果;设置为true则会强制使用相反结果。
Codex 插件
安装
在终端中运行
codex plugin marketplace add stickerdaniel/linkedin-mcp-server
codex plugin add linkedin-mcp-server@linkedin-mcp-server
该插件运行最新的服务版本。首次调用需要身份验证的工具时,服务会复用已登录的本地浏览器中的 LinkedIn 会话,或打开登录窗口。
说明
在浏览器设置或登录完成之前,前几次工具调用可能会返回设置/身份验证进行中的错误。浏览器下载或登录完成后,请重试工具调用。
Claude Code 插件
前提条件:Claude Code 和 uv。
安装
在终端中运行
claude plugin marketplace add stickerdaniel/linkedin-mcp-server
claude plugin install linkedin-mcp-server@linkedin-mcp-server
该插件运行最新的服务版本。首次调用需要身份验证的工具时,服务会复用已登录的本地浏览器中的 LinkedIn 会话,或打开登录窗口。
说明
在浏览器设置或登录完成之前,前几次工具调用可能会返回设置/身份验证进行中的错误。浏览器下载或登录完成后,请重试工具调用。
Cursor 插件
安装
**从 Cursor Marketplace 安装:**在侧边栏中打开 Customize,搜索 LinkedIn MCP,然后选择 Install。该插件内置 LinkedIn 技能。
一键安装 MCP(仅服务,不含技能):
两种方式都会运行最新的服务版本。首次调用需要身份验证的工具时,服务会复用已登录的本地浏览器中的 LinkedIn 会话,或打开登录窗口。
说明
在浏览器设置或登录完成之前,前几次工具调用可能会返回设置/身份验证进行中的错误。浏览器下载或登录完成后,请重试工具调用。
使用 Docker 设置
我知道自己在做什么
**前提条件:**确保已安装并运行 Docker。
身份验证
登录一次。容器会打开 LinkedIn 登录浏览器,你可以在自己的浏览器标签页中完成登录。
macOS / Linux:
# Create the directory first so the container can save your session into it
mkdir -p ~/.linkedin-mcp
docker run -it --rm \
-v ~/.linkedin-mcp:/home/pwuser/.linkedin-mcp \
-p 127.0.0.1:6080:6080 \
stickerdaniel/linkedin-mcp-server:latest \
--login --login-viewer
PowerShell(Windows):
$sessionDir = Join-Path $env:USERPROFILE ".linkedin-mcp"
New-Item -ItemType Directory -Force -Path $sessionDir | Out-Null
docker run -it --rm `
-v "${sessionDir}:/home/pwuser/.linkedin-mcp" `
-p 127.0.0.1:6080:6080 `
stickerdaniel/linkedin-mcp-server:latest `
--login --login-viewer
打开命令输出的完整 URL(其中包含访问令牌)并登录。登录查看器随后会自行关闭;请让命令自行退出,以便完整保存会话。等待时间最长为 30 分钟。
每次后续运行 docker run 时,都要将同一个主机目录挂载到 /home/pwuser/.linkedin-mcp,否则服务将无法找到会话。
添加到 MCP 客户端的 mcpServers 配置中
macOS / Linux(JSON 中使用绝对路径):
{
"mcpServers": {
"mcp-server-linkedin": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-v", "/absolute/path/to/.linkedin-mcp:/home/pwuser/.linkedin-mcp",
"stickerdaniel/linkedin-mcp-server:latest"
]
}
}
}
第一个路径必须写成完整路径。客户端会直接运行 docker,而不是通过 shell 运行,因此开头的 ~ 不会展开,Docker 会拒绝该挂载。
**PowerShell(Windows):**使用正斜杠 JSON 路径。像
C:\Users\Alice\.linkedin-mcp 这样的反斜杠路径会导致 JSON 解析失败,因为 \U 是无效的
转义序列。请改用 C:/Users/Alice/.linkedin-mcp,并将 Alice 替换为你的
用户名。
{
"mcpServers": {
"mcp-server-linkedin": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-v", "C:/Users/Alice/.linkedin-mcp:/home/pwuser/.linkedin-mcp",
"stickerdaniel/linkedin-mcp-server:latest"
]
}
}
}
说明
在 PowerShell 中,组合 Docker
-v参数里的~不会展开。 请使用C:/Users/<you>/.linkedin-mcp,或在传递给 Docker 之前用$env:USERPROFILE\.linkedin-mcp构建路径。
说明
会话会随时间过期。当工具调用开始要求身份验证时,请重复上面的登录命令,或在主机上运行
uvx mcp-server-linkedin@latest --login。
设置帮助
🔧 配置
传输模式
- **默认(stdio)**:本地 MCP 服务的标准通信方式 - **Streamable HTTP**:用于基于 Web 的 MCP 服务 - 如果未指定传输方式,服务将默认使用 `stdio` - 在交互式终端中,如果未明确指定传输方式,会显示选择提示命令行选项
会话:
--auto-import/--no-auto-import- 在首次需要会话的工具调用中,从已登录的本地浏览器导入会话,然后再回退到手动登录(在 Docker 中忽略)。在 macOS 上,钥匙串可能会提示一次。--logout- 清除已存储的会话及其派生的所有配置文件--login-viewer- 与--login配合使用时,在端口 6080 的令牌保护 URL 上显示登录浏览器。需要配置 Authentication 中的配置文件挂载。--user-data-dir PATH- 浏览器配置文件目录(默认:~/.linkedin-mcp/profile)。轮换或清除会话时,会删除此目录及其父目录;父目录中存有已存储的 Cookie 和派生配置文件。--claim-profile-root- 接管服务不会自行声明的配置文件目录,例如其父目录已包含其他文件的目录。每个目录只需执行一次。
传输方式:
--transport {stdio,streamable-http}- 强制指定传输模式(默认:stdio)--host HOST/--port PORT/--path PATH- HTTP 服务地址(默认:127.0.0.1、8000、/mcp)
超时:
--timeout MS- 单次页面操作的超时时间(默认:5000)--tool-timeout SECONDS- 整次工具调用的超时时间(默认:180)。对于读取很多页面、网络较慢或浏览器冷启动的调用,请调高此值。--login-timeout SECONDS- 登录浏览器等待你完成登录的时长(默认:1800;0 = 不限时)。无论如何,--login-viewer都会在 30 分钟后结束会话。--login-inline-wait SECONDS- 工具调用等待登录完成的时长,超时后会提示模型重试(默认:25,最大:45;0 = 立即返回)
共享浏览器:
--browser-wait SECONDS- 等待另一个服务进程移交共享浏览器的时长(默认:25,最大:45;0 = 立即报告繁忙)。仅在多个 MCP 客户端同时运行时有效。--browser-min-hold SECONDS- 此进程移交共享浏览器前至少保留它的时长(默认:20)。此值会限制为比--browser-wait少 3 秒,因此调高此值时也要相应调高前者。值越高,浏览器重启次数越少,但其他客户端的等待时间越长。--browser-idle-timeout SECONDS- 工具调用间隔达到此时长后,关闭空闲浏览器并释放配置文件(默认:600;0 = 保持打开)
浏览器:
--chrome-path PATH- Chrome/Chromium 可执行文件的路径(在 Docker 中很少需要)--proxy-server URL- 将浏览器流量通过代理转发,格式为scheme://host:port。请在--login之前配置;参见 Using a proxy。
其他:
--log-level {DEBUG,INFO,WARNING,ERROR}- 日志级别(默认:WARNING)
说明
在 Docker 中,直接使用
--login仍不会显示窗口。请添加--login-viewer,并且仅为这条一次性登录命令发布127.0.0.1:6080:6080。Docker 默认已启用有头模式,因此--no-headless不会改变任何设置。实验性的--daemon在 Docker 中会被忽略,因为其所有者的生命周期可能超过虚拟显示器。
HTTP 模式
HTTP 模式示例(适用于基于 Web 的 MCP 客户端):
Bash / macOS / Linux:
docker run -it --rm \
-v ~/.linkedin-mcp:/home/pwuser/.linkedin-mcp \
-p 127.0.0.1:8080:8080 \
stickerdaniel/linkedin-mcp-server:latest \
--transport streamable-http --host 0.0.0.0 --port 8080 --path /mcp
PowerShell(Windows):
$sessionDir = Join-Path $env:USERPROFILE ".linkedin-mcp"
docker run -it --rm `
-v "${sessionDir}:/home/pwuser/.linkedin-mcp" `
-p 127.0.0.1:8080:8080 `
stickerdaniel/linkedin-mcp-server:latest `
--transport streamable-http --host 0.0.0.0 --port 8080 --path /mcp
这两部分都必不可少,而且作用不同。--host 0.0.0.0
会使服务在容器内部可访问:绑定到容器内
127.0.0.1 的进程无法通过已发布的端口访问。-p 前面的
127.0.0.1: 用于限制容器外部的访问范围,仅允许本机访问。
去掉此前缀后,Docker 会在所有网络接口上发布端口,这会让网络上的其他设备访问一个没有身份验证的端点。服务无法区分这两种情况,因此无论哪种情况都会发出警告。
运行时服务器日志由 FastMCP/Uvicorn 输出。
HTTP 服务器会响应发送到 localhost 或其绑定地址的请求,并以 421 拒绝其他请求。这样可以防止你访问的网站将某个域名指向此服务器,并通过你自己的浏览器使用你的 LinkedIn 会话。
通过任何其他名称访问服务器都会被拒绝,包括网络中的机器名,以及反向代理前面的公共名称。你可以让代理将上游 Host 重写为后端地址,或者为服务器配置你提供服务时使用的主机名:
FASTMCP_HTTP_ALLOWED_HOSTS='["mcp.example"]'
这只会允许该名称,并继续拒绝其他所有名称。此端点仍未启用身份验证,因此任何可从本机以外访问的实例都必须置于提供身份验证的服务之后。
使用 mcp inspector 测试:
- 安装并运行 mcp inspector:
bunx @modelcontextprotocol/inspector - 点击预填充的令牌 URL,在浏览器中打开 inspector
- 将
Transport Type设为Streamable HTTP - 将
URL设为http://localhost:8080/mcp - 连接
- 测试工具
❗ 故障排除
Docker 问题
- 确保已安装 Docker
- 检查 Docker 是否正在运行:
docker ps ~/.linkedin-mcp的权限错误:较早使用 rootful Docker 运行时可能以 root 身份创建了该目录。使用sudo chown -R "$(id -u):$(id -g)" ~/.linkedin-mcp修复。
登录问题
- 确保一次只启用一个 LinkedIn 会话
- 使用
--login时,LinkedIn 可能要求你在 LinkedIn 移动应用中确认登录 - 登录期间 LinkedIn 可能会显示验证码挑战。运行
uvx mcp-server-linkedin@latest --login,该命令会打开浏览器,你可以在那里手动完成验证码。前置要求请参阅 uvx 设置。 - 如果你在主机上重新登录后 Docker 身份验证变为过期,请重启一次 Docker,以便它从新的源会话代次重新建立连接。
超时问题
- 页面操作失败(找不到元素、导航卡住):增加浏览器页面操作超时时间:
--timeout 10000或TIMEOUT=10000(单位为毫秒,默认值为 5000)。 - 整个工具调用超时(例如,多分区个人资料、Chromium 冷启动、容器运行缓慢):增加每个工具的执行超时时间:
--tool-timeout 300或TOOL_TIMEOUT=300(单位为秒,默认值为 180)。 - 没有会话时的首次工具调用:如果本地已登录的浏览器拥有有效的 LinkedIn 会话,服务器会自动导入该会话(参见
AUTO_IMPORT_FROM_BROWSER/--auto-import),而不是强制要求手动登录。在 macOS 上,钥匙串可能会提示一次,要求访问 Safe Storage。如果没有可导入的浏览器会话,服务器会改为打开登录窗口,并最多等待LOGIN_INLINE_WAIT秒(默认值为 25,最大值为 45;--login-inline-wait),因此快速登录即可在一次调用中完成。如果等待时间结束,工具会返回待处理信号,模型会在约 30 秒后重试。Docker 环境下,或服务器绑定到非回环 HTTP 主机时,自动导入和内联等待均不适用。请在主机上使用--login创建会话,或使用明确的 Docker 命令--login --login-viewer。 - 网络连接较慢的用户可能需要提高上述任一超时值。
已经在主机上运行过 --login,但仍被要求运行
- 如果工具调用在非容器机器上返回“Docker 中没有可用的 LinkedIn 会话”,说明运行环境检测有误。这种情况曾出现在运行 Docker 守护进程、但 Docker 用于无关服务的 Linux 主机上。设置 `LINKEDIN_MCP_CONTAINER=false` 可覆盖检测结果;设置为 `true` 则强制采用相反的结果。
自定义 Chrome 路径
- 如果 Chrome 安装在非标准位置,请使用
--chrome-path /path/to/chrome - 也可以通过环境变量设置:
CHROME_PATH=/path/to/chrome - 在 macOS 和 Linux 上,浏览器版本必须不低于上次打开你的个人资料时所用的版本,否则服务会拒绝启动。(Windows 上不适用:由于无法在不启动浏览器的情况下查询其版本,因此不会进行检查。)较旧的浏览器可能会静默删除较新版本写入的数据,其中包括已保存的会话,导致看起来就像登录已过期。提示信息会列出两个版本。使用较新版本的 Chrome 后再切回捆绑的 Chromium,通常会触发此问题;你可以重新运行之前使用的较新浏览器,或运行
--login,将已存储的会话移至一旁,并使用当前浏览器重新登录。--logout也会清除会话,但会丢弃旧会话,而不是保留以便恢复;它还会要求在终端确认,因此无法通过 MCP 客户端启动的服务使用。 - 只有 Chrome、Chromium 和 Chrome for Testing 会进行这种版本比较。浏览器分支的版本号规则各不相同(Vivaldi 使用 7.x 版本号,Edge 的构建号在相同主版本下远低于 Chrome),因此将
CHROME_PATH指向这类浏览器时,会关闭版本检查,而不是导致无法满足条件的启动拒绝。 - 在文档所述的 Docker 设置中,不会进行此项检查。容器不会打开你通过
--login创建的个人资料;它会根据你的 Cookie 派生自己的个人资料,并且默认每次启动时都会从头重新生成,因此旧镜像无法降级个人资料。使用EXPERIMENTAL_PERSIST_DERIVED_RUNTIME时,派生出的个人资料会被保留;如果镜像标签回退,则会丢弃该个人资料并重新派生,无需你进行任何操作。此检查只适用于主机,因为服务会直接打开主机上的个人资料。--login本身不会触发检查,因为它会先将旧个人资料移至一旁,再启动浏览器,因此绝不会触发此检查。
使用代理
LinkedIn 会评估会话登录所用的 IP 地址。你账户的常用 IP 地址最安全。如果服务无法使用该地址,你应该在所在国家/地区使用代理:例如 VPS、其他国家/地区,或不应与第一个账户共用 IP 地址的第二个账户。
使用付费服务商时,请使用固定地址的住宅代理会话(切勿按请求轮换 IP)。如果服务应使用你常用的家庭 IP 地址,可在家庭网络上使用 WireGuard 全隧道或 Tailscale 出口节点。
设置帮助
🔧 配置
- 在
--login之前设置代理。将现有会话切换到新地址会触发 LinkedIn 验证。这也包括通过--import-from-browser导入的会话,该会话是在你的真实地址下创建的。 - 使用
--proxy-server scheme://host:port或PROXY_SERVER,支持http、https、socks4或socks5。仅转发浏览器流量,不转发 MCP 传输。 - 通过
PROXY_USERNAME和PROXY_PASSWORD传入凭据,或使用http://user:pass@host:port格式将凭据包含在PROXY_SERVER中。--proxy-serverCLI 选项不接受这种组合格式。 - 设置
PROXY_BYPASS=localhost,127.0.0.1,::1可直接访问本地目标。设置代理后,Chromium 也会通过代理路由localhost。
❗ 故障排除
- Chromium 无法通过 SOCKS 代理进行身份验证,因此凭据必须使用
http(s)端点。如果你的服务提供商只提供需要身份验证的 SOCKS5,请运行一个保存凭据的本地中继,并将服务指向该中继。 - 代理密码错误时会表现为超时或登录失败,因为 Chromium 会反复重试身份验证质询,直到页面超时。如果添加代理后会话立即停止工作,请先检查代理凭据。
- 配置代理时会跳过自动导入:导入的会话会从你的真实地址切换到代理地址。请使用
--login。 - 在容器内,
127.0.0.1指的是容器本身,因此主机上的中继地址为host.docker.internal;原生 Linux Docker 还需要--add-host=host.docker.internal:host-gateway。
从源代码设置(开发与贡献)
欢迎贡献。架构指南和检查清单请参阅 CONTRIBUTING.md。请先搜索现有问题,再通过 问题表单 提交新问题。AI Agent 请遵循 issue-packet 技能。
安装
在终端中运行
# 1. Clone repository
git clone https://github.com/stickerdaniel/linkedin-mcp-server
cd linkedin-mcp-server
# 2. Install UV package manager (if not already installed)
curl -LsSf https://astral.sh/uv/install.sh | sh
# 3. Install dependencies
uv sync
uv sync --group dev
# 4. Install pre-commit hooks
uv run pre-commit install
# 5. Start the server
uv run -m linkedin_mcp_server
设置帮助
🔧 配置
CLI 选项
会话:
--login- 打开浏览器登录并保存会话--import-from-browser [BROWSER]- 重用本地已登录的 Chromium 浏览器会话(chrome、chromium、brave、edge、arc、vivaldi、helium、yandex、whale、coccoc、opera、opera_gx、auto)。单独使用该选项时会选择auto,即最近使用且拥有有效 LinkedIn 会话的浏览器。--auto-import/--no-auto-import- 在首次需要会话的工具调用时,从已登录的本地浏览器导入会话,然后再回退到手动登录(默认:开启)。在 Docker、使用代理以及 HTTP 绑定地址非回环地址时会跳过。在 macOS 上,钥匙串可能会提示一次。--status- 检查已存储的会话是否有效,然后退出--logout- 清除已存储的会话--user-data-dir PATH- 浏览器配置目录(默认:~/.linkedin-mcp/profile)。轮换或清除会话时会删除此目录及其父目录,其中保存着 Cookie 和派生配置文件。--claim-profile-root- 接管服务不会自动认领的配置目录,例如其父目录中已有其他文件的目录。每个目录只需执行一次。
传输:
--transport {stdio,streamable-http}- 强制指定传输模式(默认:stdio)--host HOST/--port PORT/--path PATH- HTTP 服务地址(默认值:127.0.0.1、8000、/mcp)
超时:
--timeout MS- 单个页面操作的超时时间(默认值:5000)--tool-timeout SECONDS- 整个工具调用的超时时间(默认值:180)。如果调用会读取很多页面、网络较慢或浏览器处于冷启动状态,请调高此值。--login-timeout SECONDS- 登录浏览器等待你完成登录的时长(默认值:1800;0 = 不限时)。无论如何,--login-viewer都会在 30 分钟后结束会话。--login-inline-wait SECONDS- 工具调用等待登录完成、然后提示模型重试的时长(默认值:25,最大值:45;0 = 立即返回)
共享浏览器:
--browser-wait SECONDS- 等待其他服务进程移交共享浏览器的时长(默认值:25,最大值:45;0 = 立即报告浏览器正忙)。仅在多个 MCP 客户端同时运行时生效。--browser-min-hold SECONDS- 此进程移交共享浏览器前保留浏览器的最短时长(默认值:20)。此值会限制在比--browser-wait少 3 秒以内,因此调高此值时也要相应调高前者。值越高,浏览器重启次数越少,但其他客户端的等待时间越长。--browser-idle-timeout SECONDS- 在这么长时间没有工具调用后,关闭空闲浏览器并释放配置文件(默认值:600;0 = 保持开启)
浏览器:
--no-headless- 显示浏览器窗口(便于调试)--slow-mo MS- 浏览器操作之间的延迟(默认值:0,便于调试)--viewport WxH- 视口尺寸(默认值:1280x720)。仅适用于无窗口模式;有窗口启动时使用实际窗口尺寸。--chrome-path PATH- Chrome/Chromium 可执行文件的路径--installer-temp-dir PATH- 浏览器安装临时文件所在的现有目录(环境变量:INSTALLER_TEMP_DIR)。--proxy-server URL- 通过代理转发浏览器流量,格式为scheme://host:port。请在--login之前设置;参见使用代理。
其他:
--log-level {DEBUG,INFO,WARNING,ERROR}- 日志级别(默认值:WARNING)--help- 显示帮助
注意: 大多数 CLI 选项都有对应的环境变量。详情请参阅
.env.example。
HTTP 模式和 Claude Desktop
HTTP 模式示例(适用于基于 Web 的 MCP 客户端):
uv run -m linkedin_mcp_server --transport streamable-http --host 127.0.0.1 --port 8000 --path /mcp
Claude Desktop:
{
"mcpServers": {
"mcp-server-linkedin": {
"command": "uv",
"args": ["--directory", "/path/to/linkedin-mcp-server", "run", "-m", "linkedin_mcp_server"]
}
}
}
此配置默认使用 stdio。
❗ 故障排除
登录问题
- 确保同一时间只有一个活跃的 LinkedIn 会话
- 使用
--login时,LinkedIn 可能要求你在 LinkedIn 移动应用中确认登录 - 登录期间,LinkedIn 可能会显示验证码挑战。
--login命令会打开浏览器,你可以在其中手动完成验证。
工具问题
- 如果工具返回的数据有误或缺失,请使用
--no-headless观察浏览器 - 添加
--log-level DEBUG以查看更详细的日志
会话问题
- 浏览器配置文件存储在
~/.linkedin-mcp/profile/ - 受管理的浏览器下载文件缓存在
~/.linkedin-mcp/patchright-browsers/,并由uvx和 MCP Bundle 安装共享 - 浏览器缓存不断增大:只要已安装的任何版本仍引用旧版 Chromium,Patchright 就会保留该版本;
uv归档或另一个工作树都可能构成此类引用。服务会记录一条警告,指出占用缓存的对象。若要释放空间,请停止所有 LinkedIn MCP Server 实例,删除~/.linkedin-mcp/patchright-browsers/,然后让下次启动下载当前浏览器。 - 使用
--logout清除配置文件并重新开始
Python/Patchright 问题
- 检查 Python 版本:
python --version(应为 3.12.4+) - 重新安装 Patchright:
uv run patchright install chromium - 重新安装依赖项:
uv sync --reinstall
超时问题
- *页面操作失败*(未找到元素、导航卡住):增大浏览器页面操作超时:`--timeout 10000` 或 `TIMEOUT=10000`(单位为毫秒,默认值为 5000)。 - *整个工具调用超时*(例如多章节个人资料、Chromium 冷启动、容器运行缓慢):增大每个工具的执行超时:`--tool-timeout 300` 或 `TOOL_TIMEOUT=300`(单位为秒,默认值为 180)。 - *没有会话时进行首次工具调用*:如果本地已登录的浏览器中有有效的 LinkedIn 会话,服务会自动导入该会话(参见 `AUTO_IMPORT_FROM_BROWSER` / `--auto-import`),而不是强制要求手动登录。在 macOS 上,钥匙串可能会提示一次,要求访问 Safe Storage。如果没有可导入的浏览器会话,则会打开登录窗口,并等待最多 `LOGIN_INLINE_WAIT` 秒(默认值为 25 秒,最大值为 45 秒;`--login-inline-wait`),以便快速登录能在一次调用中完成。如果等待时间结束,工具会返回待处理信号,模型会在大约 30 秒后重试。在 Docker 环境下或服务绑定到非回环 HTTP 主机时,不会执行自动导入或内联等待。请在主机上使用 `--login` 创建会话,或使用明确的 Docker `--login --login-viewer` 命令。 - 网络连接较慢的用户可能需要调高这两项中的任一值。已经执行过 --login,却仍被要求在主机上运行它
- 如果工具调用在一台并非容器的机器上返回“Docker 中没有有效的 LinkedIn 会话”,则运行时检测有误。这种情况曾发生在运行 Docker 守护进程以提供其他服务的 Linux 主机上。设置
LINKEDIN_MCP_CONTAINER=false可覆盖检测结果;设置为true则会强制采用相反的结果。
自定义 Chrome 路径
- 如果 Chrome 安装在非标准位置,请使用
--chrome-path /path/to/chrome - 也可以通过环境变量设置:
CHROME_PATH=/path/to/chrome - 在 macOS 和 Linux 上,浏览器版本必须不低于上次打开你的个人资料时使用的版本,否则服务会拒绝启动。(Windows 上不会进行此检查:在那里无法在不启动浏览器的情况下查询其版本。)较旧的浏览器可能会悄悄丢弃由较新浏览器写入的数据,其中包括已保存的会话,导致的问题看起来与登录过期完全相同。提示信息会显示两个版本。使用较新版本的 Chrome 运行过一次后,通常只需再次运行那个较新的浏览器,或运行
--login;后者会将已存储的会话移至一旁,并使用你当前的浏览器重新登录。--logout也会清除会话,但会丢弃旧会话,而不会保留以供恢复;它还会要求在终端中确认,因此无法用于由 MCP 客户端启动的服务端。 - 此版本比较仅适用于 Chrome、Chromium 和 Chrome for Testing。其他衍生浏览器的版本号规则各不相同(Vivaldi 使用 7.x,Edge 的构建号在相同主版本下远低于 Chrome),因此将
CHROME_PATH指向这类浏览器会关闭版本检查,而不是导致无法通过的拒绝启动。
重要
常见问题
使用这个工具安全吗?我会被封号吗? 这个工具会控制真实的浏览器会话;它不会利用未公开的 API,也不会绕过身份验证。LinkedIn 的《用户协议》禁止自动访问,使用自动化工具的账号可能会受到限制或被封禁。使用风险由你自行承担;无法保证账号安全。如果你遇到任何问题,请在 Discussions 中告知我。
如果我的 Agent 执行了太多操作,该怎么办? 工具调用会通过队列按顺序执行。你需要自行负责控制自动化操作的数量;请谨慎使用,并妥善提示你的 Agent。
贡献者
感谢所有贡献代码、提交错误报告和修复问题的人。
致谢
本项目使用 FastMCP 和 Patchright 构建。
使用时请遵守 LinkedIn 用户协议。自动化访问可能违反 LinkedIn 的条款,并导致账号受到限制。本工具仅供个人使用,不提供任何形式的担保。
许可证
本项目采用 Apache 2.0 许可证。
欢迎基于本项目进行构建!条款请参阅许可证,署名信息请参阅 NOTICE。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。