One local mirror of GitLab merge requests and Jira tickets for every agent: tracked on demand, whitelisted, with a cursored change feed and a scanner at the door.
Nothing is monitored until an agent asks about a specific merge request or branch; only whitelisted projects can be tracked or written at all; interest expires when nobody asks anymore. Twenty agents checking an MR become twenty cheap local reads, and GitLab and Jira see one client holding one set of credentials. A daemon polls what is tracked and appends to an append-only change log; a stdio MCP server per session reads the same SQLite files, and wait_changes long-polls the feed, the same cursor contract as kanban-pro, so a dispatcher wakes on a pipeline going green or a review thread opening the way it wakes on a card.
Reads return slim rows, not vendor JSON: a ticket with its description and comments, a project's backlog in Jira's own rank order, an MR with its pipeline, threads and linked tickets. Writes are an enumerated handful: open an MR, comment, work review threads, replace a title or description, log a day's work, move a ticket to a named status when that is switched on. Approving and merging are deliberately absent.
Every MR description, review note and ticket comment passes one ingestion point that scans for prompt injection, invisible and bidirectional unicode, hidden HTML, imperative lexicon, off-host images, and flagged text is served neutralized, so an agent never consumes raw hostile input without knowing it.
We use Google Analytics to count visits. Nothing else is stored.