Skip to main content
Glama

updateCustomer

DestructiveIdempotent

Update a customer

PARTIAL update — send only the fields you are changing; anything you OMIT is left exactly as stored (two-way CRM sync friendly: push one field from your system of record without re-sending the record). To CLEAR a field, send it as an empty string: uid, phone, email, notes, preferred_technician_id, service_area_id. tier and status are enums with no empty member, so an empty value there is ignored rather than stored. full_name cannot be set to empty. The nested address object is all-or-nothing: omit it to leave the stored address (and its coordinates) untouched; when present it REPLACES the whole block, and missing latitude/longitude are geocoded from the address. A customer must keep at least one contact channel — an update that would clear both phone and email is refused with PHONE_OR_EMAIL_REQUIRED.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "id": "<id>"
    },
    "name": "updateCustomer"
  }
}

Input Schema

NameRequiredDescriptionDefault
idYesCustomer ID (UUID)
uidNoYour external reference for this customer. Omit to leave unchanged, "" to clear. Max 32 chars.
tierNoLoyalty tier. Omit to leave unchanged; "" is ignored (an enum has no empty member).
emailNoEmail address. Omit to leave unchanged, "" to clear.
notesNoFree-form internal notes about the customer. Omit to leave unchanged, "" to clear; max 4000 chars.
phoneNoPhone number in E.164 international format (`+16135550188`); a bare national number is rejected with PHONE_INVALID — see createCustomerReq.Phone. Omit to leave unchanged, "" to clear. 10–20 chars.
statusNoLifecycle status. Omit to leave unchanged; "" is ignored.
addressNoPostal address and coordinates. Omit the whole object to leave the stored address untouched; when present it REPLACES the address block.
full_nameNoCustomer's full name. Omit to leave unchanged; an empty or blank value is ignored (a customer cannot be left nameless). Max 255 chars.
sms_opt_inNoSMS consent, tri-state: omit/null = leave unchanged; true = grant (only when the customer explicitly consented — the original consent timestamp is preserved); false = revoke (opt-out, stops SMS immediately).
service_area_idNoUUID of the service area for this customer. Omit to leave unchanged, "" to clear. Must belong to this business.
preferred_technician_idNoUUID of the technician this customer prefers. Omit to leave unchanged, "" to clear. Must belong to this business.

Output Schema

NameRequiredDescriptionDefault
dataNoThe response payload. Omitted on error unless the error carries structured data.
errorsNoField-level validation details; present only for VALIDATION_ERROR responses.
messageNoHuman-readable message ("Success" or an error description), localized via the X-Locale header.
error_codeNo0 on success; a stable string error code on failure (e.g. CUSTOMER_NOT_FOUND).

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only give the generic destructive/idempotent/openWorld/readOnly flags; the description goes well beyond them with field-level clearing rules, enum fields silently ignoring empty values, full_name being non-clearable, and the cross-field invariant that refuses an update clearing both phone and email (PHONE_OR_EMAIL_REQUIRED). No contradiction with destructiveHint=true — clearing semantics are disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the operation, then layered rules in decreasing generality. Every sentence carries a real constraint, though the dense single-paragraph form and some overlap with schema descriptions make it slightly heavy for quick scanning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need not be described, and annotations cover the safety profile; the description fills the mutation-semantics gap thoroughly. It is silent on authorization requirements and on external side effects implied by openWorldHint=true (webhook/notification fan-out), which for a 12-parameter mutation would be worth one more sentence.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds genuinely new semantics the schema does not: the address block is all-or-nothing and replaces stored coordinates, missing lat/long are geocoded, and the at-least-one-contact-channel invariant spans multiple parameters. It does skip some parameters (sms_opt_in tri-state nuance is only in the schema), so not a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Update a customer') that is unambiguous against the sibling set (createCustomer, getCustomer, deleteCustomer, update* on other resources). An agent can identify the target entity and operation without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives strong operant context: send only changed fields, omit to preserve, empty string to clear, and the sync-friendly rationale for partial pushes. It stops short of naming when-not-to-use-this or pointing at an alternative sibling (e.g. createCustomer for new records), so it is clear context without explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.