关于 Mcp Linkedin
Mcp Linkedin 是一个 MCP 服务,供 AI 助手通过 Unipile 向 LinkedIn 发布内容。它支持帖子、评论、反应和媒体附件,发布操作默认先预览再执行。
主要功能
- 01创建帖子、评论和反应
- 02发布操作默认先预览
- 03附加图片和视频媒体
- 04解析公司 @提及
- 05校验媒体文件
适用场景
- 01发布前检查 LinkedIn 帖子
- 02发布带图片或视频的帖子
- 03评论或回应 LinkedIn 帖子
MCP 相关
该服务通过 stdio 向 MCP 客户端提供 LinkedIn 发布、评论和反应工具,并调用 Unipile API 执行操作。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
mcp-linkedin
一个 MCP 服务,让 AI 助手代表你在 LinkedIn 上发布内容。
功能
这是一个 Model Context Protocol(MCP)服务,它封装了 Unipile API,让 AI 助手(Claude Code、Claude Desktop 或任何兼容 MCP 的客户端)能够在 LinkedIn 上创建帖子、评论和回应。AI 负责撰写内容;此工具负责发布。所有发布操作默认处于预览模式,未经明确确认,内容不会正式发布。
特性
- 3 个工具:发布、评论、回应
- 默认试运行(发布前预览)
- 发布后立即自动点赞
- 媒体附件(本地文件或 URL——图片和视频)
- 公司 @提及(通过 Unipile 自动解析)
- 适用于 Claude Code、Claude Desktop 和任何 MCP 客户端
前提条件
- Node.js 18+——使用 ES 模块、
node:test和顶层 await - Unipile 账户——Unipile 是连接 LinkedIn API 的服务。注册、连接你的 LinkedIn 账户,并从控制面板获取 API 密钥和 DSN。
安装
git clone https://github.com/timkulbaev/mcp-linkedin.git
cd mcp-linkedin
npm install
配置
Claude Code
添加到 ~/.claude/mcp.json:
{
"mcpServers": {
"linkedin": {
"command": "node",
"args": ["/absolute/path/to/mcp-linkedin/index.js"],
"env": {
"UNIPILE_API_KEY": "your-unipile-api-key",
"UNIPILE_DSN": "apiXX.unipile.com:XXXXX"
}
}
}
}
Claude Desktop
添加到 ~/Library/Application Support/Claude/claude_desktop_config.json(macOS):
{
"mcpServers": {
"linkedin": {
"command": "node",
"args": ["/absolute/path/to/mcp-linkedin/index.js"],
"env": {
"UNIPILE_API_KEY": "your-unipile-api-key",
"UNIPILE_DSN": "apiXX.unipile.com:XXXXX"
}
}
}
}
编辑配置后,重启 Claude Code 或 Claude Desktop。
环境变量
| 变量 | 必填 | 说明 |
|---|---|---|
UNIPILE_API_KEY | 是 | 你的 Unipile API 密钥(来自 Unipile 控制面板) |
UNIPILE_DSN | 是 | 你的 Unipile DSN(例如 api16.unipile.com:14648) |
这些变量通过 MCP 配置传递,而不是通过 .env 文件传递。服务启动时会从 process.env 读取它们。
工具
linkedin_publish
创建一条原创 LinkedIn 帖子。
dry_run 默认为 true。 先调用 dry_run: true 获取预览,然后再次调用 dry_run: false 才会实际发布。
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
text | string | 是 | — | 帖子正文,最多 3000 个字符 |
media | string[] | 否 | [] | 本地文件路径或 URL(jpg、png、gif、webp、mp4) |
mentions | string[] | 否 | [] | 要 @提及的公司名称(自动解析) |
dry_run | boolean | 否 | true | 仅预览,不发布 |
预览响应(dry_run: true):
{
"status": "preview",
"post_text": "Hello LinkedIn!",
"character_count": 16,
"character_limit": 3000,
"media": [],
"mentions": [],
"warnings": [],
"ready_to_publish": true
}
发布响应(dry_run: false):
{
"status": "published",
"post_id": "7437514186450104320",
"post_text": "Hello LinkedIn!",
"posted_at": "2026-03-11T15:06:04.849Z",
"auto_like": "liked"
}
发布后,保存 post_id 并构造帖子 URL:
https://www.linkedin.com/feed/update/urn:li:activity:{post_id}/
linkedin_comment
在现有 LinkedIn 帖子上发表评论。
dry_run 默认为 true。
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
post_url | string | 是 | — | LinkedIn 帖子 URL 或原始 URN(urn:li:activity:... 或 urn:li:ugcPost:...) |
text | string | 是 | — | 评论文本 |
dry_run | boolean | 否 | true | 预览,不发布 |
linkedin_react
回应 LinkedIn 帖子。此操作会立即执行——没有 dry_run。
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
post_url | string | 是 | — | LinkedIn 帖子 URL 或原始 URN |
reaction_type | string | 否 | "like" | 可选值:like、celebrate、support、love、insightful、funny |
工作原理
┌──────────────────────────────────┐
│ mcp-linkedin │
AI Assistant ──► │ │
(via MCP stdio) │ Posts/Comments/Reactions ──► Unipile API ──► LinkedIn
└──────────────────────────────────┘
- AI 助手通过 MCP 的 JSON-RPC 协议,使用 stdio 调用工具
- 调用 Unipile API,由其处理 LinkedIn OAuth——无需管理令牌
安全发布工作流
dry_run 默认值用于防止意外发布。预期流程如下:
- AI 使用
dry_run: true(默认值)调用工具 - 查看预览:最终文本、字符数、媒体验证结果、解析后的提及和警告
- 确认或要求修改
- AI 再次调用,并设置
dry_run: false - 帖子正式发布
dry_run 默认为 true。AI 必须明确将其设置为 false 才能发布,而这需要先完成预览步骤。
媒体处理
- 传入本地文件路径(
/path/to/image.jpg)或 URL(https://example.com/img.png) - URL 会下载到
/tmp/mcp-linkedin-media/,并在发布后清理(无论发布成功还是失败) - 支持的格式:jpg、jpeg、png、gif、webp(图片)和 mp4(视频)
- 每个文件都会在上传前验证:文件必须存在、非空且类型受支持
- 验证失败的文件会显示在预览的
media数组中,并带有"valid": false和错误消息
公司 @提及
- 以字符串形式传入公司名称:
mentions: ["Microsoft", "OpenAI"] - 服务会将每个名称转换为 slug,并通过 Unipile 的 LinkedIn 公司搜索进行查找
- 已解析的公司会作为
{{0}}、{{1}}占位符插入帖子文本中 — LinkedIn 会将这些内容显示为可点击的 @提及 - 如果公司名称出现在帖子文本中,则会在原位置替换;否则会追加占位符
- 未能解析的名称会作为警告显示在预览中。仍可在不包含这些名称的情况下发布帖子。
测试
npm test # 28 unit tests, zero extra dependencies (Node.js built-in test runner)
npm run lint # Biome linter
项目结构
mcp-linkedin/
index.js Entry point (stdio transport)
package.json
src/
server.js MCP server and tool registration
unipile-client.js Unipile API wrapper (posts, comments, reactions)
media-handler.js URL download and file validation
tools/
publish.js linkedin_publish handler
comment.js linkedin_comment handler
react.js linkedin_react handler
tests/
unit.test.js 28 unit tests
获取 Unipile 账户
- 注册 Unipile 账户
- 在控制面板中连接 LinkedIn 账户
- 从控制面板设置中复制 API 密钥和 DSN
- 将它们粘贴到 MCP 配置中(见上文的配置部分)
Unipile 提供免费套餐,可满足基本使用需求。
许可证
MIT — 详见 LICENSE。
致谢
由 Timur Kulbaev 构建。使用 Anthropic 的 Model Context Protocol 和 Unipile API。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。