Multi Platform Publisher
FreeNot checkedPublish content to X/Twitter, LinkedIn, WeChat, and Xiaohongshu with one command
About
Publish content to X/Twitter, LinkedIn, WeChat, and Xiaohongshu with one command
README
Multi-Platform Publisher
One command. Every platform. Your content, auto-adapted.
Write once — get a Twitter thread, a LinkedIn post, a WeChat HTML draft, a Xiaohongshu note,
and a full self-media content pipeline behind it. Agent-native, 13 platforms, MIT.
Per-platform output gallery
The same input piece, reshaped by each adapter — real published assets, not mockups.
X / Twitter — threads, not the same text
The Twitter adapter strips markdown, splits at 270 chars with numbering, and chains the post as a thread. Inline images and the original URL are preserved.
LinkedIn — clean paragraphs, 3000-char cap
LinkedIn gets a professional-register rewrite: no markdown artifacts, real paragraph breaks, hashtag block at the end. (Real post screenshot lands here after the next campaign — the adapter is live today.)
WeChat Official Account — HTML draft, never auto-published
WeChat is safety-locked to the draft box — publish_to_platforms returns a draft_id, never a public URL. You review and tap publish in the Official Account dashboard. The image above is the cover art generated for a real MPP article; the body is rendered as styled HTML by adapters/wechat_adapter.py.
Xiaohongshu — emoji, tags, and an 8-slide carousel
Xiaohongshu's native format is image-text with a cover + carousel + 1000-char body. The XHS adapter injects emoji, appends topic tags, and respects the cap. The 8-card set above is the actual XHS post for multi-platform-publisher itself — published via the same MCP tool you're about to install.
TL;DR
One piece of content in. Thirteen platform-native posts out.
┌───────────────────────────────┐
┌──────────────┐ │ content adaptation engine │
│ Markdown │──┐ │ per-platform: length, format, │
│ or inline │ │ │ tone, hashtags, threads │
└──────────────┘ ├────────────▶───────────────────────────────┤
┌──────────────┐ │ │ API adapters browser auto │
│ + images │──┘ │ X · LinkedIn HN · Reddit │
└──────────────┘ │ WeChat · XHS note · Substack│
└───────────────┬───────────────┘
│
┌─────────────────────────────────────────┼─────────────────────┐
▼ ▼ ▼ ▼
X / Twitter thread LinkedIn post WeChat HTML draft Xiaohongshu note
Dev.to · Qiita YouTube Hacker News · Reddit note.com · Substack
- Inputs — a Markdown file or inline text, optional images
- Engine —
utils/content_adapter.pyreshapes per platform (char limits, threads, HTML, emoji, tags) - Three surfaces — an MCP server (
python -m mcp_server), a one-command CLI (main.py), and the super-writer content pipeline behind it (topic → AI draft → human review → publish)
Quick start
Option A — As an MCP server (recommended for Agent use)
# 1. Install
git clone https://github.com/mguozhen/multi-platform-publisher
cd multi-platform-publisher && pip3 install -r requirements.txt
# 2. Register with your agent (one line)
claude mcp add mpp -- python -m mcp_server
# 3. Set credentials for the platforms you want (env or ~/.openclaw/openclaw.json)
export TWITTER_API_KEY="..." LINKEDIN_ACCESS_TOKEN="..."
export WECHAT_APPID="..." XHS_COOKIE="..."
Then in any MCP-capable agent:
Use the
mppMCP server to publish~/post.mdto X and LinkedIn, and preview the WeChat draft first.
The agent calls adapt_content (free preview), then publish_to_platforms, and returns the per-platform results.
Option B — One-command CLI
python3 main.py publish --file article.md --platforms all
python3 main.py publish --content "My post about #AI" --platforms twitter,linkedin
Option C — Preview first (dry run)
python3 main.py publish --content "My post" --dry-run
Shows exactly how the content will be reshaped for each platform — no posting.
Option D — Utility commands
python3 main.py list-platforms # platforms + credential status
python3 main.py validate # check credentials for every configured platform
MCP tools
| # | Tool | Input | When to use |
|---|---|---|---|
| 1 | publish_to_platforms |
content/file_path, platforms[], images[], dry_run | Default — adapt + publish (or dry-run) to N platforms in one call |
| 2 | adapt_content |
content/file_path, platform? | Preview the reshape per platform — free, no network |
| 3 | list_supported_platforms |
(none) | Pre-flight: who is available, with what limits |
| 4 | validate_credentials |
platform | "Are my keys set?" — no network call |
All tools return JSON-serializable dicts. Errors come back in a structured shape with type + suggested_action + retryable — see docs/errors.md.
Capability manifest: .well-known/agent-capabilities.json.
Supported platforms
Two surfaces. The publisher (main.py + MCP) covers four platforms over official APIs. The super-writer pipeline adds nine more through dedicated publishers.
| Platform | Surface | Auth | Output |
|---|---|---|---|
| X / Twitter | publisher | OAuth 1.0a | Tweets, threads, image + video upload |
| publisher | OAuth 2.0 | Posts, articles, images | |
| WeChat Official Account | publisher | API token | HTML article → draft box |
| Xiaohongshu (小红书) | publisher | Cookie | Image-text note |
| Dev.to | super-writer | REST API | English dev article |
| Qiita | super-writer | REST API | Japanese dev article |
| YouTube | super-writer | Data API v3 | Video + Shorts |
| Hacker News | super-writer | browser automation | Link / text submission |
| super-writer | browser automation | Subreddit post | |
| note.com | super-writer | browser automation | Japanese essay |
| Substack | super-writer | browser automation | English long-form + Notes |
| 抖音 / Douyin | super-writer | browser automation | Short video |
| 视频号 / Channels | super-writer | manual | 1–3 min video |
Publishing red lines are respected: WeChat stops at the draft box (never auto-publishes), Xiaohongshu and Reddit run human-in-the-loop, and risky platforms surface a confirmation step. See
super-writer/playbooks/.
Content adaptation
The same source is reshaped, not just truncated:
- X / Twitter — strips Markdown, splits into 270-char tweets, builds numbered threads
- LinkedIn — professional register, clean paragraphs, up to 3,000 chars
- WeChat — styled HTML article rendered into a draft (manual publish in the dashboard)
- Xiaohongshu — casual tone, emoji injection, topic tags, 1,000-char cap
- Dev.to / Qiita — front-matter + tags, English / Japanese dev framing
- Substack / note.com — long-form essay + short Notes
Each is testable in isolation via adapt_content(content=..., platform=...).
The super-writer pipeline
super-writer/ is a complete one-person self-media production line:
topic gacha → AI draft (persona-locked) → cover + layout → Telegram review → multi-platform publish
super-writer/tools/gacha.py— topic selector, aggregates 5 sources with scoringsuper-writer/tools/telegram-bridge/— human-in-the-loop review bridge + per-platform publisherssuper-writer/tools/{hn,note,reddit}_publish.py— browser-automation publishers for API-less platformssuper-writer/playbooks/— 15 platform / content-type writing playbookssuper-writer/platform-roadmap.md— live / queued / manual platform statussuper-writer/persona.md— account persona
vs. the alternatives
| multi-platform-publisher | Buffer / Hootsuite | Typefully | Manual posting | |
|---|---|---|---|---|
| Per-platform content adaptation | ✅ reshapes tone + format | ⚠️ same text everywhere | ⚠️ Twitter-only | ✅ but by hand |
| Agent-callable (MCP) | ✅ 4 MCP tools | ❌ | ❌ | ❌ |
| Dry-run preview | ✅ adapt_content (free) |
⚠️ limited | ✅ Twitter only | n/a |
| WeChat / Xiaohongshu / Dev.to / Qiita | ✅ | ❌ | ❌ | ✅ |
| Content pipeline (topic → draft → review) | ✅ super-writer | ❌ | ❌ | ❌ |
| Per-platform failure isolation | ✅ | ❌ batch fails as one | n/a | n/a |
| Cost | free, MIT | $6–99/mo | $12.50/mo | free |
| Open source | ✅ | ❌ | ❌ | — |
Architecture
multi-platform-publisher/
├── mcp_server.py # MCP entrypoint — 4 tools (publish, adapt, list, validate)
├── main.py # CLI entrypoint + orchestrator
├── adapters/
│ ├── base_adapter.py # abstract base: publish() / validate() / upload_image()
│ ├── twitter_adapter.py # X / Twitter — OAuth 1.0a
│ ├── linkedin_adapter.py # LinkedIn — OAuth 2.0
│ ├── wechat_adapter.py # WeChat Official Account — API token
│ └── xiaohongshu_adapter.py # Xiaohongshu — cookie
├── utils/
│ ├── config_loader.py # env > openclaw.json > config.json
│ ├── content_adapter.py # per-platform content transformation
│ ├── image_handler.py # resize / validate before upload
│ └── logger.py
├── super-writer/ # one-person self-media content pipeline
│ ├── tools/ # gacha, telegram-bridge, per-platform publishers
│ ├── playbooks/ # 15 writing playbooks
│ ├── platform-roadmap.md
│ └── persona.md
├── .well-known/
│ └── agent-capabilities.json # discovery manifest for Agents
├── docs/
│ ├── errors.md # semantic error code reference
│ ├── screenshots/ # per-platform output gallery (shown above)
│ └── mcp-distribution/ # paste-ready catalog submission package
├── podcasts/ # sample podcast audio
├── tests/
├── SKILL.md # OpenClaw skill definition
└── manifest.json
- Adapters — each platform isolated behind
BaseAdapter; adding one is a single file - Config precedence — environment variables >
~/.openclaw/openclaw.json> localconfig.json - Secrets — never committed;
.env, cookies, and browser profiles are gitignored
Configuration
Credentials load with this precedence: env vars → ~/.openclaw/openclaw.json → config.json.
{
"skills": {
"entries": {
"multi-platform-publisher": {
"enabled": true,
"env": {
"TWITTER_API_KEY": "...",
"LINKEDIN_ACCESS_TOKEN": "...",
"WECHAT_APPID": "...",
"XHS_COOKIE": "..."
}
}
}
}
}
See config.json.example for the full key list. Per-platform keys are independent — set only the platforms you want.
Distribution / where to find us
| Channel | Status |
|---|---|
GitHub topics (mcp, mcp-server, cross-post) |
🟢 indexed |
| Glama | 🟢 Auto-indexed via repo topics |
| punkpeye/awesome-mcp-servers | 🟡 submission ready (docs/mcp-distribution/) |
| mcp.so / Smithery / PulseMCP | 🟡 submission package ready, pending OAuth |
| Official MCP Registry | 🟡 pending PyPI publish |
Paste-ready submission package in docs/mcp-distribution/.
Roadmap
- 4 API adapters — X, LinkedIn, WeChat, Xiaohongshu
- Content adaptation engine
- super-writer content pipeline merged in
- Browser-automation publishers — Hacker News, Reddit, note.com, Substack
- MCP server (4 tools) + capability manifest + semantic error codes
- Real LinkedIn published screenshot for the gallery
- PyPI publish + Official MCP Registry submission
- Promote super-writer publishers into first-class
adapters/ -
npx skills add mguozhen/multi-platform-publisherone-line install - Scheduled / queued publishing
Development
python3 -m pip install pytest
python3 -m pytest
License
MIT — see LICENSE.
Author: mguozhen
Installing Multi Platform Publisher
This server has no published package — it is built from source. Open the repository and follow its README.
▸ github.com/mguozhen/multi-platform-publisherFAQ
Is Multi Platform Publisher MCP free?
Yes, Multi Platform Publisher MCP is free — one-click install via Unyly at no cost.
Does Multi Platform Publisher need an API key?
No, Multi Platform Publisher runs without API keys or environment variables.
Is Multi Platform Publisher hosted or self-hosted?
Self-hosted: the server runs locally on your machine via the install command above.
How do I install Multi Platform Publisher in Claude Desktop, Claude Code or Cursor?
Open Multi Platform Publisher on unyly.org, pick your client tab (Claude Desktop, Claude Code, Cursor) and press Install — the config is generated automatically, no JSON editing.
Related MCPs
ARA
Generate images, video and audio from any AI agent — one connector.
by ARAOmni Video
An MCP server that transforms LLM-enabled IDEs into professional video editors by pre-processing footage into text proxies, generating motion graphics via HTML/
by buildwithtazaYouTube
Transcripts, channel stats, search
by YouTubeEverArt
AI image generation using various models.
by modelcontextprotocolCompare Multi Platform Publisher with
Not sure what to pick?
Find your stack in 60 seconds
Author?
Embed badge for your README
Browse similar
All media MCPs







