linkedin-poster
linkedin-poster
从 Claude Code、shell 或 cron 作业发布到你自己的 LinkedIn 信息流。一个 Cloudflare Worker,零依赖,三个表面:一个 MCP 服务器,让代理可以直接发布;一个 HTTP API 供脚本使用;以及一个文风检查器,拒绝发布带有机器写作痕迹的文本。
构建它的原因是:一篇好帖子值得自动化,而一个糟糕的 em 破折号不值得发布。这份 README 中也没有 em 破折号,这正是重点。
Claude Code ──MCP──┐
├──> Worker ──> LinkedIn Posts API ──> your feed
curl / CI ──HTTP───┘ │
└──> KV (one 60-day token) + daily cron reminder它不是什么
它只以一个成员的身份发布:你。它不是调度 SaaS,不是多租户工具,也不会触及任何其他人的账户。它所需的一切都是自助式的;不涉及 LinkedIn 合作伙伴计划。
决定一切的约束
LinkedIn 访问令牌的有效期为 60 天,而程序化刷新令牌仅限于获得批准的 Marketing Developer Platform 合作伙伴。自助式应用永远无法获得。这是无法绕过的,任何承诺设置后即可忘掉的 LinkedIn 自动化指南都是错误的。
但确实存在一种情况:当你的当前令牌仍然有效且你已登录 LinkedIn 时,再次访问授权端点会跳过同意屏幕,直接重定向。因此,只要在令牌失效前操作,续期就是每七周点击一次。错过这个窗口,你就会重新看到同意屏幕,那就是两次点击而不是一次。
这就是为什么此服务附带一个 cron 触发器。它会倒计时,并在剩余 14、7、3 和 1 天时提醒你,而静默续期仍然有效。
设置
1. LinkedIn 侧(手动,约十分钟)
你需要一个 LinkedIn 页面。开发者门户要求你将应用附加到一个页面,并由页面管理员验证。
在 linkedin.com/developers 创建应用。记下 Client ID 和 Client Secret。
在 Products 选项卡中,请求以下两项(它们是开放权限,会立即批准):
使用 OpenID Connect 通过 LinkedIn 登录 →
openid,profile在 LinkedIn 上分享 →
w_member_social
在 Auth 选项卡中,添加重定向 URL。它必须是 HTTPS、绝对地址,并且与
REDIRECT_URI逐字符匹配:https://your-worker.example.com/auth/callback
2. Worker 侧
git clone https://github.com/stepanic/linkedin-poster.git
cd linkedin-poster
npm install
# KV to hold the token
npx wrangler kv namespace create TOKENS
npx wrangler kv namespace create TOKENS --preview
# paste both ids into wrangler.jsonc
# edit wrangler.jsonc: name, routes, REDIRECT_URI, account_id
npx wrangler secret put LINKEDIN_CLIENT_ID
npx wrangler secret put LINKEDIN_CLIENT_SECRET
npx wrangler secret put API_TOKEN # openssl rand -hex 32, guards /post and /mcp
npx wrangler secret put SETUP_KEY # openssl rand -hex 32, guards /auth/start
npx wrangler secret put NOTIFY_WEBHOOK # optional, any URL taking a JSON POST
npm run deploy3. 连接你的账户
在浏览器中打开 https://your-worker.example.com/auth/start?key=<SETUP_KEY>,批准一次,完成。页面会告诉你到期日期。
SETUP_KEY 不是装饰。没有它,任何找到该 URL 的人都可以将他们的 LinkedIn 账户绑定到你的 Worker,并覆盖你存储的令牌。
从 Claude Code 使用
claude mcp add --transport http linkedin https://your-worker.example.com/mcp \
--header "Authorization: Bearer $API_TOKEN"三个工具:
工具 | 作用 |
| 先检查,然后发布。除非 |
| 只检查而不发布。起草时使用。 |
| 以谁的身份发布,以及令牌剩余天数。 |
然后,在会话中:“用检查器检查这份草稿,然后发布。”
从 shell 使用
# dry run: lint only, publish nothing
curl -s -X POST https://your-worker.example.com/post \
-H "Authorization: Bearer $API_TOKEN" -H 'Content-Type: application/json' \
-d '{"text":"…","dry_run":true}'
# publish
curl -s -X POST https://your-worker.example.com/post \
-H "Authorization: Bearer $API_TOKEN" -H 'Content-Type: application/json' \
-d '{"text":"…","visibility":"PUBLIC"}'
# token state
curl -s https://your-worker.example.com/status -H "Authorization: Bearer $API_TOKEN"/post 返回 201 以及帖子的 URN 和公开 URL;当检查器阻止时返回 422;当令牌缺失或失效时返回 503。
检查器
错误会阻止发布;警告不会。
规则 | 严重性 | 原因 |
| error | 生成文本最明显的痕迹。逗号或句号总是可行的。 |
| error | LinkedIn 拒绝超过 3000 字符的评论。 |
| error | 显而易见,但在从文件管道输入时容易触发。 |
| warning | LinkedIn 不会渲染这些。星号和井号会原样显示。 |
连字符永远不会被标记。 read-only tier、two-day sprint 和 per-client limits 是正确的,必须保留。只有 U+2014 和 U+2013 是错误。
编辑 src/lint.ts 是让这个项目成为你自己的预期方式。这些规则编码的是一个人的写作习惯,而不是通用标准。
会让你惊讶的事情
Posts API 不会抓取 URL。 你文本中的链接会保持为裸链接。真正的预览卡片需要通过 Images API 上传缩略图,并添加
content.article块。这里尚未实现。LinkedIn-Version是必需的,且版本会被淘汰。202508已于 2026 年 8 月 17 日失效。将wrangler.jsonc中的值视为维护项。/v2/ugcPosts已弃用。 这里使用/rest/posts,它取代了前者。更改请求的范围会使所有现有令牌失效。 你需要重新授权。
每个成员每天 150 个请求。 是按成员,而不是按应用。
文件布局
文件 | 内容 |
| 路由、OAuth 流程、cron 提醒 |
| OAuth 和 Posts API 调用,所有端点集中在一处 |
| MCP 服务器,手写 JSON-RPC,无状态 |
| 文风检查器 |
| KV 令牌记录、过期计算、时序安全的密钥比较 |
本地开发
cp .dev.vars.example .dev.vars # fill in, never commit
npm run types # regenerate Env after editing wrangler.jsonc
npm run typecheck
npm run devwrangler dev --local 会给你一个本地 KV,因此除了真实的 LinkedIn 调用之外,整个流程都可以在没有凭据的情况下进行测试。
许可证
MIT。src/lint.ts 中的规则是我的;机制你可以随意使用。
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
Give AI agents the LinkedIn tools to find, qualify, engage, and follow up with prospects.
Live LinkedIn data for AI agents: profiles, companies, jobs, posts, email finding. No account risk.
Managed LinkedIn MCP server for AI agents: search, connect, message and enrich on accounts you own.
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/stepanic/linkedin-poster'
If you have feedback or need assistance with the MCP directory API, please join our Discord server