Data Platform tools

62 MCP tools backed by the Data Platform endpoints.

These 62 tools call the same endpoints as the Data Platform section of the API Reference. Each tool runs with the permissions of the Whippy user who authorized the connection and the OAuth scopes they granted.

The Behavior column comes from the MCP tool annotations Whippy publishes. Treat these labels as hints, not guarantees: they may omit external effects (for example, a Write tool can send a message to a recipient), and clients are not required to ask for confirmation before running a tool.

Contacts

ToolBehaviorEndpointWhat it does
create_contactDestructivePOST /v1/contactsCreates a contact (or updates the existing one when phone or external_id already exists).
delete_contactDestructiveDELETE /v1/contacts/{id}Archives a contact by ID without permanently deleting the record. Confirm the ID with show_contact or search_contacts first.
filter_contactsRead-onlyPOST /v1/contacts/filterFilters contacts with WQL. Prefer over search_contacts for tags, messages, lists, segments, or custom objects.
list_contact_sequencesRead-onlyPOST /v1/contacts/{id}/sequencesLists the sequences a specific contact is enrolled in (and related run state). Use list_sequences to browse org sequences, or list_sequence_contacts for everyone on one sequence.
merge_contactsDestructive (idempotent)POST /v1/contacts/merge_contactsMerges two contacts into one surviving contact (to); the from contact becomes state merged and unusable.
search_contactsRead-onlyPOST /v1/contacts/searchSearch contacts by name, email, phone, ids, or date ranges.
show_contactRead-onlyGET /v1/contacts/{id}Returns one contact by ID, including notes, communication preferences, and tags.
update_contactDestructivePUT /v1/contacts/{id}Updates fields on an existing contact by ID (name, email, phone, custom data, etc.).
upsert_contactsDestructivePOST /v1/contacts/upsertBulk creates or updates contacts, optionally opting them into channels and associating custom object records.

Custom Events

ToolBehaviorEndpointWhat it does
create_bulk_custom_eventsWritePOST /v1/custom_events/bulkRecords many analytics custom events in one request for metrics dashboards.
create_custom_eventWritePOST /v1/custom_eventsRecords one analytics custom event for metrics. Prefer create_bulk_custom_events for many events. Not for inbox messages (send_sms) or audit logs (search_audit_logs).

Dashboards

ToolBehaviorEndpointWhat it does
create_dashboardWritePOST /v1/dashboardsCreates a dashboard layout referencing saved metric IDs. Build metrics with create_metric / preview_metric first. Built-in metrics belong on built-in dashboards.
delete_dashboardDestructive (idempotent)DELETE /v1/dashboards/{id}Deletes a dashboard (metrics themselves are not deleted). Built-in whippy dashboards cannot be deleted.
list_dashboardsRead-onlyGET /v1/dashboardsLists analytics dashboards (layouts of saved metrics). Prefer list_metrics / create_metric before adding charts to a dashboard.
show_dashboardRead-onlyGET /v1/dashboards/{id}Returns a dashboard definition and runs its metrics over the default timeframe or provided start/end.
update_dashboardDestructivePUT /v1/dashboards/{id}Updates a dashboard (partial). metrics replaces the layout when sent. Built-in whippy dashboards cannot be updated.

Leads

ToolBehaviorEndpointWhat it does
create_leadDestructivePOST /v1/leadsCreates a lead record (inbound lead capture). Prefer create_contact / upsert_contacts for general contact CRUD.

Lists

ToolBehaviorEndpointWhat it does
create_contact_listDestructivePOST /v1/contacts/listsCreates a static contact list. contacts is required — pass contacts: [] for an empty list, or contact objects to seed membership. Add/remove members later with update_contact_list_contacts.
delete_contact_listDestructive (idempotent)DELETE /v1/contacts/lists/{id}Deletes a contact list. Confirm with show_contact_list first.
list_contact_listsRead-onlyGET /v1/contacts/listsLists static contact lists (manual membership), not WQL segments or tags.
show_contact_listRead-onlyGET /v1/contacts/lists/{id}Returns one contact list by ID. Resolve the ID with list_contact_lists first.
update_contact_listDestructive (idempotent)PUT /v1/contacts/lists/{id}Updates list metadata (name/description). To change members, use update_contact_list_contacts.
update_contact_list_contactsDestructivePUT /v1/contacts/lists/{id}/contactsAdds, removes, or overwrites contacts on a static list.

Metrics

ToolBehaviorEndpointWhat it does
create_metricWritePOST /v1/metricsSaves a metric (chart over events). Build with list_metric_events + list_metric_event_fields; try preview_metric first. Built-in whippy metrics cannot be created this way.
delete_metricDestructive (idempotent)DELETE /v1/metrics/{id}Deletes a saved metric and removes it from dashboards. Built-in whippy metrics cannot be deleted.
list_metric_event_fieldsRead-onlyGET /v1/metrics/events/fieldsLists the fields a metric event can filter, group and aggregate by, with what each supports.
list_metric_eventsRead-onlyGET /v1/metrics/eventsLists events a metric can chart (whippy_event, custom_event, non_custom reports) and which chart types each supports. Call before create_metric / preview_metric.
list_metricsRead-onlyGET /v1/metricsLists saved analytics metrics (charts). Prefer preview_metric to try a definition; list_metric_events + list_metric_event_fields to build events.
preview_metricRead-onlyPOST /v1/metrics/previewRuns a metric definition without saving it. Prefer this to validate charts before create_metric. Same event-building rules as create_metric.
show_metricRead-onlyGET /v1/metrics/{id}Runs/returns a saved metric over a time window (start/end or default trailing weeks). Resolve the ID with list_metrics.
update_metricDestructivePUT /v1/metrics/{id}Updates a saved org metric (partial). Built-in (source: whippy) metrics cannot be updated. events replaces as a whole when sent.

Objects

ToolBehaviorEndpointWhat it does
archive_custom_objectDestructivePOST /v1/custom_objects/archiveSoft-archives custom object records matching property filters (does not delete the schema).
create_custom_objectDestructive (idempotent)POST /v1/custom_objectsCreates a custom object schema (type). Add properties with create_custom_property, then create records.
delete_custom_objectDestructiveDELETE /v1/custom_objects/{id}Deletes a custom object schema. Prefer archive_custom_object when soft-archive is intended.
list_custom_objectsRead-onlyGET /v1/custom_objectsLists custom object schemas (types + property definitions) for the organization, including whippy_associations (contact links) and associations (object↔object hops).
update_custom_objectDestructivePUT /v1/custom_objects/{id}Updates a custom object schema's metadata. Property changes use create/update/delete_custom_property.

Preferences

ToolBehaviorEndpointWhat it does
list_communication_preferencesRead-onlyGET /v1/contacts/communication_preferencesLists channel opt-in/opt-out preferences across the organization, optionally filtered by channel. To inspect one contact, use show_contact. To change preferences, use opt_in_communication_preference or opt_out_communication_preference.
opt_in_communication_preferenceDestructivePOST /v1/contacts/communication_preferences/opt_inOpts contacts into one or more channels so they can receive messages. Pair with list_channels for channel IDs. Use opt_out_communication_preference to revoke.
opt_out_communication_preferenceDestructivePOST /v1/contacts/communication_preferences/opt_outOpts contacts out of messaging on specific channels or channel types (stops outbound).

Properties

ToolBehaviorEndpointWhat it does
create_custom_propertyDestructive (idempotent)POST /v1/custom_objects/{custom_object_id}/propertiesAdds a property (field) to a custom object schema. Resolve the object with list_custom_objects first.
delete_custom_propertyDestructiveDELETE /v1/custom_objects/{custom_object_id}/properties/{custom_property_id}Deletes a property from a custom object schema.
list_distinct_custom_object_property_valuesRead-onlyGET /v1/custom_objects/{custom_object_key}/properties/{property_key}/distinct_valuesLists distinct values currently used by records for a custom object property.
update_custom_propertyDestructivePUT /v1/custom_objects/{custom_object_id}/properties/{custom_property_id}Updates a custom object property definition (label, type constraints).

Records

ToolBehaviorEndpointWhat it does
create_custom_object_recordDestructivePOST /v1/custom_objects/{custom_object_id}/recordsCreates one custom object record. Returns 422 when the custom object is defined by an integration. Discover property keys with list_custom_objects and values currently used by records with list_distinct_custom_object_property_values.
delete_custom_object_recordDestructiveDELETE /v1/custom_objects/{custom_object_id}/records/{custom_object_record_id}Deletes one custom object record by ID.
list_custom_object_recordsRead-onlyGET /v1/custom_objects/{custom_object_id}/recordsLists records for a custom object, optionally filtered by associated contact/resource.
search_custom_objectRead-onlyPOST /v1/custom_objects/{custom_data_type_id}/searchSearches records in a Custom Object by property filters.
update_custom_object_recordDestructivePUT /v1/custom_objects/{custom_object_id}/records/{custom_object_record_id}Updates one custom object record by ID.
upsert_custom_object_recordsDestructivePOST /v1/custom_objects/{custom_object_id}/records/upsertBulk creates or updates custom object records. Prefer this over many create_custom_object_record calls.

Segments

ToolBehaviorEndpointWhat it does
create_segmentWrite (idempotent)POST /v1/contacts/segmentsCreates a saved contact segment from a WQL filters payload (same shape as filter_contacts).
delete_segmentDestructive (idempotent)DELETE /v1/contacts/segments/{id}Deletes a contact segment. Confirm with show_segment first.
list_segmentsRead-onlyGET /v1/contacts/segmentsLists saved contact segments (named WQL audiences). Only active segments are returned.
search_segmentsRead-onlyPOST /v1/contacts/segments/searchFinds contact segments using WQL filters on segment metadata. Only active segments. Prefer list_segments for a simple roster; filter_contacts to evaluate an audience without saving a segment.
show_segmentRead-onlyGET /v1/contacts/segments/{id}Returns one segment by ID including its WQL filters. Resolve the ID with list_segments / search_segments.
update_segmentDestructivePUT /v1/contacts/segments/{id}Updates a segment's name, color, or WQL filters. Validate new filters with filter_contacts before saving when possible.

Tags

ToolBehaviorEndpointWhat it does
convert_tagDestructive (idempotent)PUT /v1/tags/{id}/convertConverts a system tag into a standard editable tag for the organization.
create_tagDestructive (idempotent)POST /v1/tagsCreates a contact tag (label). After creating, add contacts with update_tag_contacts, or find tagged contacts with filter_contacts.
delete_tagDestructive (idempotent)DELETE /v1/tags/{id}Deletes a tag. Confirm with show_tag first.
list_tagsRead-onlyGET /v1/tagsLists organization tags (default type standard = contact tags). Use search for a name substring. Resolve tag ids here, then filter_contacts (WQL on resource tag) to find contacts with those tags — search_contacts does not filter by tag.
show_tagRead-onlyGET /v1/tags/{id}Returns one tag by ID. Resolve the ID with list_tags first.
update_tagDestructivePUT /v1/tags/{id}Updates tag metadata (name/color/state). To change which contacts have the tag, use update_tag_contacts.
update_tag_contactsDestructivePUT /v1/tags/{id}/contactsAdds, removes, or overwrites contacts on an active tag (action: add | remove | overwrite). Contacts are matched by phone and may be created/opted in when adding.

Did this page help you?