Skip to main content
Glama

callingly

Update a CRM integration

update_integration

Change a connected integration's settings, field mapping, routing rules or CRM user mapping, make it (or stop it being) the primary CRM, or import Follow Up Boss users/groups. Read the integration with get_integrations first and send back values in the same shapes; values that come from the CRM (field keys, tags, stages, events, CRM user ids, Facebook forms, inboxes) are listed by get_crm_options.

Input Schema

NameRequiredDescriptionDefault
nameNosettings: the integration's name (max 255).
syncNosettings: sync toggles to change, e.g. {"is_sync_completed": true}. Keys: is_sync_lead_owner, is_sync_completed, is_sync_sms, is_sync_ai_scheduled_calls, is_sync_missed. Others keep their value.
rulesNorouting: the complete ordered rule list, first match wins; replaces all rules. Omit to keep the rules; [] removes them all.
actionYessettings: name, team_id, sync, settings. fields: field_mapping, is_ai_extract, object_type. routing: team_id (default team), sequence_id (its sequence), rules, settings (trigger/tag). users: user_mapping. set_primary / unset_primary: the account's primary CRM. import_users: fub_ids, team_id, send_welcome. import_groups: group_ids.
fub_idsNoimport_users: Follow Up Boss user ids from get_integrations include_importable=users.
team_idNosettings/routing: the default team leads go to when no rule matches (null for none). import_users: the team to add imported users to.
settingsNosettings: keys to change in the integration's settings object as get_integrations shows it; nested objects merge, lists and scalars replace. Tags applied after a call (events.success/missed; Keap success/missed), the Facebook form_id and Inbox App number_id_<id> inboxes come from get_crm_options. routing: {"events": {"trigger": "…"}} (ActiveCampaign tag, Pipedrive stage, Wise Agent category — list them with get_crm_options) or {"tag": "…"} (Zoho).
group_idsNoimport_groups: Follow Up Boss group ids from get_integrations include_importable=groups.
object_typeNofields, Salesforce only: Lead, Contact, Opportunity or a custom object API name.
sequence_idNorouting: the sequence leads that match no rule are enrolled in (null for the default team's own). Sequence ids come from get_account_setup.
send_welcomeNoimport_users: email new users their login (default true).
user_mappingNousers: Callingly user id → CRM user id (null to unlink), e.g. {"12": "345"}; CRM user ids come from get_crm_options kind users. Only the users you pass change.
field_mappingNofields: Callingly field slug → value (see field_mapping.value_type_help), e.g. {"fname": "first_name", "phone": "phone"}. CRM field keys come from get_crm_options kind fields. Merged into the current mapping; null unmaps a field.
is_ai_extractNofields: automatically extract lead data (Facebook, Webhook, Unbounce, Realtor, Email).
integration_idYesThe integration, from get_integrations.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedInput schema / properties / rules / items / properties / conditions / items / properties / field / description
      Previous value: -"A Callingly field slug (from field_mapping.callingly_fields), or \"tags\" where routing.tags_field_available, or \"fub_pond\" (the Follow Up Boss pond: a name or id from get_crm_options kind ponds) where routing.pond_field_available."New value: +"A Callingly field slug (from field_mapping.callingly_fields), or \"tags\" where routing.tags_field_available, or \"fub_pond\" (the Follow Up Boss pond: a name or id from get_crm_options kind ponds) where routing.pond_field_available. Follow Up Boss tests the contact's own fields instead of Callingly's: \"fub_\" plus a key from get_crm_options kind fields (fub_source, fub_stage, fub_customAreaOfInterest), plus \"tags\" and \"fub_pond\"."
    • changedInput schema / properties / rules / items / properties / field / description
      Previous value: -"A Callingly field slug (from field_mapping.callingly_fields), or \"tags\" where routing.tags_field_available, or \"fub_pond\" (the Follow Up Boss pond: a name or id from get_crm_options kind ponds) where routing.pond_field_available."New value: +"A Callingly field slug (from field_mapping.callingly_fields), or \"tags\" where routing.tags_field_available, or \"fub_pond\" (the Follow Up Boss pond: a name or id from get_crm_options kind ponds) where routing.pond_field_available. Follow Up Boss tests the contact's own fields instead of Callingly's: \"fub_\" plus a key from get_crm_options kind fields (fub_source, fub_stage, fub_customAreaOfInterest), plus \"tags\" and \"fub_pond\"."
  2. Changed3 schema fields changed
    • changedInput schema / properties / action / description
      Previous value: -"settings: name, team_id, sync, settings. fields: field_mapping, is_ai_extract, object_type. routing: team_id (default team), rules, settings (trigger/tag). users: user_mapping. set_primary / unset_primary: the account's primary CRM. import_users: fub_ids, team_id, send_welcome. import_groups: group_ids."New value: +"settings: name, team_id, sync, settings. fields: field_mapping, is_ai_extract, object_type. routing: team_id (default team), sequence_id (its sequence), rules, settings (trigger/tag). users: user_mapping. set_primary / unset_primary: the account's primary CRM. import_users: fub_ids, team_id, send_welcome. import_groups: group_ids."
    • addedInput schema / properties / rules / items / properties / sequence_id
      Added value: +{
      +  "description": "redirect only: the sequence the lead is enrolled in; omit for the team's own.",
      +  "type": "integer"
      +}
    • addedInput schema / properties / sequence_id
      Added value: +{
      +  "description": "routing: the sequence leads that match no rule are enrolled in (null for the default team's own). Sequence ids come from get_account_setup.",
      +  "type": "integer"
      +}
  3. Changed2 schema fields changed
    • changedInput schema / properties / rules / items / properties / conditions / items / properties / field / description
      Previous value: -"A Callingly field slug (from field_mapping.callingly_fields), or \"tags\" where routing.tags_field_available."New value: +"A Callingly field slug (from field_mapping.callingly_fields), or \"tags\" where routing.tags_field_available, or \"fub_pond\" (the Follow Up Boss pond: a name or id from get_crm_options kind ponds) where routing.pond_field_available."
    • changedInput schema / properties / rules / items / properties / field / description
      Previous value: -"A Callingly field slug (from field_mapping.callingly_fields), or \"tags\" where routing.tags_field_available."New value: +"A Callingly field slug (from field_mapping.callingly_fields), or \"tags\" where routing.tags_field_available, or \"fub_pond\" (the Follow Up Boss pond: a name or id from get_crm_options kind ponds) where routing.pond_field_available."
  4. Changed1 schema field changed
    • changedInput schema / properties / settings / description
      Previous value: -"settings: keys to change in the integration's settings object as get_integrations shows it; nested objects merge, lists and scalars replace. Tags applied after a call (events.success/missed; Keap success/missed), the Facebook form_id and Inbox App number_id_<id> inboxes come from get_crm_options. routing: {\"events\": {\"trigger\": \"…\"}} (ActiveCampaign tag, Drip event, Pipedrive stage, Wise Agent category — list them with get_crm_options) or {\"tag\": \"…\"} (Zoho)."New value: +"settings: keys to change in the integration's settings object as get_integrations shows it; nested objects merge, lists and scalars replace. Tags applied after a call (events.success/missed; Keap success/missed), the Facebook form_id and Inbox App number_id_<id> inboxes come from get_crm_options. routing: {\"events\": {\"trigger\": \"…\"}} (ActiveCampaign tag, Pipedrive stage, Wise Agent category — list them with get_crm_options) or {\"tag\": \"…\"} (Zoho)."
  5. Added

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare destructiveHint=false, so the description carries most of the burden and does establish that this is a mutation with CRM-sourced value constraints. It omits the highest-risk behaviors: that routing replaces the entire rule list, that import_users can email logins (send_welcome), and that mappings merge rather than replace — all of which live only in the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the verb and an enumerated scope list, followed by the prerequisite reads. The first sentence is long and comma-chained but every clause maps to a distinct action branch, so little is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 15-parameter tool with nested objects and no output schema, the description covers purpose, the read-before-write workflow, and where enum-like values originate. It could go further on the action discriminator's partial-update semantics, but nothing essential to invoking it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 a genuine cross-parameter rule not in the schema: values must round-trip in the same shapes returned by get_integrations, and CRM-origin values come from get_crm_options. That is useful guidance beyond per-field documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb (change/update) plus the full set of resources it mutates: settings, field mapping, routing rules, user mapping, primary-CRM flag, and Follow Up Boss imports. An agent can distinguish it from get_integrations or disconnect_integration without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states the prerequisite workflow: read with get_integrations first, send values back in the same shapes, and pull CRM-sourced values from get_crm_options. It does not, however, name the sibling to use for tearing an integration down (disconnect_integration) or state any when-not conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources