关于 LinkedIn Model Context Protocol (MCP) Server
LinkedIn MCP Server 是一个基于官方 MCP Python SDK(FastMCP)构建的 MCP 服务,允许 AI 助手搜索职位、查看资料与公司信息,并生成简历、求职信和管理投递记录。适合求职者使用,AI 功能为可选。
主要功能
- 01职位搜索与详情查询
- 02个人资料与公司信息获取
- 03AI 辅助生成简历与求职信
- 04本地投递记录追踪
- 05支持 HTML、Markdown 与 PDF 输出
适用场景
- 01按关键词与地点筛选远程职位
- 02根据目标职位定制简历
- 03为特定职位生成个性化求职信
- 04跟踪各阶段的求职申请状态
MCP 相关
该项目是一个 MCP 服务,通过 13 个工具和 1 个资源向 MCP 客户端暴露 LinkedIn 职位、资料、文档生成及投递追踪功能。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
LinkedIn MCP 服务
一款 MCP 服务,让 AI 助手全面访问 LinkedIn——搜索职位、查看个人资料和公司信息、生成 AI 驱动的简历和求职信,并跟踪求职申请。使用 官方 MCP Python SDK(FastMCP)构建。
功能
| 类别 | 功能 |
|---|---|
| 职位搜索 | 使用筛选条件搜索(关键词、地点、职位类型、经验级别、远程、发布时间),获取职位详情和推荐 |
| 个人资料与公司 | 获取任意 LinkedIn 个人资料或公司主页,借助 AI 分析个人资料并提供优化建议 |
| 简历生成 | 根据 LinkedIn 个人资料生成简历,为特定职位定制简历,内置 3 种模板 |
| 求职信 | 为每个职位生成个性化 AI 求职信,内置 2 种模板 |
| 求职申请跟踪 | 在本地跟踪求职申请及状态工作流(感兴趣 → 已申请 → 面试中 → 已录用/已拒绝/已撤回) |
| 输出格式 | HTML、Markdown 和 PDF(通过 WeasyPrint) |
快速开始
1. 安装
# Core installation
pip install -e .
# With AI features (resume/cover letter generation, profile analysis)
pip install -e ".[ai]"
# With PDF export
pip install -e ".[pdf]"
# Everything
pip install -e ".[all]"
2. 配置
cp .env.example .env
编辑 .env 并填写你的凭据:
[email protected]
LINKEDIN_PASSWORD=your_password
ANTHROPIC_API_KEY=sk-ant-... # Optional — enables AI features
3. 运行
独立运行:
linkedin-mcp
使用 Claude Desktop — 添加到你的 claude_desktop_config.json:
{
"mcpServers": {
"linkedin": {
"command": "linkedin-mcp"
}
}
}
使用 Claude Code — 添加到 .mcp.json:
{
"linkedin": {
"command": "linkedin-mcp"
}
}
工具参考
职位工具(3 个)
| 工具 | 参数 | 描述 |
|---|---|---|
search_jobs | keywords、location、job_type、experience_level、remote、date_posted、page、count | 使用丰富的筛选条件搜索 LinkedIn 职位 |
get_job_details | job_id | 获取职位的完整描述、技能要求和元数据 |
get_recommended_jobs | count | 获取个性化职位推荐 |
个人资料工具(3 个)
| 工具 | 参数 | 描述 |
|---|---|---|
get_profile | profile_id | 获取 LinkedIn 个人资料(自己的资料使用 "me")——工作经历、教育背景、技能 |
get_company | company_id | 获取公司信息——描述、规模、总部所在地、专长领域 |
analyze_profile | profile_id | 借助 AI 审阅个人资料并提供可执行的优化建议 |
文档生成工具(4 个)
| 工具 | 参数 | 描述 |
|---|---|---|
generate_resume | profile_id、template、output_format | 根据 LinkedIn 个人资料生成简历 |
tailor_resume | profile_id、job_id、template、output_format | 为特定职位定制简历 |
generate_cover_letter | profile_id、job_id、template、output_format | 为职位撰写个性化求职信 |
list_templates | template_type | 列出可用模板(resume、cover_letter 或 all) |
模板: modern · professional · minimal(简历)| professional · concise(求职信)
格式: html · md · pdf
求职申请跟踪工具(3 个)
| 工具 | 参数 | 描述 |
|---|---|---|
track_application | job_id、job_title、company、status、notes、url | 开始跟踪求职申请 |
list_applications | status | 列出所有已跟踪的求职申请,可按状态筛选 |
update_application_status | job_id、status、notes | 更新求职申请状态 |
状态值: interested · applied · interviewing · offered · rejected · withdrawn
架构
src/linkedin_mcp/
├── server.py # FastMCP entry point — 13 tools, 1 resource
├── config.py # Settings from .env (frozen dataclass)
├── exceptions.py # 7-class exception hierarchy
├── models/
│ ├── linkedin.py # Profile, Job, Company models (Pydantic v2)
│ ├── resume.py # Resume & cover letter content models
│ └── tracking.py # Application tracking model
├── services/
│ ├── linkedin_client.py # LinkedIn API wrapper (async via asyncio.to_thread)
│ ├── job_search.py # Job search with TTL caching
│ ├── profile.py # Profile/company access with caching
│ ├── resume_generator.py # AI-enhanced resume generation
│ ├── cover_letter_generator.py
│ ├── application_tracker.py # Local JSON-based application tracking
│ ├── cache.py # Unified JSON file cache with TTL
│ ├── template_manager.py # Jinja2 sandboxed template engine
│ └── format_converter.py # HTML → PDF/Markdown conversion
├── ai/
│ ├── base.py # Abstract AI provider interface
│ └── claude_provider.py # Anthropic Claude implementation
└── templates/
├── resume/ # modern.j2, professional.j2, minimal.j2
└── cover_letter/ # professional.j2, concise.j2
关键设计决策
- 官方 MCP SDK — 使用
FastMCP和@mcp.tool()装饰器,而不是自定义协议实现 - 全程异步 — 所有同步 LinkedIn API 调用都通过
asyncio.to_thread()包装,避免阻塞 - 分层架构 — 工具 → 服务 → 客户端,缓存位于服务层
- AI 为可选功能 — 核心 LinkedIn 功能无需 Anthropic API 密钥即可使用;AI 可增强简历和求职信的生成效果
- 强化安全性 — Jinja2
SandboxedEnvironment、WeasyPrint SSRF 防护、路径遍历防护、凭据脱敏、输入验证
配置
所有设置均从环境变量加载(支持 .env 文件):
| 变量 | 必填 | 默认值 | 说明 |
|---|---|---|---|
LINKEDIN_USERNAME | 是 | — | 你的 LinkedIn 邮箱 |
LINKEDIN_PASSWORD | 是 | — | 你的 LinkedIn 密码 |
ANTHROPIC_API_KEY | 否 | — | 启用 AI 功能(简历和求职信生成、个人资料分析) |
AI_MODEL | 否 | claude-sonnet-4-20250514 | 要使用的 Claude 模型 |
DATA_DIR | 否 | ~/.linkedin_mcp/data | 缓存、跟踪数据和生成文件的目录 |
CACHE_TTL_HOURS | 否 | 24 | LinkedIn API 响应的缓存时长 |
LOG_LEVEL | 否 | INFO | 日志级别(DEBUG、INFO、WARNING、ERROR) |
开发
# Install with all dependencies
pip install -e ".[all,dev]"
# Run tests (82 tests)
pytest
# Run with coverage
pytest --cov=linkedin_mcp
# Lint
ruff check src/ tests/
测试覆盖率
测试涵盖所有层:配置、模型、服务(缓存、跟踪器、职位搜索、个人资料、简历和求职信生成、LinkedIn 客户端格式化器、格式转换器)、AI 提供方和 MCP 工具处理器。
使用示例
连接后,可以向 AI 助手提问:
“搜索美国的远程 Python 开发者职位”
“显示 satyanadella 的个人资料”
“根据我的 LinkedIn 个人资料生成一份针对职位 3847291056 的简历”
“使用简洁模板为职位 3847291056 创建一封求职信”
“跟踪我申请的 Google 高级工程师职位——状态:已申请”
“列出所有处于面试阶段的申请”
“分析我的 LinkedIn 个人资料并提出改进建议”
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。