Skip to main content
Glama

Update party

clm_update_party
Destructive

Update workspace party. Tax/registration numbers: organisations only; switching to individual must clear both in this update.

Input Schema

NameRequiredDescriptionDefault
idYesID
nameYesName
tagsNoTags
typeYesParty type
emailNoEmail
notesNoNotes
phoneNoPhone
taxIdNoOrg-only VAT/tax number; never a personal ID.
addressNoPostal address
isOwnedNoWorkspace-owned
websiteNoWebsite URL
legalNameNoLegal name
contactNameNoContact name
contactRoleNoContact role
contactEmailNoContact email
contactPhoneNoContact phone
contactDisplayNameNoContact display name
registrationNumberNoOrg-only register number; never a personal ID.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed41 schema fields changed
    • removedInput schema / properties / address / anyOf
      Removed value: -[
      -  {
      -    "properties": {
      -      "city": {
      -        "type": "string"
      -      },
      -      "country": {
      -        "type": "string"
      -      },
      -      "line1": {
      -        "type": "string"
      -      },
      -      "line2": {
      -        "type": "string"
      -      },
      -      "postalCode": {
      -        "type": "string"
      -      },
      -      "stateProvince": {
      -        "type": "string"
      -      }
      -    },
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / address / description
      Added value: +"Postal address"
    • addedInput schema / properties / address / properties
      Added value: +{
      +  "city": {
      +    "type": "string"
      +  },
      +  "country": {
      +    "type": "string"
      +  },
      +  "line1": {
      +    "type": "string"
      +  },
      +  "line2": {
      +    "type": "string"
      +  },
      +  "postalCode": {
      +    "type": "string"
      +  },
      +  "stateProvince": {
      +    "type": "string"
      +  }
      +}
    • addedInput schema / properties / address / type
      Added value: +[
      +  "object",
      +  "null"
      +]
    • removedInput schema / properties / contactDisplayName / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / contactDisplayName / description
      Added value: +"Contact display name"
    • addedInput schema / properties / contactDisplayName / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • changedInput schema / properties / contactEmail / anyOf
      Previous value: -[
      -  {
      -    "anyOf": [
      -      {
      -        "type": "string"
      -      },
      -      {
      -        "type": "null"
      -      }
      -    ]
      -  },
      -  {
      -    "maxLength": 0,
      -    "minLength": 0,
      -    "type": "string"
      -  }
      -]New value: +[
      +  {
      +    "type": [
      +      "string",
      +      "null"
      +    ]
      +  },
      +  {
      +    "maxLength": 0,
      +    "minLength": 0,
      +    "type": "string"
      +  }
      +]
    • addedInput schema / properties / contactEmail / description
      Added value: +"Contact email"
    • removedInput schema / properties / contactName / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / contactName / description
      Added value: +"Contact name"
    • addedInput schema / properties / contactName / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • changedInput schema / properties / contactPhone / anyOf
      Previous value: -[
      -  {
      -    "anyOf": [
      -      {
      -        "pattern": "^[+\\d][\\d\\s\\-().]+$",
      -        "type": "string"
      -      },
      -      {
      -        "type": "null"
      -      }
      -    ]
      -  },
      -  {
      -    "const": "",
      -    "type": "string"
      -  }
      -]New value: +[
      +  {
      +    "pattern": "^[+\\d][\\d\\s\\-().]+$",
      +    "type": [
      +      "string",
      +      "null"
      +    ]
      +  },
      +  {
      +    "const": "",
      +    "type": "string"
      +  }
      +]
    • addedInput schema / properties / contactPhone / description
      Added value: +"Contact phone"
    • removedInput schema / properties / contactRole / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / contactRole / description
      Added value: +"Contact role"
    • addedInput schema / properties / contactRole / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • changedInput schema / properties / email / anyOf
      Previous value: -[
      -  {
      -    "anyOf": [
      -      {
      -        "type": "string"
      -      },
      -      {
      -        "type": "null"
      -      }
      -    ]
      -  },
      -  {
      -    "maxLength": 0,
      -    "minLength": 0,
      -    "type": "string"
      -  }
      -]New value: +[
      +  {
      +    "type": [
      +      "string",
      +      "null"
      +    ]
      +  },
      +  {
      +    "maxLength": 0,
      +    "minLength": 0,
      +    "type": "string"
      +  }
      +]
    • addedInput schema / properties / email / description
      Added value: +"Email"
    • addedInput schema / properties / id / description
      Added value: +"ID"
    • removedInput schema / properties / id / pattern
      Removed value: -"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    • addedInput schema / properties / isOwned / description
      Added value: +"Workspace-owned"
    • changedInput schema / properties / legalName / anyOf
      Previous value: -[
      -  {
      -    "anyOf": [
      -      {
      -        "maxLength": 256,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      {
      -        "type": "null"
      -      }
      -    ]
      -  },
      -  {
      -    "const": "",
      -    "type": "string"
      -  }
      -]New value: +[
      +  {
      +    "maxLength": 256,
      +    "minLength": 1,
      +    "type": [
      +      "string",
      +      "null"
      +    ]
      +  },
      +  {
      +    "const": "",
      +    "type": "string"
      +  }
      +]
    • addedInput schema / properties / legalName / description
      Added value: +"Legal name"
    • addedInput schema / properties / name / description
      Added value: +"Name"
    • removedInput schema / properties / notes / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / notes / description
      Added value: +"Notes"
    • addedInput schema / properties / notes / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • changedInput schema / properties / phone / anyOf
      Previous value: -[
      -  {
      -    "anyOf": [
      -      {
      -        "pattern": "^[+\\d][\\d\\s\\-().]+$",
      -        "type": "string"
      -      },
      -      {
      -        "type": "null"
      -      }
      -    ]
      -  },
      -  {
      -    "const": "",
      -    "type": "string"
      -  }
      -]New value: +[
      +  {
      +    "pattern": "^[+\\d][\\d\\s\\-().]+$",
      +    "type": [
      +      "string",
      +      "null"
      +    ]
      +  },
      +  {
      +    "const": "",
      +    "type": "string"
      +  }
      +]
    • addedInput schema / properties / phone / description
      Added value: +"Phone"
    • removedInput schema / properties / registrationNumber / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / registrationNumber / description
      Added value: +"Org-only register number; never a personal ID."
    • addedInput schema / properties / registrationNumber / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • addedInput schema / properties / tags / description
      Added value: +"Tags"
    • removedInput schema / properties / taxId / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / taxId / description
      Added value: +"Org-only VAT/tax number; never a personal ID."
    • addedInput schema / properties / taxId / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • addedInput schema / properties / type / description
      Added value: +"Party type"
    • changedInput schema / properties / website / anyOf
      Previous value: -[
      -  {
      -    "anyOf": [
      -      {
      -        "format": "uri",
      -        "type": "string"
      -      },
      -      {
      -        "type": "null"
      -      }
      -    ]
      -  },
      -  {
      -    "const": "",
      -    "type": "string"
      -  }
      -]New value: +[
      +  {
      +    "type": [
      +      "string",
      +      "null"
      +    ]
      +  },
      +  {
      +    "const": "",
      +    "type": "string"
      +  }
      +]
    • addedInput schema / properties / website / description
      Added value: +"Website URL"
    • changedOutput schema / (root)
      Previous value: -{
      -  "$schema": "http://json-schema.org/draft-07/schema#",
      -  "additionalProperties": false,
      -  "properties": {
      -    "party": {
      -      "additionalProperties": false,
      -      "description": "Party stored in Contracko",
      -      "properties": {
      -        "address": {
      -          "anyOf": [
      -            {
      -              "anyOf": [
      -                {
      -                  "anyOf": [
      -                    {
      -                      "type": "string"
      -                    },
      -                    {
      -                      "type": "number"
      -                    },
      -                    {
      -                      "type": "boolean"
      -                    },
      -                    {
      -                      "type": "null"
      -                    }
      -                  ]
      -                },
      -                {
      -                  "additionalProperties": {},
      -                  "propertyNames": {
      -                    "type": "string"
      -                  },
      -                  "type": "object"
      -                },
      -                {
      -                  "items": {},
      -                  "type": "array"
      -                }
      -              ]
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "contactDisplayName": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "contactEmail": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "contactName": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "contactPhone": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "contactRole": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "createdAt": {
      -          "format": "date-time",
      -          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      -          "type": "string"
      -        },
      -        "email": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "id": {
      -          "allOf": [
      -            {
      -              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      -              "type": "string"
      -            },
      -            {
      -              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      -              "type": "string"
      -            }
      -          ],
      -          "type": "string"
      -        },
      -        "isOwned": {
      -          "type": "boolean"
      -        },
      -        "legalName": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "name": {
      -          "type": "string"
      -        },
      -        "notes": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "organisationId": {
      -          "type": "string"
      -        },
      -        "phone": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "registrationNumber": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "tags": {
      -          "items": {
      -            "type": "string"
      -          },
      -          "type": "array"
      -        },
      -        "taxId": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "type": {
      -          "enum": [
      -            "individual",
      -            "company",
      -            "non-profit",
      -            "government"
      -          ],
      -          "type": "string"
      -        },
      -        "updatedAt": {
      -          "format": "date-time",
      -          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      -          "type": "string"
      -        },
      -        "website": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        }
      -      },
      -      "required": [
      -        "id",
      -        "organisationId",
      -        "type",
      -        "isOwned",
      -        "name",
      -        "legalName",
      -        "email",
      -        "phone",
      -        "website",
      -        "contactName",
      -        "contactDisplayName",
      -        "contactRole",
      -        "contactEmail",
      -        "contactPhone",
      -        "address",
      -        "taxId",
      -        "registrationNumber",
      -        "tags",
      -        "notes",
      -        "createdAt",
      -        "updatedAt"
      -      ],
      -      "type": "object"
      -    }
      -  },
      -  "required": [
      -    "party"
      -  ],
      -  "type": "object"
      -}New value: +null
  2. First observed

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, readOnlyHint=false, idempotentHint=false and openWorldHint=false, so the risk profile is known. The description adds a genuine domain rule that tax/registration numbers are organisation-only and must be cleared on a switch to individual. It does not disclose update semantics (partial merge vs full replace) or what happens to unmentioned fields, which matters for a destructive 18-parameter mutation.

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?

Two short sentences with no filler, and the domain constraint is front-loaded after the action statement. It is efficient rather than padded, though the extreme brevity for an 18-parameter tool borders on under-specification.

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

Completeness2/5

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

For a destructive, non-idempotent update accepting 18 parameters with only 3 required, the description leaves the most consequential questions unanswered: is this a patch or a replace, are omitted fields wiped, and can type be changed freely. The single rule about tax/registration numbers is not enough context to invoke this safely.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all 18 parameters, including that taxId and registrationNumber are org-only. The description adds a valuable cross-field constraint (clear both when switching to individual) that the schema does not express, but it covers only two of the parameters and explains nothing about the null-versus-empty-string conventions.

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

Purpose4/5

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

States a specific verb and resource ("Update workspace party"), which an agent can easily distinguish from clm_create_party and clm_get_party by name and verb. It does not explicitly name sibling alternatives, so it stops short of a 5.

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

Usage Guidelines2/5

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

The only usage rule given is a conditional constraint about tax/registration numbers when switching to individual. There is no guidance on when to prefer this over clm_create_party, no prerequisites (permissions, party must exist), and nothing about whether omitted fields are preserved or cleared.

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.