LinkedIn数据检索服务器

一个用于LinkedIn的模型上下文协议(MCP)服务器,支持搜索人员、公司和职位,抓取个人资料,并从任何MCP兼容的AI客户端检索结构化的JSON数据。

  • by eliasbiondo
  • Python
  • 本地部署
  • 206 星标
  • 更新于
在 GitHub 查看 eliasbiondo/linkedin-mcp-server

使用说明

LinkedIn MCP服务器

A. 模型上下文协议 LinkedIn的MCP服务器。搜索人员、公司和工作,抓取个人资料,并从任何兼容MCP的AI客户端检索结构化JSON数据。

https://github.com/user-attachments/assets/50cd8629-41ee-4261-9538-40dc7d30294e

内置于 FastMCP, Patchright,以及干净的六边形建筑。


特性

类别 工具
人 get_person_profile · search_people
公司 get_company_profile · get_company_posts
工作机会 get_job_details · search_jobs
浏览器 close_browser

个人资料部分

这 get_person_profile 该工具支持颗粒段刮削。仅请求您需要的部分:

  • 主要配置文件 (始终包含)--姓名、标题、位置、关注者、关系、关于、个人资料图片
  • 经验 --标题、公司、日期、持续时间、描述、公司徽标
  • 教育 --学校、学位、日期、描述、学校标志
  • 联系方式 --电子邮件、电话、网站、生日、领英网址
  • 兴趣 --关注的人、公司和团体
  • 荣誉与奖项 --标题、发行人、描述
  • 语言 --语言名称和熟练程度
  • 帖子 --最近的活动,包括反应和时间戳
  • 建议 --收到和给出,以及作者详细信息

公司简介部分

  • 关于 (始终包含)--概述、网站、行业、规模、总部、专业、徽标
  • 帖子 --最近发布的具有参与度指标的feed帖子
  • 工作 --当前空缺职位

职位搜索筛选器

这 search_jobs 该工具支持以下过滤器:

筛选器 值
date_posted past_hour, past_24_hours, past_week, past_month
job_type full_time, part_time, contract, temporary, internship, other
experience_level entry, associate, mid_senior, director, executive
work_type on_site, remote, hybrid
easy_apply true / false
sort_by date, relevance

先决条件

  • Python 3.12或更高版本
  • 紫外线 包管理器
  • 用于身份验证的LinkedIn帐户

快速开始

1.克隆并安装

git clone https://github.com/eliasbiondo/linkedin-mcp-server.git
cd linkedin-mcp-server
uv sync

2.安装浏览器

此项目使用 Patchright (Playwright的一个补丁分支)用于浏览器自动化。首次使用前,您需要安装浏览器二进制文件:

uv run patchright install

Windows用户: 如果上述命令失败 program not found,请改为运行:

uv run python -m patchright install

3.通过LinkedIn进行身份验证

uv run linkedin-mcp-server --login

浏览器窗口将打开。登录LinkedIn,会话将在本地持久化 ~/.linkedin-mcp-server/browser-data.

4.运行服务器

stdio传输 (默认值--适用于Claude Desktop、Cursor和类似客户端):

uv run linkedin-mcp-server

HTTP传输 (对于远程客户端、MCP检查器等):

uv run linkedin-mcp-server --transport streamable-http --host 0.0.0.0 --port 8000

客户端集成

克劳德桌面/光标

添加到MCP配置文件中:

{
  "mcpServers": {
    "linkedin": {
      "command": "uv",
      "args": [
        "--directory", "/path/to/linkedin-mcp-server",
        "run", "linkedin-mcp-server"
      ]
    }
  }
}

MCP检查员

npx @modelcontextprotocol/inspector

然后连接到 http://localhost:8000/mcp 如果使用HTTP传输。


配置

配置遵循严格的优先级链: CLI参数>环境变量> .env 文件>默认值.

CLI参数

参数 描述 默认值
--transport stdio 或 streamable-http stdio
--host HTTP传输主机 127.0.0.1
--port HTTP传输端口 8000
--log-level DEBUG, INFO, WARNING, ERROR WARNING
--headless 在无头模式下运行浏览器 true
--no-headless 显示浏览器窗口(可见模式) --
--login 打开LinkedIn登录浏览器 --
--logout 清除存储的凭据 --
--status 检查会话状态 --

环境变量

创建一个 .env 项目根目录中的文件:

# Server
LINKEDIN_TRANSPORT=stdio
LINKEDIN_HOST=127.0.0.1
LINKEDIN_PORT=8000
LINKEDIN_LOG_LEVEL=WARNING

# Browser
LINKEDIN_HEADLESS=true
LINKEDIN_SLOW_MO=0
LINKEDIN_TIMEOUT=10000
LINKEDIN_VIEWPORT_WIDTH=1280
LINKEDIN_VIEWPORT_HEIGHT=720
LINKEDIN_CHROME_PATH=
LINKEDIN_USER_AGENT=
LINKEDIN_USER_DATA_DIR=~/.linkedin-mcp-server/browser-data

建筑

该项目遵循六边形(端口和适配器)架构,具有严格的层分离:

src/linkedin_mcp_server/
├── domain/              # Core business logic — zero external dependencies
│   ├── models/          # Data models (Person, Company, Job, Search)
│   ├── parsers/         # HTML to structured data parsers
│   ├── exceptions.py    # Domain exceptions
│   └── value_objects.py # Immutable configuration and content objects
├── ports/               # Abstract interfaces
│   ├── auth.py          # Authentication port
│   ├── browser.py       # Browser automation port
│   └── config.py        # Configuration port
├── application/         # Use cases — orchestration layer
│   ├── scrape_person.py
│   ├── scrape_company.py
│   ├── scrape_job.py
│   ├── search_people.py
│   ├── search_jobs.py
│   └── manage_session.py
├── adapters/            # Concrete implementations
│   ├── driven/          # Infrastructure adapters (browser, auth, config)
│   └── driving/         # Interface adapters (CLI, MCP tools, serialization)
└── container.py         # Dependency injection composition root

设计决策

  • 端口和适配器 --域逻辑与基础设施完全解耦。浏览器引擎、MCP框架和配置源都可以独立交换。
  • 依赖注入 --单身 Container 类充当组合根,是导入具体适配器类的唯一位置。
  • 结构化JSON输出 --LinkedIn HTML被解析为类型化的Python数据类,然后序列化为JSON,以便可靠地使用LLM。
  • 会话持续 --浏览器状态保存到磁盘,因此只需要一次身份验证。

发展

设置

uv sync --group dev
uv run pre-commit install

运行测试

uv run pytest

覆盖范围:

uv run pytest --cov=linkedin_mcp_server

装订和格式化

此项目使用 拉夫 用于linting和格式化。预提交钩子将在每次提交时自动运行这些钩子。

# Lint
uv run ruff check .

# Lint and auto-fix
uv run ruff check . --fix

# Format
uv run ruff format .

许可证

该项目根据MIT许可证获得许可。请参阅 许可证 文件以获取详细信息。


贡献

欢迎捐款。请阅读 贡献指南 有关开发工作流程和提交过程的详细信息。


免责声明

此工具用于个人和教育用途。删除LinkedIn可能会违反其服务条款。负责任地使用,风险自负。作者不对因使用本软件而产生的任何误用或后果负责。