Content Distribution

io.github.AutomateLab-tech由 GitHub 账号 AutomateLab-tech 发布v2.2.1更新于 Oct 24, 2026

Publish content to DEV.to, Hashnode, GitHub Discussions, Reddit, Bluesky, LinkedIn, and Medium.

发布方自己的服务:Distribution

已验证STDIO仅桌面效率与工作流沟通与协作

概览

AI 生成的概览

一个本地 MCP 服务器,把同一篇内容发布到 DEV.to、Hashnode、GitHub Discussions、Reddit 和 Bluesky,LinkedIn、Medium、Twitter/X 则返回浏览器发布链接。

可以做什么
按渠道发布或定时发布内容变体到 DEV.to、Hashnode、GitHub Discussions、Reddit 和 Bluesky,同一内容 ID 与渠道重复调用具备幂等性。触发所有到期的定时帖子,并查询某篇内容或某个渠道的各平台状态。取消发布或尽力删除帖子,各平台行为不一。查询渠道提示,如字数限制、Markdown 支持和标签词表。列出已配置的分发配置文件和 subreddit 目录条目,含冷却时间、flair 选项和上次发布时间。对 LinkedIn、Medium 和 Twitter/X 返回 needs_browser 结果和撰写链接,而不直接发布。
适用场景
适合只写一次内容、希望由助手改写并分发到多个开发者与社交渠道的场景,也适合按计划排队发布并追踪每篇内容发布到哪里。更适合从 MCP 宿主或 cron 驱动的重复发布流程,而非一次性手动发帖。
运行要求
通过 npx 以 stdio 在本地运行,需要 Node.js 18 或更高版本。凭据从分发状态目录中的配置文件读取,或通过环境变量提供:DEV_TO_API_KEY、HASHNODE_TOKEN 与 HASHNODE_PUBLICATION_ID、GITHUB_TOKEN 与 GITHUB_DISCUSSION_REPO、Reddit 的客户端 ID、密钥、用户名和密码,以及 BLUESKY_IDENTIFIER 与 BLUESKY_PASSWORD。只需为要用的渠道设置凭据。仅支持桌面端。
安装前请注意
它保存多个账号的发布凭据,包括 Reddit 账号密码和 Bluesky 应用密码,存放在本地配置文件中。发布、定时发布和取消发布都会写入外部平台并对公众可见;取消发布只是尽力而为,可能无法完全删除帖子。Reddit 发帖受 subreddit 冷却和反垃圾规则限制。v2.2.0 更改了工具名称,旧提示词可能失效。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Content Distribution,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

content-distribution-mcp

Publish your content everywhere—without rewriting for every platform.

A MCP server that distributes a single piece of content across 8+ channels (DEV.to, Hashnode, GitHub Discussions, Reddit, Bluesky, LinkedIn, Medium, Twitter) with automatic platform-specific adaptation, idempotent publishing, per-community anti-spam rules, and centralized state management.

The Problem It Solves

Creating and publishing content at scale is friction-heavy:

  • Different formats: Reddit strips formatting, Twitter has character limits, DEV.to supports embeds and rich media. Each needs customized copy.
  • Platform rules: Subreddits enforce cooldowns and flair requirements. Communities have posting patterns and automoderator gates. LinkedIn suppresses external links.
  • State chaos: Which posts went live where? What if a publish fails halfway? Did that Reddit post get auto-removed by spam filters?

This MCP handles distribution complexity. Write your core message once, generate platform-specific variants, publish everywhere safely.

How It Works

  1. Your agent generates channel-specific copy variants (rewritten titles, trimmed text, platform-appropriate tags, audience-matched tone).
  2. This MCP publishes each variant with idempotency, OAuth, API retries, and scheduling—enforcing platform constraints automatically.
  3. You control which platforms get what. The MCP returns per-channel hints (character limits, tag vocabularies, cooldowns) but leaves creative decisions to you.

No LLM calls inside. No walled-in agents. Just a clean API for multi-platform content distribution at scale.

Install

bash
npx -y @automatelab/content-distribution-mcp

Or add it permanently to your MCP host.

Wire into your MCP host

Claude Code — add to .claude/mcp.json:

json
{  "mcpServers": {    "content-distribution": {      "command": "npx",      "args": ["-y", "@automatelab/content-distribution-mcp"]    }  }}

Claude Desktop — add to claude_desktop_config.json:

json
{  "mcpServers": {    "content-distribution": {      "command": "npx",      "args": ["-y", "@automatelab/content-distribution-mcp"]    }  }}

n8n — use the MCP Client node, point it at npx -y @automatelab/content-distribution-mcp over stdio.

Cursor / Windsurf / any MCP host — same npx -y @automatelab/content-distribution-mcp pattern.

Configure credentials

The server reads credentials from a Distribution Profile stored in ~/.distribution-mcp/profiles.yaml:

yaml
# ~/.distribution-mcp/profiles.yamldefault:  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

Only set credentials for channels you intend to use. LinkedIn, Medium, and Twitter/X return needs_browser with a compose URL — no credentials needed.

MCP tool surface

Eight tools, dot-notation names form a navigable tree (post.*, channel.*, profile.*, subreddit.*). Every tool declares an outputSchema (callers can type-check responses) and MCP annotations (read-only / destructive / idempotent / open-world hints). No LLM calls inside the server.

ToolPurpose
post_publishImmediate publish; idempotent on (content.id, channel)
post_scheduleQueue variants for schedule_at, publish the rest immediately
post_drainFire all scheduled posts due now — run from cron
post_statusPer-channel state for a content piece or channel
post_unpublishBest-effort delete (DEV.to sets unpublished; others vary)
channel_hintsPer-channel metadata: char limits, Markdown support, tag vocab
profile_listNames of configured distribution profiles
subreddit_listSubreddit Catalog: cooldowns, flair vocab, last-posted

v2.2.0 breaking change. Tools were renamed from flat names (publish, schedule, ...) to dot-notation (post_publish, post_schedule, ...). Update any prompts, agent skills, or n8n nodes that referenced the old names.

Channels

Channel keyTierAuth
devtoAutoDEV_TO_API_KEY
hashnodeAutoHASHNODE_TOKEN + HASHNODE_PUBLICATION_ID
github_discussionsAutoGITHUB_TOKEN + GITHUB_DISCUSSION_REPO
redditAuto-gatedREDDIT_CLIENT_ID/SECRET/USERNAME/PASSWORD
blueskyAutoBLUESKY_IDENTIFIER + BLUESKY_PASSWORD
linkedinBrowser fallbackreturns needs_browser + compose URL
mediumBrowser fallbackreturns needs_browser + compose URL
twitter / xBrowser fallbackreturns needs_browser + compose URL

Example agent call

jsonc
// 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"}

Idempotency

Re-running post_publish with the same content.id + channel pair returns the existing live_url immediately without making another platform API call. Safe to retry on failure.

Scheduling

Variants with schedule_at (ISO-8601 with timezone, e.g. "2026-05-21T09:00:00+00:00") are stored in ~/.distribution-mcp/scheduled.yaml and fired on the next post_drain call. Run drain from cron:

bash
# fire due posts every 5 minutes*/5 * * * * npx -y @automatelab/content-distribution-mcp drain

Or call the post_drain MCP tool directly from an agent.

Environment variables

VariableDefaultPurpose
DISTRIBUTION_BACKENDyamlState backend (yaml only in v1)
DISTRIBUTION_BACKEND_DIR~/.distribution-mcpDirectory for YAML state files

Requirements

  • Node.js 18 or later

Architecture

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)

Works with any MCP client

No Anthropic-specific code anywhere. Verify:

bash
grep -ri "anthropic" node_modules/content-distribution-mcp/dist/  # returns nothing

Part of the AutomateLab stack

License

MIT

Maintenance and verification

See the maintenance guide for interpretation limits, current tool names where applicable, and reproducible verification.

来源:README.md,提交 72486f9

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

1
  1. v2.2.1最新Sep 16, 2026

评分

已满足适用检查项的 50%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分

其他 Distribution 集成