Changing data safely
Every write is a preview first, which fields are refused by design, and how bandwidth change orders work over MCP.
This is the part users most need to understand, and the part that prevents support tickets.
Every write is a preview first#
create, update, and delete return a dry run by default. Nothing is written. The response
shows what would change. The assistant then has to call again with confirm: true to commit it.
In practice the conversation looks like this:
User: Close ticket 4821 and set the resolution to “replaced SFP”.
Assistant: (shows the exact before and after diff) Confirm?
User: Yes.
Assistant: (commits, returns the updated record)
Fields that cannot be set#
Some columns are refused by design, with an explanatory message rather than a silent failure.
| Field | Why | What to do instead |
|---|---|---|
connection.bandwidth | The Lumen inventory sync overwrites direct edits, so the change would look successful and then vanish | Use the bandwidth change order below |
crm_task.completed | Derived from status | Set status to todo, in_progress, blocked, complete, or cancelled |
ticket.dedupKey | Server-assigned, and background reconciliation matches on it | Nothing. It is not the caller’s to set |
ticket.source set to “Commission Matching” | Reserved for the partner commissions plane | Use any other source |
id, createdAt, updatedAt, deletedAt, orgId, partnerId | Identity and tenancy | Nothing. These come from the request context |
Unknown field names are rejected outright rather than ignored, so a typo fails loudly instead of quietly dropping a value.
Retries are safe#
Writes carry an idempotency key. If a request is retried after a network blip or a client restart, the original result is returned rather than the change happening twice.
Idempotency is best-effort rather than absolute: two genuinely simultaneous retries of the same request could both execute. In practice that needs a pathological client.
Deletes#
Where the record type supports it, delete is a soft delete. The row is hidden, not destroyed, and can be restored. Nothing is deleted without an explicit confirmation after a preview.
Bandwidth change orders#
Circuit bandwidth is controlled by the carrier, so it gets its own tool rather than a field edit.
- Preview. “What would it cost to take the Dallas circuit to 1 Gbps?” returns the price delta, computed from that circuit’s cached rate card. Nothing is ordered.
- Confirm. The order goes through exactly the same pipeline as the app’s own bandwidth change: the same capability checks, port-capacity limits, pricing floor, concurrency lock, and 24-hour carrier rate limit all apply.
- A change ID comes back, tracking order acceptance.
If a guardrail rejects the change, nothing is recorded and the reason is returned. A rejected change is not a partial change.
Pricing can optionally be run against a specific contract term, for example 36mo. Otherwise the
circuit’s current term is used.
The audit trail#
Every confirmed change is written to an append-only MCP write log, alongside the normal application audit trail. “Who changed this?” is always answerable, and an MCP-originated change is distinguishable from one made in the web app. See Your audit feed.
Common questions#
Can an assistant delete a client’s data permanently? Where a record type supports soft delete, no. The row is hidden and recoverable. And nothing is deleted at all without an explicit confirmation after a preview.
Can it act while nobody is watching? Only if a client is left connected and something drives it. Revoking under Connected Applications ends that immediately. See Governing connected assistants.
Related guides
- What an assistant can do The tool catalog, so you can answer can it do X precisely, plus how filtering, sorting, and paging work.
- Governing connected assistants Reviewing and revoking a connected assistant, capping one at read-only, and which levers are yours versus Modero's.
- Your audit feed Your agency's activity history, including every support-access grant that touched your data.
Last reviewed September 3, 2026.
Something wrong or missing? Tell us or contact support.