Read and filter Beacon CRM records of any type; create, update, upsert, delete records; run exports.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
WRITE: create ONE new record of the given type in the live Beacon database. Not idempotent: calling it twice creates two records (use beaconcrm_upsert_record to avoid duplicates). Beacon workflows may run as a result. Invalid field values are rejected with the rule that failed. POST /entity/{entity}.
Record type key, e.g. person, organization, payment or a custom type such as c_application. See beaconcrm_list_record_types.
Field values keyed by field key, in Beacon's field formats (see beaconcrm_list_record_types for keys). Select and point-to-record fields are ARRAYS (e.g. {"type": ["Donation"], "customer": [1725]}); emails are [{"email", "is_primary"}]; currency is {"value", "currency"}; dates are ISO strings.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
WRITE: create ONE new record of the given type in the live Beacon database. Not idempotent: calling it twice creates two records (use beaconcrm_upsert_record to avoid duplicates). Beacon workflows may run as a result. Invalid field values are rejected with the rule that failed. POST /entity/{entity}.
| Argument | Type | Description |
|---|---|---|
| entity* | string | Record type key, e.g. person, organization, payment or a custom type such as c_application. See beaconcrm_list_record_types. |
| fields* | object | Field values keyed by field key, in Beacon's field formats (see beaconcrm_list_record_types for keys). Select and point-to-record fields are ARRAYS (e.g. {"type": ["Donation"], "customer": [1725]}); emails are [{"email", "is_primary"}]; currency is {"value", "currency"}; dates are ISO strings. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"entity",
"fields"
],
"properties": {
"entity": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_]{0,63}$",
"description": "Record type key, e.g. person, organization, payment or a custom type such as c_application. See beaconcrm_list_record_types."
},
"fields": {
"type": "object",
"description": "Field values keyed by field key, in Beacon's field formats (see beaconcrm_list_record_types for keys). Select and point-to-record fields are ARRAYS (e.g. {\"type\": [\"Donation\"], \"customer\": [1725]}); emails are [{\"email\", \"is_primary\"}]; currency is {\"value\", \"currency\"}; dates are ISO strings.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
}
}WRITE, DESTRUCTIVE: delete ONE record. Beacon keeps deleted records as 'archived' (listable with archived=true), but this server has no restore tool, so treat the deletion as irreversible. Related data that depends on the record may be affected. It is sent once and never retried. DELETE /entity/{entity}/{id}.
| Argument | Type | Description |
|---|---|---|
| id* | integer | Id of the record to delete. |
| entity* | string | Record type key, e.g. person, organization, payment or a custom type such as c_application. See beaconcrm_list_record_types. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"entity",
"id"
],
"properties": {
"id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Id of the record to delete.",
"exclusiveMinimum": 0
},
"entity": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_]{0,63}$",
"description": "Record type key, e.g. person, organization, payment or a custom type such as c_application. See beaconcrm_list_record_types."
}
}
}Search records of one type with Beacon filter conditions (read-only; it uses POST because the filter is a body). Each condition is {"field", "operator", "value"}. Operators by field type: text == != starts_with ends_with contains not_contains null not_null; select (value is an array) contains not_contains in not_in null not_null; number == != > < null not_null; date date_on date_after date_before date_between (value e.g. "2026-01-01", "last_month", or ["2026-01-01","2026-06-01"]); checkbox == true; point-to-record (value is an array of ids) contains not_contains. Location parts: address.city etc.; emails: emails.email. Conditions can nest as {"filter_conditions": [...], "filter_strictness": "all"|"any"}. Example: [{"field":"emails.email","operator":"==","value":"[email protected]"}]. POST /entities/{entity}/filter.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, from 1 (default 1). Pass the previous reply's next_page. |
| entity* | string | Record type key, e.g. person, organization, payment or a custom type such as c_application. See beaconcrm_list_record_types. |
| sort_by | string | Field key to sort by, e.g. created_at. |
| archived | boolean | true = list deleted (archived) records instead of active ones. |
| per_page | integer | Results per page, 1-100 (default 25). |
| populate |
One record by type and id, with all its fields. GET /entity/{entity}/{id}.
| Argument | Type | Description |
|---|---|---|
| id* | integer | Record id. |
| entity* | string | Record type key, e.g. person, organization, payment or a custom type such as c_application. See beaconcrm_list_record_types. |
| populate | boolean | Include data from linked records (point-to-another-record fields). Beacon's default applies when omitted. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"entity",
"id"
],
"properties": {
"id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Record id.",
"exclusiveMinimum": 0
},
"entity": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_]{0,63}$",
"description": "Record type key, e.g. person, organization, payment or a custom type such as c_application. See beaconcrm_list_record_types."
},
"populate": {
"type": "boolean",
"description": "Include data from linked records (point-to-another-record fields). Beacon's default applies when omitted."
}
}
}List recent export jobs with status, progress (100 = complete) and, when complete, a signed download url. Pass entity_export_id to check one job started by beaconcrm_trigger_export. GET /entity_exports.
| Argument | Type | Description |
|---|---|---|
| entity_export_id | any | Only this export (the id returned by beaconcrm_trigger_export). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"entity_export_id": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
},
{
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$"
}
],
"description": "Only this export (the id returned by beaconcrm_trigger_export)."
}
}
}List the record types of this Beacon account (people, organisations, payments, custom types, ...) with their fields (keys, types, options). Call this first: the keys are what the other tools take as `entity` and as field names. GET /entity_types.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}List records of one type (for example person, organization, payment), one page at a time. Use beaconcrm_filter_records to search by field values. GET /entities/{entity}.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, from 1 (default 1). Pass the previous reply's next_page. |
| entity* | string | Record type key, e.g. person, organization, payment or a custom type such as c_application. See beaconcrm_list_record_types. |
| sort_by | string | Field key to sort by, e.g. created_at. |
| archived | boolean | true = list deleted (archived) records instead of active ones. |
| per_page | integer | Results per page, 1-100 (default 25). |
| populate | boolean | Include data from linked records (point-to-another-record fields). Beacon's default applies when omitted. |
| sort_direction | string | Sort direction (default: Beacon's default order). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"entity"
],
"properties": {
"page": {
"type": "integer",
"maximum": 100000,
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"exclusiveMinimum": 0
},
"entity": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_]{0,63}$",
"description": "Record type key, e.g. person, organization, payment or a custom type such as c_application. See beaconcrm_list_record_types."
},
"sort_by": {
"type": "string",
"pattern": "^[A-Za-z0-9_.]{1,100}$",
"description": "Field key to sort by, e.g. created_at."
},
"archived": {
"type": "boolean",
"description": "true = list deleted (archived) records instead of active ones."
},
"per_page": {
"type": "integer",
"maximum": 100,
"description": "Results per page, 1-100 (default 25).",
"exclusiveMinimum": 0
},
"populate": {
"type": "boolean",
"description": "Include data from linked records (point-to-another-record fields). Beacon's default applies when omitted."
},
"sort_direction": {
"enum": [
"asc",
"desc"
],
"type": "string",
"description": "Sort direction (default: Beacon's default order)."
}
}
}List the users of the Beacon account (id, role, name, email). Use the inner user.id for 'link to a user' fields. GET /users.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, from 1 (default 1). Pass the previous reply's next_page. |
| per_page | integer | Results per page, 1-100 (default 25). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 100000,
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"exclusiveMinimum": 0
},
"per_page": {
"type": "integer",
"maximum": 100,
"description": "Results per page, 1-100 (default 25).",
"exclusiveMinimum": 0
}
}
}WRITE: start an export job from an existing export template (created in Beacon). Returns the new export's id with status in_progress; then poll beaconcrm_list_exports with that id until progress is 100 and it carries a download url. Each call starts another job. POST /entity_export/trigger.
| Argument | Type | Description |
|---|---|---|
| entity_export_template_id* | integer | Id of the export template (shown in the Beacon URL when you view the template). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"entity_export_template_id"
],
"properties": {
"entity_export_template_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Id of the export template (shown in the Beacon URL when you view the template).",
"exclusiveMinimum": 0
}
}
}WRITE: change fields of ONE existing record. Only the fields you pass are changed; a select or reference field passed as an empty array [] is CLEARED, removing its existing values. The previous values are not kept by this tool. Beacon workflows may run as a result. PATCH /entity/{entity}/{id}.
| Argument | Type | Description |
|---|---|---|
| id* | integer | Record id. |
| entity* | string | Record type key, e.g. person, organization, payment or a custom type such as c_application. See beaconcrm_list_record_types. |
| fields* | object | Field values keyed by field key, in Beacon's field formats (see beaconcrm_list_record_types for keys). Select and point-to-record fields are ARRAYS (e.g. {"type": ["Donation"], "customer": [1725]}); emails are [{"email", "is_primary"}]; currency is {"value", "currency"}; dates are ISO strings. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"entity",
"id",
"fields"
],
"properties": {
"id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Record id.",
"exclusiveMinimum": 0
},
"entity": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_]{0,63}$",
"description": "Record type key, e.g. person, organization, payment or a custom type such as c_application. See beaconcrm_list_record_types."
},
"fields": {
"type": "object",
"description": "Field values keyed by field key, in Beacon's field formats (see beaconcrm_list_record_types for keys). Select and point-to-record fields are ARRAYS (e.g. {\"type\": [\"Donation\"], \"customer\": [1725]}); emails are [{\"email\", \"is_primary\"}]; currency is {\"value\", \"currency\"}; dates are ISO strings.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
}
}WRITE: create a record, or update the existing one whose key field matches. `primary_field_key` names the field used to find the match (for example "emails" for a person, or "external_id"); `fields` must contain a value for it. If a record matches it is UPDATED with the given fields (an empty array leaves an existing value untouched on upsert); otherwise a new record is created. Beacon workflows may run as a result. PUT /entity/{entity}/upsert.
| Argument | Type | Description |
|---|---|---|
| entity* | string | Record type key, e.g. person, organization, payment or a custom type such as c_application. See beaconcrm_list_record_types. |
| fields* | object | Field values keyed by field key, in Beacon's field formats (see beaconcrm_list_record_types for keys). Select and point-to-record fields are ARRAYS (e.g. {"type": ["Donation"], "customer": [1725]}); emails are [{"email", "is_primary"}]; currency is {"value", "currency"}; dates are ISO strings. |
| primary_field_key* | string | Field key used to match an existing record, e.g. emails or external_id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"entity",
"primary_field_key",
"fields"
],
"properties": {
"entity": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_]{0,63}$",
"description": "Record type key, e.g. person, organization, payment or a custom type such as c_application. See beaconcrm_list_record_types."
},
"fields": {
"type": "object",
"description": "Field values keyed by field key, in Beacon's field formats (see beaconcrm_list_record_types for keys). Select and point-to-record fields are ARRAYS (e.g. {\"type\": [\"Donation\"], \"customer\": [1725]}); emails are [{\"email\", \"is_primary\"}]; currency is {\"value\", \"currency\"}; dates are ISO strings.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"primary_field_key": {
"type": "string",
"pattern": "^[A-Za-z0-9_.]{1,100}$",
"description": "Field key used to match an existing record, e.g. emails or external_id."
}
}
}| boolean |
| Include data from linked records (point-to-another-record fields). Beacon's default applies when omitted. |
| sort_direction | string | Sort direction (default: Beacon's default order). |
| filter_conditions* | array | Filter conditions (see the description). An empty list matches every record. |
| filter_strictness | string | "all" = AND (default), "any" = OR. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"entity",
"filter_conditions"
],
"properties": {
"page": {
"type": "integer",
"maximum": 100000,
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"exclusiveMinimum": 0
},
"entity": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_]{0,63}$",
"description": "Record type key, e.g. person, organization, payment or a custom type such as c_application. See beaconcrm_list_record_types."
},
"sort_by": {
"type": "string",
"pattern": "^[A-Za-z0-9_.]{1,100}$",
"description": "Field key to sort by, e.g. created_at."
},
"archived": {
"type": "boolean",
"description": "true = list deleted (archived) records instead of active ones."
},
"per_page": {
"type": "integer",
"maximum": 100,
"description": "Results per page, 1-100 (default 25).",
"exclusiveMinimum": 0
},
"populate": {
"type": "boolean",
"description": "Include data from linked records (point-to-another-record fields). Beacon's default applies when omitted."
},
"sort_direction": {
"enum": [
"asc",
"desc"
],
"type": "string",
"description": "Sort direction (default: Beacon's default order)."
},
"filter_conditions": {
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"maxItems": 50,
"description": "Filter conditions (see the description). An empty list matches every record."
},
"filter_strictness": {
"enum": [
"all",
"any"
],
"type": "string",
"description": "\"all\" = AND (default), \"any\" = OR."
}
}
}