MCP server that retrieves UI feedback annotations submitted by developers via a Chrome extension. Returns annotated screenshots and structured annotations with CSS selectors and comments.
Single tool with adequate naming and description, but critical gaps in schema completeness, parameter documentation, output specification, and error handling. The tool name 'get_ui_feedback' follows verb_noun convention and clearly signals a read operation. Description is 229 characters, within the 10-1024 baseline range, but lacks key details about when to call the tool and what prerequisites exist. Input schema is present but empty (no parameters), this is valid for a parameterless tool. However, the output schema is NOT formally documented in the tool definition; output structure can only be inferred from the handler code. No parameter descriptions exist (vacuous, since there are none). Error handling is minimal: a single text fallback when no feedback exists, but no guidance on recovery actions. No tool annotations (readOnlyHint, idempotentHint, etc.). The implementation reads from an in-memory store and clears state after each call, making it non-idempotent on re-invocation, a significant concern for agent retry safety. Response structure is reasonable (mixed text and image content) but not formally specified in the MCP schema.
Retrieve the latest UI feedback batch submitted by the developer via the UI Annotator Chrome extension. Returns an annotated screenshot and structured annotations with CSS selectors and comments. Call this tool when the user says they have submitted feedback or asks you to look at their UI.
Output schema not formally documented. Tool handler returns structured content (text annotations + images + JSON), but the MCP tool definition does not declare a 'outputSchema' field. LLMs cannot predict response structure without documentation.
Tool is non-idempotent by design. Handler calls clearFeedback() after each invocation, destroying state. On agent retry (e.g. due to transient network failure), the second call returns 'No feedback' instead of the same result. This violates the idempotent-operation pattern and risks silent failures.
Minimal error handling and no recovery guidance. When no feedback exists, the response is a bare text message. No indication of what the user should do next (e.g. 'Ask the user to open the Chrome extension' is present in description but not in the error response). Error responses should guide the LLM on retry strategy and next actions.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 50 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 50 | - | v1 |
No tool annotations. The MCP tool definition lacks readOnlyHint, idempotentHint, or destructiveHint. Although get_ui_feedback is read-only (and destructive via side-effect), the client cannot infer this from metadata.
Description lacks 'when to use' context. The description states WHAT the tool does ('Retrieve the latest UI feedback...') but does not explain WHEN or WHY an LLM should call it instead of other tools, or what prerequisites must be met. LLMs rely on these cues for proper tool selection.