
Get a phone call by UID. Returns direction, duration, status, voicemail flag, phone numbers, and the associated conversation UID. Requires the read_phones scope; a 403 here means the account was linked before that scope was granted and must be re-authorized, not that the UID is invalid.
List all campaigns with optional status filtering. Returns campaigns sorted by updatedAt in descending order. Filter by status: ACTIVE, COMPLETED, DRAFT, ERROR, INACTIVE, IN_PROGRESS, SCHEDULED, STOPPED, SUSPENDED, ARCHIVED.
Get a campaign by UID. Returns detailed campaign information including name, message, status, locations, and timestamps. Use list_campaigns to find campaign UIDs.
Create a new automated campaign. Requires name, status (ACTIVE, DRAFT, etc.), and list of location UIDs. Optionally include message text and conversation settings. Use list_locations to find location UIDs.
Update an existing campaign. Supply only the fields to change; at least one updatable field is required. Use getcampaign to retrieve current settings first. Use listcampaigns to find campaign UIDs.
Delete a campaign by UID. This action cannot be undone. Use get_campaign first to verify you have the correct campaign before deleting.
Send a message through a campaign to a specific subscriber. Requires campaign UID and channel identifier (email or phone number). Use get_campaign to verify campaign status before sending messages.
List contact attributes tied to the owner resource on the token, with cursor pagination. Use cursor from page_info for the next page.
Get an application or organization-level contact attribute by UID. Returns the label, data type, encryption flag, and owner. Use listcontactattributes to find attribute UIDs.
List all contact tags for the organization with cursor pagination. Use cursor from page_info for the next page.
Get an organization-level contact tag by UID. Returns the tag label, description, and organization. Use listcontacttags to find tag UIDs.
List contacts with cursor pagination. Use cursor from page_info for next page.
Get a contact by email or phone number. Use list_contacts to find valid identifiers.
Create a new contact with email and/or phone. At least one of email or phone is required. Upserts if contact exists.
Delete a contact by email or phone number. Cannot be undone.
List conversations with cursor pagination. Filter by location, order by last activity (use asc when polling), and use since to return only conversations active at or after a timestamp. When a cursor is passed, all other filters are ignored. Follow pageinfo cursor until hasnext_page is false.
Get a conversation by UID. Returns channel, contact name, assignees, closed status, and activity timestamps. Use list_conversations to find conversation UIDs.
Get messages from a conversation with cursor pagination. Order by publish date (use asc when polling) and filter with since to return only messages published at or after a timestamp. When a cursor is passed, order and since are ignored. Follow pageinfo cursor until hasnext_page is false.
Get a single message from a conversation by conversation UID and message UID. Returns the message body, items (text and attachments), channel, and delivery details. Use getconversationmessages to find message UIDs.
Update assignees for a conversation. Use list_users to find valid user UIDs.
List locations with cursor pagination and search. Supports filtering by search term, fields, and updated timestamp. Use cursor from page_info for next page.
Get a location by UID. Returns detailed location information including name, address, phone numbers, and timestamps. Use list_locations to find location UIDs.
Send an SMS or email message to a contact. Specify recipient and message type. Use list_locations to find valid location UIDs.
List users with cursor pagination. Use cursor from page_info for next page.
Validate Podium credentials. Verifies credentials during setup.
List all webhooks configured for the account. Use cursor from page_info for next page.
Get a webhook by UID. Use list_webhooks to find valid UIDs.
Create a webhook for event notifications. Requires locationuid or organizationuid. Specify target URL and event types.
Update an existing webhook configuration.
Delete a webhook by UID. Cannot be undone.

In an mcp.json file, add the configuration below, and restart Cursor.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "url": "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
5 "headers": {
6 "Authorization": "Bearer yMt*****"
7 }
8 }
9 }
10}
11Open your Claude Desktop configuration file and add the server configuration below. You'll also need to restart the application for the changes to take effect.
Make sure Claude is using the Node v20+.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "command": "npx",
5 "args": [
6 "-y",
7 "mcp-remote@latest",
8 "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
9 "--header",
10 "Authorization: Bearer ${AUTH_TOKEN}"
11 ],
12 "env": {
13 "AUTH_TOKEN": "yMt*****"
14 }
15 }
16 }
17}Open your Windsurf MCP configuration file and add the server configuration below.
Click on the refresh button in the top right of the Manage MCP server page or in the top right of the chat box in the box icon.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "command": "npx",
5 "args": [
6 "-y",
7 "mcp-remote@latest",
8 "https://ah-api.merge.dev/api/v1/tool-packs/<tool-pack-id>/registered-users/<registered-user-id>/mcp",
9 "--header",
10 "Authorization: Bearer ${AUTH_TOKEN}"
11 ],
12 "env": {
13 "AUTH_TOKEN": "<ah-production-access-key>"
14 }
15 }
16 }
17 }In Command Palette (Cmd+Shift+P on macOS, Ctrl+Shift+P on Windows), run "MCP: Open User Configuration".
You can then add the configuration below and press "start" right under servers. Enter the auth token when prompted.
Learn more in the official documentation ↗
1{
2 "inputs": [
3 {
4 "type": "promptString",
5 "id": "agent-handler-auth",
6 "description": "Agent Handler AUTH_TOKEN", // "yMt*****" when prompt
7 "password": true
8 }
9 ],
10 "servers": {
11 "agent-handler": {
12 "type": "stdio",
13 "command": "npx",
14 "args": [
15 "-y",
16 "mcp-remote@latest",
17 "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
18 "--header",
19 "Authorization: Bearer ${input:agent-handler-auth}"
20 ]
21 }
22 }
23}It's an MCP server that lets your agents access data and functionality from Podium via tools. Your agents can invoke these tools to send a text message to a customer, look up a conversation thread, create or update a contact record, launch a messaging campaign, and more.
Podium doesn't offer an MCP server purpose built for Podium, but you can use one from a third-party platform, like Merge Agent Handler.
The use cases naturally depend on the agent you've built, but here are a few common ones:
Here are some of the most commonly used tools:
send_message: sends an SMS or email message to a contact through Podium. Call this when an agent needs to reach a customer directly, like a missed-call text-back or a payment reminderget_conversation_messages: retrieves the message history for a given conversation. Useful for agents that need context on prior exchanges before drafting a replycreate_contact: adds a new contact to Podium, or upserts if one already exists for that email or phone number. Good for workflows that sync leads or customers in from another systemget_contact: looks up an existing contact by email or phone. Helpful when an agent needs to confirm a customer already exists before sending a messagecreate_campaign: sets up a new automated messaging campaign. Use this when an agent needs to kick off a batch outreach, like a round of review requestsupdate_conversation_assignees: changes who's assigned to a conversation. Call this when an agent is routing an inbound thread to the right person or teamThere are several reasons to use Merge Agent Handler's Podium MCP server over building or using an alternative:
You can take the following steps:
1. Create or log into your Merge Agent Handler account.
2. Install the Merge CLI by running pipx install merge-api, then run merge configure to link the CLI to your Merge account and merge login to authenticate your session.
3. Register the Agent Handler MCP server with Claude Code by running claude mcp add --transport http agent-handler https://ah-api.merge.dev/mcp, then open Claude Code and run /mcp to confirm agent-handler appears with a connected status.
4. Select agent-handler from the MCP list. This opens a browser window where you select which integrations to authenticate. Choose Podium and complete the auth flow. Merge stores and manages the credentials going forward.
5. Open a Claude Code session and start querying Podium data directly. The first time you use a Podium tool, a Magic Link may appear to complete connector authentication.
If you want to connect Merge Agent Handler's Podium MCP with internal or customer-facing agentic products, you can follow the steps in our docs.
Yes, Merge for Workforce lets your employees connect Claude, ChatGPT, Microsoft Copilot, Cursor, and other MCP-compatible AI tools to Podium without bypassing IT governance.
IT can provision access by role or group via SCIM. A front desk coordinator, for example, gets Podium access to send appointment reminders, Google Calendar access to check availability, and Slack access to flag urgent customer messages; while a marketing manager gets Podium access to launch review request campaigns, HubSpot access to sync contact records, and Google Sheets access to track campaign performance.
Every tool call an employee's AI makes to Podium is also inspected against your DLP rules and logged to a searchable audit trail, giving security teams full visibility into what data was accessed and by whom.
Whether you're an engineer experimenting with agents or a product manager looking to add tools, you can get started for free now