linkedin-safe-mcp
linkedin-safe-mcp
一个 MCP 服务器,为 AI 代理(Claude Code、Codex、Claude Desktop、Cursor 等)提供 LinkedIn 超能力——同时不会让你的 LinkedIn 账号面临风险:
发布到 LinkedIn ——通过 LinkedIn 的官方 API(OAuth,符合服务条款)发布文本、链接和图片,此外还支持评论和点赞。
搜索职位 ——通过 LinkedIn 的公开访客端点使用关键词/地点/远程/经验/日期筛选。无需登录,无需 cookie:你的账号完全不参与。
管理求职流程 ——一个本地 SQLite 申请跟踪器(感兴趣 → 已申请 → 面试中 → 录用),带有备注和每个职位的发布快照,因此即使职位发布被撤下,代理也能管理你的管道并撰写量身定制的求职信。
为什么这样设计?
LinkedIn 没有官方的职位搜索 API,而非官方途径(使用你的 li_at 会话 cookie 的 Voyager 内部 API、在你已登录会话上运行无头浏览器)违反了 LinkedIn 用户协议 §8.2,并且经常导致账号被限制。这个服务器刻意在两者之间取得平衡:
关注点 | 处理方式 | 账号风险 |
发布、评论、点赞 | 官方 REST API,你自己的 OAuth 应用, | 无——官方认可 |
职位搜索与详情 | 访客端点(未登录的职位页面),按 IP 限流 | 无——不涉及任何凭据 |
管道跟踪 | 你机器上的本地 SQLite | 无——绝不接触 LinkedIn |
Easy Apply、私信、信息流阅读 | 刻意不包含——没有违反服务条款的访问方式就无法实现 | — |
环境要求
Python 3.11+ 和 uv
仅发布功能需要:一个免费的自助式 LinkedIn 开发者应用(下方 5 分钟设置)。职位搜索和跟踪器零设置即可使用。
安装并连接到你的代理
克隆/复制此目录,然后将其注册到你的 MCP 客户端。下面的 <REPO> 是此项目的绝对路径。
Claude Code
claude mcp add linkedin \
--env LINKEDIN_CLIENT_ID=your_client_id \
--env LINKEDIN_CLIENT_SECRET=your_client_secret \
-- uv run --directory <REPO> linkedin-safe-mcp或者在项目的 .mcp.json 中:
{
"mcpServers": {
"linkedin": {
"command": "uv",
"args": ["run", "--directory", "<REPO>", "linkedin-safe-mcp"],
"env": {
"LINKEDIN_CLIENT_ID": "your_client_id",
"LINKEDIN_CLIENT_SECRET": "your_client_secret"
}
}
}
}Codex(~/.codex/config.toml)
[mcp_servers.linkedin]
command = "uv"
args = ["run", "--directory", "<REPO>", "linkedin-safe-mcp"]
env = { LINKEDIN_CLIENT_ID = "your_client_id", LINKEDIN_CLIENT_SECRET = "your_client_secret" }Claude Desktop(claude_desktop_config.json)——与上面的 .mcp.json 具有相同的 JSON 结构。
LINKEDIN_CLIENT_* 变量仅发布功能需要;如果你只需要职位搜索和跟踪,可以省略它们。
启用发布功能(一次性 LinkedIn 应用设置)
前往 https://www.linkedin.com/developers/apps → 创建应用(需要关联任意 LinkedIn 主页;你可以创建一个简单的)。
在应用的 Products 标签页中,添加 Share on LinkedIn 和 Sign In with LinkedIn using OpenID Connect。
在 Auth 标签页中,添加重定向 URL
http://localhost:8765/callback。将 Client ID 和 Client Secret 复制到上面显示的 env 变量中。
进行一次身份验证——两种方式都可以:
在终端中:
uv run --directory <REPO> linkedin-safe-mcp auth或者直接让你的代理发布一些内容;它会调用
login工具并把授权 URL 交给你。
令牌存储在 ~/.linkedin-mcp/tokens.json(权限 0600)中,有效期约 60 天;LinkedIn 不会为自助式应用签发刷新令牌,因此到期后你需要重新运行登录(auth_status 会准确告诉代理何时到期)。
工具
工具 | 需要认证 | 功能 |
| – | 报告配置/认证状态,并给出确切的后续步骤 |
| – | 浏览器 OAuth 流程 / 删除已存储的令牌 |
| ✓ | 已连接账号的姓名、电子邮件、person URN |
| ✓ | 发布帖子:文本(+话题标签),可选链接或本地图片; |
| ✓ | 删除你自己的帖子(URN 或帖子 URL) |
| ✓ | 评论帖子(URN 或帖子 URL) |
| ✓ | 点赞帖子(URN 或帖子 URL) |
| – | 筛选条件:地点、远程/混合/现场、发布时间、经验级别、职位类型、仅限 Easy Apply、排序;最多 50 条结果 |
| – | 完整职位发布:描述、资历、类型、薪资(如有列出)、申请人数、外部申请 URL |
| – | 将职位快照保存到本地跟踪器 |
| – | 单个职位及历史记录 / 管道概览及状态计数 |
| – | 感兴趣 → 已申请 → 面试中 → 录用 / 已拒绝 / 已撤回 / 已归档,并附备注 |
| – | 添加备注 / 删除职位 |
代理可以用它做这些事情:“查找本周发布的远程 staff-engineer 职位,保存有潜力的,根据保存的职位描述撰写量身定制的求职信,标记我已申请的职位,并发布我开源工作的摘要。”
配置
环境变量 | 默认值 | 用途 |
| – | LinkedIn 应用凭据(仅发布功能) |
|
| 令牌和跟踪器数据库的存放位置 |
|
| OAuth 回调端口(必须与应用的重定向 URL 匹配) |
|
|
|
|
|
|
| 一个 Chrome UA | 用于访客职位请求的 UA |
行为说明与限制
发布:LinkedIn 将成员发布限制为每天 150 次请求,并拒绝最近帖子的完全重复内容(422)。帖子文本中的保留字符会自动转义以适配版本化 API,因此括号不会导致错误;话题标签会被保留。
职位搜索:访客端点按 IP 限流(HTTP 429)。服务器会缓存结果(搜索 10 分钟 / 职位详情 6 小时),使用退避重试,并控制多页获取的节奏;如果持续收到 429,它会向代理返回一个明确的“请稍等一分钟”错误。请保持
limit适度。抓取姿态:访客职位搜索以接近人类的速度读取与未登录访客看到的相同的公共页面,并通过缓存尽量减少负载。不过,LinkedIn 随时可能更改或限制这些端点——解析器由 fixture 测试固定,因此一旦出现问题会大声报错,工具错误也始终可供代理采取行动。
开发
uv sync # install deps (Python ≥3.11)
uv run pytest # 48 tests: parsers vs live fixtures, payloads, OAuth, tracker,
# plus an end-to-end stdio smoke test that spawns the real server
uv run ruff check src tests && uv run ruff format --check src tests布局:src/linkedin_mcp/ —— server.py(工具表面)· api/(官方 REST:帖子、社交操作、上传、双 rest/ugc 后端)· auth/(OAuth + 令牌存储)· jobs/(访客客户端、HTML 解析器、筛选映射)· tracker/(SQLite 存储)· cli.py(serve | auth | status | logout)。
路线图
发布到 PyPI(
uvx linkedin-safe-mcp一行命令)点赞之外的反应类型;多图帖子;投票帖子
在同一工具模式后面提供可选的第三方职位数据提供商
用于远程/托管使用的
streamable-http传输(已考虑,仅限选择加入,默认关闭)基于 cookie 的 Voyager 提供商,用于个性化功能——并带有强烈警告,因为它违反 LinkedIn 的服务条款
许可证
MIT
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Managed LinkedIn MCP server for AI agents: search, connect, message and enrich on accounts you own.
MCP server for LeadDelta — manage LinkedIn connections and CRM data via AI assistants.
GetJobzi MCP server for job search, application tracking, and career forecasting.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/AmmYoo7/linkedin-safe-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server