linkedin-mcp-server
MCP 协议 LinkedIn 数据工具,让 AI 助手直接查询人才、公司、职位信息
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
MCP 协议 LinkedIn 数据工具,让 AI 助手直接查询人才、公司、职位信息
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象这样一个场景:你是一名招聘猎头,每天要在 LinkedIn 上搜索几十位候选人,手动复制粘贴简历信息到表格里——重复、机械、容易出错。或者你是一名销售,需要追踪某家目标公司的员工动态,却只能一次次刷新页面等待更新。现在,有了一个工具,可以让 AI 助手直接帮你完成这些操作:搜索人才、获取公司主页、抓取职位列表,所有结果以结构化 JSON 返回给 AI 处理。这就是 LinkedIn MCP Server——一个将 LinkedIn 数据接入 AI 工作流的桥梁工具。
LinkedIn 是全球最大的职业社交平台,汇集了超过 9 亿用户的企业信息、人才简历、职位动态。然而,LinkedIn 官方并未开放免费的高质量 API(其 Sales Navigator API 面向企业客户且价格不菲),这使得开发者和技术团队难以系统性地获取这些数据。
传统的解决方案要么依赖付费第三方数据服务,要么使用无头浏览器(Headless Browser)自行爬取——后者往往需要处理反爬机制、登录验证、IP 限制等繁琐问题,代码维护成本极高。
LinkedIn MCP Server 的出现解决了一个关键痛点:它基于 Model Context Protocol(MCP),这是由 Anthropic 主推的一种标准化 AI 工具接口协议。通过 MCP,AI 助手(如 Claude Desktop、Cursor 等)可以像调用函数一样调用 LinkedIn 数据查询工具,而无需关心底层的浏览器自动化和网页解析逻辑。

图1:LinkedIn MCP Server 工作原理——AI 客户端通过 MCP 协议调用服务器工具,服务器驱动 Patchright 浏览器完成 LinkedIn 数据抓取。
翻开 src/linkedin_mcp_server/ 目录结构,你会发现这个项目的代码组织方式值得细品。作者采用了经典的 六边形架构(Hexagonal Architecture / Ports & Adapters),各层职责边界非常干净:
| 层级 | 目录 | 职责 |
|---|---|---|
| Domain | domain/ | 领域模型(Person、Company、Job)、异常定义、解析器 |
| Ports | ports/ | 接口抽象(BrowserPort、AuthPort、ConfigPort) |
| Adapters - Driven | adapters/driven/ | Patchright 浏览器适配器、认证适配器、环境配置 |
| Adapters - Driving | adapters/driving/ | FastMCP 服务器、CLI 入口、工具注册、序列化 |
| Application | application/ | 用例编排(爬取/搜索人才、公司、职位) |
这种架构的最大好处是可测试性和可替换性。例如,你想把 Patchright 换成 Playwright,只需要实现一个新的 BrowserPort 适配器,而不需要改动任何业务逻辑。Container 类(依赖注入容器)是整个系统的「接线员」,它把所有端口和适配器装配在一起,是代码中唯一一处直接引用具体实现类的地方——完美遵循了依赖倒置原则。
项目的技术选型非常务实,每一个依赖都有明确的用途:
FastMCP 是这个项目的核心框架。它是 Prefect 团队开源的 MCP 服务器实现,比原生 MCP SDK 提供了更友好的工具注册 API(@mcp.tool 装饰器)、生命周期管理(lifespan 上下文管理器)和错误处理机制。作者用它将所有用例注册为 MCP 工具,mcp_server.py 中的 create_mcp_server() 函数是整个驱动的入口。
Patchright 是 Playwright 的社区 fork,由安全研究员维护,专门针对反爬场景做了加固。它保留了 Playwright 完整的浏览器自动化能力(多标签页、会话持久化、UA 伪装等),同时对 LinkedIn 这类强反爬网站有更好的兼容性。项目通过 PatchrightBrowserAdapter 将浏览器生命周期封装成 BrowserPort 接口。
BeautifulSoup4 + lxml 负责 HTML 解析。作者将解析逻辑放在了 domain/parsers/ 目录下,按实体类型(person、company、job、search、common)拆分成独立模块。每个解析器都是纯函数,输入 HTML(或 BeautifulSoup 的 Tag 对象),输出 Pydantic 模型。这种设计让解析规则与抓取逻辑完全解耦,测试时可以直接传入 HTML 字符串而不需要启动浏览器。

图2:作者 Elias Biondo — Founding Engineer @ Alia,专注于计算机科学与 AI 工具开发。
项目目前提供 4 大类共 9 个 MCP 工具,涵盖了 LinkedIn 上最常用的数据查询场景:
人才搜索类:get_person_profile 和 search_people。前者通过 LinkedIn 用户名直接拉取个人主页,支持分节精细化抓取(Experience、Education、Contact Info、Posts 等 8 个维度),后者支持关键词+地点的自由搜索。
公司信息类:get_company_profile 和 get_company_posts。公司主页抓取包括 About、Website、Industry、Size、Headquarters 等核心字段;公司动态抓取返回带互动数据(点赞/评论数)的帖子列表。
职位查询类:get_job_details 和 search_jobs。职位搜索支持丰富的过滤条件:发布时间(过去1小时/24小时/一周/一月)、工作类型(全职/兼职/合同制/实习)、经验级别、办公方式(onsite/remote/hybrid),甚至「Easy Apply」标记。
会话管理类:close_browser 用于清理浏览器实例,避免资源泄漏。
部署这个项目对有 Python 经验的开发者来说几乎没有门槛。核心依赖只有两样:Python 3.12+ 和 uv(Astral 出品的极速包管理器,比 pip 快 10-100 倍)。安装步骤拢共三步:git clone、uv sync、uv run patchright install。认证流程通过 uv run linkedin-mcp-server --login 启动一个临时浏览器窗口,扫码/输入账号后登录状态会持久化到 ~/.linkedin-mcp-server/browser-data,无需重复认证。
服务支持两种传输模式:stdio(默认,面向 Claude Desktop / Cursor 等本地 AI 客户端)和 streamable-http(面向远程访问,支持 --host / --port 自定义)。配合 Claude Desktop 使用时,只需在 MCP 配置文件中添加一行 uv 命令即可。
必须坦诚地说,这个项目存在几个不可忽视的限制:
账号风险:LinkedIn 对自动化访问有严格的反爬策略,频繁使用可能导致账号被封禁。作者在代码中做了认证缓存和 cookie 管理来降低风险,但无法完全消除这一隐患——这是所有 LinkedIn 爬虫工具的共同困境。
数据完整性:由于完全依赖页面解析而非 API,项目对 LinkedIn 页面结构变化非常敏感。LinkedIn 偶尔会改版,CSS 类名和 DOM 结构调整后,解析器可能失效,需要手动修复 domain/parsers/ 下的代码。
非 AI/ML 项目:这个项目本质上是一个「给 AI 用的数据采集工具」,而不是 AI/ML 模型本身。它不训练、不推理、不生成内容,但它能显著扩展 AI 助手的信息获取边界——从这个角度看,它与 AI 生态的结合程度其实很深。
截至目前,GitHub 上已有超过 150 个 stars(还在持续增长),这个数字在 MCP 相关工具中已经相当可观。更值得关注的是其背后的趋势:随着 MCP 协议被 OpenAI、Anthropic、Google 等主要 AI 厂商广泛支持,「AI 工具即插即用」的生态正在快速成熟。LinkedIn MCP Server 正是这个生态中,针对职业数据这一垂直场景的代表性实现。
它证明了:通过标准化的协议接口,AI 助手可以安全、可控地访问传统上需要人工操作的网页数据,而不需要给 AI 开放「浏览器控制权」——这种「结构化数据提取」而非「全页面截图」的思路,对企业级 AI 应用有重要参考价值。
如果你正在构建招聘 SaaS、销售情报工具或 AI 驱动的 HR 产品,这个项目值得放入你的技术参考栈。即使不做直接集成,其代码结构(依赖注入、六边形架构、工具注册模式)也值得借鉴。
作者主页:https://github.com/eliasbiondo | 协议:MIT License