Skip to main content
Glama

Create party

clm_create_party

Create a workspace company/person party. Tax/registration numbers: organisations only.

Input Schema

NameRequiredDescriptionDefault
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. Changed39 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 / isOwned / description
      Added value: +"Workspace-owned"
    • changedInput schema / properties / legalName / 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 / 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.2/5.0
Behavior3/5

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

Annotations already declare this is a non-read-only, non-destructive, non-idempotent, closed-world write. The description adds a genuine cross-field constraint (taxId/registrationNumber are organisation-only, presumably rejected or ignored for individuals) plus the workspace-ownership scope, neither of which is derivable from annotations. It says nothing about duplicate handling or what happens when a conflicting party already exists, which matters for a non-idempotent create.

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, front-loaded with the action and resource; no filler whatsoever. The telegraphic phrase "Tax/registration numbers: organisations only" is clipped to the point of reading like a fragment, which slightly hurts structure but not length.

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

Completeness3/5

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

For a 17-parameter, non-idempotent creation tool with no output schema, the description covers the core action and one important constraint but leaves out the relationship between the top-level contact* fields and the party itself, and says nothing about what identifier comes back for subsequent clm_get_party or clm_update_party calls. Adequate given full schema coverage, but thin for a create in a 17-param surface.

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%, and the schema itself already documents taxId and registrationNumber as "org-only", so the description's second sentence largely restates structured data. The "company/person" phrasing does hint that the type enum covers more than two values (individual, company, non-profit, government) while only two are named, which is a small loss of precision rather than added meaning. Baseline 3 applies.

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?

"Create a ... party" gives a specific verb plus the resource, and the qualifiers "workspace company/person" pin down that it is a workspace-scoped party record of either an individual or an organisation. Sibling tools (clm_get_party, clm_list_parties, clm_update_party) are implicitly distinguished by the verb, but none are named explicitly.

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?

There is no guidance on when to create versus when to update an existing party, no mention of checking for duplicates via clm_list_parties first, and no stated prerequisites or permissions. The only usage-like constraint is "Tax/registration numbers: organisations only", which is a field rule rather than a when-to-use rule.

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.