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
| Parameter | Type | Required | Description |
|---|---|---|---|
q | string | Free-text search across ALL text fields of the record (names, email, phone, etc.) and custom field values. | |
filters | array<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. | |
match | enum(all, any) | Combine filters with AND (all) or OR (any). Default all. | |
groups | array<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_match | enum(all, any) | Combine groups with AND (all) or OR (any). Default all. | |
limit | integer | ||
offset | integer | ||
sort | string | ||
order | enum(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
| Parameter | Type | Required | Description |
|---|---|---|---|
q | string | Free-text search across ALL text fields of the record (names, email, phone, etc.) and custom field values. | |
filters | array<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>. | |
match | enum(all, any) | Combine filters with AND (all) or OR (any). Default all. | |
groups | array<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_match | enum(all, any) | Combine groups with AND (all) or OR (any). Default all. | |
limit | integer | ||
offset | integer | ||
sort | string | ||
order | enum(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
| Parameter | Type | Required | Description |
|---|---|---|---|
q | string | Free-text search across ALL text fields of the record (names, email, phone, etc.) and custom field values. | |
filters | array<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>. | |
match | enum(all, any) | Combine filters with AND (all) or OR (any). Default all. | |
groups | array<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_match | enum(all, any) | Combine groups with AND (all) or OR (any). Default all. | |
limit | integer | ||
offset | integer | ||
sort | string | ||
order | enum(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
| Parameter | Type | Required | Description |
|---|---|---|---|
q | string | Free-text search across ALL text fields of the record (names, email, phone, etc.) and custom field values. | |
filters | array<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. | |
match | enum(all, any) | Combine filters with AND (all) or OR (any). Default all. | |
groups | array<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_match | enum(all, any) | Combine groups with AND (all) or OR (any). Default all. | |
limit | integer | ||
offset | integer | ||
sort | string | ||
order | enum(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
| Parameter | Type | Required | Description |
|---|---|---|---|
q | string | Free-text search across ALL text fields of the record (names, email, phone, etc.) and custom field values. | |
filters | array<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. | |
match | enum(all, any) | Combine filters with AND (all) or OR (any). Default all. | |
groups | array<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_match | enum(all, any) | Combine groups with AND (all) or OR (any). Default all. | |
limit | integer | ||
offset | integer | ||
sort | string | ||
order | enum(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
| Parameter | Type | Required | Description |
|---|---|---|---|
q | string | Free-text search across ALL text fields of the record (names, email, phone, etc.) and custom field values. | |
filters | array<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>. | |
match | enum(all, any) | Combine filters with AND (all) or OR (any). Default all. | |
groups | array<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_match | enum(all, any) | Combine groups with AND (all) or OR (any). Default all. | |
limit | integer | ||
offset | integer | ||
sort | string | ||
order | enum(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
| Parameter | Type | Required | Description |
|---|---|---|---|
q | string | Free-text search across ALL text fields of the record (names, email, phone, etc.) and custom field values. | |
filters | array<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. | |
match | enum(all, any) | Combine filters with AND (all) or OR (any). Default all. | |
groups | array<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_match | enum(all, any) | Combine groups with AND (all) or OR (any). Default all. | |
limit | integer | ||
offset | integer | ||
sort | string | ||
order | enum(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
| Parameter | Type | Required | Description |
|---|---|---|---|
q | string | Free-text search across ALL text fields of the record (names, email, phone, etc.) and custom field values. | |
filters | array<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>. | |
match | enum(all, any) | Combine filters with AND (all) or OR (any). Default all. | |
groups | array<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_match | enum(all, any) | Combine groups with AND (all) or OR (any). Default all. | |
limit | integer | ||
offset | integer | ||
sort | string | ||
order | enum(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
| Parameter | Type | Required | Description |
|---|---|---|---|
entity_type | enum(contact, company, deal, task, note, activity, product, deal_payment, deal_payment_schedule) | ✓ | Which CRM entity to act on (singular). |
q | string | Free-text search across all text fields. | |
filters | array<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'. | |
match | enum(all, any) | Combine filters with AND (all) or OR (any). Default all. | |
groups | array<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 (name | |
group_match | enum(all, any) | Combine groups with AND (all) or OR (any). Default all. | |
limit | integer | ||
offset | integer | ||
sort | string | ||
order | enum(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
| Parameter | Type | Required | Description |
|---|---|---|---|
q | string | Free-text search across ALL text fields of the record (names, email, phone, etc.) and custom field values. | |
filters | array<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. | |
match | enum(all, any) | Combine filters with AND (all) or OR (any). Default all. | |
groups | array<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_match | enum(all, any) | Combine groups with AND (all) or OR (any). Default all. | |
limit | integer | ||
offset | integer | ||
sort | string | ||
order | enum(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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | Record 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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | Record 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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | Record 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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | Record 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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | Record 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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | Record 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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | Record 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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | Record 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
| Parameter | Type | Required | Description |
|---|---|---|---|
entity_type | enum(contact, company, deal, task, note, activity, product, deal_payment, deal_payment_schedule) | ✓ | Which CRM entity to act on (singular). |
id | string | ✓ | Record 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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | Record 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
| Parameter | Type | Required | Description |
|---|---|---|---|
activity_type | string | ✓ | e.g. call, email, note (required). |
entity_type | string | ✓ | contact|company|deal (required). |
entity_id | string | ✓ | Linked record id (required). |
activity_subtype | any | ||
title | any | ||
description | any | ||
contact_id | any | ||
company_id | any | ||
deal_id | any |
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
| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | ✓ | Company name (required). |
domain | any | ||
website | any | ||
industry | any | ||
company_type | any | ||
size | any | ||
annual_revenue | any | ||
description | any | ||
city | any | ||
state | any | ||
country | any | ||
phone | any | ||
email | any | ||
linkedin_url | any | ||
source | any | ||
status | any | ||
owner_email | any | ||
tags | any | ||
custom_fields | any |
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
| Parameter | Type | Required | Description |
|---|---|---|---|
email | any | Primary email (recommended; used for dedup). | |
first_name | any | ||
last_name | any | ||
phone | any | ||
mobile | any | ||
job_title | any | ||
department | any | ||
lead_status | any | ||
lead_score | any | ||
source | any | ||
city | any | ||
state | any | ||
country | any | ||
linkedin_url | any | ||
owner_email | any | Assign an owner; omit to leave unassigned. | |
tags | any | ||
custom_fields | any | Org-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
| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | ✓ | Deal name (required). |
value | any | ||
currency | any | ||
stage_name | any | ||
probability | any | ||
deal_type | any | ||
expected_close_date | any | ISO date (YYYY-MM-DD). | |
description | any | ||
next_step | any | ||
source | any | ||
owner_email | any | ||
tags | any | ||
custom_fields | any |
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
| Parameter | Type | Required | Description |
|---|---|---|---|
amount | number | ✓ | Payment amount (required, must be > 0). |
deal_id | any | Owner deal. Provide EXACTLY ONE of deal_id, contact_id, or company_id. | |
currency | any | ||
payment_method | any | ||
payment_date | any | ISO timestamp. | |
reference_number | any | ||
status | any | One of: pending, completed, failed, refunded, cancelled. | |
notes | any | ||
receipt_url | any | ||
contact_id | any | ||
company_id | any | ||
is_refund | any | ||
refund_for_payment_id | any | ||
refund_reason | any |
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
| Parameter | Type | Required | Description |
|---|---|---|---|
installment_number | integer | ✓ | Which instalment this is (1-based, ≤ total_installments; required). |
total_installments | integer | ✓ | Total instalments in the plan (required). |
due_date | string | ✓ | ISO date (YYYY-MM-DD) this instalment is due (required). |
amount | number | ✓ | Instalment amount (required, must be > 0). |
status | string | ✓ | One of: scheduled, paid, partial, overdue, cancelled (required). |
deal_id | any | Owner deal. Provide EXACTLY ONE of deal_id, contact_id, or company_id. | |
period_start | any | ISO date. | |
period_end | any | ISO date. | |
description | any | ||
paid_amount | any | ||
contact_id | any | ||
company_id | any |
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
| Parameter | Type | Required | Description |
|---|---|---|---|
content | string | ✓ | Note body (required). |
entity_type | string | ✓ | Linked entity: contact|company|deal (required). |
entity_id | string | ✓ | Linked record id (required). |
is_pinned | any |
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
| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | ✓ | Product/service name (required). |
description | any | ||
sku | any | ||
category | any | ||
price | any | ||
cost | any | ||
currency | any | ||
is_active | any | ||
is_service | any | True = a service line rather than a physical product. | |
parent_product_id | any | Parent product id for variants/bundles. | |
custom_fields | any | Org-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
| Parameter | Type | Required | Description |
|---|---|---|---|
entity_type | enum(contact, company, deal, task, note, activity, product, deal_payment, deal_payment_schedule) | ✓ | Which CRM entity to act on (singular). |
data | object | ✓ | The 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
| Parameter | Type | Required | Description |
|---|---|---|---|
title | string | ✓ | Task title (required). |
description | any | ||
type | any | ||
priority | any | ||
status | any | ||
contact_id | any | ||
company_id | any | ||
deal_id | any | ||
due_date | any | ISO timestamp. | |
reminder_date | any | ||
assigned_to_email | any | ||
entity_type | any | ||
entity_id | any | ||
labels | any | ||
source | any |
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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | Record id (UUID). |
activity_subtype | any | ||
title | any | ||
description | any |
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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | Record id (UUID). |
name | any | ||
domain | any | ||
website | any | ||
industry | any | ||
company_type | any | ||
size | any | ||
annual_revenue | any | ||
description | any | ||
city | any | ||
state | any | ||
country | any | ||
phone | any | ||
email | any | ||
linkedin_url | any | ||
source | any | ||
status | any | ||
owner_email | any | ||
tags | any | ||
custom_fields | any |
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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | Record id (UUID). |
email | any | ||
first_name | any | ||
last_name | any | ||
phone | any | ||
mobile | any | ||
job_title | any | ||
department | any | ||
lead_status | any | ||
lead_score | any | ||
source | any | ||
city | any | ||
state | any | ||
country | any | ||
linkedin_url | any | ||
owner_email | any | ||
tags | any | ||
custom_fields | any |
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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | Record id (UUID). |
name | any | ||
value | any | ||
currency | any | ||
stage_name | any | ||
probability | any | ||
deal_type | any | ||
expected_close_date | any | ||
description | any | ||
next_step | any | ||
source | any | ||
owner_email | any | ||
tags | any | ||
custom_fields | any |
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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | Record id (UUID). |
amount | any | ||
deal_id | any | ||
currency | any | ||
payment_method | any | ||
payment_date | any | ||
reference_number | any | ||
status | any | ||
notes | any | ||
receipt_url | any | ||
contact_id | any | ||
company_id | any | ||
is_refund | any | ||
refund_for_payment_id | any | ||
refund_reason | any |
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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | Record id (UUID). |
installment_number | any | ||
total_installments | any | ||
due_date | any | ||
amount | any | ||
status | any | ||
deal_id | any | ||
period_start | any | ||
period_end | any | ||
description | any | ||
paid_amount | any | ||
contact_id | any | ||
company_id | any |
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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | Record id (UUID). |
content | any | ||
is_pinned | any |
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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | Record id (UUID). |
name | any | ||
description | any | ||
sku | any | ||
category | any | ||
price | any | ||
cost | any | ||
currency | any | ||
is_active | any | ||
is_service | any | ||
parent_product_id | any | ||
custom_fields | any |
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
| Parameter | Type | Required | Description |
|---|---|---|---|
entity_type | enum(contact, company, deal, task, note, activity, product, deal_payment, deal_payment_schedule) | ✓ | Which CRM entity to act on (singular). |
id | string | ✓ | Record id (uuid). |
data | object | ✓ | Fields 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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | Record id (UUID). |
title | any | ||
description | any | ||
type | any | ||
priority | any | ||
status | any | ||
contact_id | any | ||
company_id | any | ||
deal_id | any | ||
due_date | any | ||
reminder_date | any | ||
assigned_to_email | any | ||
labels | any |
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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | Record 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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | Record 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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | Record 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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | Record 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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | Record 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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | Record 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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | Record 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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | Record 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
| Parameter | Type | Required | Description |
|---|---|---|---|
entity_type | enum(contact, company, deal, task, note, activity, product, deal_payment, deal_payment_schedule) | ✓ | Which CRM entity to act on (singular). |
id | string | ✓ | Record 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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | Record 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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | The parent record's id (UUID). |
q | string | Free-text search across ALL text fields of the record (names, email, phone, etc.) and custom field values. | |
filters | array<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. | |
match | enum(all, any) | Combine filters with AND (all) or OR (any). Default all. | |
groups | array<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_match | enum(all, any) | Combine groups with AND (all) or OR (any). Default all. | |
limit | integer | ||
offset | integer | ||
sort | string | ||
order | enum(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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | The parent record's id (UUID). |
q | string | Free-text search across ALL text fields of the record (names, email, phone, etc.) and custom field values. | |
filters | array<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>. | |
match | enum(all, any) | Combine filters with AND (all) or OR (any). Default all. | |
groups | array<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_match | enum(all, any) | Combine groups with AND (all) or OR (any). Default all. | |
limit | integer | ||
offset | integer | ||
sort | string | ||
order | enum(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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | The parent record's id (UUID). |
q | string | Free-text search across ALL text fields of the record (names, email, phone, etc.) and custom field values. | |
filters | array<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>. | |
match | enum(all, any) | Combine filters with AND (all) or OR (any). Default all. | |
groups | array<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_match | enum(all, any) | Combine groups with AND (all) or OR (any). Default all. | |
limit | integer | ||
offset | integer | ||
sort | string | ||
order | enum(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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | The parent record's id (UUID). |
q | string | Free-text search across ALL text fields of the record (names, email, phone, etc.) and custom field values. | |
filters | array<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. | |
match | enum(all, any) | Combine filters with AND (all) or OR (any). Default all. | |
groups | array<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_match | enum(all, any) | Combine groups with AND (all) or OR (any). Default all. | |
limit | integer | ||
offset | integer | ||
sort | string | ||
order | enum(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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | The parent record's id (UUID). |
q | string | Free-text search across ALL text fields of the record (names, email, phone, etc.) and custom field values. | |
filters | array<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. | |
match | enum(all, any) | Combine filters with AND (all) or OR (any). Default all. | |
groups | array<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_match | enum(all, any) | Combine groups with AND (all) or OR (any). Default all. | |
limit | integer | ||
offset | integer | ||
sort | string | ||
order | enum(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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | The parent record's id (UUID). |
q | string | Free-text search across ALL text fields of the record (names, email, phone, etc.) and custom field values. | |
filters | array<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. | |
match | enum(all, any) | Combine filters with AND (all) or OR (any). Default all. | |
groups | array<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_match | enum(all, any) | Combine groups with AND (all) or OR (any). Default all. | |
limit | integer | ||
offset | integer | ||
sort | string | ||
order | enum(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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | The parent record's id (UUID). |
q | string | Free-text search across ALL text fields of the record (names, email, phone, etc.) and custom field values. | |
filters | array<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>. | |
match | enum(all, any) | Combine filters with AND (all) or OR (any). Default all. | |
groups | array<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_match | enum(all, any) | Combine groups with AND (all) or OR (any). Default all. | |
limit | integer | ||
offset | integer | ||
sort | string | ||
order | enum(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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | The parent record's id (UUID). |
q | string | Free-text search across ALL text fields of the record (names, email, phone, etc.) and custom field values. | |
filters | array<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>. | |
match | enum(all, any) | Combine filters with AND (all) or OR (any). Default all. | |
groups | array<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_match | enum(all, any) | Combine groups with AND (all) or OR (any). Default all. | |
limit | integer | ||
offset | integer | ||
sort | string | ||
order | enum(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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | The parent record's id (UUID). |
q | string | Free-text search across ALL text fields of the record (names, email, phone, etc.) and custom field values. | |
filters | array<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. | |
match | enum(all, any) | Combine filters with AND (all) or OR (any). Default all. | |
groups | array<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_match | enum(all, any) | Combine groups with AND (all) or OR (any). Default all. | |
limit | integer | ||
offset | integer | ||
sort | string | ||
order | enum(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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | The parent record's id (UUID). |
q | string | Free-text search across ALL text fields of the record (names, email, phone, etc.) and custom field values. | |
filters | array<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. | |
match | enum(all, any) | Combine filters with AND (all) or OR (any). Default all. | |
groups | array<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_match | enum(all, any) | Combine groups with AND (all) or OR (any). Default all. | |
limit | integer | ||
offset | integer | ||
sort | string | ||
order | enum(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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | The parent record's id (UUID). |
q | string | Free-text search across ALL text fields of the record (names, email, phone, etc.) and custom field values. | |
filters | array<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. | |
match | enum(all, any) | Combine filters with AND (all) or OR (any). Default all. | |
groups | array<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_match | enum(all, any) | Combine groups with AND (all) or OR (any). Default all. | |
limit | integer | ||
offset | integer | ||
sort | string | ||
order | enum(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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | The parent record's id (UUID). |
q | string | Free-text search across ALL text fields of the record (names, email, phone, etc.) and custom field values. | |
filters | array<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>. | |
match | enum(all, any) | Combine filters with AND (all) or OR (any). Default all. | |
groups | array<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_match | enum(all, any) | Combine groups with AND (all) or OR (any). Default all. | |
limit | integer | ||
offset | integer | ||
sort | string | ||
order | enum(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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | The parent record's id (UUID). |
q | string | Free-text search across ALL text fields of the record (names, email, phone, etc.) and custom field values. | |
filters | array<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>. | |
match | enum(all, any) | Combine filters with AND (all) or OR (any). Default all. | |
groups | array<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_match | enum(all, any) | Combine groups with AND (all) or OR (any). Default all. | |
limit | integer | ||
offset | integer | ||
sort | string | ||
order | enum(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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | The parent record's id (UUID). |
q | string | Free-text search across ALL text fields of the record (names, email, phone, etc.) and custom field values. | |
filters | array<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. | |
match | enum(all, any) | Combine filters with AND (all) or OR (any). Default all. | |
groups | array<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_match | enum(all, any) | Combine groups with AND (all) or OR (any). Default all. | |
limit | integer | ||
offset | integer | ||
sort | string | ||
order | enum(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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | The parent record's id (UUID). |
q | string | Free-text search across ALL text fields of the record (names, email, phone, etc.) and custom field values. | |
filters | array<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>. | |
match | enum(all, any) | Combine filters with AND (all) or OR (any). Default all. | |
groups | array<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_match | enum(all, any) | Combine groups with AND (all) or OR (any). Default all. | |
limit | integer | ||
offset | integer | ||
sort | string | ||
order | enum(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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | The parent record's id (UUID). |
q | string | Free-text search across ALL text fields of the record (names, email, phone, etc.) and custom field values. | |
filters | array<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. | |
match | enum(all, any) | Combine filters with AND (all) or OR (any). Default all. | |
groups | array<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_match | enum(all, any) | Combine groups with AND (all) or OR (any). Default all. | |
limit | integer | ||
offset | integer | ||
sort | string | ||
order | enum(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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | The parent record's id (UUID). |
q | string | Free-text search across ALL text fields of the record (names, email, phone, etc.) and custom field values. | |
filters | array<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>. | |
match | enum(all, any) | Combine filters with AND (all) or OR (any). Default all. | |
groups | array<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_match | enum(all, any) | Combine groups with AND (all) or OR (any). Default all. | |
limit | integer | ||
offset | integer | ||
sort | string | ||
order | enum(asc, desc) |
Example
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "list_product_deals",
"arguments": {
"id": "\u2026"
}
}
}
link_company_to_contact
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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | The source record's id (UUID). |
target_id | string | ✓ | The record to link to (UUID). |
role | string | ||
department | string | ||
job_title | string | ||
is_primary | boolean | Mark this the primary link for the parent (made exclusive). | |
start_date | string | ISO date (YYYY-MM-DD). | |
end_date | string | ISO date (YYYY-MM-DD). | |
notes | string |
Example
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "link_company_to_contact",
"arguments": {
"id": "\u2026",
"target_id": "\u2026"
}
}
}
link_company_to_deal
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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | The source record's id (UUID). |
target_id | string | ✓ | The record to link to (UUID). |
role | string | ||
is_primary | boolean | Mark this the primary link for the parent (made exclusive). | |
ownership_percentage | number | ||
revenue_share | number | ||
notes | string |
Example
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "link_company_to_deal",
"arguments": {
"id": "\u2026",
"target_id": "\u2026"
}
}
}
link_contact_to_company
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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | The source record's id (UUID). |
target_id | string | ✓ | The record to link to (UUID). |
role | string | ||
department | string | ||
job_title | string | ||
is_primary | boolean | Mark this the primary link for the parent (made exclusive). | |
start_date | string | ISO date (YYYY-MM-DD). | |
end_date | string | ISO date (YYYY-MM-DD). | |
notes | string |
Example
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "link_contact_to_company",
"arguments": {
"id": "\u2026",
"target_id": "\u2026"
}
}
}
link_contact_to_deal
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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | The source record's id (UUID). |
target_id | string | ✓ | The record to link to (UUID). |
role | string | ||
is_primary | boolean | Mark this the primary link for the parent (made exclusive). | |
notes | string |
Example
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "link_contact_to_deal",
"arguments": {
"id": "\u2026",
"target_id": "\u2026"
}
}
}
link_deal_to_company
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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | The source record's id (UUID). |
target_id | string | ✓ | The record to link to (UUID). |
role | string | ||
is_primary | boolean | Mark this the primary link for the parent (made exclusive). | |
ownership_percentage | number | ||
revenue_share | number | ||
notes | string |
Example
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "link_deal_to_company",
"arguments": {
"id": "\u2026",
"target_id": "\u2026"
}
}
}
link_deal_to_contact
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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | The source record's id (UUID). |
target_id | string | ✓ | The record to link to (UUID). |
role | string | ||
is_primary | boolean | Mark this the primary link for the parent (made exclusive). | |
notes | string |
Example
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "link_deal_to_contact",
"arguments": {
"id": "\u2026",
"target_id": "\u2026"
}
}
}
link_deal_to_product
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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | The source record's id (UUID). |
target_id | string | ✓ | The record to link to (UUID). |
quantity | string | ||
unit_price | string | ||
discount_amount | string | ||
discount_percent | string | ||
subtotal | string | ||
notes | string | ||
assigned_member | string |
Example
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "link_deal_to_product",
"arguments": {
"id": "\u2026",
"target_id": "\u2026"
}
}
}
link_product_to_deal
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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | The source record's id (UUID). |
target_id | string | ✓ | The record to link to (UUID). |
quantity | string | ||
unit_price | string | ||
discount_amount | string | ||
discount_percent | string | ||
subtotal | string | ||
notes | string | ||
assigned_member | string |
Example
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "link_product_to_deal",
"arguments": {
"id": "\u2026",
"target_id": "\u2026"
}
}
}
link_records
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
| Parameter | Type | Required | Description |
|---|---|---|---|
entity_type | enum(contact, company, deal, task, note, activity, product, deal_payment, deal_payment_schedule) | ✓ | Which CRM entity to act on (singular). |
id | string | ✓ | Source record id (uuid). |
target_type | enum(contact, company, deal, task, note, activity, product, deal_payment, deal_payment_schedule) | ✓ | Which CRM entity to act on (singular). |
target_id | string | ✓ | Target record id (uuid). |
metadata | object | Optional link fields (role, quantity, unit_price, is_primary…). | |
unlink | boolean | Set 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"
}
}
}
unlink_company_from_contact
Remove the link between a company and a contact. Requires companies:write and contacts:write.
Required scope: companies:write + contacts:write
Input
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | The source record's id (UUID). |
target_id | string | ✓ | The 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"
}
}
}
unlink_company_from_deal
Remove the link between a company and a deal. Requires companies:write and deals:write.
Required scope: companies:write + deals:write
Input
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | The source record's id (UUID). |
target_id | string | ✓ | The 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"
}
}
}
unlink_contact_from_company
Remove the link between a contact and a company. Requires contacts:write and companies:write.
Required scope: companies:write + contacts:write
Input
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | The source record's id (UUID). |
target_id | string | ✓ | The 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"
}
}
}
unlink_contact_from_deal
Remove the link between a contact and a deal. Requires contacts:write and deals:write.
Required scope: contacts:write + deals:write
Input
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | The source record's id (UUID). |
target_id | string | ✓ | The 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"
}
}
}
unlink_deal_from_company
Remove the link between a deal and a company. Requires deals:write and companies:write.
Required scope: companies:write + deals:write
Input
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | The source record's id (UUID). |
target_id | string | ✓ | The 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"
}
}
}
unlink_deal_from_contact
Remove the link between a deal and a contact. Requires deals:write and contacts:write.
Required scope: contacts:write + deals:write
Input
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | The source record's id (UUID). |
target_id | string | ✓ | The 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"
}
}
}
unlink_deal_from_product
Remove the link between a deal and a product. Requires deals:write and products:write.
Required scope: deals:write + products:write
Input
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | The source record's id (UUID). |
target_id | string | ✓ | The 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"
}
}
}
unlink_product_from_deal
Remove the link between a product and a deal. Requires products:write and deals:write.
Required scope: deals:write + products:write
Input
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | The source record's id (UUID). |
target_id | string | ✓ | The 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
| Parameter | Type | Required | Description |
|---|---|---|---|
entity | enum(activities, companies, contacts, deal_payment_schedules, deal_payments, deals, notes, products, tasks) | ✓ | Which CRM entity the batch targets. |
records | array<object> | ✓ | Records to create; fields per entity match create_<entity>. |
suppress_automations | boolean | Skip 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
| Parameter | Type | Required | Description |
|---|---|---|---|
entity | enum(activities, companies, contacts, deal_payment_schedules, deal_payments, deals, notes, products, tasks) | ✓ | Which CRM entity the batch targets. |
ids | array<string> | ✓ | Record ids (uuids) to delete. |
suppress_automations | boolean | Skip 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
| Parameter | Type | Required | Description |
|---|---|---|---|
entity | enum(activities, companies, contacts, deal_payment_schedules, deal_payments, deals, notes, products, tasks) | ✓ | Which CRM entity the batch targets. |
updates | array<object> | ✓ | Per-record updates: {id, ...fields}. |
suppress_automations | boolean | Skip 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": []
}
}
}