Skip to main content
Glama
jj-cheng25

weixin-articles-mcp

by jj-cheng25

weixin-articles-mcp

MCP-сервер для чтения статей из официальных аккаунтов WeChat (微信) с нативным мультимодальным выводом — изображения и ключевые кадры видео возвращаются как блоки контента, а не как URL-адреса.

Для личного использования и исследований. Этот инструмент читает только общедоступные URL-адреса статей и не обходит никакие меры аутентификации или защиты от ботов. Перед использованием ознакомьтесь с разделом Отказ от ответственности.

License: MIT Python 3.10+ GitHub stars

Зачем это нужно

Другие инструменты, читающие статьи WeChat для LLM, возвращают список URL-адресов изображений — вашей LLM приходится переходить по ним, чтобы увидеть контент, что требует дополнительных запросов и контекста.

Этот сервер возвращает сами изображения. И ключевые кадры видео. Ваша LLM видит то же, что и вы, за один раз.

Инструмент

Текст статьи

Изображения

Видео

WebFetch (встроенный)

✅ (часто блокируется анти-ботами)

❌ Только URL

❌

Существующие WeChat MCP / Skills

✅

❌ Только URL

❌

weixin-articles-mcp

✅

✅ Нативные блоки изображений

✅ Ключевые кадры как блоки изображений

Related MCP server: WeChat Article Parser

Возможности

  • 📰 Надежный парсинг WeChat — чистый Python httpx GET, не требуются Rust-бинарники или headless-браузеры

  • 🖼️ Нативный контент изображений — PNG/JPG возвращаются как блоки MCP Image, GIF-файлы фильтруются, ограничение — 10 штук на статью

  • 🎬 Обработка видео для всех трех типов встраивания:

    • Нативные видео официальных аккаунтов WeChat (<iframe data-mpvid="wxv_*">): mp4 извлекается из встроенного JS, 8 равномерно распределенных ключевых кадров через ffmpeg

    • Tencent Video (v.qq.com iframes): yt-dlp + ключевые кадры через ffmpeg

    • WeChat Channels (视频号, <mp-common-videosnap>): полные метаданные через публичный API batch_get_video_snap (длительность, размеры, обложка высокого разрешения, полное описание, количество лайков, верификация издателя) + обложка. Поток mp4 защищен протоколом WeChat finder — см. Почему нет mp4 для Channels? ниже

  • 🕒 Восстановление времени публикации — извлекает Unix-метку времени var ct, которую пропускают другие парсеры

  • 🪶 Минимальная установка — pip install + опционально ffmpeg для видео; без Chromium, без Rust

Установка

# 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 Linux

Настройка

Claude Desktop / Claude Code

{
  "mcpServers": {
    "weixin-articles": {
      "command": "weixin-articles-mcp"
    }
  }
}

Cursor / Cline

Используйте тот же JSON, вставьте его в конфигурацию MCP-сервера вашего клиента.

Использование

После настройки просто вставьте URL статьи WeChat в ваш диалог:

Read https://mp.weixin.qq.com/s/cexkyzQBRDG3uIF6g5cEbQ

Ваша LLM получит:

  • Метаданные статьи (заголовок, аккаунт, время публикации, URL обложки)

  • Полный текст статьи в формате Markdown

  • Все встроенные PNG/JPG изображения как нативные блоки контента

  • Для каждого видео — 8 ключевых кадров в виде изображений

Справочник инструментов

read_article(url: str) -> list[content_block]

Возвращает список блоков контента MCP:

  • [0] — текстовый блок: метаданные + Markdown-текст статьи

  • [1..N] — блоки изображений: изображения из статьи (макс. 10, GIF-файлы отфильтрованы)

  • Для каждого видео (макс. 3):

    • Нативное WeChat или Tencent: один текстовый маркер + 8 блоков изображений с ключевыми кадрами

    • WeChat Channels: один текстовый маркер (с длительностью, размерами, количеством лайков, издателем, описанием) + 1 блок изображения обложки высокого разрешения

В случае ошибки возвращает один текстовый блок, начинающийся с Error:.

Дорожная карта

  • [x] Получение статей WeChat с обходом анти-ботов

  • [x] Нативные блоки контента изображений

  • [x] Извлечение ключевых кадров нативных видео официальных аккаунтов WeChat

  • [x] Извлечение ключевых кадров Tencent Video

  • [x] Обогащение метаданных WeChat Channels (视频号) через публичный API

  • [ ] Субтитры ASR через faster-whisper (для нативных видео и видео Tencent)

  • [ ] Полнотекстовый поиск по прочитанным статьям

  • [ ] Подписка на аккаунты / уведомления о новых статьях

Почему нет mp4 для Channels?

Короткий ответ: видео WeChat Channels (视频号) в статьях намеренно не предоставляют поток mp4 для публичного веб-доступа. Файл mp4 находится внутри протокола finder WeChat, который требует (а) сессию авторизованного клиента WeChat, (б) специфическое шифрование finder (первые 128 КБ mp4 зашифрованы XOR с фиксированным ключом) и (в) перехват потока с ПК-клиента WeChat на сетевом уровне.

Все существующие загрузчики WeChat Channels с открытым исходным кодом — ltaoo/wx_channels_download, qiye45/wechatVideoDownload, putyy/res-downloader, KingsleyYau/WeChatChannelsDownloader и другие — решают эту задачу с помощью MITM HTTPS-прокси + ПК-клиент WeChat + установка корневого CA. Эта модель фундаментально несовместима с тем, как работает MCP-сервер (нет клиента, нет взаимодействия с пользователем, нет прав администратора).

Что мы делаем вместо этого: вызываем публичный API WeChat batch_get_video_snap (не требуются cookie или сессия), чтобы предоставить вашей LLM лучшее из возможного — обложку высокого разрешения, полное описание, длительность, размеры, количество лайков и верификацию издателя. Для большинства задач (чтение и суммаризация статей) этого достаточно, чтобы передать суть видео.

Если вам конкретно нужен файл mp4, установите один из специализированных инструментов выше вместе с этим MCP — они дополняют друг друга.

Архитектура

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 extraction

Вклад в проект

PR приветствуются. Особенно ищем помощь по:

  • Обработке URL-адресов WeChat Channels (视频号)

  • Устойчивости к вариантам шаблонов от менее распространенных издателей

  • Большему количеству тестовых примеров (разные стили статей)

Откройте issue: https://github.com/jj-cheng25/weixin-articles-mcp/issues

Отказ от ответственности

Этот инструмент предоставляется только для личного, образовательного и исследовательского использования.

Что делает этот инструмент:

  • Читает общедоступные URL-адреса статей WeChat (mp.weixin.qq.com/s/...), используя стандартный User-Agent браузера — тот же контент, который может просмотреть любой пользователь с веб-браузером

  • Вызывает только публичные API-эндпоинты WeChat, которые принимают пустые поля аутентификации (т.е. разработаны WeChat так, чтобы быть доступными без логина)

  • Принудительно устанавливает минимальный интервал в 1 секунду между запросами, чтобы предотвратить использование инструмента в качестве высоконагруженного краулера

Чего этот инструмент не делает:

  • Не использует cookie, сессии входа или любые формы учетных данных пользователя

  • Не обходит никакие технические защиты, меры против ботов или зашифрованные потоки (например, mp4 для WeChat Channels намеренно не поддерживается — см. Почему нет mp4 для Channels?)

  • Не расшифровывает, не занимается обратной разработкой и не обходит защиты протокольного уровня WeChat

  • Не хранит, не кэширует и не распространяет полученный контент за пределами немедленного ответа

Обязанности пользователя:

  • Соблюдайте Условия использования WeChat при использовании этого инструмента. Личное/исследовательское использование общедоступных статей в целом соответствует тому, как этот контент предназначен для потребления; высокообъемный парсинг или коммерческое распространение, вероятно, нет.

  • Соблюдайте авторские права на полученный контент. Содержимое статьи остается собственностью ее оригинальных авторов и издателей; этот инструмент только извлекает и пересылает его вашей LLM для обработки.

  • Не перегружайте mp.weixin.qq.com — поддерживайте скорость использования на уровне человеческого чтения. Лимит скорости по умолчанию установлен консервативно, но вы можете ужесточить его, установив WEIXIN_FETCH_INTERVAL_S=2.0 (или выше) в вашем окружении.

Авторы и участники этого проекта снимают с себя всякую ответственность, возникающую в результате неправильного использования. Используя это программное обеспечение, вы принимаете на себя полную ответственность за обеспечение того, чтобы ваше использование соответствовало применимым законам и условиям обслуживания сервисов, к которым оно подключается.

Лицензия

MIT — см. LICENSE.

Available Tools

1 tool
read_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

    1. returned as native image content so the LLM can see them directly.

  • Per-video groups: a text marker video kind=... vid=... keyframes=N followed by N evenly-spaced keyframe images (capped at 3 videos).

On failure the response is a single text block starting with "Error:".

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesA WeChat article URL, format: https://mp.weixin.qq.com/s/xxx

TDQS

A4.2/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool updatev0.1.0
    • First observedread_article

TDQS

A4.2/5.0

Scored across 1 tool

Disambiguation5/5

With only one tool, there is no ambiguity between tools. The single tool 'read_article' has a clear, distinct purpose.

Naming Consistency5/5

The single tool name 'read_article' follows a clear verb_noun pattern. Consistency is not an issue with one tool.

Tool Count4/5

One tool is appropriate for the narrow purpose of reading WeChat articles given a URL. While minimal, it matches the server's focused scope.

Completeness3/5

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

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers