Skip to content

Conversation Send

Send a message in an existing conversation (fire-and-forget, no response expected).

MCP name: conversation_send

Category: conversations

Mutates state (retry policy: manual)

Parameters

Name Type Required Description
consumer string No Optional persisted conversation consumer identity. Supply together with generation to fence a background driver's write to its live lease.
consumption_receipt_id string No Exact receipt returned by cowork_action_snapshot_get; required while replying to a targeted turn
conversation_id string Yes Conversation ID
generation string No Optional live lease generation. Supply together with consumer; a stale or revoked generation returns lease_lost without sending.
message string Yes Message content
message_id string No Optional caller-stable idempotency key; the first accepted agent message wins on replay

Details

When message_id is supplied, it is scoped to this conversation and the agent role. The first successful send fixes the stored content; a retry with the same ID returns that existing message without overwriting it. Reusing the ID for a different conversation or role is rejected.

consumer and generation form an optional lease fence for long-lived conversation drivers. They must be supplied together. The send and lease check share one transaction, so a stopped, rotated, or closed generation cannot emit a late message.

When the consumer's oldest unacknowledged turn carries an action snapshot, conversation_send requires the exact generation/message-bound consumption_receipt_id minted by cowork_action_snapshot_get. The reply is durably linked to that receipt and carries transcript-visible consumed-target provenance. Supplying an action snapshot identifier without fetching it cannot authorize a reply.

If a generation restarts after the deterministic reply committed but before the user turn was acknowledged, the successor must fetch the exact delivered turn again and replay the same stable message_id with its new receipt. The existing reply is reused only when the complete action/discussion context and exact user message are identical. Both generation-bound receipts are linked to the one durable reply; a different target or turn is rejected.