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 整合