MCP server for reading WeChat (微信) Official Account articles, with native multimodal output (images + video keyframes).
Single tool with clear purpose and decent structure, but missing several critical elements. The tool has a properly typed input schema and a detailed description (270+ chars), exceeding the baseline of 194 chars avg. However, output schema is intentionally absent (tool returns heterogeneous list of content blocks rather than structured data), which aligns with the tool's design but complicates LLM reasoning about what to expect. The parameter 'url' has a description and format constraint. Error handling returns text blocks prefixed with 'Error:' but does not provide recovery guidance or error classification. No permission gates, audit logging, or tool annotations (readOnlyHint, idempotentHint). The tool name 'read_article' is clear and verb-first, following the verb_noun convention.
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 10) 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:".
Output schema missing and no documentation of return structure. Tool explicitly sets output_schema=None and returns a heterogeneous list (list[Any]), but LLMs cannot reason about the structure (text blocks, image blocks, video markers). Documentation in the docstring mentions the expected block sequence but this is not machine-parseable.
Error responses lack recovery guidance. When fetch fails or URL is invalid, the tool returns 'Error: <message>' as a text block but does not guide the LLM on next steps (e.g. 'Try a different article URL' or 'Check that the URL is a valid WeChat Official Account article').
No error classification. Tool returns errors as plain text blocks without categorizing them as retryable (fetch timeout), user-fixable (invalid URL format), or fatal (article deleted). LLM cannot determine optimal recovery strategy.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 66 | <=2025-11-25 | v2 |
Missing tool annotations. Tool has read-only semantics (no state modification, no side effects) but does not declare readOnlyHint=true. This prevents LLM planning optimizations and makes audit trails less clear.
No audit logging or permission gates. Tool fetches external content but has no logging of access (what article was read, by whom, when) and no permission checks. For a tool that may expose sensitive content, lack of audit trail is a security gap.
Parameter 'url' allows any string starting with the WeChat domain but does not validate format strictly. The schema checks type=string and description mentions format but does not use regex pattern constraint. LLM could pass malformed URLs and encounter cryptic errors.