Content Distribution MCP
The Content Distribution MCP server enables publishing a single piece of content across multiple platforms with automatic adaptation, idempotency, scheduling, and state management. Here's what you can do:
Publish immediately — Send content variants to multiple channels at once (DEV.to, Hashnode, GitHub Discussions, Reddit, Bluesky, LinkedIn, Medium, Twitter). Idempotent: re-running with the same content ID and channel returns cached results without re-posting.
Schedule future posts — Queue variants with a
schedule_atdatetime for deferred delivery; immediate variants are published right away and scheduled entries are stored locally in YAML.Drain the scheduled queue — Fire all scheduled posts due at or before a given time boundary. Safe to run from cron; already-published pairs are automatically skipped.
Check publish status — Inspect the current state (published, queued, errored) of any content piece across all channels, filterable by content ID and/or channel. Read-only, no external calls.
Unpublish posts — Best-effort deletion of a live post on a target platform (e.g., DEV.to performs a soft delete; platforms without a delete API return a failure indicator gracefully).
Get per-channel hints — Retrieve metadata for any channel: character limits, Markdown support flags, tag vocabulary, and CTA placement rules. Useful for composing valid variants before publishing.
List configured profiles — Discover all credential-backed distribution profiles configured in the local YAML backend.
List subreddits — Browse the Subreddit Catalog with cooldown windows, flair vocabulary, and last-posted timestamps, optionally filtered by profile.
Enables publishing content to Bluesky with automatic adaptation to platform-specific constraints such as character limits and formatting.
Allows publishing articles to DEV.to with automatic adaptation to platform-specific constraints including formatting and tag vocabularies.
Enables publishing content to GitHub Discussions with automatic adaptation to platform-specific constraints.
Allows publishing articles to Hashnode with automatic adaptation to platform-specific constraints.
Enables publishing content to Medium via browser fallback, returning a compose URL for manual posting when direct API is unavailable.
Allows publishing content to Reddit with automatic adaptation, enforcement of subreddit rules, and support for flairs and cooldowns.
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.
Related MCP server: Pipepost
How It Works
Your agent generates channel-specific copy variants (rewritten titles, trimmed text, platform-appropriate tags, audience-matched tone).
This MCP publishes each variant with idempotency, OAuth, API retries, and scheduling—enforcing platform constraints automatically.
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
npx @automatelab/content-distribution-mcpOr add it permanently to your MCP host.
Wire into your MCP host
Claude Code — add to .claude/mcp.json:
{
"mcpServers": {
"content-distribution": {
"command": "npx",
"args": ["-y", "@automatelab/content-distribution-mcp"]
}
}
}Claude Desktop — add to claude_desktop_config.json:
{
"mcpServers": {
"content-distribution": {
"command": "npx",
"args": ["-y", "@automatelab/content-distribution-mcp"]
}
}
}n8n — use the MCP Client node, point it at npx @automatelab/content-distribution-mcp over stdio.
Cursor / Windsurf / any MCP host — same npx -y content-distribution-mcp pattern.
Configure credentials
The server reads credentials from a Distribution Profile stored in ~/.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
- LocalLLaMAOnly 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.
Tool | Purpose |
| Immediate publish; idempotent on |
| Queue variants for |
| Fire all scheduled posts due now — run from cron |
| Per-channel state for a content piece or channel |
| Best-effort delete (DEV.to sets unpublished; others vary) |
| Per-channel metadata: char limits, Markdown support, tag vocab |
| Names of configured distribution profiles |
| Subreddit 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 key | Tier | Auth |
| Auto |
|
| Auto |
|
| Auto |
|
| Auto-gated |
|
| Auto |
|
| Browser fallback | returns |
| Browser fallback | returns |
| Browser fallback | returns |
Example agent call
// 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:
# fire due posts every 5 minutes
*/5 * * * * npx -y content-distribution-mcp drainOr call the post_drain MCP tool directly from an agent.
Environment variables
Variable | Default | Purpose |
|
| State backend ( |
|
| Directory 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:
grep -ri "anthropic" node_modules/content-distribution-mcp/dist/ # returns nothingPart of the AutomateLab stack
agency-os — control plane
content-distribution-mcp — this package
automatelab.tech — blog and tutorials
License
MIT
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 Servers
- Flicense-quality-maintenanceAn MCP server that repurposes text or URL content into platform-optimized posts for Twitter, LinkedIn, Instagram, and newsletters using AI. It enables users to automatically transform articles and blog posts into engagement-ready social media threads and professional captions.Last updated
- AlicenseAqualityCmaintenanceCross-publishes a single markdown draft to 5 CMS platforms (dev.to, Hashnode, Ghost, WordPress, Medium) and 4 social networks (Bluesky, Mastodon, LinkedIn, X) from any MCP client, with built-in SEO scoring, schema.org JSON-LD, and canonical URL handling so cross-posts compound search rankings instead of competing.Last updated291233MIT
- Alicense-qualityDmaintenanceCampaign-driven social engagement MCP server for authentic developer community interaction (Dev.to, Bluesky, Twitter, Reddit) with a streamlined scout-draft-strike pipeline minimizing LLM round trips.Last updatedMIT
- Flicense-qualityDmaintenanceAn MCP server that formats and syndicates Markdown content to Twitter/X, Threads, and a static blog on S3, with automatic thread splitting and preview capabilities.Last updated
Related MCP Connectors
FastMCP server for posting formatted content to X (Twitter) — Tollbooth-monetized, DPYC-native
Connect any AI agent to 11+ social platforms: schedule, publish & track posts via hosted MCP.
Post, schedule and read analytics on X, LinkedIn, Instagram, TikTok, YouTube, Bluesky and more.
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/AutomateLab-tech/content-distribution-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server