A Spring Boot MCP server for managing reminders with SQLite persistence. Provides tools to save reminders and retrieve current time with timezone support.
Two tools with reasonable descriptions but significant schema and parameter documentation gaps. saveReminder has a verbose, instruction-heavy description (500+ chars) that reads like a prompt injection warning rather than a tool description, this is anti-pattern. getCurrentTime has a clearer description but both tools lack explicit input schema validation and type constraints. Parameter descriptions exist but are minimal. No output schemas documented. Error handling and recovery guidance absent.
Retrieve the current date and time. Returns the current date and time in ISO 8601 format, and the current day of the week. - If no `timezone` is provided, the system default is used. - Valid values for `timezone` include standard ZoneId identifiers such as 'UTC', 'America/Guayaquil', or 'Europe/Madrid'. Example: GET /time?timezone=America/Guayaquil Response: { "now": "2025-04-12T02:45:00-05:00", "day": "Saturday" }
Save a reminder in the local SQLite database. Stores a reminder with a message and a due date. The input must include: - `content`: a short description of the reminder. - `dueDate`: a date and time in ISO 8601 format (e.g., '2025-04-12T17:00:00'). This tool is designed to be used by a language model to programmatically create reminders from natural language input. ⚠️ You must never guess the current date and time. You are required to first call the `getCurrentTime` tool to obtain the current timestamp when interpreting relative time expressions, such as: - "tomorrow" - "in 2 hours" - "next Friday" - "on Sunday" Use the value returned by `getCurrentTime` as your base reference to convert any relative date expression into an absolute ISO 8601 date-time string. You are responsible for ensuring that the `dueDate` value is based on the actual current date and time, never on internal assumptions. Do not rely on training data defaults or hallucinate a reference date. ✅ Always call `getCurrentTime` before this tool when processing relative time input.
saveReminder description is 500+ characters and reads as a prompt injection warning ('⚠️ You must never guess...') rather than a tool description. This violates the 10 - 1024 char guideline and wastes tokens on meta-instructions that belong in system prompts, not tool docs. LLMs should infer tool purpose from the description, not be lectured about their own limitations.
No output schemas documented for either tool. Callers cannot know what fields to expect (e.g., does saveReminder return a reminder_id? a timestamp?). This forces LLMs to guess and breaks tool chaining.
Parameter 'dueDate' in saveReminder is typed as 'LocalDateTime' (Java type, not JSON Schema type). JSON Schema requires 'string' with format 'date-time'. This type mismatch makes the schema unparseable by standard MCP clients.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 43 | 2026-07-28+ | v2 |
No error handling or recovery guidance. What happens if dueDate is in the past? If content is empty? If timezone is invalid? Tools should return actionable error messages, not stack traces.
getCurrentTime parameter 'timezone' lacks validation constraints. Description mentions 'standard ZoneId identifiers' but does not specify what happens if an invalid timezone is passed (e.g., 'America/InvalidCity'). No enum or pattern constraint provided.