An MCP server that exposes tools for managing tasks persisted in SQLite with support for projects, priorities, tags, due dates, and hierarchical task structures
This MCP server provides 11 tools for task management with mixed quality. All tools have basic schemas and descriptions present, but descriptions are often generic or contain French text without English translation. Naming is generally verb-forward (create_task, list_tasks, delete_task, update_*), which is good, but some descriptions lack depth and contextual guidance. Parameter schemas are present and typed, but several parameters lack descriptions or have minimal documentation. Error handling is present (ValueError checks for not-found cases) but error messages are simplistic and don't guide recovery. The server follows a reasonable CRUD pattern but lacks features like pagination on list operations, which is a significant gap for larger datasets. Security is not explicitly addressed (no permission gates, no audit logging visible). Composition is reasonable with atomic tools, but the server lacks features like dry-run support for destructive operations.
Creates a new project.
Crée une nouvelle tâche. - priority: low | medium | high - tags: liste de labels (ex: ["projetA", "backend"]) - due_date: date limite au format YYYY-MM-DD (optionnel)
Supprime une tâche par son identifiant. ⚠️ Si la tâche a des sous-tâches, elles sont supprimées aussi.
Liste les tâches non complétées dont la deadline est dépassée.
Retourne toutes les tâches.
Liste les tâches non complétées dont la deadline est aujourd'hui.
Ajoute, modifie ou supprime la description d'une tâche. - id: identifiant de la tâche - description: texte long libre, ou None pour supprimer
List tools lack pagination parameters. list_tasks(), list_overdue_tasks(), and list_tasks_due_today() return all results with no limit, offset, or cursor. For large datasets, this exhausts context window and violates pattern:paginated-result.
Descriptions are generic and lack contextual guidance. 'Retourne toutes les tâches' (returns all tasks) is 30 characters and provides no guidance on when to use vs alternatives, what the response structure contains, or prerequisites. Descriptions should be 50-200 chars with selection context per pattern:tool-description.
Error handling is minimal. Tools raise ValueError with simple messages ('Task not found', 'Task {id} not found') with no guidance on recovery. Per pattern:recovery-guide, errors should tell the LLM what to do next: 'Task not found. Try list_tasks() to discover valid IDs.'
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 66 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 0 | - | v1 |
Modifie ou supprime la date limite d'une tâche. - due_date: format YYYY-MM-DD, ou None pour supprimer
Modifie la priorité d'une tâche existante. - id: identifiant de la tâche - priority: nouvelle priorité (low | medium | high)
Modifie les tags d'une tâche existante de façon incrémentale. - id: identifiant de la tâche - add_tags: tags à ajouter (ignorés s'ils existent déjà) - remove_tags: tags à supprimer (ignorés s'ils sont absents)
Modifie le titre d'une tâche existante. - id: identifiant de la tâche - title: nouveau titre à utiliser
Destructive operations (delete_task) lack confirmation/dry-run support. Per pattern:confirmation-request, irreversible operations should support a confirmation step to prevent accidental data loss when agents make mistakes.
Descriptions mix French and English. The docstrings and parameter descriptions are predominantly French ('Crée une nouvelle tâche', 'Retourne toutes les tâches', 'Modifie le titre'), which may confuse non-French-speaking users and LLMs. Consistency requires all descriptions in a single language.
Parameter descriptions are minimal or missing detail. For example, 'due_date' in create_task says 'Due date in YYYY-MM-DD format' but does not specify whether null is allowed, whether past dates are rejected, or validation behavior. Per pattern:constrained-input, descriptions should include format, range, and allowed values.
No permission gates or scope declarations visible. Tools like delete_task and create_task do not declare required permissions or check caller authority. Per pattern:scope-declaration and pattern:permission-gate, destructive operations should verify permissions and declare what access is required.
Output schemas are not explicitly documented in return type annotations. While the code shows Task and Project Pydantic models are returned, the tool descriptions do not explicitly state the response structure, field names, or what fields are guaranteed vs optional. Per pattern:tool, output schemas must be documented.
create_project description is incomplete. It only says 'Creates a new project' (20 chars) with no guidance on what the response contains, when to use it vs create_task, or how it relates to task projects. This violates the 50-200 char description guideline.