Server provides 5 read-only tools with reasonable naming and decent descriptions, but lacks comprehensive parameter documentation and output schemas. All tools follow verb-first naming conventions (list_*, get_*) which is positive. Descriptions are adequate (100-200 chars) and explain the tools' purposes. However, parameter descriptions are inconsistent, some parameters have good guidance while others lack context. Output schemas are not formally documented; tools return JSON strings without declared field structures. No error handling guidance is provided to agents. The codebase shows competent implementation (proper DB access, OPML parsing, feed normalization) but the tool interface itself is underdeveloped by production standards.
Get all starred (bookmarked) articles across every account. Args: limit: Max articles to return (default 20, max 100).
Get articles that arrived since midnight today. Args: limit: Max articles to return (default 50, max 200).
Get unread articles, newest first. Args: limit: Max articles to return (default 20, max 100). feed_url: Filter to a single feed's RSS URL (xmlUrl from list_feeds). account_folder: Filter to a specific account folder (e.g. 'OnMyMac').
List all NetNewsWire accounts (e.g. 'On My Mac', Feedly, Feedbin) with feed counts.
List RSS feeds the user subscribes to, grouped by folder. Args: account_folder: Limit to a specific account folder name (e.g. 'OnMyMac'). Omit to list feeds from all accounts.
Output schemas not documented. Tools return JSON strings but do not declare what fields agents should expect (account, title, url, datePublished, etc.). LLMs cannot reliably extract required data or plan downstream operations without documented output structure.
Missing error recovery guidance. Tools return plain JSON on success but provide no actionable error messages to guide agent behavior. For example, if NNW is not installed or a database cannot be opened, agents receive 'No NetNewsWire accounts found' with no suggestion to verify app installation or retry logic.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 59 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 17 | - | v1 |
No input validation or constraint documentation for numeric limits. Parameters like 'limit' (default 20, max 100) and 'limit' (default 50, max 200) for different tools are inconsistent and undocumented in descriptions. Tools silently clamp values (limit = min(max(1, limit), 100)) rather than returning clear constraint violation errors.
Parameter 'feed_url' in get_unread_articles expects an RSS URL from list_feeds output, but this dependency is documented in the description text rather than formally declared in the parameter schema. No guidance on what happens if the feed_url does not match any feed or is malformed.
Inconsistent limit defaults and maximums across similar tools. get_unread_articles allows max 100, get_today_articles allows max 200, get_starred_articles allows max 100. No explanation for why these differ, and agents may be confused about which tool to use for large result sets.