Skip to main content
Glama

Update lead

update_lead
Destructive

Update fields of a CRM lead in the caller's active workspace (e.g. status, priority, name, contact). Only a lead in the caller's tenant is reachable. Pass 'lead_id' plus the fields to change. Status 'unqualified' needs 'lostReason' (not_target, spam, duplicate, no_budget, no_response, chose_competitor, other; optional 'lostComment'); 'spam' implies reason spam; 'closed' is retired — use 'unqualified' with a reason. A lead in one of the workspace's pipelines (crm_pipeline_get) takes its status from its stage: a status change there is refused with use_stage — call crm_set_stage. CONFIRMATION: this tool is PROPOSED, never performed directly. You get status='confirmation_required' with an action_id and a plan_token, and the write happens only after confirm_action.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "lead_id": "<lead_id>"
    },
    "name": "update_lead"
  }
}

Input Schema

NameRequiredDescriptionDefault
tagsNo
emailNo
phoneNo
customNoThe workspace's own fields (keys from crm_list_fields): {key: value} sets, {key: null} removes, other keys stay. Values are validated by type — an enum lists its allowed options, money_eur accepts EUR only.
statusNo
commentNo
companyNo
lead_idYes
lastNameNo
priorityNo
firstNameNo
lostReasonNo
lostCommentNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only declare destructiveHint=true and readOnlyHint=false; the description adds substantial behavior beyond that: tenant isolation, the two-phase propose-then-confirm protocol with status='confirmation_required', action_id and plan_token, and the refusal semantics for pipeline-bound leads. It also discloses conditional validation rules tying 'unqualified' to lostReason and 'spam' to reason spam.

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?

Well front-loaded: purpose and tenant scope first, then status rules, then the pipeline exception, then the confirmation protocol in a labeled block. It is dense but nearly every clause carries a decision-relevant constraint; the only mild redundancy is re-listing the lostReason enum values already present in the schema.

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 destructive 13-parameter mutation with no output schema, the description covers what an agent needs: required key, field semantics for the ambiguous parameters, failure modes (use_stage refusal), and the full confirmation lifecycle including the expected response shape. Nothing material to correct invocation is missing.

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?

With only 8% schema description coverage across 13 parameters, the description carries most of the burden and does so for the non-obvious ones: lead_id must be paired with the fields to change, status has conditional requirements on lostReason/lostComment, and the lostReason enum values are restated with their semantics. The remaining simple fields (email, phone, company, tags, priority, names) are left to self-evident naming, and the 'custom' object is documented in the schema rather than the description.

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 specific verb and resource ('Update fields of a CRM lead') plus scope ('in the caller's active workspace') and enumerates the affected field families. It explicitly differentiates from siblings by naming crm_set_stage for pipeline-stage status changes and confirm_action for committing the write.

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?

Gives explicit when-to-use and when-not-to-use rules: pipeline leads must go through crm_set_stage (a status change there is 'refused with use_stage'), 'closed' is retired and must be replaced by 'unqualified' plus a reason. It also names the required follow-up path (confirm_action with action_id and plan_token), so an agent knows the exact call sequence.

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