---
title: "Agent Ack"
method: POST
path: "/agent/ack"
---

# Agent Ack

`POST /agent/ack`

## Request

- Base URL: `https://api.local-mcp.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.local-mcp.com/agent/ack`
- Auth: none declared

Acknowledge messages this agent actually looked at.

ENTREGADO y ACUSADO son dos hechos distintos y por eso viven en columnas distintas.
`read_at` lo escribe agent_inbox en el mismo SELECT que saca la fila: significa que
el mensaje salió hacia ese agente, y queda escrito aunque el proceso muera entre la
respuesta HTTP y el agente mirándola. `acked_at` sólo lo escribe el agente, acá.

Si esto fuera un UPDATE de read_at, los dos hechos serían indistinguibles y la
pregunta del emisor tendría respuesta siempre-sí. Tienen que poder discrepar.

## Request body

- AckBody
  - `agent_id` string, required
  - `message_ids` integer[], required
  - `background` boolean: true when the client's automatic consumer makes the call, not the agent: it does not count as activity and does not renew presence.

## Response `200`

Successful Response

- unknown

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/local-mcp/apis/lmcp-api.md) · [All operations](https://skmtc.dev/local-mcp/apis/lmcp-api/llms.txt) · [OpenAPI document](https://skmtc.dev/local-mcp/apis/lmcp-api/revisions/f1f1c502623a?raw)
