Install
$ agentstack add mcp-mguozhen-multi-platform-publisher ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ● Environment & secrets Used
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
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 mpp MCP server to publish ~/post.md to 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/filepath, platforms[], images[], dryrun | 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](docs/errors.md).
Capability manifest: [.well-known/agent-capabilities.json](.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 | | LinkedIn | 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 | | Reddit | 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/](docs/mcp-distribution/).
Roadmap
- [x] 4 API adapters — X, LinkedIn, WeChat, Xiaohongshu
- [x] Content adaptation engine
- [x] super-writer content pipeline merged in
- [x] Browser-automation publishers — Hacker News, Reddit, note.com, Substack
- [x] 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](LICENSE).
Author: mguozhen
Source & license
This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: mguozhen
- Source: mguozhen/multi-platform-publisher
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.