I split one obvious server into four, because a tool surface a model can choose from reliably is worth more than a tool surface that can do everything.
4 items you can open and check yourself
Each server owns one job. An analyst-facing agent can be handed the catalog without also being handed delete_job.
How this was derivedHide method
- What this basis means
- Derived by counting the artifact itself — files, lines, checks, assets. Reproducible by anyone with repository access.
- Working
- Counted from the four repositories and their published README architecture sections.
- As of
- 2026-08-06
Nine reads and two read-semantic posts — execute a saved query, sample rows. There is no write endpoint on the list at all. The client refuses anything outside it before a request is ever made, so the restriction is structural rather than prompt-based.
How this was derivedHide method
- What this basis means
- Derived by counting the artifact itself — files, lines, checks, assets. Reproducible by anyone with repository access.
- Working
- Counted from the API_ALLOWLIST constant in the chat server’s portal client. The server reports 12 because its transparency call prepends the login endpoint, which is issued directly rather than through the guarded request path.
- As of
- 2026-08-06
Forty on the portal server, forty-five registered on the runner, thirty-one on the catalog, twenty-one read-only on the chat server. Five of the runner’s only register at all when a write domain is explicitly enabled.
How this was derivedHide method
- What this basis means
- Derived by counting the artifact itself — files, lines, checks, assets. Reproducible by anyone with repository access.
- Working
- Counted registerTool call sites in src across each repository, excluding tests. Cross-checked against each generated tools reference.
- Caveat
- The runner’s own README documents 36 by default and up to 41 with every write domain enabled; the 45 figure counts every registration site in source, including the four lineage tools. Quoted here as registered-in-source.
- As of
- 2026-08-06
Agent tooling that can write to production needs its guards tested, not asserted. This is the counterweight to every safety claim on this page.
How this was derivedHide method
- What this basis means
- Derived by counting the artifact itself — files, lines, checks, assets. Reproducible by anyone with repository access.
- Working
- Counted declared it/test cases across the four repositories: portal 374, runner 268, catalog 627, chat 58.
- Caveat
- A static count of declared cases, not the result of a green test run.
- As of
- 2026-08-06
Evidence
- repozuar-portal-mcp
Authors validated HTML blocks, builds pages, manages data sources, queries, themes and users. Mirrors every content write to a git repo so any change can be reverted.
- repozuar-runner-mcp
Operates the ETL platform — jobs, sequences, run history, credentials, files, webhooks — and builds a durable semantic model with an approval lifecycle.
Strictly read-only sibling. Answers questions about a portal through the lens of the authenticated user’s permissions, groups, and row-level security. No tool in the server can create, modify, or delete anything.
- repozuar-catalog-mcp
The semantic layer: data dictionary, profiling, and job/data lineage. Answers "what does this data mean and how much should I trust it" — and deliberately nothing else.
Where it applied
- An analyst asks a chat assistant where a revenue number on a dashboard comes from, and gets an answer scoped to what that specific user is permitted to see.
- An implementation engineer describes a dashboard in natural language; the agent discovers data sources, writes a saved query, authors a validated block, and places it on a page.
- An operator runs a zero-mutation audit session against a production ETL instance with a single environment variable.
What it implies
I design for the failure mode, not the demo. Splitting by job-to-be-done keeps each tool surface small enough for a model to choose well from, and keeps destructive capability out of contexts that never need it.

















