LinkedIn命令行工具

LinkedCtl是一款面向LinkedIn API的OAuth2命令行工具和MCP服务器,支持发布内容、管理评论和反应、组织操作、数据分析以及媒体上传等功能。

  • by alexey-pelykh
  • TypeScript
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 alexey-pelykh/linkedctl

使用说明

OAuth2 CLI和MCP服务器 领英 API

它的作用

  • 发布内容 --文本、图像、视频、文档、文章、多图像旋转木马和民意调查
  • 评论和反应 --创建、列出和删除帖子上的评论和反应
  • 组织支持 --作为一个组织发布、评论、反应和查看分析
  • 分析 --每个职位、每个成员和每个组织的统计数据
  • 媒体上传 --将图像、视频和文档上传到LinkedIn
  • 职位草案 --发布前将帖子另存为草稿
  • OAuth 2.0身份验证 使用自己的LinkedIn应用程序
  • 直接令牌传递 用于从其他应用程序获得的令牌
  • MCP服务器 用于AI助手集成(Claude、Cursor等)
  • 命令行界面 用于可脚本化的LinkedIn操作

先决条件

安装

npm install -g linkedctl

或者直接运行:

npx linkedctl --help

快速开始

  1. 在以下位置创建LinkedIn应用程序 linkedin.com/developers
  2. 配置OAuth 2.0凭据
  3. 身份验证:
    linkedctl auth login --client-id YOUR_CLIENT_ID --client-secret YOUR_CLIENT_SECRET
    
  4. 开始使用:
    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 投票答案选项(当需要时,需要2-4个 poll 已设置)
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会按以下顺序搜索配置文件:

  1. .linkedctl.yaml 在当前工作目录中
  2. ~/.linkedctl.yaml 在主目录中

使用找到的第一个文件。写作时(例如之后 auth login),LinkedCtl会写入CWD文件(如果存在),否则会写入主目录文件。

档案

个人资料允许您管理多个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开发者应用程序支持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.

优先顺序

配置值按以下顺序解析(最高优先级优先):

  1. 环境变量 (如果配置文件处于活动状态,则以配置文件为前缀)
  2. 配置文件 (配置文件特定文件,或CWD/home回退)

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、位置或stdin)
--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> 多个图像URNs(共用,最少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 --壳牌完井

linkedctl completion bash
linkedctl completion zsh

安全

  • 依赖机器人 通过自动拉取请求使依赖关系保持最新
  • CodeQL 对每个推送和拉取请求进行分析,以实现自动漏洞检测
  • 路径遍历验证 配置文件名可防止目录转义攻击
  • 统一身份验证错误处理 所有MCP工具都提供一致的身份验证失败消息
  • 破坏性行动 (删除帖子、删除评论、删除个人资料)需要交互式确认,除非 --force 已通过

免责声明

这是一个独立的项目,不隶属于领英公司,也不得到领英公司的认可或与领英公司有关联。LinkedIn是LinkedIn公司的商标。

许可证

仅限AGPL-3.0

将LinkedCtl用作CLI工具或MCP服务器:无许可义务-自由使用。

使用 @linkedctl/core 作为项目中的库:您的组合作品必须根据AGPL-3.0(或兼容许可证)获得许可。