Server has 8 tools with basic schemas and descriptions, but significant gaps limit production readiness. All tools have descriptions (10-50 chars, mostly under the 50-200 char LLM-optimized range), and input schemas are present with type definitions. However, output schemas are completely undocumented, LLMs cannot plan downstream calls or extract structured data. Error handling returns generic strings without recovery guidance. No tool annotations (readOnlyHint/destructiveHint) despite clear risk levels. Parameter descriptions are minimal (e.g., 'Search query' lacks format/length constraints). No pagination support for list-like tools (search_twitter, get_user_tweets, get_timeline). Rate limiting is implemented server-side but not exposed to the LLM, risking silent failures.
Delete a direct message by its ID.
Delete a tweet by its ID.
Get tweets from your home timeline (Following).
Get tweets from your home timeline (For You).
Get tweets from a specific user's timeline.
Post a tweet with optional media, reply, and tags.
Search twitter with a query. Sort by 'Top' or 'Latest'
No output schemas documented. LLMs cannot infer response structure, plan chaining, or extract required fields for downstream calls. E.g., search_twitter returns markdown string; LLM cannot extract tweet_id for reply_to parameter in post_tweet.
Error handling returns generic strings ('Failed to X: {e}') without recovery guidance. LLM cannot determine if error is retryable, user-fixable, or fatal. E.g., 'Failed to search tweets: 401' gives no hint to re-authenticate or check credentials.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels. delete_tweet and delete_dm are destructive; search_twitter and get_* are read-only. LLM cannot reason about safety or retry semantics.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | <=2025-11-25 | v2 |
Send a direct message to a user.
List-like tools (search_twitter, get_user_tweets, get_timeline, get_latest_timeline) lack pagination. count parameter caps results but no offset/cursor or total_count returned. Large result sets blow context window; no way to fetch next page.
Parameter descriptions are minimal and lack constraints. E.g., 'Search query' (12 chars) does not specify length limits, special characters, or format. 'Sort order: Top or Latest' lacks enum constraint. LLM may pass invalid values; no validation guidance.