Skip to main content
Glama

Client Write Tool

client-write
Destructive

Create or update a client account. "create" requires email; welcome_email defaults to true and can send an external welcome email. "update" is a partial update of an existing client's profile: omitted fields are left untouched, and an explicit null clears a field (email cannot be cleared).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
noteNoClient note. Max 65535 characters. For "create" and "update"; omit to leave untouched on "update", null to clear.
emailNoClient email address. Required for "create". Optional for "update" — cannot be cleared to null.
optinNoMarketing opt-in flag. For "create" and "update"; omit to leave untouched on "update", null to clear.
phoneNoClient phone number. Max 64 characters. For "create" and "update"; omit to leave untouched on "update", null to clear.
actionYesAction to perform.
name_fNoClient first name. Max 64 characters. For "create" and "update"; omit to leave untouched on "update", null to clear.
name_lNoClient last name. Max 64 characters. For "create" and "update"; omit to leave untouched on "update", null to clear.
tax_idNoClient tax ID. Max 255 characters. For "create" and "update"; omit to leave untouched on "update", null to clear.
addressNoAddress: line_1, city, state, postcode, country (2-letter code). For "create" and "update". On "update", provided fields are merged into the existing address (or a new address is created if none exists); omit the whole object to leave the address untouched — null is also treated as untouched, not cleared.
balanceNoOptional starting client balance. "create" only.
companyNoClient company name. Max 255 characters. For "create" and "update"; omit to leave untouched on "update", null to clear.
client_idNoClient id. Required for "update".
status_idNoClient status ID. For "create" and "update"; omit to use the model default on "create" or leave untouched on "update". Cannot be null or empty.
stripe_idNoStripe customer ID. Must be unique. For "create" and "update"; omit to leave untouched on "update", null to clear.
created_atNoOptional creation date/time. "create" only.
welcome_emailNoWhether to send the welcome email. Defaults to true. "create" only.
referrer_user_idNoReferring client ID. Must be a different client. For "create" and "update"; omit to leave untouched on "update", null to clear.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed26 schema fields changed
    • changedInput schema / properties / action / enum
      Previous value: -[
      -  "create"
      -]New value: +[
      +  "create",
      +  "update"
      +]
    • changedInput schema / properties / address / description
      Previous value: -"Optional address: line_1, city, state, postcode, country (2-letter code)."New value: +"Address: line_1, city, state, postcode, country (2-letter code). For \"create\" and \"update\". On \"update\", provided fields are merged into the existing address (or a new address is created if none exists); omit the whole object to leave the address untouched — null is also treated as untouched, not cleared."
    • changedInput schema / properties / balance / description
      Previous value: -"Optional starting client balance."New value: +"Optional starting client balance. \"create\" only."
    • changedInput schema / properties / client_id / description
      Previous value: -"User id. Required when updating an existing record."New value: +"Client id. Required for \"update\"."
    • changedInput schema / properties / company / description
      Previous value: -"Client company name. Max 255 characters."New value: +"Client company name. Max 255 characters. For \"create\" and \"update\"; omit to leave untouched on \"update\", null to clear."
    • changedInput schema / properties / company / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
    • changedInput schema / properties / created_at / description
      Previous value: -"Optional creation date/time for \"create\"."New value: +"Optional creation date/time. \"create\" only."
    • changedInput schema / properties / email / description
      Previous value: -"Client email address. Required for \"create\"."New value: +"Client email address. Required for \"create\". Optional for \"update\" — cannot be cleared to null."
    • changedInput schema / properties / name_f / description
      Previous value: -"Client first name. Max 64 characters."New value: +"Client first name. Max 64 characters. For \"create\" and \"update\"; omit to leave untouched on \"update\", null to clear."
    • changedInput schema / properties / name_f / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
    • changedInput schema / properties / name_l / description
      Previous value: -"Client last name. Max 64 characters."New value: +"Client last name. Max 64 characters. For \"create\" and \"update\"; omit to leave untouched on \"update\", null to clear."
    • changedInput schema / properties / name_l / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
    • changedInput schema / properties / note / description
      Previous value: -"Optional client note. Max 65535 characters."New value: +"Client note. Max 65535 characters. For \"create\" and \"update\"; omit to leave untouched on \"update\", null to clear."
    • changedInput schema / properties / note / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
    • changedInput schema / properties / optin / description
      Previous value: -"Optional marketing opt-in flag."New value: +"Marketing opt-in flag. For \"create\" and \"update\"; omit to leave untouched on \"update\", null to clear."
    • changedInput schema / properties / optin / type
      Previous value: -"boolean"New value: +[
      +  "boolean",
      +  "null"
      +]
    • changedInput schema / properties / phone / description
      Previous value: -"Client phone number. Max 64 characters."New value: +"Client phone number. Max 64 characters. For \"create\" and \"update\"; omit to leave untouched on \"update\", null to clear."
    • changedInput schema / properties / phone / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
    • changedInput schema / properties / referrer_user_id / description
      Previous value: -"Optional referring client/user ID."New value: +"Referring client ID. Must be a different client. For \"create\" and \"update\"; omit to leave untouched on \"update\", null to clear."
    • changedInput schema / properties / referrer_user_id / type
      Previous value: -"integer"New value: +[
      +  "integer",
      +  "null"
      +]
    • changedInput schema / properties / status_id / description
      Previous value: -"Optional client status ID. Omit to use the model default."New value: +"Client status ID. For \"create\" and \"update\"; omit to use the model default on \"create\" or leave untouched on \"update\". Cannot be null or empty."
    • changedInput schema / properties / stripe_id / description
      Previous value: -"Optional Stripe customer ID. Must be unique."New value: +"Stripe customer ID. Must be unique. For \"create\" and \"update\"; omit to leave untouched on \"update\", null to clear."
    • changedInput schema / properties / stripe_id / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
    • changedInput schema / properties / tax_id / description
      Previous value: -"Client tax ID. Max 255 characters."New value: +"Client tax ID. Max 255 characters. For \"create\" and \"update\"; omit to leave untouched on \"update\", null to clear."
    • changedInput schema / properties / tax_id / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
    • changedInput schema / properties / welcome_email / description
      Previous value: -"Whether to send the welcome email. Defaults to true."New value: +"Whether to send the welcome email. Defaults to true. \"create\" only."
  2. First observed

TDQS

A4.3/5.0
Behavior4/5

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

The description discloses important behavioral traits: welcome_email defaults to true and can send an external email, update is partial with omitted fields untouched, null clears fields, and email cannot be cleared. It also notes address merge behavior. Annotations already indicate destructiveHint=true, so the description adds meaningful context beyond that. It doesn't mention side effects like email sending beyond welcome_email, but the key behaviors are covered.

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?

The description is compact and front-loaded with the core purpose. It packs significant behavioral detail into a few sentences without redundancy. It could be slightly more structured, but it earns its place with high information density.

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?

Given the tool's complexity (17 params, nested address object, two actions with different requirements), the description covers the critical semantics: create vs update, null clearing, email constraints, and address merging. It doesn't explain return values, but there is no output schema and the description focuses on invocation semantics. It is complete enough for an agent to call the tool correctly in most cases.

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 schema already documents all parameters. The description adds value by explaining the create/update distinction and the null-clearing semantics, which are not fully obvious from the schema alone. It also clarifies the address merge behavior and email constraints. This goes beyond the baseline 3 for full schema coverage.

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?

The description clearly states the tool creates or updates a client account, and distinguishes the two actions with their key semantics. It names the resource (client account) and the specific operations, making it easy to differentiate from sibling read tools like client-read.

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?

The description explains when to use 'create' vs 'update' and highlights important constraints like email being required for create and not clearable on update. It doesn't explicitly name alternative tools, but the action enum and per-field notes provide clear usage context. It could be improved by explicitly stating when to prefer client-write over other write tools.

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.

Resources