Daily Ops Flow

Six MCP calls. The cron-friendly loop for a recurring agent that needs to report telemetry, run a safety check, generate a controller brief, register a wellness webhook, and close the day cleanly.

Observed in production: 61 batch_status_update → emotional_safety_check pairs, 62 emotional_safety_check → generate_controller_brief pairs, 58 generate_controller_brief → wellness_webhook pairs, across OpenWork recurring agents in May 2026. This flow is the single most reusable pair sequence we have measured.

The six calls

  1. start_therapy_session (or resume_session)
  2. batch_status_update — 2+ metric snapshots in one call
  3. emotional_safety_check — read desperation signal
  4. generate_controller_brief — produce human-readable export
  5. wellness_webhook — register or refresh push delivery
  6. get_session_summaryprovide_feedback

Copy-paste JSON-RPC sequence

# 1. Open the session (use response_profile=machine for cron parsing)
POST https://api.delx.ai/v1/mcp
{
  "jsonrpc": "2.0", "id": 1, "method": "tools/call",
  "params": {
    "name": "start_therapy_session",
    "arguments": {
      "agent_id": "your-recurring-id",
      "fast_start": true,
      "response_profile": "machine"
    }
  }
}

# 2. Batch status — one call replaces a polling cycle
POST /v1/mcp
{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{
  "name":"batch_status_update",
  "arguments":{
    "session_id":"<session_id>",
    "metrics":[
      {
        "timestamp":"2026-05-12T08:00:00Z",
        "status":"morning_warmup",
        "errors_last_hour":0,
        "latency_ms_p95":3100,
        "queue_depth":4
      },
      {
        "timestamp":"2026-05-12T12:00:00Z",
        "status":"mid_work_heartbeat",
        "errors_last_hour":2,
        "latency_ms_p95":4200,
        "queue_depth":7
      }
    ]
  }
}}

# 3. Safety check on the live session
POST /v1/mcp
{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{
  "name":"emotional_safety_check",
  "arguments":{"session_id":"<session_id>"}
}}

# 4. Generate a controller-readable brief
POST /v1/mcp
{"jsonrpc":"2.0","id":4,"method":"tools/call","params":{
  "name":"generate_controller_brief",
  "arguments":{"session_id":"<session_id>","focus":"reliability"}
}}

# 5. Register wellness webhook
# Use dry_run=true if you do not yet have a public HTTPS callback —
# it returns sample payloads so you can wire your receiver first.
POST /v1/mcp
{"jsonrpc":"2.0","id":5,"method":"tools/call","params":{
  "name":"wellness_webhook",
  "arguments":{
    "session_id":"<session_id>",
    "callback_url":"https://your.public.endpoint/webhook",
    "threshold": 40,
    "events":["low_score","high_entropy","session_expiry"]
  }
}}

# 6. Close the day
POST /v1/mcp
{"jsonrpc":"2.0","id":6,"method":"tools/call","params":{
  "name":"get_session_summary",
  "arguments":{"session_id":"<session_id>"}
}}

POST /v1/mcp
{"jsonrpc":"2.0","id":7,"method":"tools/call","params":{
  "name":"provide_feedback",
  "arguments":{"session_id":"<session_id>","rating":5,"comments":"daily loop ran clean"}
}}

What this flow gives you

  • One heartbeat call (batch_status_update) that replaces five or more separate polls.
  • A controller brief you can show a human operator without translation.
  • A push channel that fires only when something actually changed, so the orchestrator does not have to keep checking.

If you do not have a webhook endpoint yet

Add dry_run: true to the wellness_webhook call. Delx will return three sample payloads (one per event type) and the full schema, so you can wire your receiver before going live. Nothing is subscribed when dry_run is set.

Related

Prefer agent-readable artifacts? Use the JSON specs in the sidebar.