Skip to main content
Glama

update_person

DestructiveIdempotent

Update your notes, tags, custom_name, relationship_type, or the person's companies / role / emails / phones. What you set here are your own overrides — they win over whatever was imported/derived, wherever the person is shown (they're the same values the web relationship panel shows as chips) — so this is how you correct or fill in a relationship's contact details. A person can have SEVERAL emails, phones, and companies: pass the emails / phones / companies ARRAYS to record them all in one call — the first entry is the primary. Never stash a second email in notes. Each array REPLACES that field's current list (it does not merge, unlike tags), so include the values you want to keep; [] clears the override. The singular email / company are aliases for the primary. If they're not in your network yet, they're added first (upsert) — so it works on any search_people hit.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
roleNoTheir role/title — your override, wins over the role derived from their headline. Pass null to clear.
tagsNoMerged with existing tags. Prefer an existing tag from your network over coining a near-duplicate (reuse `sf`, don't add `san-francisco`); lowercase, and use the event:/place:/topic: namespaces where they fit.
emailNoTheir PRIMARY email — alias for emails[0]; keeps any other addresses already recorded. Pass null to clear. Use `emails` to set several.
emailsNoALL of their email addresses, primary FIRST (e.g. work + personal). REPLACES the current list — pass every address you want to keep; [] clears the override back to the imported/derived emails. Wins over any imported email.
phonesNoALL of their phone numbers, primary FIRST. REPLACES the current list; [] clears the override.
companyNoTheir PRIMARY company — alias for companies[0]; keeps any other companies already recorded. Pass null to clear. Use `companies` to set several.
companiesNoALL companies they're at, primary FIRST. REPLACES the current list; [] clears the override.
person_idYesThe person's id (from search_people / get_person).
custom_nameNoYour display name for them.
default_notesNoFreeform notes.
relationship_typesNoHow you know this person, from the closed set: family, close_friend, friend, acquaintance, coworker, alumni, customer, vendor, advisor, investor. Full editable selection; omitted automatic types are rejected on future refresh. Use add/remove for partial corrections. All roles except Coworker and Alumni require an explicit user statement.
relationship_types_addNoAdd types without replacing unrelated selections. A personal choice replaces the previous personal choice. Explicit add clears an automatic-tag rejection. Coworker and Alumni may be automatic; all other roles require an explicit user statement.
relationship_types_removeNoRemove types without replacing unrelated selections. Removing Coworker or Alumni persists a rejection across automatic refreshes. If a type is both added and removed, removal wins.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • changedInput schema / properties / relationship_types / description
      Previous value: -"How you know this person, from the closed set: family, close_friend, friend, coworker, ex_coworker, advisor_investor, customer, vendor, acquaintance. Values outside this set are dropped."New value: +"How you know this person, from the closed set: family, close_friend, friend, acquaintance, coworker, alumni, customer, vendor, advisor, investor. Full editable selection; omitted automatic types are rejected on future refresh. Use add/remove for partial corrections. All roles except Coworker and Alumni require an explicit user statement."
    • addedInput schema / properties / relationship_types_add
      Added value: +{
      +  "description": "Add types without replacing unrelated selections. A personal choice replaces the previous personal choice. Explicit add clears an automatic-tag rejection. Coworker and Alumni may be automatic; all other roles require an explicit user statement.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "maxItems": 50,
      +  "type": "array"
      +}
    • addedInput schema / properties / relationship_types_remove
      Added value: +{
      +  "description": "Remove types without replacing unrelated selections. Removing Coworker or Alumni persists a rejection across automatic refreshes. If a type is both added and removed, removal wins.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "maxItems": 50,
      +  "type": "array"
      +}
  2. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "http://json-schema.org/draft-07/schema#",
      +  "additionalProperties": true,
      +  "properties": {
      +    "data": {
      +      "additionalProperties": true,
      +      "description": "The operation result when ok is true.",
      +      "properties": {
      +        "updated": {
      +          "type": "boolean"
      +        }
      +      },
      +      "required": [
      +        "updated"
      +      ],
      +      "type": "object"
      +    },
      +    "error": {
      +      "description": "A human-readable error when ok is false.",
      +      "type": "string"
      +    },
      +    "ok": {
      +      "description": "Whether noticed completed the operation.",
      +      "type": "boolean"
      +    }
      +  },
      +  "required": [
      +    "ok"
      +  ],
      +  "type": "object"
      +}
  3. First observed

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the annotations (readOnlyHint=false, destructiveHint=true, idempotentHint=true) by disclosing the crucial replace-vs-merge asymmetry: arrays REPLACE their list while tags merge, [] clears an override back to imported data, and the first entry is primary. It also flags the upsert side effect for non-network people, which is exactly the destructive-adjacent behavior an agent must know.

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?

Dense but front-loaded: the very first sentence says what can be updated, then it layers override semantics, aliasing, and replace/clear rules. Long single-paragraph form is justified by the 13-parameter, high-risk surface, though it could be broken up for scannability.

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 13-parameter destructive mutation with 100% schema coverage and an output schema present, the description covers everything an agent needs: precedence, replace/clear semantics, aliases, primary ordering, and the upsert behavior. Return values are correctly left to the output schema.

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 cross-parameter meaning the per-property schema entries do not: that email/company are aliases for the primary array element, the replace vs merge contrast between arrays and tags, and the warning not to stash a second email in notes.

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 concrete verb (update) plus the exact resource fields (notes, tags, custom_name, relationship_type, companies/role/emails/phones) and frames them as user overrides that win over imported/derived data. This clearly separates it from read-side siblings like get_person and search_people.

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 situational guidance: use it to correct or fill in a relationship's contact details, and it also works on any search_people hit via upsert for non-network people. It does not explicitly name competing tools (e.g. add_note, add_to_network) to route between, so it stops short of full alternative coverage.

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