Skip to main content

CRM tools

Contacts, companies, deals, tasks, notes and activities — search, CRUD, and associations.

87 tools. Each is callable over MCP with a Bearer agx_ key that holds the required scope. The catalog is public (tools/list isn't scope-filtered); the scope below is enforced when the tool is called (tools/call) — a key without it is refused (default-deny).

search_activities

Search/list activities. Free-text q searches all fields; filters (+ optional match) and groups (+ group_match) do precise AND/OR field filtering. Paginated (limit, offset, sort, order).

Required scope: activities:read

Input

ParameterTypeRequiredDescription
qstringFree-text search across ALL text fields of the record (names, email, phone, etc.) and custom field values.
filtersarray<object>Field filters, AND-ed by default (set match='any' to OR). Filterable: id, activity_type, activity_subtype, title, description, entity_type, entity_id, contact_id, company_id, deal_id, performed_by_email, performed_at.
matchenum(all, any)Combine filters with AND (all) or OR (any). Default all.
groupsarray<object>Advanced: nested AND/OR. Each group = {conditions:[...], match:'all'|'any'}; combine groups with group_match. Use for '(A AND B) OR (C AND D)'.
group_matchenum(all, any)Combine groups with AND (all) or OR (any). Default all.
limitinteger
offsetinteger
sortstring
orderenum(asc, desc)

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "search_activities",
"arguments": {
"q": "acme"
}
}
}

search_companies

Search/list companies. Free-text q searches all fields; filters (+ optional match) and groups (+ group_match) do precise AND/OR field filtering. Paginated (limit, offset, sort, order).

Required scope: companies:read

Input

ParameterTypeRequiredDescription
qstringFree-text search across ALL text fields of the record (names, email, phone, etc.) and custom field values.
filtersarray<object>Field filters, AND-ed by default (set match='any' to OR). Filterable: id, name, domain, website, industry, company_type, size, annual_revenue, description, city, state, country, phone, email, linkedin_url, source, status, owner_email, created_by_email, created_at, updated_at. Custom fields via cf.<key>.
matchenum(all, any)Combine filters with AND (all) or OR (any). Default all.
groupsarray<object>Advanced: nested AND/OR. Each group = {conditions:[...], match:'all'|'any'}; combine groups with group_match. Use for '(A AND B) OR (C AND D)'.
group_matchenum(all, any)Combine groups with AND (all) or OR (any). Default all.
limitinteger
offsetinteger
sortstring
orderenum(asc, desc)

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "search_companies",
"arguments": {
"q": "acme"
}
}
}

search_contacts

Search/list contacts. Free-text q searches all fields; filters (+ optional match) and groups (+ group_match) do precise AND/OR field filtering. Paginated (limit, offset, sort, order).

Required scope: contacts:read

Input

ParameterTypeRequiredDescription
qstringFree-text search across ALL text fields of the record (names, email, phone, etc.) and custom field values.
filtersarray<object>Field filters, AND-ed by default (set match='any' to OR). Filterable: id, email, first_name, last_name, phone, mobile, job_title, department, lead_status, lead_score, source, city, state, country, linkedin_url, owner_email, created_by_email, created_at, updated_at. Custom fields via cf.<key>.
matchenum(all, any)Combine filters with AND (all) or OR (any). Default all.
groupsarray<object>Advanced: nested AND/OR. Each group = {conditions:[...], match:'all'|'any'}; combine groups with group_match. Use for '(A AND B) OR (C AND D)'.
group_matchenum(all, any)Combine groups with AND (all) or OR (any). Default all.
limitinteger
offsetinteger
sortstring
orderenum(asc, desc)

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "search_contacts",
"arguments": {
"q": "acme"
}
}
}

search_deal_payment_schedules

Search/list deal_payment_schedules. Free-text q searches all fields; filters (+ optional match) and groups (+ group_match) do precise AND/OR field filtering. Paginated (limit, offset, sort, order).

Required scope: deal_payment_schedules:read

Input

ParameterTypeRequiredDescription
qstringFree-text search across ALL text fields of the record (names, email, phone, etc.) and custom field values.
filtersarray<object>Field filters, AND-ed by default (set match='any' to OR). Filterable: id, deal_id, installment_number, total_installments, due_date, amount, status, period_start, period_end, description, payment_id, paid_amount, paid_date, contact_id, company_id, created_by_email, created_at, updated_at.
matchenum(all, any)Combine filters with AND (all) or OR (any). Default all.
groupsarray<object>Advanced: nested AND/OR. Each group = {conditions:[...], match:'all'|'any'}; combine groups with group_match. Use for '(A AND B) OR (C AND D)'.
group_matchenum(all, any)Combine groups with AND (all) or OR (any). Default all.
limitinteger
offsetinteger
sortstring
orderenum(asc, desc)

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "search_deal_payment_schedules",
"arguments": {
"q": "acme"
}
}
}

search_deal_payments

Search/list deal_payments. Free-text q searches all fields; filters (+ optional match) and groups (+ group_match) do precise AND/OR field filtering. Paginated (limit, offset, sort, order).

Required scope: deal_payments:read

Input

ParameterTypeRequiredDescription
qstringFree-text search across ALL text fields of the record (names, email, phone, etc.) and custom field values.
filtersarray<object>Field filters, AND-ed by default (set match='any' to OR). Filterable: id, deal_id, amount, currency, payment_method, payment_date, reference_number, status, notes, receipt_url, contact_id, company_id, is_refund, refund_for_payment_id, refund_reason, created_by_email, created_at, updated_at.
matchenum(all, any)Combine filters with AND (all) or OR (any). Default all.
groupsarray<object>Advanced: nested AND/OR. Each group = {conditions:[...], match:'all'|'any'}; combine groups with group_match. Use for '(A AND B) OR (C AND D)'.
group_matchenum(all, any)Combine groups with AND (all) or OR (any). Default all.
limitinteger
offsetinteger
sortstring
orderenum(asc, desc)

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "search_deal_payments",
"arguments": {
"q": "acme"
}
}
}

search_deals

Search/list deals. Free-text q searches all fields; filters (+ optional match) and groups (+ group_match) do precise AND/OR field filtering. Paginated (limit, offset, sort, order).

Required scope: deals:read

Input

ParameterTypeRequiredDescription
qstringFree-text search across ALL text fields of the record (names, email, phone, etc.) and custom field values.
filtersarray<object>Field filters, AND-ed by default (set match='any' to OR). Filterable: id, name, value, currency, stage_name, probability, deal_type, expected_close_date, description, next_step, source, is_won, is_lost, deal_status, owner_email, created_by_email, created_at, updated_at. Custom fields via cf.<key>.
matchenum(all, any)Combine filters with AND (all) or OR (any). Default all.
groupsarray<object>Advanced: nested AND/OR. Each group = {conditions:[...], match:'all'|'any'}; combine groups with group_match. Use for '(A AND B) OR (C AND D)'.
group_matchenum(all, any)Combine groups with AND (all) or OR (any). Default all.
limitinteger
offsetinteger
sortstring
orderenum(asc, desc)

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "search_deals",
"arguments": {
"q": "acme"
}
}
}

search_notes

Search/list notes. Free-text q searches all fields; filters (+ optional match) and groups (+ group_match) do precise AND/OR field filtering. Paginated (limit, offset, sort, order).

Required scope: notes:read

Input

ParameterTypeRequiredDescription
qstringFree-text search across ALL text fields of the record (names, email, phone, etc.) and custom field values.
filtersarray<object>Field filters, AND-ed by default (set match='any' to OR). Filterable: id, content, entity_type, entity_id, is_pinned, created_by_email, created_at, updated_at.
matchenum(all, any)Combine filters with AND (all) or OR (any). Default all.
groupsarray<object>Advanced: nested AND/OR. Each group = {conditions:[...], match:'all'|'any'}; combine groups with group_match. Use for '(A AND B) OR (C AND D)'.
group_matchenum(all, any)Combine groups with AND (all) or OR (any). Default all.
limitinteger
offsetinteger
sortstring
orderenum(asc, desc)

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "search_notes",
"arguments": {
"q": "acme"
}
}
}

search_products

Search/list products. Free-text q searches all fields; filters (+ optional match) and groups (+ group_match) do precise AND/OR field filtering. Paginated (limit, offset, sort, order).

Required scope: products:read

Input

ParameterTypeRequiredDescription
qstringFree-text search across ALL text fields of the record (names, email, phone, etc.) and custom field values.
filtersarray<object>Field filters, AND-ed by default (set match='any' to OR). Filterable: id, name, description, sku, category, price, cost, currency, is_active, is_service, parent_product_id, created_by_email, created_at, updated_at. Custom fields via cf.<key>.
matchenum(all, any)Combine filters with AND (all) or OR (any). Default all.
groupsarray<object>Advanced: nested AND/OR. Each group = {conditions:[...], match:'all'|'any'}; combine groups with group_match. Use for '(A AND B) OR (C AND D)'.
group_matchenum(all, any)Combine groups with AND (all) or OR (any). Default all.
limitinteger
offsetinteger
sortstring
orderenum(asc, desc)

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "search_products",
"arguments": {
"q": "acme"
}
}
}

search_records

Search/list CRM records of one entity_type (contact, company, deal, task, note, activity, product, deal_payment, deal_payment_schedule). Free-text q across all fields, or precise filters (AND); use match:'any' for a simple OR, or groups for mixed logic like 'A AND (B OR C)' — do it in ONE call, don't run several searches and merge. For exact field names + custom fields, call describe_entity_fields first (it's stage_name not stage, value not amount). Paginated. This searches only — it does NOT show anything to the user; when the result is final and correct, call present({type:'record_set', entity_type}) to show it in the workspace. Requires records:read.

Required scope: records:read

Input

ParameterTypeRequiredDescription
entity_typeenum(contact, company, deal, task, note, activity, product, deal_payment, deal_payment_schedule)Which CRM entity to act on (singular).
qstringFree-text search across all text fields.
filtersarray<object>Field filters, AND-ed by default (set match='any' to OR). Each: {field, operator (eq/neq/gt/gte/lt/lte/like/in/nin/is_empty/is_not_empty), value}. Custom fields via cf.<key>. For the exact field names of this entity_type (and its custom fields), call describe_entity_fields first — don't guess (it's stage_name not stage, value not amount). Date values may be ISO ('2026-07-12') OR relative — 'today', '10 days ago', 'last 7 days', 'in 3 days' — so for 'created in the last N days' use created_at gte 'N days ago'.
matchenum(all, any)Combine filters with AND (all) or OR (any). Default all.
groupsarray<object>Advanced — nested AND/OR. Each group = {conditions:[...], match:'all'|'any'}; combine groups with group_match. Use for mixed logic in ONE call, e.g. '(stage_name=Inquiry AND value>1000) AND (nameAlice OR nameBob)' — do NOT run separate searches and merge.
group_matchenum(all, any)Combine groups with AND (all) or OR (any). Default all.
limitinteger
offsetinteger
sortstring
orderenum(asc, desc)

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "search_records",
"arguments": {
"entity_type": "contact"
}
}
}

search_tasks

Search/list tasks. Free-text q searches all fields; filters (+ optional match) and groups (+ group_match) do precise AND/OR field filtering. Paginated (limit, offset, sort, order).

Required scope: tasks:read

Input

ParameterTypeRequiredDescription
qstringFree-text search across ALL text fields of the record (names, email, phone, etc.) and custom field values.
filtersarray<object>Field filters, AND-ed by default (set match='any' to OR). Filterable: id, title, description, type, priority, status, contact_id, company_id, deal_id, due_date, reminder_date, completed_at, assigned_to_email, assigned_by_email, created_by_email, entity_type, entity_id, labels, source, task_number, created_at, updated_at.
matchenum(all, any)Combine filters with AND (all) or OR (any). Default all.
groupsarray<object>Advanced: nested AND/OR. Each group = {conditions:[...], match:'all'|'any'}; combine groups with group_match. Use for '(A AND B) OR (C AND D)'.
group_matchenum(all, any)Combine groups with AND (all) or OR (any). Default all.
limitinteger
offsetinteger
sortstring
orderenum(asc, desc)

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "search_tasks",
"arguments": {
"q": "acme"
}
}
}

get_activity

Get a single activity by id.

Required scope: activities:read

Input

ParameterTypeRequiredDescription
idstringRecord id (UUID).

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_activity",
"arguments": {
"id": "\u2026"
}
}
}

get_company

Get a single company by id.

Required scope: companies:read

Input

ParameterTypeRequiredDescription
idstringRecord id (UUID).

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_company",
"arguments": {
"id": "\u2026"
}
}
}

get_contact

Get a single contact by id.

Required scope: contacts:read

Input

ParameterTypeRequiredDescription
idstringRecord id (UUID).

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_contact",
"arguments": {
"id": "\u2026"
}
}
}

get_deal

Get a single deal by id.

Required scope: deals:read

Input

ParameterTypeRequiredDescription
idstringRecord id (UUID).

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_deal",
"arguments": {
"id": "\u2026"
}
}
}

get_deal_payment

Get a single deal_payment by id.

Required scope: deal_payments:read

Input

ParameterTypeRequiredDescription
idstringRecord id (UUID).

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_deal_payment",
"arguments": {
"id": "\u2026"
}
}
}

get_deal_payment_schedule

Get a single deal_payment_schedule by id.

Required scope: deal_payment_schedules:read

Input

ParameterTypeRequiredDescription
idstringRecord id (UUID).

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_deal_payment_schedule",
"arguments": {
"id": "\u2026"
}
}
}

get_note

Get a single note by id.

Required scope: notes:read

Input

ParameterTypeRequiredDescription
idstringRecord id (UUID).

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_note",
"arguments": {
"id": "\u2026"
}
}
}

get_product

Get a single product by id.

Required scope: products:read

Input

ParameterTypeRequiredDescription
idstringRecord id (UUID).

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_product",
"arguments": {
"id": "\u2026"
}
}
}

get_record

Fetch ONE CRM record by id. In Xen this opens the record in the workspace. Requires records:read.

Required scope: records:read

Input

ParameterTypeRequiredDescription
entity_typeenum(contact, company, deal, task, note, activity, product, deal_payment, deal_payment_schedule)Which CRM entity to act on (singular).
idstringRecord id (uuid).

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_record",
"arguments": {
"entity_type": "contact",
"id": "\u2026"
}
}
}

get_task

Get a single task by id.

Required scope: tasks:read

Input

ParameterTypeRequiredDescription
idstringRecord id (UUID).

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_task",
"arguments": {
"id": "\u2026"
}
}
}

create_activity

Create a activity. Requires the activities:write scope.

Required scope: activities:write

Input

ParameterTypeRequiredDescription
activity_typestringe.g. call, email, note (required).
entity_typestringcontact|company|deal (required).
entity_idstringLinked record id (required).
activity_subtypeany
titleany
descriptionany
contact_idany
company_idany
deal_idany

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "create_activity",
"arguments": {
"activity_type": "\u2026",
"entity_type": "\u2026",
"entity_id": "\u2026"
}
}
}

create_company

Create a company. Requires the companies:write scope.

Required scope: companies:write

Input

ParameterTypeRequiredDescription
namestringCompany name (required).
domainany
websiteany
industryany
company_typeany
sizeany
annual_revenueany
descriptionany
cityany
stateany
countryany
phoneany
emailany
linkedin_urlany
sourceany
statusany
owner_emailany
tagsany
custom_fieldsany

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "create_company",
"arguments": {
"name": "\u2026"
}
}
}

create_contact

Create a contact. Requires the contacts:write scope.

Required scope: contacts:write

Input

ParameterTypeRequiredDescription
emailanyPrimary email (recommended; used for dedup).
first_nameany
last_nameany
phoneany
mobileany
job_titleany
departmentany
lead_statusany
lead_scoreany
sourceany
cityany
stateany
countryany
linkedin_urlany
owner_emailanyAssign an owner; omit to leave unassigned.
tagsany
custom_fieldsanyOrg-defined fields; auto-registered.

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "create_contact",
"arguments": {}
}
}

create_deal

Create a deal. Requires the deals:write scope.

Required scope: deals:write

Input

ParameterTypeRequiredDescription
namestringDeal name (required).
valueany
currencyany
stage_nameany
probabilityany
deal_typeany
expected_close_dateanyISO date (YYYY-MM-DD).
descriptionany
next_stepany
sourceany
owner_emailany
tagsany
custom_fieldsany

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "create_deal",
"arguments": {
"name": "\u2026"
}
}
}

create_deal_payment

Create a deal_payment. Requires the deal_payments:write scope.

Required scope: deal_payments:write

Input

ParameterTypeRequiredDescription
amountnumberPayment amount (required, must be > 0).
deal_idanyOwner deal. Provide EXACTLY ONE of deal_id, contact_id, or company_id.
currencyany
payment_methodany
payment_dateanyISO timestamp.
reference_numberany
statusanyOne of: pending, completed, failed, refunded, cancelled.
notesany
receipt_urlany
contact_idany
company_idany
is_refundany
refund_for_payment_idany
refund_reasonany

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "create_deal_payment",
"arguments": {
"amount": 1
}
}
}

create_deal_payment_schedule

Create a deal_payment_schedule. Requires the deal_payment_schedules:write scope.

Required scope: deal_payment_schedules:write

Input

ParameterTypeRequiredDescription
installment_numberintegerWhich instalment this is (1-based, ≤ total_installments; required).
total_installmentsintegerTotal instalments in the plan (required).
due_datestringISO date (YYYY-MM-DD) this instalment is due (required).
amountnumberInstalment amount (required, must be > 0).
statusstringOne of: scheduled, paid, partial, overdue, cancelled (required).
deal_idanyOwner deal. Provide EXACTLY ONE of deal_id, contact_id, or company_id.
period_startanyISO date.
period_endanyISO date.
descriptionany
paid_amountany
contact_idany
company_idany

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "create_deal_payment_schedule",
"arguments": {
"installment_number": 1,
"total_installments": 1,
"due_date": "\u2026",
"amount": 1,
"status": "\u2026"
}
}
}

create_note

Create a note. Requires the notes:write scope.

Required scope: notes:write

Input

ParameterTypeRequiredDescription
contentstringNote body (required).
entity_typestringLinked entity: contact|company|deal (required).
entity_idstringLinked record id (required).
is_pinnedany

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "create_note",
"arguments": {
"content": "\u2026",
"entity_type": "\u2026",
"entity_id": "\u2026"
}
}
}

create_product

Create a product. Requires the products:write scope.

Required scope: products:write

Input

ParameterTypeRequiredDescription
namestringProduct/service name (required).
descriptionany
skuany
categoryany
priceany
costany
currencyany
is_activeany
is_serviceanyTrue = a service line rather than a physical product.
parent_product_idanyParent product id for variants/bundles.
custom_fieldsanyOrg-defined fields; auto-registered.

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "create_product",
"arguments": {
"name": "\u2026"
}
}
}

create_record

Create ONE CRM record. Put the fields in data (match the create_<entity> tool's fields). Notes & activities need data.entity_type + data.entity_id (the parent they attach to). Requires records:write.

Required scope: records:write

Input

ParameterTypeRequiredDescription
entity_typeenum(contact, company, deal, task, note, activity, product, deal_payment, deal_payment_schedule)Which CRM entity to act on (singular).
dataobjectThe record's fields.

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "create_record",
"arguments": {
"entity_type": "contact",
"data": {}
}
}
}

create_task

Create a task. Requires the tasks:write scope.

Required scope: tasks:write

Input

ParameterTypeRequiredDescription
titlestringTask title (required).
descriptionany
typeany
priorityany
statusany
contact_idany
company_idany
deal_idany
due_dateanyISO timestamp.
reminder_dateany
assigned_to_emailany
entity_typeany
entity_idany
labelsany
sourceany

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "create_task",
"arguments": {
"title": "\u2026"
}
}
}

update_activity

Update a activity by id (partial). Requires the activities:write scope.

Required scope: activities:write

Input

ParameterTypeRequiredDescription
idstringRecord id (UUID).
activity_subtypeany
titleany
descriptionany

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "update_activity",
"arguments": {
"id": "\u2026"
}
}
}

update_company

Update a company by id (partial). Requires the companies:write scope.

Required scope: companies:write

Input

ParameterTypeRequiredDescription
idstringRecord id (UUID).
nameany
domainany
websiteany
industryany
company_typeany
sizeany
annual_revenueany
descriptionany
cityany
stateany
countryany
phoneany
emailany
linkedin_urlany
sourceany
statusany
owner_emailany
tagsany
custom_fieldsany

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "update_company",
"arguments": {
"id": "\u2026"
}
}
}

update_contact

Update a contact by id (partial). Requires the contacts:write scope.

Required scope: contacts:write

Input

ParameterTypeRequiredDescription
idstringRecord id (UUID).
emailany
first_nameany
last_nameany
phoneany
mobileany
job_titleany
departmentany
lead_statusany
lead_scoreany
sourceany
cityany
stateany
countryany
linkedin_urlany
owner_emailany
tagsany
custom_fieldsany

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "update_contact",
"arguments": {
"id": "\u2026"
}
}
}

update_deal

Update a deal by id (partial). Requires the deals:write scope.

Required scope: deals:write

Input

ParameterTypeRequiredDescription
idstringRecord id (UUID).
nameany
valueany
currencyany
stage_nameany
probabilityany
deal_typeany
expected_close_dateany
descriptionany
next_stepany
sourceany
owner_emailany
tagsany
custom_fieldsany

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "update_deal",
"arguments": {
"id": "\u2026"
}
}
}

update_deal_payment

Update a deal_payment by id (partial). Requires the deal_payments:write scope.

Required scope: deal_payments:write

Input

ParameterTypeRequiredDescription
idstringRecord id (UUID).
amountany
deal_idany
currencyany
payment_methodany
payment_dateany
reference_numberany
statusany
notesany
receipt_urlany
contact_idany
company_idany
is_refundany
refund_for_payment_idany
refund_reasonany

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "update_deal_payment",
"arguments": {
"id": "\u2026"
}
}
}

update_deal_payment_schedule

Update a deal_payment_schedule by id (partial). Requires the deal_payment_schedules:write scope.

Required scope: deal_payment_schedules:write

Input

ParameterTypeRequiredDescription
idstringRecord id (UUID).
installment_numberany
total_installmentsany
due_dateany
amountany
statusany
deal_idany
period_startany
period_endany
descriptionany
paid_amountany
contact_idany
company_idany

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "update_deal_payment_schedule",
"arguments": {
"id": "\u2026"
}
}
}

update_note

Update a note by id (partial). Requires the notes:write scope.

Required scope: notes:write

Input

ParameterTypeRequiredDescription
idstringRecord id (UUID).
contentany
is_pinnedany

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "update_note",
"arguments": {
"id": "\u2026"
}
}
}

update_product

Update a product by id (partial). Requires the products:write scope.

Required scope: products:write

Input

ParameterTypeRequiredDescription
idstringRecord id (UUID).
nameany
descriptionany
skuany
categoryany
priceany
costany
currencyany
is_activeany
is_serviceany
parent_product_idany
custom_fieldsany

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "update_product",
"arguments": {
"id": "\u2026"
}
}
}

update_record

Update ONE CRM record by id — put changed fields in data (custom_fields merge PATCH-style). Requires records:write.

Required scope: records:write

Input

ParameterTypeRequiredDescription
entity_typeenum(contact, company, deal, task, note, activity, product, deal_payment, deal_payment_schedule)Which CRM entity to act on (singular).
idstringRecord id (uuid).
dataobjectFields to change.

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "update_record",
"arguments": {
"entity_type": "contact",
"id": "\u2026",
"data": {}
}
}
}

update_task

Update a task by id (partial). Requires the tasks:write scope.

Required scope: tasks:write

Input

ParameterTypeRequiredDescription
idstringRecord id (UUID).
titleany
descriptionany
typeany
priorityany
statusany
contact_idany
company_idany
deal_idany
due_dateany
reminder_dateany
assigned_to_emailany
labelsany

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "update_task",
"arguments": {
"id": "\u2026"
}
}
}

delete_activity

Delete a activity by id. Requires the activities:write scope.

Required scope: activities:write

Input

ParameterTypeRequiredDescription
idstringRecord id (UUID).

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "delete_activity",
"arguments": {
"id": "\u2026"
}
}
}

delete_company

Delete a company by id. Requires the companies:write scope.

Required scope: companies:write

Input

ParameterTypeRequiredDescription
idstringRecord id (UUID).

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "delete_company",
"arguments": {
"id": "\u2026"
}
}
}

delete_contact

Delete a contact by id. Requires the contacts:write scope.

Required scope: contacts:write

Input

ParameterTypeRequiredDescription
idstringRecord id (UUID).

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "delete_contact",
"arguments": {
"id": "\u2026"
}
}
}

delete_deal

Delete a deal by id. Requires the deals:write scope.

Required scope: deals:write

Input

ParameterTypeRequiredDescription
idstringRecord id (UUID).

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "delete_deal",
"arguments": {
"id": "\u2026"
}
}
}

delete_deal_payment

Delete a deal_payment by id. Requires the deal_payments:write scope.

Required scope: deal_payments:write

Input

ParameterTypeRequiredDescription
idstringRecord id (UUID).

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "delete_deal_payment",
"arguments": {
"id": "\u2026"
}
}
}

delete_deal_payment_schedule

Delete a deal_payment_schedule by id. Requires the deal_payment_schedules:write scope.

Required scope: deal_payment_schedules:write

Input

ParameterTypeRequiredDescription
idstringRecord id (UUID).

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "delete_deal_payment_schedule",
"arguments": {
"id": "\u2026"
}
}
}

delete_note

Delete a note by id. Requires the notes:write scope.

Required scope: notes:write

Input

ParameterTypeRequiredDescription
idstringRecord id (UUID).

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "delete_note",
"arguments": {
"id": "\u2026"
}
}
}

delete_product

Delete a product by id. Requires the products:write scope.

Required scope: products:write

Input

ParameterTypeRequiredDescription
idstringRecord id (UUID).

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "delete_product",
"arguments": {
"id": "\u2026"
}
}
}

delete_record

Delete ONE CRM record by id. Destructive — the Xen orchestrator gates this behind human approval. Requires records:write.

Required scope: records:write

Input

ParameterTypeRequiredDescription
entity_typeenum(contact, company, deal, task, note, activity, product, deal_payment, deal_payment_schedule)Which CRM entity to act on (singular).
idstringRecord id (uuid).

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "delete_record",
"arguments": {
"entity_type": "contact",
"id": "\u2026"
}
}
}

delete_task

Delete a task by id. Requires the tasks:write scope.

Required scope: tasks:write

Input

ParameterTypeRequiredDescription
idstringRecord id (UUID).

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "delete_task",
"arguments": {
"id": "\u2026"
}
}
}

list_company_activities

List the activities associated with a company (by the company's id). Same filters/q/paging as search_activities. Requires companies:read and activities:read.

Required scope: activities:read + companies:read

Input

ParameterTypeRequiredDescription
idstringThe parent record's id (UUID).
qstringFree-text search across ALL text fields of the record (names, email, phone, etc.) and custom field values.
filtersarray<object>Field filters, AND-ed by default (set match='any' to OR). Filterable: id, activity_type, activity_subtype, title, description, entity_type, entity_id, contact_id, company_id, deal_id, performed_by_email, performed_at.
matchenum(all, any)Combine filters with AND (all) or OR (any). Default all.
groupsarray<object>Advanced: nested AND/OR. Each group = {conditions:[...], match:'all'|'any'}; combine groups with group_match. Use for '(A AND B) OR (C AND D)'.
group_matchenum(all, any)Combine groups with AND (all) or OR (any). Default all.
limitinteger
offsetinteger
sortstring
orderenum(asc, desc)

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "list_company_activities",
"arguments": {
"id": "\u2026"
}
}
}

list_company_contacts

List the contacts associated with a company (by the company's id). Same filters/q/paging as search_contacts. Requires companies:read and contacts:read.

Required scope: companies:read + contacts:read

Input

ParameterTypeRequiredDescription
idstringThe parent record's id (UUID).
qstringFree-text search across ALL text fields of the record (names, email, phone, etc.) and custom field values.
filtersarray<object>Field filters, AND-ed by default (set match='any' to OR). Filterable: id, email, first_name, last_name, phone, mobile, job_title, department, lead_status, lead_score, source, city, state, country, linkedin_url, owner_email, created_by_email, created_at, updated_at. Custom fields via cf.<key>.
matchenum(all, any)Combine filters with AND (all) or OR (any). Default all.
groupsarray<object>Advanced: nested AND/OR. Each group = {conditions:[...], match:'all'|'any'}; combine groups with group_match. Use for '(A AND B) OR (C AND D)'.
group_matchenum(all, any)Combine groups with AND (all) or OR (any). Default all.
limitinteger
offsetinteger
sortstring
orderenum(asc, desc)

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "list_company_contacts",
"arguments": {
"id": "\u2026"
}
}
}

list_company_deals

List the deals associated with a company (by the company's id). Same filters/q/paging as search_deals. Requires companies:read and deals:read.

Required scope: companies:read + deals:read

Input

ParameterTypeRequiredDescription
idstringThe parent record's id (UUID).
qstringFree-text search across ALL text fields of the record (names, email, phone, etc.) and custom field values.
filtersarray<object>Field filters, AND-ed by default (set match='any' to OR). Filterable: id, name, value, currency, stage_name, probability, deal_type, expected_close_date, description, next_step, source, is_won, is_lost, deal_status, owner_email, created_by_email, created_at, updated_at. Custom fields via cf.<key>.
matchenum(all, any)Combine filters with AND (all) or OR (any). Default all.
groupsarray<object>Advanced: nested AND/OR. Each group = {conditions:[...], match:'all'|'any'}; combine groups with group_match. Use for '(A AND B) OR (C AND D)'.
group_matchenum(all, any)Combine groups with AND (all) or OR (any). Default all.
limitinteger
offsetinteger
sortstring
orderenum(asc, desc)

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "list_company_deals",
"arguments": {
"id": "\u2026"
}
}
}

list_company_notes

List the notes associated with a company (by the company's id). Same filters/q/paging as search_notes. Requires companies:read and notes:read.

Required scope: companies:read + notes:read

Input

ParameterTypeRequiredDescription
idstringThe parent record's id (UUID).
qstringFree-text search across ALL text fields of the record (names, email, phone, etc.) and custom field values.
filtersarray<object>Field filters, AND-ed by default (set match='any' to OR). Filterable: id, content, entity_type, entity_id, is_pinned, created_by_email, created_at, updated_at.
matchenum(all, any)Combine filters with AND (all) or OR (any). Default all.
groupsarray<object>Advanced: nested AND/OR. Each group = {conditions:[...], match:'all'|'any'}; combine groups with group_match. Use for '(A AND B) OR (C AND D)'.
group_matchenum(all, any)Combine groups with AND (all) or OR (any). Default all.
limitinteger
offsetinteger
sortstring
orderenum(asc, desc)

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "list_company_notes",
"arguments": {
"id": "\u2026"
}
}
}

list_company_tasks

List the tasks associated with a company (by the company's id). Same filters/q/paging as search_tasks. Requires companies:read and tasks:read.

Required scope: companies:read + tasks:read

Input

ParameterTypeRequiredDescription
idstringThe parent record's id (UUID).
qstringFree-text search across ALL text fields of the record (names, email, phone, etc.) and custom field values.
filtersarray<object>Field filters, AND-ed by default (set match='any' to OR). Filterable: id, title, description, type, priority, status, contact_id, company_id, deal_id, due_date, reminder_date, completed_at, assigned_to_email, assigned_by_email, created_by_email, entity_type, entity_id, labels, source, task_number, created_at, updated_at.
matchenum(all, any)Combine filters with AND (all) or OR (any). Default all.
groupsarray<object>Advanced: nested AND/OR. Each group = {conditions:[...], match:'all'|'any'}; combine groups with group_match. Use for '(A AND B) OR (C AND D)'.
group_matchenum(all, any)Combine groups with AND (all) or OR (any). Default all.
limitinteger
offsetinteger
sortstring
orderenum(asc, desc)

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "list_company_tasks",
"arguments": {
"id": "\u2026"
}
}
}

list_contact_activities

List the activities associated with a contact (by the contact's id). Same filters/q/paging as search_activities. Requires contacts:read and activities:read.

Required scope: activities:read + contacts:read

Input

ParameterTypeRequiredDescription
idstringThe parent record's id (UUID).
qstringFree-text search across ALL text fields of the record (names, email, phone, etc.) and custom field values.
filtersarray<object>Field filters, AND-ed by default (set match='any' to OR). Filterable: id, activity_type, activity_subtype, title, description, entity_type, entity_id, contact_id, company_id, deal_id, performed_by_email, performed_at.
matchenum(all, any)Combine filters with AND (all) or OR (any). Default all.
groupsarray<object>Advanced: nested AND/OR. Each group = {conditions:[...], match:'all'|'any'}; combine groups with group_match. Use for '(A AND B) OR (C AND D)'.
group_matchenum(all, any)Combine groups with AND (all) or OR (any). Default all.
limitinteger
offsetinteger
sortstring
orderenum(asc, desc)

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "list_contact_activities",
"arguments": {
"id": "\u2026"
}
}
}

list_contact_companies

List the companies associated with a contact (by the contact's id). Same filters/q/paging as search_companies. Requires contacts:read and companies:read.

Required scope: companies:read + contacts:read

Input

ParameterTypeRequiredDescription
idstringThe parent record's id (UUID).
qstringFree-text search across ALL text fields of the record (names, email, phone, etc.) and custom field values.
filtersarray<object>Field filters, AND-ed by default (set match='any' to OR). Filterable: id, name, domain, website, industry, company_type, size, annual_revenue, description, city, state, country, phone, email, linkedin_url, source, status, owner_email, created_by_email, created_at, updated_at. Custom fields via cf.<key>.
matchenum(all, any)Combine filters with AND (all) or OR (any). Default all.
groupsarray<object>Advanced: nested AND/OR. Each group = {conditions:[...], match:'all'|'any'}; combine groups with group_match. Use for '(A AND B) OR (C AND D)'.
group_matchenum(all, any)Combine groups with AND (all) or OR (any). Default all.
limitinteger
offsetinteger
sortstring
orderenum(asc, desc)

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "list_contact_companies",
"arguments": {
"id": "\u2026"
}
}
}

list_contact_deals

List the deals associated with a contact (by the contact's id). Same filters/q/paging as search_deals. Requires contacts:read and deals:read.

Required scope: contacts:read + deals:read

Input

ParameterTypeRequiredDescription
idstringThe parent record's id (UUID).
qstringFree-text search across ALL text fields of the record (names, email, phone, etc.) and custom field values.
filtersarray<object>Field filters, AND-ed by default (set match='any' to OR). Filterable: id, name, value, currency, stage_name, probability, deal_type, expected_close_date, description, next_step, source, is_won, is_lost, deal_status, owner_email, created_by_email, created_at, updated_at. Custom fields via cf.<key>.
matchenum(all, any)Combine filters with AND (all) or OR (any). Default all.
groupsarray<object>Advanced: nested AND/OR. Each group = {conditions:[...], match:'all'|'any'}; combine groups with group_match. Use for '(A AND B) OR (C AND D)'.
group_matchenum(all, any)Combine groups with AND (all) or OR (any). Default all.
limitinteger
offsetinteger
sortstring
orderenum(asc, desc)

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "list_contact_deals",
"arguments": {
"id": "\u2026"
}
}
}

list_contact_notes

List the notes associated with a contact (by the contact's id). Same filters/q/paging as search_notes. Requires contacts:read and notes:read.

Required scope: contacts:read + notes:read

Input

ParameterTypeRequiredDescription
idstringThe parent record's id (UUID).
qstringFree-text search across ALL text fields of the record (names, email, phone, etc.) and custom field values.
filtersarray<object>Field filters, AND-ed by default (set match='any' to OR). Filterable: id, content, entity_type, entity_id, is_pinned, created_by_email, created_at, updated_at.
matchenum(all, any)Combine filters with AND (all) or OR (any). Default all.
groupsarray<object>Advanced: nested AND/OR. Each group = {conditions:[...], match:'all'|'any'}; combine groups with group_match. Use for '(A AND B) OR (C AND D)'.
group_matchenum(all, any)Combine groups with AND (all) or OR (any). Default all.
limitinteger
offsetinteger
sortstring
orderenum(asc, desc)

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "list_contact_notes",
"arguments": {
"id": "\u2026"
}
}
}

list_contact_tasks

List the tasks associated with a contact (by the contact's id). Same filters/q/paging as search_tasks. Requires contacts:read and tasks:read.

Required scope: contacts:read + tasks:read

Input

ParameterTypeRequiredDescription
idstringThe parent record's id (UUID).
qstringFree-text search across ALL text fields of the record (names, email, phone, etc.) and custom field values.
filtersarray<object>Field filters, AND-ed by default (set match='any' to OR). Filterable: id, title, description, type, priority, status, contact_id, company_id, deal_id, due_date, reminder_date, completed_at, assigned_to_email, assigned_by_email, created_by_email, entity_type, entity_id, labels, source, task_number, created_at, updated_at.
matchenum(all, any)Combine filters with AND (all) or OR (any). Default all.
groupsarray<object>Advanced: nested AND/OR. Each group = {conditions:[...], match:'all'|'any'}; combine groups with group_match. Use for '(A AND B) OR (C AND D)'.
group_matchenum(all, any)Combine groups with AND (all) or OR (any). Default all.
limitinteger
offsetinteger
sortstring
orderenum(asc, desc)

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "list_contact_tasks",
"arguments": {
"id": "\u2026"
}
}
}

list_deal_activities

List the activities associated with a deal (by the deal's id). Same filters/q/paging as search_activities. Requires deals:read and activities:read.

Required scope: activities:read + deals:read

Input

ParameterTypeRequiredDescription
idstringThe parent record's id (UUID).
qstringFree-text search across ALL text fields of the record (names, email, phone, etc.) and custom field values.
filtersarray<object>Field filters, AND-ed by default (set match='any' to OR). Filterable: id, activity_type, activity_subtype, title, description, entity_type, entity_id, contact_id, company_id, deal_id, performed_by_email, performed_at.
matchenum(all, any)Combine filters with AND (all) or OR (any). Default all.
groupsarray<object>Advanced: nested AND/OR. Each group = {conditions:[...], match:'all'|'any'}; combine groups with group_match. Use for '(A AND B) OR (C AND D)'.
group_matchenum(all, any)Combine groups with AND (all) or OR (any). Default all.
limitinteger
offsetinteger
sortstring
orderenum(asc, desc)

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "list_deal_activities",
"arguments": {
"id": "\u2026"
}
}
}

list_deal_companies

List the companies associated with a deal (by the deal's id). Same filters/q/paging as search_companies. Requires deals:read and companies:read.

Required scope: companies:read + deals:read

Input

ParameterTypeRequiredDescription
idstringThe parent record's id (UUID).
qstringFree-text search across ALL text fields of the record (names, email, phone, etc.) and custom field values.
filtersarray<object>Field filters, AND-ed by default (set match='any' to OR). Filterable: id, name, domain, website, industry, company_type, size, annual_revenue, description, city, state, country, phone, email, linkedin_url, source, status, owner_email, created_by_email, created_at, updated_at. Custom fields via cf.<key>.
matchenum(all, any)Combine filters with AND (all) or OR (any). Default all.
groupsarray<object>Advanced: nested AND/OR. Each group = {conditions:[...], match:'all'|'any'}; combine groups with group_match. Use for '(A AND B) OR (C AND D)'.
group_matchenum(all, any)Combine groups with AND (all) or OR (any). Default all.
limitinteger
offsetinteger
sortstring
orderenum(asc, desc)

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "list_deal_companies",
"arguments": {
"id": "\u2026"
}
}
}

list_deal_contacts

List the contacts associated with a deal (by the deal's id). Same filters/q/paging as search_contacts. Requires deals:read and contacts:read.

Required scope: contacts:read + deals:read

Input

ParameterTypeRequiredDescription
idstringThe parent record's id (UUID).
qstringFree-text search across ALL text fields of the record (names, email, phone, etc.) and custom field values.
filtersarray<object>Field filters, AND-ed by default (set match='any' to OR). Filterable: id, email, first_name, last_name, phone, mobile, job_title, department, lead_status, lead_score, source, city, state, country, linkedin_url, owner_email, created_by_email, created_at, updated_at. Custom fields via cf.<key>.
matchenum(all, any)Combine filters with AND (all) or OR (any). Default all.
groupsarray<object>Advanced: nested AND/OR. Each group = {conditions:[...], match:'all'|'any'}; combine groups with group_match. Use for '(A AND B) OR (C AND D)'.
group_matchenum(all, any)Combine groups with AND (all) or OR (any). Default all.
limitinteger
offsetinteger
sortstring
orderenum(asc, desc)

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "list_deal_contacts",
"arguments": {
"id": "\u2026"
}
}
}

list_deal_notes

List the notes associated with a deal (by the deal's id). Same filters/q/paging as search_notes. Requires deals:read and notes:read.

Required scope: deals:read + notes:read

Input

ParameterTypeRequiredDescription
idstringThe parent record's id (UUID).
qstringFree-text search across ALL text fields of the record (names, email, phone, etc.) and custom field values.
filtersarray<object>Field filters, AND-ed by default (set match='any' to OR). Filterable: id, content, entity_type, entity_id, is_pinned, created_by_email, created_at, updated_at.
matchenum(all, any)Combine filters with AND (all) or OR (any). Default all.
groupsarray<object>Advanced: nested AND/OR. Each group = {conditions:[...], match:'all'|'any'}; combine groups with group_match. Use for '(A AND B) OR (C AND D)'.
group_matchenum(all, any)Combine groups with AND (all) or OR (any). Default all.
limitinteger
offsetinteger
sortstring
orderenum(asc, desc)

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "list_deal_notes",
"arguments": {
"id": "\u2026"
}
}
}

list_deal_products

List the products associated with a deal (by the deal's id). Same filters/q/paging as search_products. Requires deals:read and products:read.

Required scope: deals:read + products:read

Input

ParameterTypeRequiredDescription
idstringThe parent record's id (UUID).
qstringFree-text search across ALL text fields of the record (names, email, phone, etc.) and custom field values.
filtersarray<object>Field filters, AND-ed by default (set match='any' to OR). Filterable: id, name, description, sku, category, price, cost, currency, is_active, is_service, parent_product_id, created_by_email, created_at, updated_at. Custom fields via cf.<key>.
matchenum(all, any)Combine filters with AND (all) or OR (any). Default all.
groupsarray<object>Advanced: nested AND/OR. Each group = {conditions:[...], match:'all'|'any'}; combine groups with group_match. Use for '(A AND B) OR (C AND D)'.
group_matchenum(all, any)Combine groups with AND (all) or OR (any). Default all.
limitinteger
offsetinteger
sortstring
orderenum(asc, desc)

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "list_deal_products",
"arguments": {
"id": "\u2026"
}
}
}

list_deal_tasks

List the tasks associated with a deal (by the deal's id). Same filters/q/paging as search_tasks. Requires deals:read and tasks:read.

Required scope: deals:read + tasks:read

Input

ParameterTypeRequiredDescription
idstringThe parent record's id (UUID).
qstringFree-text search across ALL text fields of the record (names, email, phone, etc.) and custom field values.
filtersarray<object>Field filters, AND-ed by default (set match='any' to OR). Filterable: id, title, description, type, priority, status, contact_id, company_id, deal_id, due_date, reminder_date, completed_at, assigned_to_email, assigned_by_email, created_by_email, entity_type, entity_id, labels, source, task_number, created_at, updated_at.
matchenum(all, any)Combine filters with AND (all) or OR (any). Default all.
groupsarray<object>Advanced: nested AND/OR. Each group = {conditions:[...], match:'all'|'any'}; combine groups with group_match. Use for '(A AND B) OR (C AND D)'.
group_matchenum(all, any)Combine groups with AND (all) or OR (any). Default all.
limitinteger
offsetinteger
sortstring
orderenum(asc, desc)

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "list_deal_tasks",
"arguments": {
"id": "\u2026"
}
}
}

list_product_deals

List the deals associated with a product (by the product's id). Same filters/q/paging as search_deals. Requires products:read and deals:read.

Required scope: deals:read + products:read

Input

ParameterTypeRequiredDescription
idstringThe parent record's id (UUID).
qstringFree-text search across ALL text fields of the record (names, email, phone, etc.) and custom field values.
filtersarray<object>Field filters, AND-ed by default (set match='any' to OR). Filterable: id, name, value, currency, stage_name, probability, deal_type, expected_close_date, description, next_step, source, is_won, is_lost, deal_status, owner_email, created_by_email, created_at, updated_at. Custom fields via cf.<key>.
matchenum(all, any)Combine filters with AND (all) or OR (any). Default all.
groupsarray<object>Advanced: nested AND/OR. Each group = {conditions:[...], match:'all'|'any'}; combine groups with group_match. Use for '(A AND B) OR (C AND D)'.
group_matchenum(all, any)Combine groups with AND (all) or OR (any). Default all.
limitinteger
offsetinteger
sortstring
orderenum(asc, desc)

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "list_product_deals",
"arguments": {
"id": "\u2026"
}
}
}

Link a company to a contact (idempotent; optional link metadata such as role/is_primary). Requires companies:write and contacts:write.

Required scope: companies:write + contacts:write

Input

ParameterTypeRequiredDescription
idstringThe source record's id (UUID).
target_idstringThe record to link to (UUID).
rolestring
departmentstring
job_titlestring
is_primarybooleanMark this the primary link for the parent (made exclusive).
start_datestringISO date (YYYY-MM-DD).
end_datestringISO date (YYYY-MM-DD).
notesstring

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "link_company_to_contact",
"arguments": {
"id": "\u2026",
"target_id": "\u2026"
}
}
}

Link a company to a deal (idempotent; optional link metadata such as role/is_primary). Requires companies:write and deals:write.

Required scope: companies:write + deals:write

Input

ParameterTypeRequiredDescription
idstringThe source record's id (UUID).
target_idstringThe record to link to (UUID).
rolestring
is_primarybooleanMark this the primary link for the parent (made exclusive).
ownership_percentagenumber
revenue_sharenumber
notesstring

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "link_company_to_deal",
"arguments": {
"id": "\u2026",
"target_id": "\u2026"
}
}
}

Link a contact to a company (idempotent; optional link metadata such as role/is_primary). Requires contacts:write and companies:write.

Required scope: companies:write + contacts:write

Input

ParameterTypeRequiredDescription
idstringThe source record's id (UUID).
target_idstringThe record to link to (UUID).
rolestring
departmentstring
job_titlestring
is_primarybooleanMark this the primary link for the parent (made exclusive).
start_datestringISO date (YYYY-MM-DD).
end_datestringISO date (YYYY-MM-DD).
notesstring

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "link_contact_to_company",
"arguments": {
"id": "\u2026",
"target_id": "\u2026"
}
}
}

Link a contact to a deal (idempotent; optional link metadata such as role/is_primary). Requires contacts:write and deals:write.

Required scope: contacts:write + deals:write

Input

ParameterTypeRequiredDescription
idstringThe source record's id (UUID).
target_idstringThe record to link to (UUID).
rolestring
is_primarybooleanMark this the primary link for the parent (made exclusive).
notesstring

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "link_contact_to_deal",
"arguments": {
"id": "\u2026",
"target_id": "\u2026"
}
}
}

Link a deal to a company (idempotent; optional link metadata such as role/is_primary). Requires deals:write and companies:write.

Required scope: companies:write + deals:write

Input

ParameterTypeRequiredDescription
idstringThe source record's id (UUID).
target_idstringThe record to link to (UUID).
rolestring
is_primarybooleanMark this the primary link for the parent (made exclusive).
ownership_percentagenumber
revenue_sharenumber
notesstring

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "link_deal_to_company",
"arguments": {
"id": "\u2026",
"target_id": "\u2026"
}
}
}

Link a deal to a contact (idempotent; optional link metadata such as role/is_primary). Requires deals:write and contacts:write.

Required scope: contacts:write + deals:write

Input

ParameterTypeRequiredDescription
idstringThe source record's id (UUID).
target_idstringThe record to link to (UUID).
rolestring
is_primarybooleanMark this the primary link for the parent (made exclusive).
notesstring

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "link_deal_to_contact",
"arguments": {
"id": "\u2026",
"target_id": "\u2026"
}
}
}

Link a deal to a product (idempotent; optional link metadata such as role/is_primary). Requires deals:write and products:write.

Required scope: deals:write + products:write

Input

ParameterTypeRequiredDescription
idstringThe source record's id (UUID).
target_idstringThe record to link to (UUID).
quantitystring
unit_pricestring
discount_amountstring
discount_percentstring
subtotalstring
notesstring
assigned_memberstring

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "link_deal_to_product",
"arguments": {
"id": "\u2026",
"target_id": "\u2026"
}
}
}

Link a product to a deal (idempotent; optional link metadata such as role/is_primary). Requires products:write and deals:write.

Required scope: deals:write + products:write

Input

ParameterTypeRequiredDescription
idstringThe source record's id (UUID).
target_idstringThe record to link to (UUID).
quantitystring
unit_pricestring
discount_amountstring
discount_percentstring
subtotalstring
notesstring
assigned_memberstring

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "link_product_to_deal",
"arguments": {
"id": "\u2026",
"target_id": "\u2026"
}
}
}

Link two CRM records via a writable junction (deal↔contact, deal↔company, contact↔company, deal↔product). Re-linking updates the link metadata (role, quantity, unit_price, is_primary…). Pass unlink: true to remove. Requires records:write.

Required scope: records:write

Input

ParameterTypeRequiredDescription
entity_typeenum(contact, company, deal, task, note, activity, product, deal_payment, deal_payment_schedule)Which CRM entity to act on (singular).
idstringSource record id (uuid).
target_typeenum(contact, company, deal, task, note, activity, product, deal_payment, deal_payment_schedule)Which CRM entity to act on (singular).
target_idstringTarget record id (uuid).
metadataobjectOptional link fields (role, quantity, unit_price, is_primary…).
unlinkbooleanSet true to remove the link instead of creating/updating it.

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "link_records",
"arguments": {
"entity_type": "contact",
"id": "\u2026",
"target_type": "contact",
"target_id": "\u2026"
}
}
}

Remove the link between a company and a contact. Requires companies:write and contacts:write.

Required scope: companies:write + contacts:write

Input

ParameterTypeRequiredDescription
idstringThe source record's id (UUID).
target_idstringThe linked record's id (UUID).

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "unlink_company_from_contact",
"arguments": {
"id": "\u2026",
"target_id": "\u2026"
}
}
}

Remove the link between a company and a deal. Requires companies:write and deals:write.

Required scope: companies:write + deals:write

Input

ParameterTypeRequiredDescription
idstringThe source record's id (UUID).
target_idstringThe linked record's id (UUID).

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "unlink_company_from_deal",
"arguments": {
"id": "\u2026",
"target_id": "\u2026"
}
}
}

Remove the link between a contact and a company. Requires contacts:write and companies:write.

Required scope: companies:write + contacts:write

Input

ParameterTypeRequiredDescription
idstringThe source record's id (UUID).
target_idstringThe linked record's id (UUID).

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "unlink_contact_from_company",
"arguments": {
"id": "\u2026",
"target_id": "\u2026"
}
}
}

Remove the link between a contact and a deal. Requires contacts:write and deals:write.

Required scope: contacts:write + deals:write

Input

ParameterTypeRequiredDescription
idstringThe source record's id (UUID).
target_idstringThe linked record's id (UUID).

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "unlink_contact_from_deal",
"arguments": {
"id": "\u2026",
"target_id": "\u2026"
}
}
}

Remove the link between a deal and a company. Requires deals:write and companies:write.

Required scope: companies:write + deals:write

Input

ParameterTypeRequiredDescription
idstringThe source record's id (UUID).
target_idstringThe linked record's id (UUID).

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "unlink_deal_from_company",
"arguments": {
"id": "\u2026",
"target_id": "\u2026"
}
}
}

Remove the link between a deal and a contact. Requires deals:write and contacts:write.

Required scope: contacts:write + deals:write

Input

ParameterTypeRequiredDescription
idstringThe source record's id (UUID).
target_idstringThe linked record's id (UUID).

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "unlink_deal_from_contact",
"arguments": {
"id": "\u2026",
"target_id": "\u2026"
}
}
}

Remove the link between a deal and a product. Requires deals:write and products:write.

Required scope: deals:write + products:write

Input

ParameterTypeRequiredDescription
idstringThe source record's id (UUID).
target_idstringThe linked record's id (UUID).

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "unlink_deal_from_product",
"arguments": {
"id": "\u2026",
"target_id": "\u2026"
}
}
}

Remove the link between a product and a deal. Requires products:write and deals:write.

Required scope: deals:write + products:write

Input

ParameterTypeRequiredDescription
idstringThe source record's id (UUID).
target_idstringThe linked record's id (UUID).

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "unlink_product_from_deal",
"arguments": {
"id": "\u2026",
"target_id": "\u2026"
}
}
}

batch_create_records

Create up to 200 records of one entity ATOMICALLY (any invalid record rejects the whole batch with per-index errors; nothing is written). Record fields match the corresponding create_<entity> tool. Requires the records:write scope.

Required scope: records:write

Input

ParameterTypeRequiredDescription
entityenum(activities, companies, contacts, deal_payment_schedules, deal_payments, deals, notes, products, tasks)Which CRM entity the batch targets.
recordsarray<object>Records to create; fields per entity match create_<entity>.
suppress_automationsbooleanSkip workflow automations for this batch (bulk-import mode). Vector sync / search indexing still runs. Default false: automations fire per record.

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "batch_create_records",
"arguments": {
"entity": "activities",
"records": []
}
}
}

batch_delete_records

Delete up to 200 records of one entity ATOMICALLY by id list (any unknown id rejects the whole batch; nothing is deleted). Requires the records:write scope. Destructive — the Xen orchestrator gates this behind human approval.

Required scope: records:write

Input

ParameterTypeRequiredDescription
entityenum(activities, companies, contacts, deal_payment_schedules, deal_payments, deals, notes, products, tasks)Which CRM entity the batch targets.
idsarray<string>Record ids (uuids) to delete.
suppress_automationsbooleanSkip workflow automations for this batch (bulk-import mode). Vector sync / search indexing still runs. Default false: automations fire per record.

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "batch_delete_records",
"arguments": {
"entity": "activities",
"ids": []
}
}
}

batch_update_records

Update up to 200 records of one entity ATOMICALLY — each item is {id, ...fields to change} (fields match update_<entity>; custom_fields merge PATCH-style). Any invalid item or unknown id rejects the whole batch. Requires the records:write scope.

Required scope: records:write

Input

ParameterTypeRequiredDescription
entityenum(activities, companies, contacts, deal_payment_schedules, deal_payments, deals, notes, products, tasks)Which CRM entity the batch targets.
updatesarray<object>Per-record updates: {id, ...fields}.
suppress_automationsbooleanSkip workflow automations for this batch (bulk-import mode). Vector sync / search indexing still runs. Default false: automations fire per record.

Example

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "batch_update_records",
"arguments": {
"entity": "activities",
"updates": []
}
}
}