An MCP server for extracting specific line ranges from text content
Single tool 'extract-lines' with reasonable naming and parameter types, but falls short of production quality. Tool name follows verb_noun pattern (extract-lines), which is good. Description is present (46 chars) but minimal, it states WHAT but lacks WHEN to use it or context about limitations. Input schema is present with proper Zod types (string, number.int with min constraint), but lacks critical information: the 'end_line' parameter has no upper bound constraint documented, no description of how the tool handles edge cases (e.g., what if end_line exceeds total lines?), and the output schema is not formally documented. Error handling is present in code but responses are text-only, not structured. Per-parameter descriptions are terse (average 42 chars vs. baseline 72 chars). No output schema documentation visible. The tool is READ_ONLY which is good, but there's no declaration via toolAnnotations (readOnlyHint). Tool composition is moot with only one tool.
Extract a specific range of lines from text content
Tool description is too brief (46 chars) and lacks context. Does not explain WHEN to use this tool, what happens at edge cases (end_line > total lines), or return format. Current: 'Extract a specific range of lines from text content'. Insufficient for LLM selection.
Input schema lacks upper bound constraint for 'end_line' and 'start_line'. Zod validators use min(1) for start_line but no upper bound. Parameter descriptions do not document edge case handling (what if end_line > total lines? Silently clamped or error?). Current code silently clamps via Math.min(), but this is not documented.
Output schema is not formally documented. Tool returns text-only responses without structured field definitions. LLMs cannot plan downstream calls or extract data types. Need explicit output schema documenting: type (text), length constraints, success/failure format.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 47 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 57 | - | v1 |
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) declared. Tool is READ_ONLY but MCP annotation is missing, preventing client optimization and safety assertions.
Error responses are text-only (isError: true, content: [{type: 'text', text: '...'}]). Current errors like 'Start line exceeds total lines' do not guide recovery or suggest next steps.
Parameter descriptions are terse. 'start_line': 'Starting line number (inclusive)' (42 chars) lacks constraint documentation. Should be: 'Starting line number (1-based, inclusive). Must be ≤ end_line and ≤ total lines in text. Defaults to 1 if omitted.' Baseline param description is 72 chars; these are below baseline.