weixin-articles-mcp
This server lets you read WeChat Official Account articles (mp.weixin.qq.com/s/...) and receive their full multimodal content for LLMs.
Article metadata: Extracts title, account name, publish time, cover URL, and video count.
Article body: Full content converted to Markdown.
Inline images: Up to 10 PNG/JPG images returned as native image content blocks (GIFs filtered); the LLM can see them directly.
Embedded video content (up to 3 videos per article):
WeChat-native & Tencent Video: 8 evenly-spaced keyframe images via ffmpeg/yt-dlp.
WeChat Channels (视频号): Hi-res cover image + metadata (duration, dimensions, like count, publisher verification, description).
Error handling: Returns a single text block starting with
"Error:"on failure.
Reads WeChat Official Account articles, returning article text, images, and video keyframes as native content blocks for LLM consumption.
weixin-articles-mcp
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 |
| ✅ (often blocked by anti-bot) | ❌ URLs only | ❌ |
Existing WeChat MCPs / Skills | ✅ | ❌ URLs only | ❌ |
weixin-articles-mcp | ✅ | ✅ Native image blocks | ✅ Keyframes as image blocks |
Related MCP server: WeChat Article Parser
Features
📰 Reliable WeChat scraping — pure Python
httpxGET, no Rust binary or headless browser required🖼️ Native image content — PNG/JPG returned as MCP
Imageblocks, GIFs filtered, capped at 10 per article🎬 Video handling for all three embed types:
WeChat Official Account native videos (
<iframe data-mpvid="wxv_*">): mp4 extracted from inline JS, 8 evenly-spaced keyframes via ffmpegTencent Video (
v.qq.comiframes): yt-dlp + ffmpeg keyframesWeChat Channels (视频号,
<mp-common-videosnap>): full metadata via the publicbatch_get_video_snapAPI (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 ctUnix timestamp that other parsers miss🪶 Minimal install —
pip install+ optionalffmpegfor video; no Chromium, no Rust
Install
# Core (article + images)
pip install weixin-articles-mcp
# With video keyframe support
pip install "weixin-articles-mcp[video]"
brew install ffmpeg # or apt install ffmpeg on LinuxConfigure
Claude Desktop / Claude Code
{
"mcpServers": {
"weixin-articles": {
"command": "weixin-articles-mcp"
}
}
}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:
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
WeChat article fetching with anti-bot handling
Native image content blocks
WeChat Official Account native video keyframe extraction
Tencent Video keyframe extraction
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.
Every open-source WeChat Channels downloader in the wild — ltaoo/wx_channels_download, qiye45/wechatVideoDownload, putyy/res-downloader, KingsleyYau/WeChatChannelsDownloader and others — solves this with a MITM HTTPS proxy + WeChat PC client + root CA installation. That model is fundamentally incompatible with how an MCP server runs (no client, no user interaction, no admin install).
What we do instead: call WeChat's public batch_get_video_snap API (no cookie or session required) to give your LLM the next-best thing — high-resolution cover image, full description, duration, dimensions, like count, and publisher verification. For most use cases (reading and summarizing articles), this is enough to convey the video's substance.
Pairing with wx_channels_download for full Channels mp4
If your workflow really needs the mp4 file (archiving, transcoding, frame-perfect inspection), pair this MCP with wx_channels_download, the most active open-source Channels downloader:
Tool | Role |
weixin-articles-mcp (this) | LLM reads article body + images + native/Tencent video keyframes + Channels metadata (cover, duration, description) |
wx_channels_download | You download the actual Channels mp4 by playing it in WeChat PC client (MITM proxy intercepts the stream) |
Suggested flow:
Ask your LLM to read the article via this MCP. It surfaces which Channels videos are embedded, their durations, descriptions, and covers.
Based on that summary, decide whether you want the raw mp4.
If yes, open the article in WeChat PC client with
wx_channels_downloadrunning, hit play, click its injected download button.
This division keeps the MCP itself zero-side-effects (only reads public URLs, no MITM, no client) while still giving you a path to the full mp4 when you actually need it.
Architecture
src/weixin_articles_mcp/
├── server.py # FastMCP entrypoint, tool registration
├── fetcher.py # httpx GET with browser UA
├── parser.py # WeChat DOM extraction (BeautifulSoup + lxml)
├── markdown.py # HTML → Markdown (markdownify subclass)
└── media.py # Image download + video download/keyframe extractionContributing
PRs welcome. Particularly looking for help on:
WeChat Channels (视频号) URL handling
Resilience to template variants from less common publishers
More test fixtures (different article styles)
Open an issue: https://github.com/jj-cheng25/weixin-articles-mcp/issues
Disclaimer
This tool is provided for personal, educational, and research use only.
What this tool does:
Reads publicly accessible WeChat article URLs (
mp.weixin.qq.com/s/...) using a standard browser User-Agent — the same content any user with a web browser can viewCalls only public WeChat API endpoints that accept empty authentication fields (i.e. designed by WeChat to be reachable without login)
Enforces a default 1-second minimum interval between requests to prevent the tool from being repurposed as a high-volume crawler
What this tool does not do:
Use cookies, login sessions, or any form of user credential
Bypass any technical protection, anti-bot measure, or encrypted stream (e.g. WeChat Channels mp4 is intentionally not supported — see Why no Channels mp4?)
Decrypt, reverse-engineer, or circumvent WeChat's protocol-level protections
Store, cache, or redistribute fetched content beyond the immediate response
User responsibilities:
Respect WeChat's Terms of Service when using this tool. Personal/research use of publicly accessible articles is generally aligned with how the content is intended to be consumed; high-volume scraping or commercial redistribution likely is not.
Respect copyright of fetched content. Article content remains the property of its original authors and publishers; this tool only fetches and forwards it to your LLM for inline processing.
Do not flood mp.weixin.qq.com — keep usage at human reading rates. The default rate limit is set conservatively, but you can tighten it further by setting
WEIXIN_FETCH_INTERVAL_S=2.0(or higher) in your environment.
The authors and contributors of this project disclaim all liability arising from misuse. By using this software you accept full responsibility for ensuring your usage complies with applicable laws and the terms of service of the services it connects to.
License
MIT — see LICENSE.
Available Tools
1 toolread_articleA
Read a WeChat Official Account article (mp.weixin.qq.com/s/...) and return its content as a multimodal block list:
First text block: title, account, publish time, cover URL, video count, and the full article body in Markdown.
Image blocks: the article's PNG/JPG images (GIFs filtered out, capped at
returned as native image content so the LLM can see them directly.
Per-video groups: a text marker
video kind=... vid=... keyframes=Nfollowed by N evenly-spaced keyframe images (capped at 3 videos).
On failure the response is a single text block starting with "Error:".
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | A WeChat article URL, format: https://mp.weixin.qq.com/s/xxx |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, the description fully discloses behavior: return format (title, account, time, cover, video count, Markdown body), image handling (GIFs filtered, cap at 10), video keyframes (cap at 3), and error format (single text block starting with 'Error:'). This is comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is detailed but efficiently structured: a concise overview followed by a well-organized list of return components. Every sentence adds value, though slightly verbose due to thoroughness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has one parameter, no output schema, and no annotations, the description provides complete guidance: input format, full output structure with all edge cases (errors, caps, filtering). An agent can invoke it correctly without additional info.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage and a single parameter 'url' already described in schema, the description adds only marginal value by repeating the URL format and specifying it's for WeChat account articles. Baseline meets expectation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads a WeChat Official Account article and returns its content as a multimodal block list. It specifies the URL format and details the output structure, leaving no ambiguity about the tool's function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly provide when or when not to use this tool, nor does it mention alternatives (though none exist in context). Usage is implied but not formally guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
With only one tool, there is no ambiguity between tools. The single tool 'read_article' has a clear, distinct purpose.
The single tool name 'read_article' follows a clear verb_noun pattern. Consistency is not an issue with one tool.
One tool is appropriate for the narrow purpose of reading WeChat articles given a URL. While minimal, it matches the server's focused scope.
The tool reads articles thoroughly, but lacks any discovery or listing capabilities. For a server named 'weixin-articles-mcp', the absence of search or listing is a notable gap.
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 Connectors
WeChat Channels videos, comments, users, transcripts, and Official Account article details.
Read WeChat public account articles via MCP. 99.89% anti-scraping success, 50-87% token compression.
Multimodal video analysis MCP — transcription, vision, and OCR for any video URL.
Screenshot, PDF, OG-image, and page extraction (markdown/JSON) over MCP. Bearer key or x402.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables parsing and extracting content from WeChat public account articles using browser simulation, supporting multiple output formats (JSON, Markdown, HTML) and media resource extraction.-
- FlicenseNot gradedqualityDmaintenanceParses WeChat public account articles to extract metadata, content, and generate AI-powered summaries with semantic analysis, viewpoint extraction, and structure analysis capabilities.-
- FlicenseNot gradedqualityDmaintenanceEnables fetching, searching, and summarizing WeChat public account articles through browser automation. Supports multiple output formats and provides article metadata and statistics.1-
- AlicenseNot gradedqualityDmaintenanceEnables reading and extracting content from WeChat public account articles using browser automation, allowing AI models to analyze and summarize WeChat articles through natural language requests.447MIT
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/jj-cheng25/weixin-articles-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server