内容
**中文** | [简体中文](README.zh-CN.md)
# 章鱼 LinkedIn
[](https://pypi.org/project/octopus-linkedin/)
[](LICENSE)
[](pyproject.toml)
[](https://modelcontextprotocol.io)
**基于 MCP 的 LinkedIn 营销管控。** 在 Claude Desktop、Claude Code 或任何 MCP 兼容代理上,使用 **官方 LinkedIn API** 草拟、审核、发布、评论和阅读 LinkedIn 上的互动。
大多数“LinkedIn AI”工具只停留在 *撰写* 帖子层面。下一个明显步骤是 *发布* 帖子——这就是您需要管控的地方,而不是一个黑盒。章鱼 LinkedIn 使整个流程透明:
> **草拟 → 审核 → 批准 → 发布 → 评论 → 分析**
草拟和批准 **仅限本地** —— 它们永远不会触及网络。`publish_draft` 是发送任何内容的唯一关口,它拒绝发布未经明确批准的草稿。
## 工具
| 工具 | 发送到 LinkedIn? | 功能 |
|------|:---:|--------------|
| `get_profile` | 读取 | 您的身份 + 连接性检查 |
| `create_post` | ✅ | 发布文本帖子 |
| `share_link` | ✅ | 发布带有 URL 预览卡的帖子 |
| `share_image` | ✅ | 发布带有本地图片的帖子 |
| `share_images` | ✅ | 发布带有最多 9 张图片的帖子 |
| `delete_post` | ✅ | 删除您的帖子之一 |
| `list_comments` | 读取 | 列出帖子的评论 |
| `reply_comment` | ✅ | 评论您控制的帖子 |
| `get_post_stats` | 读取 | 帖子的点赞 + 评论 |
| `create_draft` | ⬜ 本地 | 保存草稿(文本 / 链接 / 图片) |
| `list_drafts` | ⬜ 本地 | 列出草稿,可按状态筛选 |
| `get_draft` | ⬜ 本地 | 读取单个草稿 |
| `update_draft` | ⬜ 本地 | 编辑草稿(重置批准) |
| `approve_draft` | ⬜ 本地 | **审核关口** |
| `delete_draft` | ⬜ 本地 | 删除草稿 |
| `schedule_draft` | ⬜ 本地 | 为稍后安排已批准的草稿 |
| `unschedule_draft` | ⬜ 本地 | 清除草稿的预定时间 |
| `publish_draft` | ✅ | 立即发布**已批准**的草稿 |
| `publish_due` | ✅ | 发布所有已批准且到期的草稿 |
### 内容智能(LLM 支持)
根据您的品牌声音进行调整;所有内容都保留在审批门控后面。
| 工具 | 功能 |
|------|--------------|
| `llm_info` | 显示活跃的 LLM 提供商/模型(配置检查) |
| `generate_draft` | 从简要描述撰写帖子 → 保存为草稿 |
| `polish_text` / `polish_draft` | 提高清晰度和流畅度 |
| `optimize_text` / `optimize_draft` | 重构以增加吸引力 + 结构 + 行动号召 |
| `ab_variants` | 生成 N 个不同的 A/B 变体 |
| `repurpose_url` | 将文章 URL 转换为原创草稿(SSRF 防护) |
| `triage_comments` | 分类您的帖子评论 + 草拟回复 |
| `get_voice` / `set_voice` | 读取/更新您的品牌声音配置文件 |
此外,还有 MCP **提示** (`draft_post`, `repurpose_article`, `reply_to_comments`) 和 **资源** (`voice://profile`, `drafts://list`),以便 MCP 客户端获取任务模板和实时上下文,而不仅仅是原始工具调用。
> **范围说明:** 官方 API 仅允许您评论您控制的内容(您自己的帖子或您管理的组织页面)。它无法自动评论任意第三方帖子——这是设计如此。请参阅 [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md)。
### LLM 配置
设置一个提供商及其密钥(参见 `.env.example`):
```bash
LLM_PROVIDER=anthropic # anthropic | openai | gemini
ANTHROPIC_API_KEY=sk-ant-... # 或 OPENAI_API_KEY / GEMINI_API_KEY
# LLM_MODEL=claude-sonnet-4-6 # 可选覆盖
```
## 快速开始
### 1. 安装
```bash
pip install octopus-linkedin
```
此命令安装两个命令:`octopus-linkedin`(CLI)和 `octopus-linkedin-mcp`(MCP 服务器)。要从源代码开始使用项目,请参阅 [开发](#开发)。
### 2. 创建 LinkedIn 应用
在 [linkedin.com/developers](https://www.linkedin.com/developers/apps) 上创建一个 **独立应用**,并将其绑定到公司页面,然后添加以下产品:
- **在 LinkedIn 上分享** → 授予 `w_member_social`(发布)
- **使用 OpenID Connect 登录 LinkedIn** → 授予 `openid profile email`
在应用的 **身份验证** 标签页中,添加一个授权重定向 URL:
```
http://localhost:8000/callback
```
### 3. 配置
```bash
cp .env.example .env
```
编辑 `.env` 并粘贴您的 **客户端 ID** 和 **客户端密钥**(身份验证标签页)。
### 4. 授权(一次性)
```bash
python -m linkedin.auth
```
这将打开您的浏览器;请登录并批准。令牌缓存在 `token.json` 中(gitignored,`0600`)。成员令牌的有效期约为 60 天;当令牌过期时,请重新运行此命令。
### 5. 运行
```bash
python server.py
```
## 连接到 Claude Code
```bash
claude mcp add octopus-linkedin -- octopus-linkedin-mcp
```
或将其添加到您的 MCP 客户端配置中:
```json
{
"mcpServers": {
"octopus-linkedin": {
"command": "octopus-linkedin-mcp"
}
}
}
```
然后直接提问: *"草拟一篇关于 X 的 LinkedIn 帖子,让我审核,然后发布。*
## 示例工作流
1. `create_draft` — “保存这个关于我们启动的帖子。”
2. `list_drafts` / `get_draft` — 审查措辞。
3. `approve_draft` — 批准。
4. `publish_draft` — 它上线了(仅此刻)。
5. `get_post_stats` — 稍后查看点赞和评论。
## CLI
相同的引擎作为 CLI 提供,用于脚本编写和 cron:
```bash
octopus-linkedin authorize
octopus-linkedin post "Hello, world" --visibility PUBLIC
octopus-linkedin draft "A post to review later"
octopus-linkedin drafts --status approved
octopus-linkedin approve drft_abc123 --note "lgtm"
octopus-linkedin schedule drft_abc123 2026-07-02T09:00:00Z
octopus-linkedin run-scheduler --interval 60 # loop: publish due drafts
octopus-linkedin stats urn:li:share:123
```
## 调度
调度分为两部分,以免意外发布:您 **安排** 一个 **已批准** 的草稿到未来的 UTC 时间,然后运行器在到期时实际发送它。以以下三种方式之一运行运行器:
- `octopus-linkedin run-scheduler` — 一个简单的前台循环,或
- 每隔几分钟使用 `cron` 运行 `octopus-linkedin publish-due`,或
- 按需使用 MCP 工具 `publish_due`。
只有 **同时批准和到期** 的草稿才会被发布。
## 开发
```bash
pip install -e ".[dev]"
ruff check . && ruff format --check . && pytest
```
请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。
## 路线图
已完成:
- [x] 预定发布(在未来时间发布已批准的草稿)
- [x] 多图片帖子(最多 9 张图片)
- [x] MCP 服务器的独立 CLI
- [x] 双语文档(英文 | 简体中文)
内容智能层(已完成):
- [x] LLM 后端 — Anthropic / OpenAI / Gemini(撰写 / 精炼 / 优化)
- [x] MCP `prompts` + `resources` 接口
- [x] 从 URL / 文章改编(SSRF 防护)
- [x] 品牌声音记忆(条件每次生成)
- [x] 您自己的帖子评论分类(分类 → 草拟回复 → 批准)
- [x] A/B 变体生成
受限(需要 LinkedIn 批准),已跟踪但未构建:
- [ ] 公司页面发布和互动(社区管理 API)
- [ ] 通过 `memberCreatorPostAnalytics` 获取印象/影响力(合作伙伴保护,2025 年)
- [ ] PDF/文档帖子(需要版本化的 `/rest/posts` + 文档 API)
欢迎为这些做出贡献。
## 安全
`.env` 和 `token.json` 持有凭证,并被 gitignored — 永远不要提交它们。请参阅 [SECURITY.md](SECURITY.md) 以获取报告和凭证处理信息。
## 许可证
[AGPL-3.0-or-later](LICENSE)。