Skip to main content
Glama

Update person

well_update_person
Destructive

Update an existing person (contact) in the current workspace.

Use this tool when the user asks to change, fix, rename, or edit a person's fields.

REQUIRED: person_id OPTIONAL (only include fields the user wants changed): first_name, last_name, job_title, timezone, locale, birthdate (MM-DD or YYYY-MM-DD; year 0004 means the year is unknown), tags, remove_tags, hidden.

For a new person, use well_create_person first, then call this tool with the returned person_id to save their birthday. Pass birthdate as null to clear the date.

TAGS: tags adds workspace tags to the person and keeps the tags they already carry. remove_tags takes tags off the person, by name; the workspace tag itself stays. To change a status kept as a tag, send both in one call: the new tag in tags and the old one in remove_tags. One name in both lists is refused.

HIDE: hidden: true hides the person from Well's lists and figures and keeps the row; hidden: false shows them again. It works on a person a connected tool synced in too, since no sync writes it. When the person asks to delete a synced contact, well_delete_person refuses and offers this hide: ask, then call this tool with only person_id and hidden: true.

NOT CHANGEABLE via this tool: emails, phones, locations, linked companies, media. Those require dedicated tools (not yet available).

Returns { success: true, person_id, full_name } on success, with tags (the person's tags after the change) when the call sent tags or remove_tags, or { success: false, error } on failure. In Well's own chat, a call that saves a birthday also returns birthday: { date, reminders }: the next date of the birthday and the days Well reminds the member of it, all YYYY-MM-DD. Read the reminder days back from it; never compute them. An MCP call does not return this field.

Input Schema

NameRequiredDescriptionDefault
tagsNoTags to add to this person; the tags the person already carries stay
hiddenNotrue hides the row from Well's lists and figures and keeps it, with every value a connected tool wrote; false shows it again. Omit to leave it as it is.
localeNoPerson's language; pass null to clear
timezoneNoPerson's time zone; pass null to clear
birthdateNoBirthday as MM-DD or YYYY-MM-DD; year 0004 means the year is unknown
job_titleNoJob title; pass null to clear
last_nameNoLast name
person_idYesThe UUID of the person to update (required)
first_nameNoFirst name
remove_tagsNoTags to take off this person, by name; the workspace tag itself stays
workspace_idNoTarget workspace. Omit when the token authorizes one workspace. Required when it authorizes several — a write lands in exactly one workspace and this call would not say which.
conversation_idNoThe conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.
idempotency_keyNoOptional client-supplied key. A retried write with the same key returns the original result instead of re-applying the operation.
workspace_scopeNoRestrict this call to the family: the token's primary workspace plus the company workspaces under it that you are a member of. Unrelated authorized workspaces drop out of the read; row reads merge across the family, while a per-workspace figure still reports exactly one workspace.

Output Schema

NameRequiredDescriptionDefault
codeNo
tagsNo
errorNo
successYes
birthdayNo
previousNo
full_nameNo
person_idNo
reply_linesNo
conversation_idNoThe conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.
near_candidatesNo
newly_connectedNoTools that connected to this workspace since the last result and that no session was told about yet, oldest first. Present only when at least one tool is new. The connected-line rule says when to tell an entry; when it does, one line per entry, in the person's language: "<name> is connected.". Never fold several entries into one sentence. Each entry comes back once, on one result only: never repeat its line later.
conversation_id_noteNoPresent only when the server opened a fresh lane, stating that no choice recorded earlier was read.
conversation_id_sourceNoWhere the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened.
near_candidates_truncatedNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changed
    • addedInput schema / properties / remove_tags
      Added value: +{
      +  "description": "Tags to take off this person, by name; the workspace tag itself stays",
      +  "items": {
      +    "maxLength": 255,
      +    "minLength": 1,
      +    "type": "string"
      +  },
      +  "maxItems": 25,
      +  "type": "array"
      +}
    • changedInput schema / properties / tags / description
      Previous value: -"Tags to add to this person"New value: +"Tags to add to this person; the tags the person already carries stay"
    • addedOutput schema / properties / birthday
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "date": {
      +      "type": "string"
      +    },
      +    "reminders": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "date",
      +    "reminders"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / tags
      Added value: +{
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  2. Changed3 schema fields changed
    • addedInput schema / properties / locale
      Added value: +{
      +  "anyOf": [
      +    {
      +      "enum": [
      +        "aa",
      +        "ab",
      +        "ae",
      +        "af",
      +        "ak",
      +        "am",
      +        "an",
      +        "ar",
      +        "as",
      +        "av",
      +        "ay",
      +        "az",
      +        "ba",
      +        "be",
      +        "bg",
      +        "bh",
      +        "bi",
      +        "bm",
      +        "bn",
      +        "bo",
      +        "br",
      +        "bs",
      +        "ca",
      +        "ce",
      +        "ch",
      +        "co",
      +        "cr",
      +        "cs",
      +        "cu",
      +        "cv",
      +        "cy",
      +        "da",
      +        "de",
      +        "dv",
      +        "dz",
      +        "ee",
      +        "el",
      +        "en",
      +        "eo",
      +        "es",
      +        "et",
      +        "eu",
      +        "fa",
      +        "ff",
      +        "fi",
      +        "fj",
      +        "fo",
      +        "fr",
      +        "fy",
      +        "ga",
      +        "gd",
      +        "gl",
      +        "gn",
      +        "gu",
      +        "gv",
      +        "ha",
      +        "he",
      +        "hi",
      +        "ho",
      +        "hr",
      +        "ht",
      +        "hu",
      +        "hy",
      +        "hz",
      +        "ia",
      +        "id",
      +        "ie",
      +        "ig",
      +        "ii",
      +        "ik",
      +        "io",
      +        "is",
      +        "it",
      +        "iu",
      +        "ja",
      +        "jv",
      +        "ka",
      +        "kg",
      +        "ki",
      +        "kj",
      +        "kk",
      +        "kl",
      +        "km",
      +        "kn",
      +        "ko",
      +        "kr",
      +        "ks",
      +        "ku",
      +        "kv",
      +        "kw",
      +        "ky",
      +        "la",
      +        "lb",
      +        "lg",
      +        "li",
      +        "ln",
      +        "lo",
      +        "lt",
      +        "lu",
      +        "lv",
      +        "mg",
      +        "mh",
      +        "mi",
      +        "mk",
      +        "ml",
      +        "mn",
      +        "mr",
      +        "ms",
      +        "mt",
      +        "my",
      +        "na",
      +        "nb",
      +        "nd",
      +        "ne",
      +        "ng",
      +        "nl",
      +        "nn",
      +        "no",
      +        "nr",
      +        "nv",
      +        "ny",
      +        "oc",
      +        "oj",
      +        "om",
      +        "or",
      +        "os",
      +        "pa",
      +        "pi",
      +        "pl",
      +        "ps",
      +        "pt",
      +        "qu",
      +        "rm",
      +        "rn",
      +        "ro",
      +        "ru",
      +        "rw",
      +        "sa",
      +        "sc",
      +        "sd",
      +        "se",
      +        "sg",
      +        "si",
      +        "sk",
      +        "sl",
      +        "sm",
      +        "sn",
      +        "so",
      +        "sq",
      +        "sr",
      +        "ss",
      +        "st",
      +        "su",
      +        "sv",
      +        "sw",
      +        "ta",
      +        "te",
      +        "tg",
      +        "th",
      +        "ti",
      +        "tk",
      +        "tl",
      +        "tn",
      +        "to",
      +        "tr",
      +        "ts",
      +        "tt",
      +        "tw",
      +        "ty",
      +        "ug",
      +        "uk",
      +        "ur",
      +        "uz",
      +        "ve",
      +        "vi",
      +        "vo",
      +        "wa",
      +        "wo",
      +        "xh",
      +        "yi",
      +        "yo",
      +        "za",
      +        "zh",
      +        "zu",
      +        "fr-CA",
      +        "fr-BE",
      +        "en-GB",
      +        "pt-BR"
      +      ],
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Person's language; pass null to clear"
      +}
    • addedInput schema / properties / tags
      Added value: +{
      +  "description": "Tags to add to this person",
      +  "items": {
      +    "maxLength": 255,
      +    "minLength": 1,
      +    "type": "string"
      +  },
      +  "maxItems": 25,
      +  "type": "array"
      +}
    • addedInput schema / properties / timezone
      Added value: +{
      +  "description": "Person's time zone; pass null to clear",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
  3. Changed8 schema fields changed
    • removedInput schema / properties / birthdate / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / birthdate / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • addedOutput schema / properties / code
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / near_candidates
      Added value: +{
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "company_id": {
      +        "type": "string"
      +      },
      +      "name": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "company_id",
      +      "name"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / near_candidates_truncated
      Added value: +{
      +  "type": "boolean"
      +}
    • removedOutput schema / properties / previous / properties / job_title / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / previous / properties / job_title / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • addedOutput schema / properties / reply_lines
      Added value: +{
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  4. Changed1 schema field changed
    • addedOutput schema / properties / previous
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "job_title": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    }
      +  },
      +  "required": [
      +    "job_title"
      +  ],
      +  "type": "object"
      +}
  5. Changed2 schema fields changed
    • addedInput schema / properties / birthdate
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Birthday as MM-DD or YYYY-MM-DD; year 0004 means the year is unknown"
      +}
    • addedInput schema / properties / hidden
      Added value: +{
      +  "description": "true hides the row from Well's lists and figures and keeps it, with every value a connected tool wrote; false shows it again. Omit to leave it as it is.",
      +  "type": "boolean"
      +}
  6. Changed1 schema field changed
    • changedOutput schema / properties / newly_connected / description
      Previous value: -"Tools that connected to this workspace since the last result and that no session was told about yet, oldest first. Present only when at least one tool is new. Start the reply with one line per entry, in the person's language: \"<name> is connected.\". Never fold several entries into one sentence. Each entry comes back once, on one result only: never repeat its line later."New value: +"Tools that connected to this workspace since the last result and that no session was told about yet, oldest first. Present only when at least one tool is new. The connected-line rule says when to tell an entry; when it does, one line per entry, in the person's language: \"<name> is connected.\". Never fold several entries into one sentence. Each entry comes back once, on one result only: never repeat its line later."
  7. Changed1 schema field changed
    • addedInput schema / properties / workspace_scope
      Added value: +{
      +  "description": "Restrict this call to the family: the token's primary workspace plus the company workspaces under it that you are a member of. Unrelated authorized workspaces drop out of the read; row reads merge across the family, while a per-workspace figure still reports exactly one workspace.",
      +  "enum": [
      +    "family"
      +  ],
      +  "type": "string"
      +}
  8. Changed1 schema field changed
    • addedOutput schema / properties / newly_connected
      Added value: +{
      +  "description": "Tools that connected to this workspace since the last result and that no session was told about yet, oldest first. Present only when at least one tool is new. Start the reply with one line per entry, in the person's language: \"<name> is connected.\". Never fold several entries into one sentence. Each entry comes back once, on one result only: never repeat its line later.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "name": {
      +        "type": "string"
      +      },
      +      "service_id": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "name",
      +      "service_id"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
  9. Changed4 schema fields changed
    • addedInput schema / properties / conversation_id
      Added value: +{
      +  "description": "The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / conversation_id
      Added value: +{
      +  "description": "The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / conversation_id_note
      Added value: +{
      +  "description": "Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / conversation_id_source
      Added value: +{
      +  "description": "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened.",
      +  "enum": [
      +    "host_meta",
      +    "argument",
      +    "minted"
      +  ],
      +  "type": "string"
      +}
  10. Changed1 schema field changed
    • changedInput schema / properties / job_title / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "maxLength": 100,
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  11. Changed1 schema field changed
    • changedInput schema / properties / job_title / anyOf
      Previous value: -[
      -  {
      -    "maxLength": 200,
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  12. Changed1 schema field changed
    • changedInput schema / properties / workspace_id / description
      Previous value: -"Target workspace. Omit to use the only authorized workspace, or (for read tools) to query all authorized workspaces grouped by workspace. Required for write tools when the token authorizes more than one workspace."New value: +"Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several — a write lands in exactly one workspace and this call would not say which."
  13. First observed

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is known; the description adds real context beyond that by explaining that remove_tags detaches the tag from the person while the workspace tag survives, that hidden keeps the row and works on sync-written people, and that a name in both tag lists is refused. It stops short of stating permission requirements or full reversibility, but the behavioral burden is largely met.

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 purpose and trigger first, then labeled REQUIRED/OPTIONAL/TAGS/HIDE blocks, which makes it scannable despite its length. A few passages restate schema property descriptions (tags, hidden) almost verbatim and the birthday-return detail about Well's own chat is longer than an MCP agent needs, costing a point.

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

Completeness5/5

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

For a 14-parameter mutation tool with an output schema, the description covers the required key, which fields are optional, what cannot be changed here, and the success/failure response shape. It even flags that the birthday return field does not come back on MCP calls, which prevents a false expectation.

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 meaning the schema does not carry: the tags/remove_tags status-change pattern (send the new tag and the old one in one call), the refusal rule for duplicate names across the lists, the birthdate year-0004 convention for unknown years, and null to clear. Only workspace_id, conversation_id and idempotency_key are left entirely to the schema, which documents them well.

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?

"Update an existing person (contact) in the current workspace" gives a specific verb plus resource and scopes it to an existing record. The description also separates this tool from well_create_person (for new people) and well_delete_person (which refuses on synced contacts), so an agent can distinguish it from siblings without opening any schema.

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

Usage Guidelines5/5

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

It states the triggering user intents (change, fix, rename, edit), gives the alternative for creation (create_person then re-call with the returned person_id), and prescribes an exact fallback path when a delete is refused for a synced contact. Explicit when-to-use and what-to-do-instead guidance with no inference required.

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