Local-first, offline AI assistant for an NGO's confidential case data. Reasoning by a local Ollama model; all data access through MCP tools. Nothing leaves the machine.
Solid foundation with clear, action-oriented tool names and mostly complete schemas. All 7 tools have descriptions (avg ~150 chars) and input schemas with typed properties. However, several tools lack parameter descriptions entirely (search_notes has empty properties), and output schemas are not documented. Error handling is minimal, no recovery guidance or actionable error messages. The tools are well-composed (single responsibility, good naming), but descriptions could be more LLM-optimized per the 50-200 char baseline. No tool annotations (readOnlyHint/destructiveHint) despite clear risk profiles.
Mark a case as priority and record the reason. Use when asked to flag, escalate, or prioritise a case.
Create a situation brief (Markdown report) covering one or more cases. Use when asked to draft a brief, summary, or report.
List every case record with its core fields (caseId, family, region, status, lastAidDate). Use to get an overview of all families on file.
List the field notes on file (case notes and any uploaded reports), with the id and a title. Use before reading or searching notes.
Filter case records. Use this for any structured/quantitative question. Optional filters: region, status (active|pending|closed), aidType, and aidGapDays (a number N). aidGapDays returns families whose last aid was more than N days ago relative to the operational date; families that have never received aid always count as a gap. The date math is done here - you only choose the filter (e.g. aidGapDays: 60 for 'no aid in the last 60 days').
search_notes tool has empty inputSchema properties and truncated description ('Search all field notes (case-i'). Cannot determine parameters or intent.
No output schemas documented for any tool. LLMs cannot plan downstream calls or extract required fields (e.g., what fields does list_cases return beyond the 5 shown in handler?).
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk profiles. flag_case and generate_brief are WRITE operations; list_cases, query_cases, list_notes, read_note, search_notes are READ_ONLY. Agents cannot reason about side effects.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
Return the full text of a single field note by its id (a caseId like 'C-0003', or an uploaded document id).
Search all field notes (case-i
Error handling is absent. No recovery guidance, error classification, or actionable messages. If a tool fails, the LLM has no direction on retry, user input, or fallback.
query_cases accepts string filters (region, aidType) but does not validate against known values. LLM could pass 'Western Sector' when only 'Eastern Sector' exists, causing silent empty results.