MCP server for fetching and reading news articles from Dantri News (Vietnamese news source)
Server has 6 tools with basic schemas and descriptions, but significant gaps limit production readiness. All tools have descriptions (10-50 chars, mostly short), and input schemas are present with type definitions. However, descriptions lack depth, they state WHAT but not WHEN or WHY to use each tool. Parameter descriptions are minimal (e.g., 'News category' without explaining valid values or defaults). Output schemas are not documented, LLMs cannot predict response structure. Error handling is present but generic ('Cannot fetch article' with no recovery guidance). No tool annotations (readOnlyHint, etc.). Tool naming is reasonable (verb_noun pattern: get_*, fetch_*, read_*) but some tools overlap in purpose (read_article, full_article, summarize_article all fetch the same resource differently), creating ambiguity for LLM selection.
Get metadata information about an article
Get list of available news categories
Retrieve the complete content of an article from its URL
Fetch latest news articles from a specific category
Read an article in chunks from its URL
Generate a summary of an article from its URL
Output schemas not documented. LLMs cannot predict response structure (e.g., does latest_news return 'articles' array or 'items'? What fields does each article contain?). Forces agents to guess and retry on parsing failures.
Overlapping tool purposes. read_article, full_article, and summarize_article all fetch the same resource but return different formats. LLM must reason about subtle differences (chunked vs full vs summary) without clear guidance on when to use each. Consider consolidating into fetch_article with a 'format' parameter.
Descriptions are too short (10-50 chars) and lack context. 'Fetch latest news articles from a specific category' does not explain WHEN to use this vs categories() or when pagination is needed. Descriptions should be 50-200 chars and answer: What? When? Prerequisites?
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 48 | 2026-07-28+ | v2 |
Error handling is generic and non-actionable. 'Cannot fetch article' tells the LLM nothing about why it failed (network error? invalid URL? timeout?) or what to do next. Should return: error type, invalid value, constraint violated, and recovery suggestion.
No tool annotations. Tools lack readOnlyHint, destructiveHint, or idempotentHint. All tools are read-only (safe to retry), but this is not declared in the schema. Agents cannot optimize retry logic without explicit hints.