Update opportunity
Move an opportunity to another stage or set its status, loss reason and close date.
MCP tool copper_crm_write → update_opportunity
write Confirm
Changes only the fields you pass. Set status to Won, Lost, Abandoned or Open. For Lost, pass loss_reason from list_pipelines, as the Loss Reasons box in Copper asks for one, and set close_date to today to keep reports accurate. Other users see the change, and Workflow Automation rules may fire on it. By default you confirm each call; you can switch that off for this tool.
Parameters
| Name | Type | Description |
|---|---|---|
| opportunity_id string required | string | Id from list_opportunities. |
| stage string | string | Stage name within the opportunity's pipeline. |
| status enum | enum | Open, Won, Lost or Abandoned. |
| loss_reason string | string | Loss reason name from list_pipelines. Used with status Lost. |
| close_date date | date | Close date, YYYY-MM-DD. |
| monetary_value number | number | Value of the opportunity. |
tools/call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "copper_crm_write",
"arguments": {
"operation": "update_opportunity",
"arguments": {
"opportunity_id": "31842907",
"status": "Lost",
"loss_reason": "Price",
"close_date": "2026-10-20"
}
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"opportunity_id": "31842907",
"name": "Northwind renewal",
"pipeline": "Sales",
"stage": "Negotiation",
"status": "Lost",
"loss_reason": "Price",
"close_date": "2026-10-20",
"monetary_value": 18000
},
"isError": false
}