An MCP server for managing and analyzing therapy session notes with sentiment tracking and theme analysis
Therapy Session Notes server has reasonable structure with 6 tools covering CRUD operations on therapy sessions. All tools have descriptions and input schemas with type definitions. However, several patterns are missing: output schemas are not explicitly documented, error handling lacks actionable recovery guidance, parameter descriptions are minimal, and there is no distinction between destructive operations and safe read operations in the tool definitions themselves. The server uses SQLite with basic CRUD operations but lacks enterprise-grade error handling and comprehensive parameter documentation.
Delete all session data for a patient by name.
Returns all themes across every session for a patient so the LLM can identify recurring patterns and resolved issues.
Retrieve the most recent sessions for a patient by name.
Returns sentiment scores over time for a patient so the LLM can detect if the patient is improving, stable, or declining.
Retrieve a specific session for a patient by date (YYYY-MM-DD).
Save a therapy session to the database. themes: key topics from the session e.g. ["grief", "sleep", "work stress"] sentiment_score: float from -1.0 (crisis) to 1.0 (thriving)
Output schemas are not documented for any tool. LLMs cannot infer what fields to expect in responses, forcing them to guess at downstream field names and types.
Destructive operation (delete_patient_data) has no confirmation mechanism, no dry-run option, and no irreversibility warning in the description. Agents could accidentally delete all therapy records for a patient.
Parameter descriptions are minimal or missing validation constraints. For example, 'sentiment_score' accepts any float, but the description states -1.0 to 1.0, there is no enum or range constraint to prevent values like 5.0 or -10.0 from being inserted.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 11 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 55 | - | v1 |
Error handling is absent. Tools like get_recent_sessions and get_session_by_date return empty lists or error dicts on failure, but there is no guidance for the LLM on what to do next (e.g., 'patient not found, try search_patients() for a partial match').
Parameter limits and ranges are not specified. For example, get_recent_sessions accepts 'limit' but does not document the valid range (1-100? 1-1000?). Similarly, notes and patient_name accept arbitrary length strings with no length constraints.
No output schema for save_session. The function returns a simple string message, but should return a structured response with the saved session ID, date, and confirmation details so downstream tools can reference the session.
Missing pagination for list/retrieval tools. get_recent_sessions and get_all_themes hardcode limits (5 and 50) but do not document pagination strategy or offer cursor/offset parameters for large result sets.