Beacon CRM MCP by usefulapi
Server Details
Read and filter Beacon CRM records of any type; create, update, upsert, delete records; run exports.
- Status
- Healthy
- Uptime
- 98.9% over 21 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- m190/usefulapi-mcp
- GitHub Stars
- 0
TDQS
Scored across 11 tools
Each tool targets a distinct operation, and descriptions explicitly distinguish the overlapping cases (create vs. upsert vs. update) with guidance on when to use each. list_records vs. filter_records and get_record vs. list_records are cleanly separated. The only residual overlap is the inherent create/update/upsert trio, but the descriptions mitigate it well.
All 11 tools follow a strict verb_noun snake_case pattern with a uniform beaconcrm_ prefix (create_record, delete_record, get_record, list_records, update_record, upsert_record, trigger_export, etc.). No mixing of conventions.
11 tools is a well-scoped set for a CRM: a coherent CRUD core (create/get/update/delete/upsert/list/filter), plus needed discovery (record types, users) and export operations. No redundant or filler tools.
Full record lifecycle is covered (create, read, update, delete, upsert, list, filter) plus export triggering/listing and reference lookups. Minor gaps remain: no restore for archived records (explicitly acknowledged) and no export job deletion/cancellation, but agents can work around these.
Available Tools
11 toolsbeaconcrm_create_recordCreate recordAInspect
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}.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | Record type key, e.g. person, organization, payment or a custom type such as c_application. See beaconcrm_list_record_types. | |
| fields | Yes | 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description still adds real value beyond them: the concrete consequence of non-idempotency (two records), the workflow side-effect, the error contract ('Invalid field values are rejected with the rule that failed'), and the underlying endpoint. It stops short of permission/auth requirements or rate limits, hence not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences plus an endpoint, front-loaded with the WRITE marker and the create semantics, followed by the idempotency caveat, the side-effect warning, and the error contract. No sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter mutation with full schema coverage and no output schema, the description covers creation semantics, duplicate risk, side effects, and failure behavior. The only remaining gap is what the call returns (e.g. the new record ID), which an agent creating a record would likely want; small but real omission.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters in depth, including field-format quirks (arrays for select/point-to-record, email/currency/date shapes). The description adds no parameter-level detail beyond referring to 'the given type,' so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('create ONE new record of the given type') plus the target system ('live Beacon database'), and implicitly contrasts scope with the singular-record nature versus sibling list/filter tools. An agent can distinguish this from beaconcrm_upsert_record or beaconcrm_update_record without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the alternative tool and the condition that selects it: 'Not idempotent: calling it twice creates two records (use beaconcrm_upsert_record to avoid duplicates).' It also flags the collateral effect (workflows may run), which is decision-relevant before invoking a write.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
beaconcrm_delete_recordDelete recordADestructiveInspect
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}.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Id of the record to delete. | |
| entity | Yes | Record type key, e.g. person, organization, payment or a custom type such as c_application. See beaconcrm_list_record_types. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false, but the description goes well beyond them: archived-but-unrestorable semantics, potential impact on dependent data, and the fact that the call is never retried. That is exactly the extra risk context an agent needs before a destructive call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the safety classification, then irreversibility, then side effects, then transport shape. Every sentence carries distinct information and nothing is duplicated from the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, non-idempotent tool with no output schema, the description covers the full decision surface: scope, reversibility, dependent-data risk, retry behavior, and endpoint. Nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (id, entity) are already documented with examples ('c_application') and a pointer to beaconcrm_list_record_types. The description adds only the URL template, which is marginal — baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('delete ONE record') with an explicit cardinality constraint that separates it from create/update/upsert siblings. The endpoint mapping (DELETE /entity/{entity}/{id}) reinforces exactly what is acted on.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context ('ONE record', irreversible, related data may be affected) but does not name an alternative path — e.g., that update_record should be used to modify rather than delete-and-recreate. Usage is well framed but exclusions are implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
beaconcrm_filter_recordsFilter recordsARead-onlyInspect
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":"a@b.org"}]. POST /entities/{entity}/filter.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number, from 1 (default 1). Pass the previous reply's next_page. | |
| entity | Yes | Record type key, e.g. person, organization, payment or a custom type such as c_application. See beaconcrm_list_record_types. | |
| sort_by | No | Field key to sort by, e.g. created_at. | |
| archived | No | true = list deleted (archived) records instead of active ones. | |
| per_page | No | Results per page, 1-100 (default 25). | |
| populate | No | Include data from linked records (point-to-another-record fields). Beacon's default applies when omitted. | |
| sort_direction | No | Sort direction (default: Beacon's default order). | |
| filter_conditions | Yes | Filter conditions (see the description). An empty list matches every record. | |
| filter_strictness | No | "all" = AND (default), "any" = OR. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/destructiveHint=false, but the description adds real value by pre-empting the POST-equals-mutation misread ('it uses POST because the filter is a body'), which an agent cannot infer from the annotations or schema. It still says nothing about result shape, rate limits, or what an empty condition list returns beyond the schema note.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and the read-only/POST caveat are front-loaded before the operator reference material, and every sentence carries information the schema lacks. The per-type operator enumeration is a dense wall of text, but it is justified by the opaque filter schema rather than padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter, nested-DSL tool with no output schema, the description covers the hard part (filter construction) and the call mechanics (POST path, read-only). Pagination via next_page, sort fields, archived, and populate are left entirely to the schema, which is acceptable but leaves the description short of fully self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline would be 3, but the filter_conditions parameter is essentially opaque in the schema (array of objects with additionalProperties: {}). The description compensates with the full operator vocabulary per field type, the nesting syntax with filter_strictness, value formats for dates, and a concrete example — meaning the schema cannot express.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first clause names a specific verb and resource ('Search records of one type') and adds the distinguishing mechanism ('with Beacon filter conditions'), plus the surprising implementation detail that it is a read-only POST. It never names beaconcrm_list_records as the unfiltered alternative, so the differentiation from that sibling is implicit rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: reach for this tool when you need condition-based search rather than a plain list, and the 'read-only; it uses POST because the filter is a body' note clarifies that it is safe to call. However, it never states when to prefer beaconcrm_list_records or beaconcrm_get_record, nor any prerequisite (e.g. resolving the entity key first).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
beaconcrm_get_recordGet recordARead-onlyInspect
One record by type and id, with all its fields. GET /entity/{entity}/{id}.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Record id. | |
| entity | Yes | Record type key, e.g. person, organization, payment or a custom type such as c_application. See beaconcrm_list_record_types. | |
| populate | No | Include data from linked records (point-to-another-record fields). Beacon's default applies when omitted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds that the full field set is returned, but says nothing about auth requirements, rate limits, or behavior when the record does not exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences, front-loaded with the scope ('one record by type and id') followed by the endpoint. No filler or redundant restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description partially compensates by noting the record comes back 'with all its fields', which tells the agent the payload is the full entity. It still leaves gaps around error/not-found behavior and the effect of populate on the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and each parameter (id, entity, populate) is documented in the schema itself, including the pointer to beaconcrm_list_record_types. The description adds no parameter detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: fetch one record, keyed by type and id, returning all fields. The word 'One' distinguishes it from list_records and filter_records, though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: 'by type and id' signals that this tool requires a known identifier, which separates it from search/filter tools. There is no explicit when-to-use or when-not-to-use guidance versus beaconcrm_filter_records or beaconcrm_list_records.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
beaconcrm_list_exportsList exportsARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| entity_export_id | No | Only this export (the id returned by beaconcrm_trigger_export). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly/destructive status, so the bar is lower; the description still adds valuable semantics — progress scale (100 = complete) and that a signed download url only appears when complete. It does not cover pagination or the default window implied by 'recent'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the primary action and its return values, followed by the optional filter and endpoint. Nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully covers return shape (status, progress, download url), which is exactly what an agent needs here. The only gap is that 'recent' is undefined and no pagination/limit behavior is described.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter's description already states it is 'the id returned by beaconcrm_trigger_export', which the tool description essentially repeats. No additional syntax or format meaning is added, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ('List recent export jobs') with the returned fields enumerated, and it is clearly distinguished from the sibling beaconcrm_trigger_export, which it names explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies the polling workflow: it tells the agent to pass entity_export_id to check a job started by beaconcrm_trigger_export, giving a clear context of use. It lacks explicit when-not guidance or alternatives beyond that single cross-reference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
beaconcrm_list_recordsList recordsARead-onlyInspect
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}.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number, from 1 (default 1). Pass the previous reply's next_page. | |
| entity | Yes | Record type key, e.g. person, organization, payment or a custom type such as c_application. See beaconcrm_list_record_types. | |
| sort_by | No | Field key to sort by, e.g. created_at. | |
| archived | No | true = list deleted (archived) records instead of active ones. | |
| per_page | No | Results per page, 1-100 (default 25). | |
| populate | No | Include data from linked records (point-to-another-record fields). Beacon's default applies when omitted. | |
| sort_direction | No | Sort direction (default: Beacon's default order). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the pagination model ('one page at a time') and the GET endpoint, which is useful, but omits rate limits and what the paginated response actually contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the core purpose front-loaded and the alternative named second. The endpoint snippet is compact, though 'GET /entities/{entity}' duplicates info the schema essentially implies.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with a fully documented 7-param schema and no output schema, the description covers purpose, pagination, and sibling routing. Completeness is slightly short because with no output schema, return shape isn't described, but the essentials for correct invocation are present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with each of the 7 parameters documented in the schema, so the schema carries the load. The description adds only the endpoint and the page-at-a-time framing, not additional parameter syntax or format detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (records), scopes it to one entity type with concrete examples, and hints at pagination semantics ('one page at a time'). It also names the sibling beaconcrm_filter_records, letting an agent distinguish listing from searching without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes field-value searching to beaconcrm_filter_records, which is clear alternative guidance. However, it doesn't state when to use beaconcrm_get_record or beaconcrm_list_record_types instead, leaving the remaining sibling boundaries implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
beaconcrm_list_record_typesList record types and fieldsARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so safety is covered. The description adds the valuable discovery-prerequisite role and the underlying GET /entity_types endpoint, though it says nothing about result size or pagination for an open-world listing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the what and the why-before-you-call; the endpoint is a compact trailing detail. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description must characterize the return value — and it does, naming the entities and the per-field attributes (keys, types, options). Nothing needed to call this zero-arg tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. The description goes slightly beyond by explaining that the returned keys become parameter values (`entity` and field names) for other tools, which is useful cross-tool semantic context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (record types of this Beacon account) and enumerates the payload shape (people, organisations, payments, custom types, with keys, types, options). It is clearly distinguishable from siblings like beaconcrm_list_records, which list data rather than schema metadata.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly prescribes ordering: "Call this first", and explains why — the returned keys are what other tools accept as `entity` and as field names. This is a rare, concrete when-to-use statement tied to the sibling toolset.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
beaconcrm_list_usersList account usersARead-onlyInspect
List the users of the Beacon account (id, role, name, email). Use the inner user.id for 'link to a user' fields. GET /users.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number, from 1 (default 1). Pass the previous reply's next_page. | |
| per_page | No | Results per page, 1-100 (default 25). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds the returned field set and the endpoint (GET /users), plus the nested-id hint, but says nothing about auth requirements, rate limits, or pagination behavior beyond what the schema covers.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, front-loaded sentences with no filler; the return fields come first and the consumption tip second. The trailing 'GET /users' is mildly redundant but does confirm the read endpoint.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with no output schema, the description compensates by naming the returned fields and explaining the nested user.id, which is exactly the information an agent needs to use results downstream. Only auth/pagination nuance is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters (page, per_page) are fully documented in the schema, including the chaining instruction to pass next_page. The description adds no parameter detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (list the users of the Beacon account) and even enumerates the returned fields (id, role, name, email), which goes beyond the title. It does not explicitly distinguish itself from the record-oriented siblings, though the 'users' resource is self-evidently distinct from records.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: the note 'Use the inner user.id for link to a user fields' tells the agent how to consume the result, but there is no explicit when-to-use or when-not-to-use guidance relative to the record tools. Adequate but leaves selection reasoning to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
beaconcrm_trigger_exportStart an exportAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| entity_export_template_id | Yes | Id of the export template (shown in the Beacon URL when you view the template). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-read-only, non-idempotent, non-destructive behavior, so the bar is lower. The description still adds real value: it discloses the return payload (new export id with status in_progress), the polling contract, and reinforces non-idempotency with 'Each call starts another job.'
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense sentences, zero filler, and the WRITE marker plus verb are front-loaded ahead of the return/polling details. Every sentence carries distinct operational information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although there is no output schema, the description covers the return shape (id + status), the full polling loop, and the non-idempotent side effect. An agent has everything needed to call the tool and follow through correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single parameter is fully documented in-schema, including the hint that the template id appears in the Beacon URL. The description only alludes to the parameter indirectly ('existing export template'), so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'start an export job from an existing export template,' with the wire endpoint POST /entity_export/trigger. It is clearly distinguishable from sibling beaconcrm_list_exports, which it names as the polling counterpart rather than a competing option.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear workflow context: start the job here, then poll beaconcrm_list_exports with the returned id until progress is 100 and a download url appears. It does not state prerequisites or exclusions beyond 'existing export template (created in Beacon),' so it stops short of explicit when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
beaconcrm_update_recordUpdate recordADestructiveInspect
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}.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Record id. | |
| entity | Yes | Record type key, e.g. person, organization, payment or a custom type such as c_application. See beaconcrm_list_record_types. | |
| fields | Yes | 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and idempotentHint=false, but the description goes well beyond them: it discloses partial-update semantics, that [] CLEARS a select/reference field, that previous values are not retained (no undo), and that Beacon workflows may fire as a side effect. These are exactly the consequences an agent needs before mutating data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five short clauses, front-loaded with the 'WRITE:' marker and the operation summary, then the highest-risk behaviors. No filler sentences and every clause carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with no output schema and annotations covering only the safety profile, the description covers clearing behavior and side effects well. It omits error behavior for a nonexistent id and any permission requirements, which would be the remaining gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real value beyond the schema: the empty-array-clears-a-field rule is not derivable from the schema, which only says select fields are arrays. It still does not restate field-key lookup guidance, which the schema already handles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — 'change fields of ONE existing record' — and the 'ONE' plus 'existing' phrasing implicitly separates it from create_record, upsert_record, and delete_record siblings. The PATCH endpoint confirms the operation unambiguously.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'ONE existing record' implies the record must already exist, which is the key discriminator against upsert_record. However, no sibling is named and there is no explicit statement of when to prefer this over upsert_record or create_record, leaving the routing inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
beaconcrm_upsert_recordCreate or update record by key fieldADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | Record type key, e.g. person, organization, payment or a custom type such as c_application. See beaconcrm_list_record_types. | |
| fields | Yes | 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 | Yes | Field key used to match an existing record, e.g. emails or external_id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true, readOnlyHint=false and idempotentHint=false; the description adds genuinely new behavior: an empty array leaves an existing value untouched, and Beacon workflows may fire as a side effect (which explains why the call is not idempotent). It stops short of describing the response shape or required permissions, but that is a minor gap against this annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the operation type and the core match logic, then edge cases and the endpoint. Dense but every sentence carries information; slightly long for a three-parameter tool, though nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the mutation, match semantics, empty-array edge case, and workflow side effects, which is what an agent needs to invoke it safely. Return values and authentication requirements are unaddressed, and there is no output schema to compensate, leaving a small gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description goes further by explaining the relationship between parameters: primary_field_key names the match field and fields must carry a value for it. It also conveys the overwrite/merge semantics of fields that the schema does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb (create/update) and resource (record), and explicitly defines the upsert matching rule, which separates it from the sibling beaconcrm_create_record and beaconcrm_update_record. The WRITE prefix and endpoint (PUT /entity/{entity}/upsert) make the operation unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly frames the context in which upsert applies: a match on primary_field_key means update, no match means create. However, it never names the alternatives (beaconcrm_create_record, beaconcrm_update_record) or states when NOT to use this tool, so the 'use create instead if...' routing is left implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Related MCP Connectors
Read people, companies, opportunities, notes and tasks; create and update records in Twenty CRM.
Read deals, persons, organizations, activities and pipelines; create and update CRM records.
Read campaigns, donations, profiles and supporters; record offline donations and upsert users.
Read, create, update and delete records; inspect objects, fields and schema in your Knack database.
Related MCP Servers
- AlicenseCqualityDmaintenanceProvides standardized access to HubSpot's CRM API for managing contacts, companies, deals, engagements, and other CRM data through comprehensive CRUD operations, batch processing, and advanced search capabilities.10042 npm1MIT
- AlicenseCqualityDmaintenanceProvides comprehensive access to HubSpot CRM API for managing contacts, companies, deals, engagements, and associations. Supports batch operations, advanced search, and complete CRUD functionality across all standard CRM objects.10042 npmMIT
- AlicenseAqualityBmaintenanceEnables MCP clients to read, search, create, update, and manage records in Twenty CRM with a safe, composable 14-tool interface and guarded destructive operations.143MIT
- AlicenseCqualityDmaintenanceProvides standardized access to HubSpot CRM API for managing contacts, companies, deals, leads, engagements, and associations with support for batch operations and advanced search capabilities.10042 npmMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.