Skip to content

MCP housekeeping sweep (GET)

GET
/cron/mcp-retention-sweep
curl --request GET \
--url https://example.com/api/cron/mcp-retention-sweep

Runs the MCP layer’s retention sweeps: the 30-day mcp_tool_calls delete, stale presence rows, expired session defaults, and the process-local in-flight / agent / worker session maps. Replaces the process-local 60-second timer that lived in the deleted mcp-transport.ts session layer. Safe to run repeatedly and safe to miss — every sweep is a bounded delete against an age cutoff, never a state transition. Protected by CRON_SECRET via the x-cron-secret header only.

Per-sweep deleted / swept counters

Media type application/json
object
ok
required

False when the sweep threw OR any DB clause errored (see failed_clauses); error carries a short reason only on the throw path.

boolean
tool_calls_deleted

Rows deleted from mcp_tool_calls past the 30-day retention window.

integer
oauth_token_events_deleted

Rows deleted from oauth_token_events past the 30-day retention window.

integer
presence_rows_deleted

Stale mcp_session_machines presence rows deleted.

integer
presence_rows_disconnected

Presence rows transitioned ‘connected’ -> ‘disconnected’ after 60 minutes of silence (HO-9101). These are marked, not deleted; the 24h clause deletes them later.

integer
session_defaults_swept

Expired per-session project defaults dropped (machine-local).

integer
agent_sessions_swept

Stale agent sessions dropped from the in-process map (machine-local).

integer
worker_sessions_pruned

Stale agent-worker sessions pruned (machine-local).

integer
presence_throttle_entries_pruned

Expired presence write-throttle entries dropped (machine-local).

integer
work_segments_persisted

Dangling work intervals finalized and written to project_agent_work_segments (fleet-wide since HO-9075).

integer
idempotency_rows_deleted

Expired mcp_idempotency_cache rows deleted.

integer
failed_clauses

Names of DB sweep clauses that errored this pass (HO-9102). Empty is the only clean value - every count above is legitimately 0 on a healthy run. A non-empty list is returned with ok: false and HTTP 500.

Array<string>
error

Short failure reason; present only when ok is false.

string

Missing or invalid CRON_SECRET