| name | update-deal |
| description | Updates an existing deal record in the Carta CRM. Use this skill when the user says things like "update a deal", "move deal to [stage]", "change deal stage", "edit deal", "update deal fields", "add a tag to deal", "assign deal lead", "update company info on deal", "link contacts to deal", or "/update-deal". Accepts a deal ID or company name (will search if no ID provided). Only the fields explicitly provided are changed โ all other fields are left untouched.
|
| allowed-tools | ["mcp__carta__crm_call_tool"] |
| version | 1.0.0 |
| model | haiku |
`_instrumentation_v2` is anonymous Carta skill-usage telemetry. ALWAYS include it in your Carta MCP tool-call arguments โ the plugins' hooks overwrite it when they run, so always sending it is safe. Shape:
`_instrumentation_v2: {"skills": [":", ...], "model": ""}`
`skills` is cumulative for the session: list every Carta skill loaded so far, not only the one driving this call. Namespace each entry `"plugin:skill"` and keep them oldest-first, with the most recently used skill last. List only Carta skills (`carta-cap-table:*`, `carta-crm:*`, `carta-investors:*`) โ never skills from non-Carta plugins.
Overview
Partially update an existing deal. Only fields provided are modified โ this is
a partial update, not a replacement. First resolve the deal ID, collect what to
change, then call the update tool.
Step 1 โ Resolve the deal ID
If the user provided a deal ID directly, use it and skip to Step 3.
If only a company name was given, call get_deal_fields first, then search:
crm_call_tool({ "name": "crm:get_deal_fields", "arguments": {} })
crm_call_tool({ "name": "crm:search_deals", "arguments": { query: "<company name>", limit: 10 } })
If multiple deals match, present the list and ask the user to confirm which one
to update (show company name, stage, and ID for each).
Step 2 โ Collect what to update
Ask the user what they want to change:
| Field | Description |
|---|
stageId | Move deal to a different stage |
company.name | Update the associated company name |
company.url | Update company URL โ triggers auto-enrichment |
comment | Replace the deal comment/notes |
tags | Replace the full tags array |
dealLead | User ID to assign as deal lead |
addedAt | ISO 8601 date the deal was added |
fields | Custom field values keyed by field ID |
people.advisers | Contact IDs linked as advisers |
people.introducer | Contact IDs linked as introducers |
people.management | Contact IDs linked as management |
If the user wants to move to a stage by name, fetch pipelines first:
crm_call_tool({ "name": "crm:get_deal_pipelines_with_stages", "arguments": {} })
If updating custom fields by label rather than ID:
crm_call_tool({ "name": "crm:get_deal_custom_fields", "arguments": {} })
Important: Only include fields that are explicitly being changed. Omit everything else.
Step 3 โ Update the deal
Call:
crm_call_tool({
"name": "crm:update_deal",
"arguments": {
id: "<deal id>",
stageId: "<stage id>",
company: { name: "<name>", url: "<url>" },
comment: "<updated comment>",
tags: ["<tag1>", "<tag2>"],
dealLead: "<user id>",
addedAt: "<ISO 8601 date>",
fields: { "<field_id>": "<value>" },
people: {
advisers: ["<contact id>"],
introducer: ["<contact id>"],
management: ["<contact id>"]
}
}
})
Omit any top-level key that is not being updated.
Step 4 โ Report result
On success, respond with a summary of what changed:
"Deal for {company name} updated (ID: {id}). Changed: [list of changed fields]"
On error, show the error message and suggest:
- Verify the deal ID is correct โ run
/search-deals to find it
- Check that stage IDs are valid โ run
get_deal_pipelines_with_stages
- Check that custom field IDs and contact IDs are valid
Updating multiple deals
If the user wants to apply the same change to multiple deals, repeat Steps 1 and 3โ4
for each. Summarize at the end:
"Updated N deals: [list of company names]"