Linear-server defines 4 read-only tools with basic schemas and descriptions. All tools have input schemas with type definitions and descriptions present. However, descriptions are generic (avg 60 chars, well below the 194-char baseline for A+ tools), parameter descriptions lack actionable detail, and output schemas are not documented. No error recovery guidance. Tools accept string parameters that should be enums (status, assignee, team), LLMs will hallucinate invalid values. No pagination support despite fetching lists. Missing tool annotations (readOnlyHint). Composition is reasonable (single responsibility per tool), but parameter design forces unnecessary lookups (e.g., 'assignee' as free-form string instead of enum or ID).
Get detailed information about a specific task
Get tasks from Linear with optional filtering
Get a list of teams in the Linear workspace
Get a list of users in the Linear workspace
Parameter descriptions lack actionable constraints. 'Filter by status' does not tell LLM valid values (Todo, In Progress, Done, etc.). Should use enum or explicit list in description.
Output schema not documented. LLMs cannot plan downstream calls or extract required fields (e.g., task IDs for get_task_details). Responses are JSON strings, not structured objects.
No pagination support. get_tasks returns up to 100 items but no cursor, offset, or total_count. Large result sets will blow context window.
Tool descriptions are too short (40 - 50 chars). Baseline for A+ tools is 194 chars. Descriptions lack WHEN to use, WHAT it returns, and dependencies (e.g., 'Call get_teams first to find team IDs').
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 49 | 2026-07-28+ | v2 |
No error recovery guidance. Error responses are raw exception messages (e.g., 'Task with ID X not found'). Should suggest next steps: 'Try get_tasks() to find valid task IDs.'