MCP server that exposes instruckt annotation tools over stdio for AI coding agents to manage UI feedback annotations
Server has 7 tools with clear verb-based naming (get_*, resolve, dismiss, delete_*). All tools have descriptions (avg 120 chars, within baseline 34-392). Input schemas are present and typed via JsonSchema derives. However, parameter descriptions are minimal or absent in several tools, output schemas are undocumented, and error handling lacks recovery guidance. No tool annotations (readOnlyHint/destructiveHint) despite clear risk classifications in metadata. Composition is sound, each tool has one responsibility, but descriptions could be more LLM-optimized per pattern:tool-description.
Permanently delete an annotation and its screenshot. Use this to remove annotations that are no longer needed.
Dismiss an annotation that doesn't need fixing. Sets status to 'dismissed', resolved_by to 'agent', and cleans up the screenshot file.
Get all pending UI annotations. Returns annotation details including element, comment, intent, severity, and whether a screenshot is available.
Get the component hierarchy for an annotation. Returns the component stack from the framework context and element_path.
Get the screenshot image for a specific annotation. Returns the base64-encoded PNG or SVG image.
Get the source file path and line number for an annotation. Extracts from the annotation's framework context (source_file, source_line).
Output schemas undocumented. Tools return JSON responses (e.g., get_all_pending returns {count, annotations}, resolve returns {id, status, resolved_by, resolved_at}) but no formal schema is declared. LLMs cannot reliably extract fields or plan downstream calls without documented return types.
Tool annotations missing. Tools have clear risk classifications (READ_ONLY, WRITE, DESTRUCTIVE) in metadata but are not exposed via MCP tool annotations (readOnlyHint, destructiveHint, idempotentHint). LLMs cannot infer safety/idempotency from names alone.
Error handling lacks recovery guidance. store_err() maps errors to generic McpError::internal_error(). No actionable messages (e.g., 'Annotation not found. Call get_all_pending() to list available IDs'). Agents cannot self-correct on failures.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 66 | <=2025-11-25 | v2 |
Mark an annotation as resolved. Sets status to 'resolved', resolved_by to 'agent', and cleans up the screenshot file.
Parameter descriptions minimal. AnnotationIdParam has description 'The annotation ID to operate on.' for all 7 tools. No guidance on format, constraints, or how to obtain a valid ID. Baseline: 100% of A+ tools have param descriptions >20 chars with context.
No confirmation/dry-run for destructive operations. delete_annotation and resolve/dismiss permanently modify state but offer no confirmation step. Agents can accidentally delete annotations without recovery path.