search_records
{ query }
Plain-language search over everything the agency has released — the tool descriptions steer agents to search before filing, so the deflection posture survives the machine door.
Brandeis is built for the agentic web: a resident's, a newsroom's, or a researcher's AI agent can search an agency's public archive, read records, file a request, and track it — over plain JSON or the Model Context Protocol. Agencies turn it on per portal.
Every byte served already flows through a page an anonymous visitor can load. Retrieval is hard-scoped to public records in the query layer — enabling the API changes the format, never the audience.
file_request rides the exact chain the portal form uses: one filing path, two front doors. A machine-filed request gets the same deadline, the same audit trail, the same named-human review.
The surface is anonymous-public by construction, like the portal itself. Reads are open; filing is rate-limited per client and per deployment.
POST /api/v1/{agency}/mcp — streamable HTTP, stateless, no SDK required on either side.
{ query }
Plain-language search over everything the agency has released — the tool descriptions steer agents to search before filing, so the deflection posture survives the machine door.
{ id }
One public record, extracted text included. Non-public ids behave exactly like nonexistent ones — an agent can't even learn what it isn't allowed to see.
{ trackingNumber }
The public tracker's projection: status, statutory due date, published events. Nothing about the requester, no internal notes.
{ description, requesterName?, requesterEmail? }
Files a real request through the portal's own intake chain — real tracking number, statutory deadline, triage, audit events. The tool description says out loud that this is a legal act.
Prefer plain JSON? The same surface is REST: GET /archive?q=… · POST /requests · GET /requests/{id}.
The City of Riverton demo runs with the requester API enabled — list the tools:
curl -s https://brandeis.us/api/v1/riverton/mcp \
-H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'Or hand the endpoint straight to an agent — in Claude Code, for example:
claude mcp add --transport http riverton \ https://brandeis.us/api/v1/riverton/mcp
Then ask the agent for towing contracts. It will search before it files — and if it files, the request lands on the statutory clock with a tracking number the agent can poll. Your move, robots.
Agentic AI is already filing requests. Give it a front door that answers from the public archive first.