MCP server for Quern — list/get/create/update notes and folders in the local meetings database
Server has 12 well-named tools with consistent verb_noun patterns (list_, get_, create_, update_, delete_, complete_, reopen_). All tools have descriptions (avg ~100 chars, within baseline 34-392). Input schemas are present and properly typed with enums where appropriate (kind, status). However, parameter descriptions are sparse or missing for several tools (e.g., list_folders has empty properties), and output schemas are not documented. Error handling is minimal, no recovery guidance or actionable error messages visible in code. Security: database path is hardcoded; no input validation against SQL injection despite using parameterized queries. Composition is sound: tools chain logically (list_notes → get_note → update_note). Missing: pagination limits enforcement, output schema documentation, error classification.
Mark a task as done.
Create a new note in Quern (Markdown content). Use update_note to change an existing item.
Create a new task in Quern.
Delete a task (soft delete — marks is_deleted=1).
Get one note/meeting by id or exact/partial title.
Get one task by id or title.
List all folders in Quern.
No output schemas documented for any tool. LLMs cannot plan downstream calls or extract required fields (e.g., note_id for chaining). Violates pattern:tool and mxe:include-chaining-ids.
No error handling or recovery guidance in code. Errors return raw exceptions without actionable messages. Violates pattern:recovery-guide.
Destructive operations (delete_task, update_note with folder='') lack confirmation or dry-run support. No pattern:confirmation-request.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2026-07-28+ | v2 |
List notes/meetings in Quern (id, title, folder, timestamps). Use before update_note to find an id.
List Quern tasks. Filter by status (open/done/all), source meeting, or text query.
Mark a task as open (undo complete).
Update an existing Quern note/meeting. Identify by id (preferred) or title. Can change title, notes body, summary, and/or folder. Set append=true to append to notes/summary instead of replacing.
Update a task's title, notes, or source meeting link.
No pagination enforcement. list_notes and list_tasks accept limit but no validation that limit ≤ max. Large result sets can exhaust context. Violates mxe:enforce-result-limits.