CDP MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| CDP_PASSWORD | No | Your CDP password for OAuth2 authentication | |
| CDP_USERNAME | No | Your CDP username for OAuth2 authentication | |
| CDP_CLIENT_ID | No | Your CDP client ID for OAuth2 authentication | |
| CDP_TENANT_ID | No | Your CDP tenant ID | |
| CDP_AUTH_TOKEN | No | A static bearer token for authentication (alternative to OAuth2) | |
| CDP_ENVIRONMENT | No | The CDP environment to use (e.g., dev, qa, prod) | |
| CDP_CLIENT_SECRET | No | Your CDP client secret for OAuth2 authentication |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| cdp_list_usersB | List all CDP users for a tenant with pagination; optional search filter |
| cdp_get_userB | Get a specific CDP user by ID |
| cdp_create_userC | Create a new CDP user. Requires userName and password. |
| cdp_update_userC | Update an existing CDP user's details |
| cdp_delete_userC | Delete a CDP user by ID |
| cdp_list_rolesB | List all roles for a CDP tenant. Supports optional search and tenantIds (comma-separated string, e.g. '0,425,802') for multi-tenant queries. |
| cdp_get_roleC | Get a specific role by ID |
| cdp_create_roleC | Create a new role with whitelist/blacklist permissions. Pass whitelist/blacklist as JSON arrays of Permission objects. |
| cdp_update_roleC | Update an existing role. Pass whitelist/blacklist/included as JSON strings. |
| cdp_delete_roleD | Delete a role by ID |
| cdp_list_role_actionsB | List all available permission actions that can be assigned to roles |
| cdp_list_clientsC | List all OAuth clients for a tenant |
| cdp_get_clientB | Get a specific OAuth client by numeric ID |
| cdp_create_clientC | Create a new OAuth client. Requires client_id_str, client_secret, grants, and token_validity. |
| cdp_update_clientC | Update an existing OAuth client |
| cdp_delete_clientC | Delete an OAuth client by numeric ID |
| cdp_list_users_liteC | List all users in lightweight format (fewer fields, faster response) |
| cdp_get_user_liteB | Get a specific user in lightweight format by ID |
| cdp_list_selfservice_rolesB | List available self-service roles for a tenant |
| cdp_list_selfservice_usersB | List all self-service users for a tenant |
| cdp_get_selfservice_userB | Get a specific self-service user by ID |
| cdp_create_selfservice_userC | Create a new self-service user. Pass user details as a JSON string. |
| cdp_update_selfservice_userC | Update a self-service user. Pass updated fields as a JSON string. |
| cdp_delete_selfservice_userC | Delete a self-service user by ID |
| cdp_update_selfservice_user_statusC | Update a self-service user's status (e.g., activate/deactivate). Pass action and body as JSON string. |
| cdp_list_entitiesC | Query entities from a CDP data warehouse resource (e.g., customer, organization, transaction). Supports filtering via fq parameter. |
| cdp_get_entityC | Get a single entity by its resource name and ID |
| cdp_create_entityC | Create a new entity in a DW resource. Pass entity data as a JSON string. |
| cdp_update_entityC | Update an existing entity in a DW resource. Pass updated fields as a JSON string. |
| cdp_lookup_valuesC | Lookup distinct values for a field in a DW entity resource. Requires the field name to look up. Pass lookup request as JSON string. |
| cdp_get_customer_360C | Get Customer 360 summary view for a resource type (e.g., list of customer profiles) |
| cdp_get_customer_360_detailC | Get detailed Customer 360 profile for a specific customer |
| cdp_get_customer_360_realtimeC | Get real-time Customer 360 data (includes latest streaming events) |
| cdp_get_customer_identitiesC | Get all identities associated with given customer IDs. Pass customer IDs as a JSON string body. |
| cdp_get_audience_countC | Get audience count based on a segment definition (synchronous). Pass segment definition as a JSON string. |
| cdp_calculate_audienceA | Start an asynchronous audience count calculation. Returns a jobId to poll with cdp_get_calculated_count. Pass segment definition as a JSON string. |
| cdp_get_calculated_countB | Get the result of an async audience calculation (poll after cdp_calculate_audience) |
| cdp_post_tracking_eventA | Post a real-time tracking event to the CDP (POST /{apiVersion}/{tenantId}/dw/tracker). api_version is a routable path segment — defaults to 'v2' but the controller accepts any version clients want to pin. Pass event data as a JSON string with eventType, identityHash, properties. |
| cdp_update_customer_profileC | Update customer profile attributes in real-time (POST /v2/{tenantId}/dw/profile). Pass profile update data as a JSON string. |
| cdp_request_data_erasureC | Request GDPR/CCPA data erasure for a customer (by identityHash or email). Pass erasure request as a JSON string. |
| cdp_delete_data_erasure_requestC | Cancel/delete a pending data erasure request |
| cdp_update_data_erasure_requestC | Update an existing data erasure request (PUT /dw/dataerasure). Pass the updated erasure request body as a JSON string. |
| cdp_data_erasure_status_overrideC | Admin-only: override the status of a data erasure request (POST /dw/dataerasure/admin?action=statusoverride). Pass override payload as JSON string. |
| cdp_get_data_erasure_statusC | List all data erasure request statuses for a tenant |
| cdp_get_data_erasure_status_by_idC | Get the status of a specific data erasure request by resource ID |
| cdp_get_offers | Retrieve available offers for a customer or segment. Pass offer request as a JSON string. |
| cdp_describe_resources | List all available DW resources (tables/entities) for a tenant |
| cdp_describe_entity | Get the schema/attribute definitions for a DW entity resource |
| cdp_dw_fetch_report | Fetch cached report results via the DW API path |
| cdp_dw_execute_report | Execute a report in real-time via the DW API path. Pass report definition as a JSON string. |
| cdp_purge_data | Purge customer data from the data warehouse. Pass purge request as a JSON string with customerIds, purgeReason, and optional purgeTypes. |
| cdp_get_campaign_output_attributes | Get the output attribute columns for a campaign definition. Pass campaign definition as a JSON string. |
| cdp_refresh_rtmeta | Refresh the real-time metadata switch values. Must be called with tenantId=0. |
| cdp_list_campaignsC | List all campaign definitions for a tenant. Returns paged results. |
| cdp_get_campaignB | Get a specific campaign definition by ID |
| cdp_create_campaignA | Create a new campaign definition. Recommended workflow: call with name+description ONLY to get a resourceId, then call cdp_update_campaign with the full body containing INLINE 'audience' and INLINE 'messageDefs' objects. Do NOT reference an existing messageDef by resourceId — shared messageDefs are rejected with E0420. See resource cdp://docs/campaign-playbook for the full body template, operator enum, and time-window math. Pass folder_id to place the campaign under a specific Campaign folder (the UI always does this). Omit it to let the backend default to the tenant's root folder. |
| cdp_update_campaignB | Update an existing campaign definition. Pass updated fields as a JSON string. Pass folder_id to move the campaign into a specific folder (matches UI save behaviour, which always sends ?folderId=...). |
| cdp_delete_campaignC | Delete a campaign definition by ID |
| cdp_clone_campaignC | Clone/copy a campaign definition by ID. Creates a duplicate. |
| cdp_start_campaignA | Execute/run a campaign immediately ('send now'). Requires entity_id (the campaign def resourceId). Set cohort=True for cohort campaigns. An empty |
| cdp_publish_web_campaignA | Publish a triggered/web campaign via the CAMPAIGN_FLOW_DEFAULT workflow. This is the correct action for real-time/triggered campaigns (web, API, journey) — cdp_start_campaign only works for batch 'send now' runs. Mirrors what the Vega UI does when you click 'Publish' on a web campaign. |
| cdp_stop_campaignC | Stop/kill a running campaign by ID. Sends a workflow kill signal. |
| cdp_copy_datasetdefA | Copy an existing datasetDef (audience definition) to create a new, independent one. CDP rejects shared datasetDefs across campaigns with E400: 'The campaignDef being created refers to an existing datasetDef. Please correct this by calling /v2/{tenantId}/datasetDef/{id}?action=copy'. Use this tool to produce a detached copy, then embed the returned object inline in your new campaign's |
| cdp_list_dispatchesC | List dispatch definitions for a campaign |
| cdp_get_dispatchC | Get a specific dispatch definition by ID |
| cdp_create_dispatchC | Create a dispatch definition for a campaign. Pass dispatch definition as a JSON string. |
| cdp_update_dispatchC | Update a dispatch definition. Pass updated fields as a JSON string. |
| cdp_delete_dispatchC | Delete a dispatch definition |
| cdp_list_campaign_runsB | List execution history (dataset descriptions) for a campaign definition. Requires defId and defType (e.g. DATASET_DEF). Returns paged results. |
| cdp_get_campaign_runC | Get details of a specific campaign execution (dataset description) by ID |
| cdp_get_run_dispatchesB | Get the latest execution status for a campaign definition. Requires defId and defType. Optionally include step details. |
| cdp_list_audience_defsB | List audience definitions for a tenant. Returns paged results. |
| cdp_get_audience_defB | Get a specific audience definition by ID |
| cdp_create_audience_defA | Create a new audience definition. WARNING: the underlying endpoint POST /campaign/audienceDefs is NOT supported on current CDP builds and will return E400 'Request method POST is not supported'. Instead, define the audience INLINE on a campaign via cdp_create_campaign + cdp_update_campaign. See resource cdp://docs/campaign-playbook. |
| cdp_update_audience_defC | Update an existing audience definition. Pass updated fields as a JSON string. |
| cdp_delete_audience_defC | Delete an audience definition |
| cdp_execute_audience_defC | Execute/calculate an audience definition. Triggers the audience calculation workflow. |
| cdp_lookup_audience_defsC | Lookup audiences by name. Returns matching audience definitions with optional offset/limit. |
| cdp_list_campaign_templatesB | List available campaign templates. Requires type parameter (e.g. PLAYBOOK, MESSAGE, AUDIENCE). |
| cdp_create_campaign_templateC | Create a new campaign template. Pass template type and entityId along with tenant list as JSON body. |
| cdp_list_message_defsC | List message definitions for a tenant. Returns paged results. |
| cdp_get_message_defC | Get a specific message definition by ID |
| cdp_create_message_defA | Create standalone message definitions. Pass as a JSON string list. WARNING: standalone messageDefs created here CANNOT be referenced from a campaign by resourceId — the server rejects shared references with E0420. For campaign-bound emails, instead put the messageDef object INLINE in the campaign's 'messageDefs' array via cdp_update_campaign. Only use this tool for message templates that are independently managed. |
| cdp_update_message_defC | Update a message definition by ID. Pass updated fields as a JSON string. |
| cdp_delete_message_defB | Delete a message definition by ID |
| cdp_list_data_exportsC | List all data export definitions for a tenant. |
| cdp_get_data_exportC | Get a specific data export definition by ID. |
| cdp_create_data_exportB | Create a new data export definition. Body must be a JSON STRING containing at least |
| cdp_update_data_exportC | Update an existing data export definition. Pass updated fields as a JSON string. folder_id moves the export between folders. |
| cdp_delete_data_exportB | Delete a data export definition by ID. |
| cdp_copy_data_exportC | Copy/duplicate a data export definition by ID. |
| cdp_run_data_exportB | Execute a data export immediately via the DATA_EXPORT_DEFAULT workflow. Equivalent to clicking 'Send Now' in the Vega Data Export UI. Sends body |
| cdp_list_dataset_defsB | List datasetDefs (raw audience definitions) for a tenant. Useful for discovering shared definitions before calling cdp_copy_datasetdef. |
| cdp_get_dataset_defC | Get a specific datasetDef by ID. |
| cdp_list_tenantsC | List all tenants accessible to the current user |
| cdp_get_tenantB | Get details of a specific tenant by ID. Tenant IDs are strings — may be numeric, a GUID, or a slug. |
| cdp_list_workflowsC | List workflows for a tenant |
| cdp_get_workflowC | Get a specific workflow by ID. Optionally specify a version. |
| cdp_run_workflowA | Trigger a workflow execution. Optionally provide entityType/entityId for scoped runs, or scheduleId for scheduled runs. |
| cdp_deploy_workflowC | Deploy a workflow (make it active) |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| campaign-playbook | Authoritative playbook for creating campaigns, audiences, and message definitions on CDP. Consult before calling cdp_create_campaign, cdp_update_campaign, cdp_create_message_def, cdp_create_audience_def, cdp_get_audience_count, or cdp_score_spam. Covers the inline-ownership rule, operator enum, time-window math, EXCLUDE behavior pattern, and body-as-JSON-string convention. |
| orchestration-playbook | Multi-step orchestration recipes the MCP cannot infer on its own: generic schedule lifecycle (create row + arm runner workflow + poll), connector publish/schedule/unschedule, report & data-export send-now and scheduled runs, sQueryDef generate-then-validate, provisioning via PROVISIONER_TOOL_DEFAULT, compaction, and the universal drain-before-delete rule. Consult before any action that touches config/schedules, config/workflows/{name}?action=..., or runner workflows (AIF_RUNNER, REPORT_RUNNNER_DEFAULT, DATA_EXPORT_DEFAULT, CAMPAIGN_FLOW_DEFAULT, CONNECTOR_OPS_DEFAULT). |
| customer360-playbook | Authoritative flow for customer-360 retrieval, rendering, search, and identity purge. Covers the three parallel fetches a profile page requires (dw/a360/customers + UDMPTables + tenant 360 layout properties), the layout deep-merge rules, realtime polling, targetentity-based pagination, `fq` advanced-search encoding, and GDPR purge polling. Consult before calling cdp_get_customer_360*, cdp_request_data_erasure, or cdp_list_a360_rules. |
| admin-ops-playbook | Admin and data-governance orchestration: DQE rule batches with dry-run-via-compaction, A360 rule three-phase saves, compaction lifecycle, status-page job control (rerun/kill/suspend/resume), GDPR erasure polling and override, provisioner package runs, content-model bulk template provisioning, user/role onboarding, and the universal drain-before-delete rule. Consult before any destructive multi-entity action. |
| reports-dashboards-playbook | Authoritative flow for report definitions, cube (OLAP) reports, SQL-query reports, and dashboards. Covers the array-wrap POST contract ([reportDef] / [dashboard]), the REPORT_RUNNNER_DEFAULT (triple-N) send-now workflow, the ?folderId= requirement, cube metadata walk (cubemetadata → dimensions → hierarchies → levels), ad-hoc vs cached execution (?action=execute vs ?action=fetch), the BI_MAPPER_DEFAULT + A1_ORCHESTRATOR dual freshness check, dashboard uiProperties JSON-string layout serialization, and sQueryDef argument validation. Consult before calling cdp_create_report_def, cdp_create_dashboard, cdp_execute_report, cdp_fetch_report_data, or cdp_get_cube_status. |
| workflow-authoring-playbook | Authoritative flow for authoring, modifying, deploying, and invoking configAPI workflows. Covers the symbolic workflowId vs numeric workflowDBId trap (URL segment vs entityId query param), the three parallel GETs required to materialize a workflow graph (workflows/{id} + /workflowSteps + /workflowEdges), versioning rules (query-string-only on deploy/delete), batch step POST/PUT vs per-script POST/PUT/DELETE for mapping scripts, full create→deploy sequence, invocation verb taxonomy (run/deploy/schedule/unschedule/activate_schedule/rerun/kill/publish), and the drain-before-delete rule. Consult before any cdp_create_workflow, cdp_update_workflow, cdp_delete_workflow, cdp_run_workflow, or cdp_invoke_workflow_action call. |
| connector-wizard-playbook | Authoritative flow for connector CRUD, publish, schedule, and unschedule. Covers input vs output endpoint swap (connectors vs outputConnectors), the 4-or-5-step wizard with ssidPrefix-based branching (inputConnectorsToSkip / intervalConnectors), the create → CONNECTOR_OPS_DEFAULT?action=publish two-step, the 3-step schedule orchestration (GET AIF_RUNNER id → POST schedules → POST AIF_RUNNER?action=schedule) with the referenceId vs entityId trap, the reverse 2-step unschedule-then-delete, the [entity, [columns]] mapping tuple shape, parameter completion and dateStarted requirements. Consult before any cdp_create_connector, cdp_publish_connector, or connector-schedule call. |
| udmp-metadata-playbook | Authoritative flow for UDMP tables/columns, column validators, mapping templates, content-model templates, and tenant properties. Covers the nested {columns: {content: []}} read shape vs flat {columns: []} write shape, parallel POST/PUT/DELETE batch saveResources (non-transactional), the UDMPTables → UDMPResources cascade, schema publish ordering (pause consumers first), custom-attribute whitelist gating via summaryEntity.customAttribute.whitelist, idempotent PUT for tableoverrides, the unusual PUT templates/provision?action=update contract for content models, and the customer360 / default.360.layout vs tenant.360.layout protection rule. Consult before modifying UDMP tables, column validators, templates, or tenant properties. |
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/atharva-joshi77/cdp-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server