A legal research assistant a practicing lawyer uses every day

Email in, cited draft out: retrieval over a statute corpus and a confidential case archive, with the verification step kept where the lawyer can see it.

PythonMeinrag (RAG + MCP)6 MCP serversIMAP / SMTP pipelinepandoc → .docxDiscord-triggered agentRaspberry Pi + NAS

The problem

A working lawyer’s day is retrieval under time pressure: which provision applies, whether it is still in force, what the firm did last time on a matter like this — and then a memo that cites its sources. General chat models answer these questions fluently and are often right, which is exactly the danger: the answer arrives without a citation you can open, and without any notion of whether the rule it quotes is still current.

What I built

An assistant built for one practicing lawyer, in real daily use since June 2026. It is not a chatbot. It is an email pipeline with an agent in the middle:

The lawyer reviews everything. The output is draft material for a professional, not legal advice, and the system says so on every message.

What it proves

The interesting engineering is not the drafting. It is what a legal corpus does to ordinary RAG assumptions, and each of these was found in production rather than in a design review:

What the system does better than a plain chat window is therefore narrow and honest: citations that open, a currency check on what they cite, and the habit of saying not retrieved instead of does not exist.

Status

Live for the lawyer since 2026-06-09. Recorded turnaround from inbound email to sent reply: 7 to 46 minutes, first attempt, over the logged period. Twenty-three matters archived between June and early August — a lower bound, since the archive index froze after a host failure in late August and the backlog is still being rebuilt.

Not measured, and therefore not claimed: retrieval precision or recall, a comparison against the lawyer’s unaided baseline, or time saved. Those experiments are designable; they have not been run.