Create or update a contact
upsert_contactCreate a CRM contact, or update it if one already exists for the email. This is how you "save a lead" — email is the only required field. Tags are merged (never replaced), notes are appended, and events are emitted so automations can fire.
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": {
"email": "<email>"
},
"name": "upsert_contact"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Tags to merge onto the contact. | |
| Yes | Contact email (required — the upsert key). | ||
| notes | No | Note text appended to the contact timeline. | |
| phone | No | Phone number, ideally E.164. | |
| source | No | Lead source label, e.g. "grokbot", "landing-page". | |
| company | No | Company name. | |
| last_name | No | Last name. | |
| lifecycle | No | Lifecycle to set. | |
| first_name | No | First name. | |
| pipeline_stage | No | Stage name — must match a stage from list_pipeline_stages. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| ok | No | ||
| error | No | Present only when ok is false. | |
| events | No | ||
| created | No | ||
| contact_id | No |