Lists the custom fields defined in the org (name, slug, type, options, required, group, visibility), optionally for one entity: deal, person, company, prospect or product. The slug is the key used in each record's custom_fields.
Scope
crm:read
Permission
View the module
MCP tool
crm_custom_fields_listOn the full surface; on the compact one, mb_execute_operation with id: "crm.custom_fields.list".
Declared cost: up to 100 reads and 0 writes per call (they count against the daily quota).
Parameters
entityenumqueryoptional
Only the fields of this kind of record; without it, all of them.
Defines a custom field for an entity with a type (text, number, currency, date, select, multiselect, url, email, phone, checkbox, user, rating, progress, files…), options for selects, required flag, help text, group and visibility. The slug (lowercase, digits, underscore) is derived from the name unless given and must be unique per entity. Requires manage_custom_fields.
Scope
crm:write
Permission
Edit in the module · CRM action: manage_custom_fields
MCP tool
crm_custom_fields_createOn the full surface; on the compact one, mb_execute_operation with id: "crm.custom_fields.create".
Declared cost: up to 2 reads and 1 writes per call (they count against the daily quota).
Parameters
namestringbodyrequired
The field's name, as the app shows it (up to 80 characters).
typeenumbodyrequired
What the field holds; values are checked against it when records are written.
The key of the field in the records' customFields (lowercase letters, numbers and _); without it, it comes from the name. 409 custom_field_slug_taken if that entity already has it.
optionsarray<object>bodyoptional
For select and multiselect: the options (up to 100).
is_requiredbooleanbodyoptional
The app asks for it before saving the record.
default_valueanybodyoptional
The value a new record starts with (up to 2 KB).
help_textstringbodyoptional
A hint shown under the field (up to 300 characters).
group_namestringbodyoptional
The section of the record where the field is shown.
Updates the name, options, required flag, default value, help text, group, visibility or order of a custom field: send them at the top level or inside updates (not both: updates_conflict), at least one (no_changes otherwise). The slug and the type do not change (the stored values depend on them). Returns the field as saved and changed: false when it already was that way (nothing written). Requires manage_custom_fields.
Scope
crm:write
Permission
Edit in the module · CRM action: manage_custom_fields
MCP tool
crm_custom_fields_updateOn the full surface; on the compact one, mb_execute_operation with id: "crm.custom_fields.update".
Declared cost: up to 1 reads and 1 writes per call (they count against the daily quota).
Parameters
field_idstringpathrequired
The field, by id (crm.custom_fields.list).
namestringbodyoptional
The field's name, as the app shows it (up to 80 characters).
optionsarray<object>bodyoptional
For select and multiselect: the options (up to 100).
is_requiredbooleanbodyoptional
The app asks for it before saving the record.
default_valueanybodyoptional
The value a new record starts with (up to 2 KB).
help_textstringbodyoptional
A hint shown under the field (up to 300 characters).
group_namestringbodyoptional
The section of the record where the field is shown.
show_in_tablebooleanbodyoptional
Shown as a column in the lists.
show_in_drawerbooleanbodyoptional
Shown in the record's side panel.
orderintegerbodyoptional
Its position among the fields of that entity (0 first).
updatesobjectbodyoptional
The same fields, grouped as in the other CRM edits (crm.deals.update…): send them here or at the top level, not both.
Response
oktrue
changedboolean
false when the field already was that way: nothing was written.
Deletes the definition of a custom field; the values already stored in records are kept and simply stop being shown. The definition goes to the 30-day trash. Requires manage_custom_fields.
With an API key, this DELETE runs directly: the record stays 30 days in the trash and the response carries its trash_item_id. With an OAuth token, and through the MCP, it needs dry_run → confirm_token.
Scope
crm:writeand “Allow deletions” (crm:delete in OAuth)
Permission
Edit in the module · CRM action: manage_custom_fields
MCP tool
crm_custom_fields_deleteOn the full surface; on the compact one, mb_execute_operation with id: "crm.custom_fields.delete".
Declared cost: up to 1 reads and 2 writes per call (they count against the daily quota).
Parameters
field_idstringpathrequired
The field, by id (crm.custom_fields.list).
Response
oktrue
trash_item_idstring
The trash item this deletion left: the item_id of platform.trash.restore (POST /trash/{item_id}/restore). Missing if nothing went to the trash.
trash_item_idsarray<string>
Only when the deletion left more than one copy: all of them, the first being trash_item_id.
trash_expires_atnumber
When the copy leaves the trash for good (epoch ms): 30 days after the deletion.