oto_admin_monitoring
Platform observability console (platform admin). ⚠️ TWO journals, never one: summary/calls cover AGENT (MCP) calls ONLY — what a person does from the dashboard or the API is NOT there, it is in op=rest. An account at zero calls is therefore NOT an idle account: check op=rest before saying so. ⚠️ A filter an op does not read is REFUSED (error param_not_read_by_op), never silently ignored. op=summary (aggregates: totals, by tool w/ avg+p95 latency, by user, by day; optional days, org_id, sub email|sub) / calls (raw MCP call log, newest first; filters sub, tool, errors, days, org_id, run_id, session_id, min_duration_ms slow calls, error_contains) / call (call_id → full record incl. truncated args + correlation ids) / run (run_id → timeline; content_archived = body in cold archive, bounds kept) / runs (recent runs) / rest (REST lens by route — days, org_id, sub, and route (prefix match) for an EXACT count/errors/last_call_at on one route — by_route is capped at the top 100, so a low-volume route can be invisible there without saying so; by_status splits the errors by HTTP code over the same window and filters, so an expected 4xx is not read as an outage — status: null means NO response went through the log: an unhandled exception (the 500 is served above it — that is what a crash looks like) or a client that left; ⚠️ org_id here is the consultation org claimed by a header (best-effort): a request without it carries none and drops out of the filter, so a 0 does not prove an idle org — cross-check with sub) / rest_calls (raw REST call log, newest first, same filters as rest — route is a prefix of METHOD /route, e.g. GET /api/orgs — plus limit (max 200); the ONLY lens that serves view_as_sub: the account a platform operator's view-as was actually APPLIED to (operator verified, existing target other than themself), null otherwise — a refused or no-op X-Oto-View-As header leaves it null. Rows logged before 2026-09-21 carry the header as claimed, unverified) / connectors (credential resolution failures; optional org_id) / transport (MCP transport refusals by cause, plus rate_limit: the app rate limiter per env/class/mode — would_refuse is what enforce would cut, peak_pct the fullest bucket; and rate_limit_top: per day, env and limiter (debit | platform_rate | the process bounds), the top hashed keys enforce would cut — and under credits, the units-budget SIGNALS unpriced:<connector.function> / unreported:<tool>, not refusals; days) / funnel (accounts vs real usage) / gaps · tool_quality (aggregated usage signals) / agents_en_echec (hosted agents whose JOBS are dying, grouped by agent AND by reason — days (default 1), optional org_id; each row carries travaux, tentatives, depuis, dernier). ⚠️ This is the one nobody asks for: a triggered agent breaks SILENTLY — its queue empties because dead jobs stop waiting, its screen says active, and its last run can be green. Grouped by reason because three times the same fault is a bug to fix, while three different ones is a misconfigured agent — one count would read them alike. This is the lens a nightly report reads to say it in one line. / connecteurs_orphelins (no filter): the rows that NAME a connector absent from the served catalog — member installations, removals, activations, credentials, settings, live instances, org kits — per table and per name (lignes). Such a row resolves nothing: an installation that mounts no tool, a key nobody reads. Every table is listed, an empty one included, so a zero reads as checked; total = 0 is the healthy state. Read only: nothing is moved or deleted here. For raw signals use oto_admin_signal.
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"op": "<op>"
},
"name": "oto_admin_monitoring"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | ||
| sub | No | ||
| _org | No | ||
| days | No | ||
| tool | No | ||
| limit | No | ||
| route | No | ||
| errors | No | ||
| org_id | No | ||
| run_id | No | ||
| call_id | No | ||
| session_id | No | ||
| error_contains | No | ||
| min_duration_ms | No |