关于 Content Distribution Mcp
Content Distribution Mcp 将单篇内容分发到多个社交和发布渠道,并按平台限制调整版本、跟踪发布状态。它面向需要重复发布的 Agent 和团队,支持幂等重试、定时发布,以及部分渠道的浏览器接续。
主要功能
- 01发布到列出的八个渠道
- 02提供各渠道格式提示
- 03安排和执行队列中的帖子
- 04跟踪各渠道的帖子状态
- 05幂等重试发布
- 06为部分渠道返回浏览器撰写链接
适用场景
- 01将产品公告分发到多个渠道
- 02安排帖子稍后发布
- 03检查某渠道的发布是否成功
MCP 相关
提供发布、定时、状态查询、渠道提示、配置档案和 subreddit 数据等八个 MCP 工具。MCP 客户端通过 stdio 连接;LinkedIn、Medium 和 X/Twitter 使用浏览器撰写页面作为后备。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y @automatelab/content-distribution-mcpDEV_TO_API_KEY密钥DEV.to API key for publishing articlesHASHNODE_TOKEN密钥Hashnode personal access tokenHASHNODE_PUBLICATION_IDHashnode publication IDGITHUB_TOKEN密钥GitHub personal access token for GitHub DiscussionsGITHUB_DISCUSSION_REPOGitHub repo for Discussions in owner/repo formatREDDIT_CLIENT_ID密钥Reddit OAuth app client IDREDDIT_CLIENT_SECRET密钥Reddit OAuth app client secretREDDIT_USERNAMEReddit account usernameREDDIT_PASSWORD密钥Reddit account passwordBLUESKY_IDENTIFIERBluesky handle (e.g. you.bsky.social)BLUESKY_PASSWORD密钥Bluesky app passwordDISTRIBUTION_BACKENDState backend (default: yaml)DISTRIBUTION_BACKEND_DIRDirectory for YAML state files (default: ~/.distribution-mcp)本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
8收录的工具列表 · 更新于 3 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| content | object | 是 | |
| content.id | string | 是 | 稳定标识符,例如 'my-post@2026-05-20'。与 channel 一起用作幂等键;每篇内容必须唯一。 |
| content.tags | array | 否 | 规范标签列表;每个渠道适配器都会对其进行规范化、截断,或转换为平台标签语法。 |
| content.title | string | 是 | 内容标题;在大多数渠道中用作帖子标题。 |
| content.author | string | 是 | 作者显示名称;在支持作者信息的渠道中用作作者元数据。 |
| content.body_md | string | 是 | Markdown 格式的完整正文。每个渠道适配器都会根据平台要求进行转换或截断。 |
| content.subtitle | string | 否 | 可选副标题;用于 Hashnode 和 DEV.to 的副标题字段;不支持副标题的渠道会忽略此字段。 |
| content.cta_block | string | 否 | 可选的行动号召区块,会追加到支持此功能的渠道的帖子正文中;格式为 Markdown。 |
| content.cover_image | string | 否 | 封面图片的可选 URL;用作 Hashnode 和 DEV.to 上的页眉图片;如果没有可用图片,请省略。 |
| content.canonical_url | string | 否 | 权威来源的规范 URL;在 DEV.to 和 Hashnode 中设置为 canonical_url,以便通过 SEO 指明原文;首次发布到该渠道时请省略。 |
| content.source_task_id | string | 否 | 可选跟踪 ID(例如 Notion 任务 ID);会存储在发布状态中以便关联,但绝不会发送到平台。 |
| variants | array | 是 | |
| profile_name | string | 是 | 分发配置的名称(凭据存储)。使用 profile.list 查找可用名称。 |
详细介绍
content-distribution-mcp
随处发布内容,无需针对每个平台反复改写。
一个 MCP 服务,可将单篇内容分发到 8 个以上的渠道(DEV.to、Hashnode、GitHub Discussions、Reddit、Bluesky、LinkedIn、Medium、Twitter),并提供自动适配各平台、幂等发布、针对各社区的反垃圾规则以及集中式状态管理。
解决的问题
大规模创建和发布内容往往处处受阻:
- 格式各异:Reddit 会移除格式,Twitter 有字符数限制,DEV.to 支持嵌入内容和富媒体。每个平台都需要定制文案。
- 平台规则:Subreddit 会强制执行冷却期和 flair 要求。社区有自己的发帖模式和自动审核门槛。LinkedIn 会降低含外部链接帖子的曝光。
- 状态混乱:哪些帖子已在哪些平台上线?如果发布中途失败怎么办?Reddit 上的帖子是否被垃圾信息过滤器自动移除了?
这个 MCP 服务负责处理分发的复杂性。只需编写一次核心内容,即可生成各平台专属版本,并安全地发布到各处。
工作原理
- 你的 Agent 为各渠道生成专属文案版本(改写标题、精简文本、添加适合平台的标签,并匹配受众语气)。
- 此 MCP 服务 通过幂等处理、OAuth、API 重试和定时发布来发布各个版本,并自动遵守平台限制。
- 由你决定 要向哪些平台发布什么内容。MCP 服务会返回各渠道提示(字符数限制、标签词汇、冷却期),但创意决策仍由你掌控。
内部不会调用大模型。没有封闭的 Agent。只有一个简洁的 API,可大规模分发内容到多个平台。
安装
npx -y @automatelab/content-distribution-mcp
也可以将它永久添加到你的 MCP 宿主。
接入 MCP 宿主
Claude Code — 添加到 .claude/mcp.json:
{
"mcpServers": {
"content-distribution": {
"command": "npx",
"args": ["-y", "@automatelab/content-distribution-mcp"]
}
}
}
Claude Desktop — 添加到 claude_desktop_config.json:
{
"mcpServers": {
"content-distribution": {
"command": "npx",
"args": ["-y", "@automatelab/content-distribution-mcp"]
}
}
}
n8n — 使用 MCP Client 节点,通过 stdio 指向 npx -y @automatelab/content-distribution-mcp。
Cursor / Windsurf / 任何 MCP 宿主 — 使用相同的 npx -y @automatelab/content-distribution-mcp 模式。
配置凭据
服务会从存储在 ~/.distribution-mcp/profiles.yaml 中的分发配置文件读取凭据:
# ~/.distribution-mcp/profiles.yaml
default:
credentials:
DEV_TO_API_KEY: "your-devto-api-key"
HASHNODE_TOKEN: "your-hashnode-token"
HASHNODE_PUBLICATION_ID: "your-pub-id"
GITHUB_TOKEN: "ghp_..."
GITHUB_DISCUSSION_REPO: "owner/repo"
REDDIT_CLIENT_ID: "..."
REDDIT_CLIENT_SECRET: "..."
REDDIT_USERNAME: "..."
REDDIT_PASSWORD: "..."
BLUESKY_IDENTIFIER: "you.bsky.social"
BLUESKY_PASSWORD: "..."
subreddits:
- ClaudeAI
- LocalLLaMA
只需为你打算使用的渠道设置凭据。LinkedIn、Medium 和 Twitter/X 会返回 needs_browser 以及撰写页面 URL,无需凭据。
MCP 工具概览
共有八个工具,采用点号分隔的名称构成可导航的树状结构(post.*、channel.*、profile.*、subreddit.*)。每个工具都声明了 outputSchema(调用方可对响应进行类型检查)和 MCP annotations(只读 / 破坏性 / 幂等 / 开放世界提示)。服务内部不会调用大模型。
| 工具 | 用途 |
|---|---|
post_publish | 立即发布;基于 (content.id, channel) 实现幂等 |
post_schedule | 将各版本加入 schedule_at 队列,其余内容立即发布 |
post_drain | 发布所有当前到期的定时帖子——可通过 cron 运行 |
post_status | 查询某篇内容或渠道的各渠道状态 |
post_unpublish | 尽力删除(DEV.to 会取消发布;其他平台各不相同) |
channel_hints | 各渠道元数据:字符数限制、Markdown 支持情况、标签词汇 |
profile_list | 已配置的分发配置文件名称 |
subreddit_list | Subreddit 目录:冷却期、flair 词汇、上次发帖时间 |
v2.2.0 破坏性变更。 工具已从扁平名称(
publish、schedule……)更名为点号分隔的名称(post_publish、post_schedule……)。请更新任何引用旧名称的提示词、Agent 技能或 n8n 节点。
渠道
| 渠道键 | 层级 | 身份验证 |
|---|---|---|
devto | 自动 | DEV_TO_API_KEY |
hashnode | 自动 | HASHNODE_TOKEN + HASHNODE_PUBLICATION_ID |
github_discussions | 自动 | GITHUB_TOKEN + GITHUB_DISCUSSION_REPO |
reddit | 自动门控 | REDDIT_CLIENT_ID/SECRET/USERNAME/PASSWORD |
bluesky | 自动 | BLUESKY_IDENTIFIER + BLUESKY_PASSWORD |
linkedin | 浏览器回退 | 返回 needs_browser + 撰写页面 URL |
medium | 浏览器回退 | 返回 needs_browser + 撰写页面 URL |
twitter / x | 浏览器回退 | 返回 needs_browser + 撰写页面 URL |
Agent 调用示例
// post_publish tool
{
"content": {
"id": "n8n-webhook-setup@2026-05-20",
"title": "How to set up an n8n webhook",
"body_md": "...",
"tags": ["automation", "n8n", "tutorial"],
"canonical_url": "https://yourblog.com/n8n-webhook-setup",
"author": "You"
},
"variants": [
{
"channel": "devto:main",
"title": "How to set up an n8n webhook",
"body": "...",
"tags": ["automation", "n8n", "tutorial", "devops"],
"canonical_url": "https://yourblog.com/n8n-webhook-setup",
"extras": {}
},
{
"channel": "reddit:ClaudeAI",
"title": "Built a webhook automation with n8n",
"body": "Here's how I set it up...",
"tags": [],
"extras": { "flair": "Project" }
}
],
"profile_name": "default"
}
幂等性
使用相同的 content.id + channel 组合重新运行 post_publish,会立即返回现有的 live_url,不会再次调用平台 API。失败时可以安全重试。
定时发布
带有 schedule_at 的变体(采用带时区的 ISO-8601 格式,例如 "2026-05-21T09:00:00+00:00")会存储在 ~/.distribution-mcp/scheduled.yaml 中,并在下一次调用 post_drain 时执行。通过 cron 运行 drain:
# fire due posts every 5 minutes
*/5 * * * * npx -y @automatelab/content-distribution-mcp drain
也可以直接从 Agent 调用 post_drain MCP 工具。
环境变量
| 变量 | 默认值 | 用途 |
|---|---|---|
DISTRIBUTION_BACKEND | yaml | 状态后端(v1 中仅支持 yaml) |
DISTRIBUTION_BACKEND_DIR | ~/.distribution-mcp | YAML 状态文件所在目录 |
要求
- Node.js 18 或更高版本
架构
Agent (Claude Code / n8n / Cursor / any MCP host)
│ generates per-channel copy, calls MCP tools
▼
content-distribution-mcp (this package, stdio transport)
│ no LLM calls — pure I/O
├── adapters/ devto · hashnode · github-discussions · reddit · bluesky · browser
└── backends/ yaml (post log · profiles · schedule queue · subreddit catalog)
兼容任何 MCP 客户端
没有任何特定于 Anthropic 的代码。验证:
grep -ri "anthropic" node_modules/content-distribution-mcp/dist/ # returns nothing
属于 AutomateLab 技术栈
- agency-os — 控制平面
- content-distribution-mcp — 此软件包
- automatelab.tech — 博客和教程
许可证
MIT
维护与验证
有关解释限制、当前工具名称(如适用)以及可复现验证,请参阅维护指南。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。