关于 linkedctl
linkedctl 是通过 LinkedIn API 操作平台的命令行工具和 MCP 服务,支持个人及组织内容发布、互动和统计,并提供 OAuth 或令牌认证与多配置档案管理。
主要功能
- 01发布文字、媒体、投票和文章
- 02管理评论与反应
- 03以组织身份发布和互动
- 04查看帖子及组织统计
- 05使用 OAuth 或访问令牌认证
- 06管理多个配置档案
适用场景
- 01向 LinkedIn 发布草稿或媒体帖子
- 02查看帖子的互动统计
- 03管理组织帖子和评论
- 04通过脚本自动执行 LinkedIn 操作
MCP 相关
MCP 服务将 LinkedIn 认证、帖子、评论、反应、组织、统计和媒体操作作为工具提供给 AI 助手。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
22收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| profile | string | 否 | 要使用的配置文件中的个人资料名称 |
详细介绍

用于 LinkedIn API 的 OAuth2 CLI 和 MCP 服务。
功能
- 发布内容 — 文本、图片、视频、文档、文章、多图轮播和投票
- 评论和回应 — 创建、列出和删除帖子的评论和回应
- 组织支持 — 以组织身份发布、评论、回应并查看分析数据
- 分析数据 — 按帖子、成员和组织统计数据
- 媒体上传 — 将图片、视频和文档上传到 LinkedIn
- 帖子草稿 — 将帖子保存为草稿,然后再发布
- 使用自己的 LinkedIn 应用进行 OAuth 2.0 身份验证
- 直接传递令牌,适用于从其他应用获取的令牌
- 用于 AI 助手集成(Claude、Cursor 等)的 MCP 服务
- 用于编写 LinkedIn 操作脚本的 CLI
前置条件
- Node.js >= 24
- 具有相应权限的 LinkedIn Developer App
安装
npm install -g linkedctl
或者直接运行:
npx linkedctl --help
快速开始
- 在 linkedin.com/developers 创建 LinkedIn 应用
- 配置 OAuth 2.0 凭据
- 进行身份验证:
linkedctl auth login --client-id YOUR_CLIENT_ID --client-secret YOUR_CLIENT_SECRET - 开始使用:
linkedctl post "Hello from LinkedCtl!"
请参阅 OAuth 设置指南,了解详细的分步说明。
MCP 集成
MCP 客户端配置
Claude Desktop
将以下内容添加到 Claude Desktop 配置文件(claude_desktop_config.json):
{
"mcpServers": {
"linkedctl": {
"command": "npx",
"args": ["linkedctl", "mcp"]
}
}
}
Claude Code
claude mcp add linkedctl -- npx linkedctl mcp
Cursor
将以下内容添加到项目根目录下的 .cursor/mcp.json:
{
"mcpServers": {
"linkedctl": {
"command": "npx",
"args": ["linkedctl", "mcp"]
}
}
}
Windsurf
将以下内容添加到 ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"linkedctl": {
"command": "npx",
"args": ["linkedctl", "mcp"]
}
}
}
可用工具
所有工具都接受可选的 profile 参数,以选择配置配置文件。
身份验证
| 工具 | 说明 |
|---|---|
whoami | 显示当前用户的姓名、电子邮件地址和个人资料图片 URL |
auth_status | 显示某个配置文件的身份验证状态 |
auth_revoke | 在服务端撤销访问令牌并清除本地凭据 |
帖子
| 工具 | 描述 |
|---|---|
post_create | 在 LinkedIn 上创建帖子,可选附加媒体、投票或文章 |
post_get | 根据 URN 获取单条帖子 |
post_list | 分页列出帖子(支持使用 as_org 获取组织帖子) |
post_update | 更新现有帖子的评论文本 |
post_delete | 根据 URN 删除帖子 |
post_create 支持以下富内容类型:
| 参数 | 描述 |
|---|---|
text | 帖子文本内容(必填) |
visibility | PUBLIC 或 CONNECTIONS(默认值为 PUBLIC) |
draft | 保存为草稿,而不是发布 |
image / image_file | 附加单张图片(URN 或本地文件路径) |
video / video_file | 附加视频(URN 或本地文件路径) |
document / document_file | 附加文档(URN 或本地文件路径) |
images / image_files | 附加多张图片(至少 2 张) |
article_url | 附加文章链接 |
poll | 投票问题文本 |
poll_options | 投票选项(设置 poll 时必填 2–4 项) |
poll_duration | ONE_DAY、THREE_DAYS、ONE_WEEK 或 TWO_WEEKS |
as_org | 以组织身份发帖(数字 ID) |
评论
| 工具 | 描述 |
|---|---|
comment_create | 在帖子下发表评论(支持 as_org) |
comment_list | 列出帖子下的评论 |
comment_get | 根据 URN 获取特定评论 |
comment_delete | 根据 URN 删除评论 |
表情回应
| 工具 | 描述 |
|---|---|
reaction_create | 对帖子添加回应(支持 as_org)。类型:LIKE、PRAISE、EMPATHY、INTEREST、APPRECIATION、ENTERTAINMENT |
reaction_list | 列出帖子上的回应 |
reaction_delete | 移除帖子上的回应(支持 as_org) |
组织
| 工具 | 描述 |
|---|---|
org_list | 列出已认证用户管理的组织 |
org_get | 根据 ID 获取单个组织 |
org_followers | 获取组织的关注者数量 |
分析
| 工具 | 描述 |
|---|---|
stats_post | 获取单篇帖子的分析数据(展示次数、触达人数、回应、评论、转发) |
stats_me | 获取所有帖子汇总后的分析数据 |
stats_org | 获取组织的分享统计数据(全时段或按时间段汇总) |
媒体
| 工具 | 描述 |
|---|---|
document_upload | 将文档上传到 LinkedIn(PDF、DOCX、PPTX、DOC、PPT;最大 100 MB) |
配置
配置文件格式
LinkedCtl 将配置存储在 YAML 文件中。每个文件代表一个独立的配置档案:
api-version: "202601"
oauth:
client-id: "YOUR_CLIENT_ID"
client-secret: "YOUR_CLIENT_SECRET"
access-token: "YOUR_ACCESS_TOKEN"
refresh-token: "YOUR_REFRESH_TOKEN"
token-expires-at: "2026-05-03T12:00:00.000Z"
可用键:
| 键 | 描述 |
|---|---|
api-version | LinkedIn API 版本(例如 202601) |
oauth.client-id | OAuth 2.0 客户端 ID |
oauth.client-secret | OAuth 2.0 客户端密钥 |
oauth.access-token | OAuth 2.0 访问令牌 |
oauth.refresh-token | OAuth 2.0 刷新令牌 |
oauth.token-expires-at | 令牌过期时间戳(ISO 8601) |
配置文件的权限设置为 0600(仅所有者可读写)。
文件位置和优先级
如果未指定配置档案,LinkedCtl 会按以下顺序查找配置文件:
- 当前工作目录中的
.linkedctl.yaml - 主目录中的
~/.linkedctl.yaml
使用找到的第一个文件。写入时(例如执行 auth login 后),如果 CWD 文件存在,LinkedCtl 会写入该文件;否则写入主目录文件。
配置档案
配置档案可用于管理多个 LinkedIn 账户或配置。每个配置档案都作为独立的 YAML 文件存储在 ~/.linkedctl/ 下:
| 配置档案 | 配置文件路径 |
|---|---|
| (默认) | ~/.linkedctl.yaml |
work | ~/.linkedctl/work.yaml |
personal | ~/.linkedctl/personal.yaml |
使用任何命令时,都可以添加 --profile 标志:
linkedctl --profile work auth login --client-id ID --client-secret SECRET
linkedctl --profile work post "Hello from my work account!"
使用 profile 命令管理配置档案:
linkedctl profile create work --access-token YOUR_TOKEN --api-version 202601
linkedctl profile list
linkedctl profile show work
linkedctl profile delete work
身份验证方式
OAuth 2.0(推荐)
LinkedCtl 支持使用你自己的 LinkedIn Developer App 进行 OAuth 2.0 身份验证:
linkedctl auth login --client-id YOUR_CLIENT_ID --client-secret YOUR_CLIENT_SECRET
直接使用令牌
如果你已经从其他应用获取了访问令牌:
linkedctl auth token --access-token YOUR_TOKEN
环境变量
| 变量 | 描述 |
|---|---|
LINKEDCTL_CLIENT_ID | LinkedIn OAuth 2.0 客户端 ID |
LINKEDCTL_CLIENT_SECRET | LinkedIn OAuth 2.0 客户端密钥 |
LINKEDCTL_ACCESS_TOKEN | 直接访问令牌(绕过 OAuth 流程) |
LINKEDCTL_API_VERSION | LinkedIn API 版本字符串(例如 202601)必需 |
环境变量的优先级高于配置文件中的值。
配置档案前缀环境变量
使用命名配置档案时,LinkedCtl 也会读取带有配置档案前缀的环境变量。配置档案名称会转换为大写,并将连字符替换为下划线:
| 配置档案 | 变量 |
|---|---|
| (默认) | LINKEDCTL_ACCESS_TOKEN |
work | LINKEDCTL_WORK_ACCESS_TOKEN |
my-brand | LINKEDCTL_MY_BRAND_ACCESS_TOKEN |
CLIENT_ID、CLIENT_SECRET 和 API_VERSION 也遵循相同规则。
优先级顺序
配置值按以下顺序解析(优先级从高到低):
- 环境变量(如果启用了配置配置文件,则带有配置配置文件前缀)
- 配置文件(特定配置配置文件,或当前工作目录/主目录回退)
CLI 参考
全局选项
| 选项 | 描述 |
|---|---|
--profile <name> | 使用指定的配置配置文件 |
--json | 强制使用 JSON 输出 |
-q, --quiet | 禁止显示信息输出 |
--no-color | 禁用彩色输出 |
auth — 管理身份验证
| 命令 | 描述 |
|---|---|
auth setup | 交互式配置 OAuth 客户端凭据 |
auth login | 通过 OAuth 2.0 进行身份验证(打开浏览器) |
auth token | 存储直接访问令牌 |
auth status | 显示身份验证状态和令牌过期时间 |
auth logout | 清除活动配置配置文件中存储的凭据 |
auth refresh | 使用存储的刷新令牌刷新访问令牌 |
auth revoke | 在服务器端撤销访问令牌并清除本地令牌 |
auth login 选项:
| 选项 | 描述 | 默认值 |
|---|---|---|
--client-id <id> | OAuth 2.0 客户端 ID | 来自配置 |
--client-secret <secret> | OAuth 2.0 客户端密钥 | 来自配置 |
--scope <scopes> | OAuth 2.0 作用域(以空格分隔) | openid profile w_member_social |
auth token 选项:
| 选项 | 描述 |
|---|---|
--access-token <token> | 要存储的访问令牌(必填) |
post — 管理 LinkedIn 帖子
# Shorthand: pass text as an argument
linkedctl post "Hello from LinkedCtl!"
# Explicit subcommand
linkedctl post create --text "Hello from LinkedCtl!"
# Pipe content from stdin
echo "Hello from LinkedCtl!" | linkedctl post create
| 命令 | 描述 |
|---|---|
post create | 在 LinkedIn 上创建帖子 |
post get <urn> | 按 URN 获取帖子 |
post list | 分页列出帖子 |
post update <urn> | 更新帖子的评论文本 |
post delete <urn> | 删除帖子(需确认) |
post create 选项:
| 选项 | 描述 | 默认值 |
|---|---|---|
--text <text> | 文本内容(也接受 --text-file、位置参数或标准输入) | |
--visibility <visibility> | PUBLIC 或 CONNECTIONS | PUBLIC |
--draft | 保存为草稿,而非发布 | |
--image <urn> | 要附加的图片 URN | |
--image-file <path> | 要上传并附加的本地图片文件 | |
--video <urn> | 要附加的视频 URN | |
--video-file <path> | 要上传并附加的本地视频文件 | |
--document <urn> | 要附加的文档 URN | |
--document-file <path> | 要上传并附加的本地文档文件 | |
--images <urns> | 多个图片 URN(以逗号分隔,至少 2 个) | |
--image-files <paths> | 多个本地图片文件(以逗号分隔,至少 2 个) | |
--article-url <url> | 要附加的文章 URL | |
--poll <question> | 投票问题文本 | |
--option <text> | 投票选项(重复 2–4 次) | |
--poll-duration <duration> | ONE_DAY、THREE_DAYS、ONE_WEEK 或 TWO_WEEKS | THREE_DAYS |
--as-org <id> | 以组织身份发布(数字 ID) | |
--format <format> | 输出格式(json、table) | 自动 |
post list 选项:
| 选项 | 描述 | 默认值 |
|---|---|---|
--count <n> | 返回的帖子数量(最多 100) | 10 |
--start <n> | 分页起始索引 | 0 |
--as-org <id> | 列出组织的帖子(数字 ID) |
comment — 管理评论
| 命令 | 描述 |
|---|---|
comment create <post-urn> | 在帖子上创建评论 |
comment list <post-urn> | 列出帖子的评论 |
comment get <comment-urn> | 按 URN 获取指定评论 |
comment delete <comment-urn> | 删除评论(需确认) |
comment create 选项:
| 选项 | 描述 |
|---|---|
--text <text> | 评论文本(必填) |
--as-org <id> | 以组织身份发表评论(数字 ID) |
reaction — 管理表情反应
| 命令 | 描述 |
|---|---|
reaction create <urn> | 为帖子添加表情反应 |
reaction list <urn> | 列出帖子的表情反应 |
reaction delete <urn> | 删除帖子上的表情反应 |
reaction create 选项:
| 选项 | 描述 |
|---|---|
--type <type> | LIKE、PRAISE、EMPATHY、INTEREST、APPRECIATION 或 ENTERTAINMENT(默认值为 LIKE) |
--as-org <id> | 以组织身份添加表情反应(数字 ID) |
org — 管理组织
| 命令 | 描述 |
|---|---|
org list | 列出已认证用户管理的组织 |
org get <id> | 获取组织详情 |
org followers <id> | 获取组织关注者数量 |
media — 上传媒体
| 命令 | 描述 |
|---|---|
media upload-image <file> | 上传图片(JPG、PNG、GIF) |
media upload-video <file> | 上传视频 |
media upload-document <file> | 上传文档(PDF、DOCX、PPTX、DOC、PPT;最大 100 MB) |
所有媒体命令均接受 --as-org <id> 和 --format json|table。
stats — 查看分析数据
| 命令 | 描述 |
|---|---|
stats post <urn> | 获取帖子分析数据(展示次数、覆盖人数、互动量) |
stats me | 获取所有帖子汇总的分析数据 |
stats org <id> | 获取组织分享统计数据 |
常用选项:
| 选项 | 描述 |
|---|---|
--from <date> / --start <date> | 日期范围的开始日期(YYYY-MM-DD) |
--to <date> / --end <date> | 日期范围的结束日期(YYYY-MM-DD) |
--time-granularity <granularity> | DAY 或 MONTH(仅适用于组织统计数据) |
profile — 管理配置配置文件
| 命令 | 描述 |
|---|---|
profile create <name> | 创建新的配置文件 |
profile list | 列出所有配置文件 |
profile show [<name>] | 显示配置文件详情(已脱敏) |
profile delete <name> | 删除配置文件(需确认) |
profile create 选项:
| 选项 | 描述 |
|---|---|
--access-token <token> | OAuth 2.0 访问令牌(必填) |
--api-version <version> | LinkedIn API 版本,例如 202601(必填) |
whoami — 显示当前用户
linkedctl whoami
linkedctl whoami --format json
| 选项 | 描述 | 默认值 |
|---|---|---|
--format <format> | 输出格式(json、table) | 自动 |
completion — Shell 补全
linkedctl completion bash
linkedctl completion zsh
安全性
- Dependabot 通过自动创建拉取请求,确保依赖项保持最新
- CodeQL 会在每次推送和拉取请求时运行分析,以自动检测漏洞
- 路径遍历验证会检查个人资料名称,防止目录逃逸攻击
- 所有 MCP 工具均采用统一的身份验证错误处理,提供一致的身份验证失败消息
- 破坏性操作(删除帖子、删除评论、删除个人资料)需要交互式确认,除非传入
--force
免责声明
这是一个独立项目,与 LinkedIn Corporation 无关,也未获得其认可或与其存在关联。LinkedIn 是 LinkedIn Corporation 的商标。
许可证
将 LinkedCtl 用作 CLI 工具或 MCP 服务:无需履行许可义务,可自由使用。
在项目中将 @linkedctl/core 用作库:你的组合成果必须采用 AGPL-3.0 或兼容许可证授权。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。