/mcp

Add robovac to your agent

robovac is an MCP server with one job: turn a statistics snapshot of one table into a link. It never connects to your database: it hands your agent a read-only SELECT, the agent runs it twice on its own connection, and robovac computes the report from the two result rows. There is no account, no DATABASE_URL, and no write path to your database. robovac stores two things: the report behind the short link for 30 days, and one report counter per IP address for the current hour.1

ADD TO YOUR AGENTstreamable http
# Claude Code
claude mcp add --transport http robovac https://robovac.hannesmoser.at/api/mcp

# Codex
codex mcp add robovac --url https://robovac.hannesmoser.at/api/mcp
get_snapshot_sql
(schema, table) → sql

Hands your agent the read-only statistics query (pg_stat_user_tables, pg_class, pg_settings, reloptions). The agent runs it twice, 30-60 s apart, on its own connection. The delay turns counters into rates.

create_report
(first, second, …hints) → url + permalink

Takes the two result rows and returns two links (a short url that expires in 30 days, and a permalink that never does), the workload pattern, warnings, and the optimized settings with one reason per change. Optional hints (pattern, replicationLagBudget, storage, fkHeavy, …) sharpen the classification.

get_candidates_sql
(limit) → sql

The ranking query (dead-tuple ratio plus xid age), for when the agent has to find the table worth snapshotting first.

explain_term
(term) → url

Returns the stable explain URL for any term in /arcana. Cheaper than letting a model paraphrase the docs.

required grants
pg_monitor

For your agent's own connection: a role in pg_monitor is enough. No table data is read, ever. robovac needs no DATABASE_URL and never opens a database connection of its own. It does store two things: the report behind the short link for 30 days, and one report counter per IP address for the current hour.

→ build a report from your tablebrowse /arcana
1create_report returns two links. The permalink carries the whole snapshot in its fragment, which browsers never send to a server (RFC 3986 §3.5), so it stays in the browser and never expires. It runs about 1200 characters, and a truncated one renders an error state rather than a partial report. The short link is 45 characters and resolves for 30 days, which means robovac stores that snapshot for 30 days.
Add robovac to your agent — robovac