Server has 3 tools with complete input schemas and tool annotations present. Descriptions are adequate (100-200 chars) but lack actionable guidance on when/why to use each tool. Parameter descriptions are minimal. run_secure_query and unmask_text have good naming (verb_noun), but add_to_roster is vague about scope and side effects. No output schema documentation. Error handling returns basic messages without recovery guidance. Tool composition is reasonable but lacks chaining context (e.g., unmask_text should document that it requires prior run_secure_query calls).
Register new names to the active regex scan roster for local name-matching detection.
Execute a read-only SELECT database query. All PII values (names, emails, phones, NRIC/IDs) in the results will be automatically masked before being returned.
Restore the original raw PII values in a text payload by replacing placeholders (e.g. __PERSON_A__, __EMAIL_1__) with their original values cached during this session.
Output schemas not documented. LLMs cannot predict what fields run_secure_query returns or how to chain results to unmask_text. Masking engine behavior (which PII types are masked, placeholder format) is undocumented.
Parameter descriptions are minimal. sql_query lacks format guidance (SELECT-only? table/column restrictions?). masked_text does not explain placeholder format (__PERSON_A__, __EMAIL_1__). names array in add_to_roster lacks constraints (max length? format?).
Error handling is generic. CallToolRequestSchema handler returns isError=true with raw error messages. No recovery guidance (e.g., 'Invalid SQL: only SELECT allowed. Try: SELECT * FROM table LIMIT 10'). LLM cannot self-correct.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | 2026-07-28+ | v2 |
add_to_roster naming is vague. 'add_to_roster' does not clarify scope (session-only? persistent? affects all queries?). Description lacks side-effect clarity. Should be 'add_session_roster_names' or 'register_pii_detection_names' with explicit scope statement.
Tool composition lacks chaining context. unmask_text description does not state 'Call after run_secure_query to restore original values from cached session.' This forces LLMs to infer the workflow.