News Checker MCP has three clearly registered tools with visible schemas and descriptions. All tools use proper Zod schema validation, and all parameters have type constraints and descriptions. However, several issues reduce the quality score: (1) Tool descriptions lack actionable guidance for LLM selection, they describe what the tool does but not WHEN to use it or dependencies between tools. (2) Output schemas are not explicitly documented, while tools return structured `{ content: [{ type: "text", text: ... }] }` responses, there is no formal schema definition for the response structure. (3) Error handling is basic, error messages state what failed but do not guide recovery or suggest alternatives. (4) The `read_article` tool accepts arbitrary URLs with minimal validation beyond URL format, creating security and robustness risks. (5) Tool composition is sound, `check_news` returns articles with URLs that `read_article` can consume, but this dependency is not documented in descriptions.
最新ニュースを取得します。ジャンルを指定して世界中のニュースソースから最新記事を一覧表示。デフォルトでは世界の主要ニュースを横断的に取得します。
利用可能なニュースカテゴリの一覧を表示します。
ニュース記事のURLを指定して本文を取得します。check_newsで見つけた記事の詳細を読むのに使います。
Output schemas not documented. Tools return responses with { content: [{ type: "text", text: ... }], isError?: true } structure, but this is never formally declared. LLMs cannot plan downstream calls or validate response fields if the output schema is implicit.
Tool descriptions lack WHEN/WHY guidance and inter-tool dependencies. Description for 'check_news' does not say 'call list_categories first to see available genres' or 'this is the entry point before read_article'. LLMs may invoke tools in suboptimal order.
Error messages do not guide recovery. Both 'check_news' and 'read_article' catch errors and return isError=true with a generic message ('ニュースの取得に失敗しました: <error>'). LLMs cannot determine if the error is retryable, user-fixable, or fatal. No suggestions for next steps.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 53 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 51 | - | v1 |
read_article accepts arbitrary URLs without domain allowlisting or rate limiting. Malicious or compromised agents could be tricked into fetching internal URLs (SSRF), phishing URLs, or spamming external services. No input sanitization.
No pagination support in check_news. Although count is capped at 50, there is no offset/cursor for fetching additional pages. If the LLM needs more than 50 articles, it has no way to get them. For a news tool, this limits utility when searching for older or less recent content.
check_news does not document which news sources are queried per category. LLMs cannot explain to users where the news comes from. The list_categories tool hints at sources ('BBC, Reuters, ...' in labels), but check_news does not confirm these are actually fetched.