MCP server: 'Should I send this?' communication checker
Presend has clear, well-structured tool definitions with complete schemas and good descriptions. All 5 tools are explicitly registered with proper JSON Schema. Naming follows verb_noun convention (check_message, fix_message, save_profile, list_profiles, delete_profile). Descriptions are substantive (100-200 chars, within baseline 194 avg). However, output schemas are not documented, callers cannot predict response structure. Error handling is basic (generic error messages, no recovery guidance). Parameter descriptions are adequate but lack format constraints and validation rules. No tool annotations (readOnlyHint/destructiveHint) despite clear risk levels. Missing idempotency guidance for profile operations.
Analyze a message before sending. Returns a score, red/yellow/green flags, and a one-line summary. Use this when the user says they're about to send an email, post, proposal, or feedback and wants a sanity check.
Delete a saved profile by id.
Apply check_message flags and return a corrected version of the message.
List all saved communication profiles.
Create or update a communication profile describing a recipient (boss, client, etc.) and how they prefer to be communicated with.
Output schemas not documented. Callers cannot predict response structure (fields, types, pagination). LLMs must infer from trial-and-error.
Tool annotations missing. save_profile and delete_profile have clear WRITE/DESTRUCTIVE risk levels but lack readOnlyHint/destructiveHint annotations in schema.
Error messages are generic ('Error: <message>') with no recovery guidance. 'No profile with id: X' does not suggest calling list_profiles() first.
Parameter 'mode' enum values not validated against MODE_VALUES at schema definition time. If modes.ts changes, schema may drift from runtime validation.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
No idempotency guidance for save_profile. Agents retrying on ambiguous failures may create duplicate profiles with same id, overwriting previous state.