MCP server for reading WeChat (微信) Official Account articles with native multimodal output - images and video keyframes as content blocks, not URLs.
weixin-articles-mcp
以下摘录自该仓库的 README(片段) · 在 GitHub 读完整 README →
> MCP server for reading **WeChat (微信) Official Account articles**, with native multimodal output — images and video keyframes returned as content blocks, not URLs.
>
> **For personal/research use.** This tool reads only publicly accessible article URLs and does not bypass any authentication or anti-bot measures. See Disclaimer before using.
Why this exists
Other tools that read WeChat articles for LLMs return **a list of image URLs** — your LLM has to click through to actually see them, costing extra round-trips and context.
This server returns **the images themselves**. And the **video keyframes**. Your LLM sees what you see, in one shot.
| Tool | Article text | Images | Videos |
|---|---|---|---|
| WebFetch (built-in) | ✅ (often blocked by anti-bot) | ❌ URLs only | ❌ |
| Existing WeChat MCPs / Skills | ✅ | ❌ URLs only | ❌ |
| **weixin-articles-mcp** | ✅ | ✅ **Native image blocks** | ✅ **Keyframes as image blocks** |
Features
- 📰 **Reliable WeChat scraping** — pure Python httpx GET, no Rust binary or headless browser required
- 🖼️ **Native image content** — PNG/JPG returned as MCP Image blocks, GIFs filtered, capped at 10 per article
- 🎬 **Video handling for all three embed types**:
- **WeChat Official Account native videos** ( ): mp4 extracted from inline JS, 8 evenly-spaced keyframes via ffmpeg
- **Tencent Video** (v.qq.com iframes): yt-dlp + ffmpeg keyframes
- **WeChat Channels** (视频号, ): full metadata via the public batch_get_video_snap API (duration, dimensions, hi-res cover, full description, like count, publisher verification) + cover image. *mp4 stream is locked behind WeChat's finder protocol — see Why no Channels mp4? below*
- 🕒 **Publish time recovery** — extracts var ct Unix timestamp that other parsers miss
- 🪶 **Minimal install** — pip install + optional ffmpeg for video; no Chromium, no Rust
Install
Configure
Claude Desktop / Claude Code
Cursor / Cline
Same JSON, drop into the MCP server config of your client.
Usage
Once configured, just paste a WeChat article URL into your conversation:
> Read https://mp.weixin.qq.com/s/cexkyzQBRDG3uIF6g5cEbQ
Your LLM will receive:
- Article metadata (title, account, publish time, cover URL)
- Full article body in Markdown
- All inline PNG/JPG images as native image content blocks
- For each video, 8 keyframe images
Tool reference
read_article(url: str) -> list[content_block]
Returns a list of MCP content blocks:
- [0] — text block: metadata + article body markdown
- [1..N] — image blocks: article images (max 10, GIFs filtered)
- For each video (max 3):
- **WeChat-native or Tencent**: one text marker + 8 keyframe image blocks
- **WeChat Channels**: one text marker (with duration, dimensions, like count, publisher, description) + 1 hi-res cover image block
On failure, returns a single text block starting with Error:.
Roadmap
- [x] WeChat article fetching with anti-bot handling
- [x] Native image content blocks
- [x] WeChat Official Account native video keyframe extraction
- [x] Tencent Video keyframe extraction
- [x] WeChat Channels (视频号) metadata enrichment via public API
- [ ] ASR subtitles via faster-whisper (for native + Tencent videos)
- [ ] Full-text search across read articles
- [ ] Account subscription / new-article notifications
Why no Channels mp4?
Short answer: WeChat Channels (视频号) videos in articles intentionally don't expose a downloadable mp4 stream to public web access. The mp4 lives inside WeChat's finder protocol, which requires (a) a logged-in WeChat client session, (b) finder-specific encryption (the first 128KB of the mp4 is XOR-encrypted with a fixed key), and (c) intercepting the stream from the WeChat PC client at network level.