# Podium MCP connector

The Podium connector brings your Podium contacts, appointments, campaigns, locations and users to Claude, ChatGPT, Cursor and any MCP client, so your team can look up customers, book appointments and set up campaigns from a chat, inside each person's own Podium access.

Source: https://elaichi.ai/connectors/podium/

## Facts

| | |
| --- | --- |
| Application | Podium |
| Category | Helpdesk |
| AI tools | 85 |
| Authentication | Connects over OAuth |
| Needs your own OAuth app | Yes |
| MCP endpoint | https://api.elaichi.ai/mcp |
| Works with | Claude, ChatGPT, Cursor, any MCP client, and the Elaichi Agent |
| Tools advertised by name | No. 85 tools is past the 30-tool threshold, so clients use `search_tools` and `execute_tool` |

## What you can ask once Podium is connected

- List Podium campaigns launched at our Denver location this month
- Which Podium contacts have appointments booked next week
- Compare appointment volume across all Podium locations this quarter

## Connect Podium in Elaichi

This happens once for the organization, before any client is involved.

1. Open Connections, choose Add connection, and pick Podium.
2. Optionally set Share with, then press Connect.
3. Supply your own Podium app, then approve. Podium needs an OAuth app you register yourself, so bring its client ID and secret. One person does this once for the organization.

Credentials are vaulted and nobody, including the AI, reads them back. The connection becomes a toolbox immediately, so you can curate which Podium tools are exposed, rename them, or freeze arguments before anyone points a client at it.

## Connect Podium to Claude

Endpoint: https://api.elaichi.ai/mcp

1. Open Customize, then Connectors.
2. Press Add.
3. Name it, paste the MCP server URL, then Continue.
4. Sign in and approve.

On Team and Enterprise, an Owner adds it once. Everyone else turns it on for themselves.

## Connect Podium to ChatGPT

Endpoint: https://api.elaichi.ai/mcp

1. Open Plugins, then press the + button.
2. Name it and paste the endpoint into Server URL.
3. Leave Authentication on OAuth, then tick the risk acknowledgement.
4. Press Create, then sign in and approve.

Works on the web today. The plugin directory lives at chatgpt.com/plugins.

## Connect Podium to Cursor

Endpoint: https://api.elaichi.ai/mcp

1. Open `~/.cursor/mcp.json`.
2. Add the endpoint under `mcpServers`.
3. Reload Cursor, then sign in and approve.

Set up per machine, so repeat it on each computer you work from.

## Connect Podium to any MCP client

Endpoint: https://api.elaichi.ai/mcp

1. Add the endpoint as a remote MCP server.
2. Sign in and approve.

The Elaichi Agent already has these tools, with nothing to set up.

## What the consent screen decides

Only Read is granted by default, which is not enough to call a Podium tool. Over MCP there is no trusted place to confirm a write in the moment, so the consent screen is the standing approval rather than a formality. Grant Read and Run tools. Think hard before granting Delete, which reaches into connected apps and cannot be undone.

## What teams do with Podium through Elaichi

### Book the appointment while the caller waits

Front desk. Add the new customer to Podium and create their appointment at the right location in one ask, without switching screens mid-call.

### Know who is texting before you reply

Support. Pull up a customer's Podium contact record, their tags and their custom attributes so the reply fits the person and their history.

### Set up the next text campaign

Marketing. Create a Podium campaign, adjust its details, and review the list of campaigns already running at each location before anything goes out.

### Tag leads so the right rep follows up

Sales. Create a Podium contact tag for a new promotion or lead source and add the day's new leads as contacts already carrying that tag.

### Keep location details current across every branch

Operations. Update a Podium location's hours, address or contact details when a branch changes, and check all locations read consistently afterward.

### See who has a seat at each location

Management. List Podium users and locations to check that new hires appear at the right branch and that departed staff no longer hold a login.

## Frequently asked questions

### How do I connect Podium to Claude?

Connecting Podium to Claude takes two steps. First, connect Podium in Elaichi: this connector uses an OAuth application you register inside your own Podium account, so the first person to connect pastes in that client ID and secret once, and after that everyone else simply signs in with their own Podium login. Then in Claude open Customize, then Connectors, then Add, and paste https://api.elaichi.ai/mcp as the endpoint.

### Does Podium work with ChatGPT and Cursor as well as Claude?

Yes. Once Podium is connected in Elaichi, the same endpoint, https://api.elaichi.ai/mcp, works in Claude, ChatGPT, Cursor, any other MCP client and the Elaichi Agent. You connect Podium once and every client your team uses picks it up.

### What can an AI agent actually do with my Podium data?

With Podium connected, an agent can look up a contact and see their tags and custom attributes, add a new contact, create an appointment at a location, and list, create, update or delete text campaigns. It can also create and update contact tags and attributes, update a location's details, and list the users and locations in your Podium organization. Short, specific asks such as "book Maria Lopez for Tuesday at the downtown location" work better than long paragraphs.

### Does connecting Podium give the AI every location and every contact?

No. Every request to Podium runs as the person who signed in, so an agent sees only the Podium locations, contacts and campaigns that person can already reach in Podium itself. Elaichi can narrow that further, for example to read-only or to a single team's toolbox, but it can never grant more than the person's own Podium access.

### Can my team share one Podium connection?

Yes. One administrator registers the OAuth application in Podium and connects it in Elaichi, then shares that connection with a team, so nobody else ever handles the client ID or secret. Each teammate still signs in to Podium as themselves, so every appointment booked or campaign created in the audit log is tied to the person who did it.

### Can I stop an agent from deleting or changing things in Podium?

Yes. Restrictions in Elaichi apply per action, so you can allow looking up Podium contacts and booking appointments while blocking deleting campaigns, deleting contact attributes or editing location details. A blocked action is never shown to Claude, ChatGPT or any other client at all, so no prompt, however worded, can reach it.

### What happens to a Podium connection when someone leaves?

When you offboard a person in Elaichi, their access to Podium through every AI client ends immediately, and a shared Podium connection keeps working for everyone else on the team. If you ever want to remove Podium entirely, disconnecting it once in Elaichi removes it from Claude, ChatGPT, Cursor and every other client at the same time.

## All 85 Podium tools

Every tool below is callable through https://api.elaichi.ai/mcp once Podium is connected, subject to the toolbox it is in and the restrictions on the caller.

- **List all Podium users** (List). List all users in Podium. Returns archived, createdAt, email, firstName, lastName, locations, phone, role, uid, and updatedAt fields for each user. Only users belonging to accessible locations are returned.
- **Get single Podium user by ID** (Get). Get a user in Podium. Requires id. Returns archived status, createdAt, email, firstName, lastName, assigned locations, phone, role, uid, and updatedAt fields in the response.
- **Get single Podium organization by ID** (Get). Get an organization in Podium by id. Returns archived, businessName, createdAt, uid, and updatedAt fields in the response.
- **List all Podium locations** (List). List all locations in Podium. Returns addressDetails (city, country, state, postalCode), archive status, createdAt, displayName, name, organizationUid, phoneNumber, podiumPhoneNumber, uid, updatedAt for each location.
- **Get single Podium location by ID** (Get). Get a specific location in Podium using id. Returns fields such as uid, displayName, addressDetails, phoneNumber, podiumPhoneNumber, organizationUid, archived, archivedAt, createdAt, and updatedAt in the response.
- **Update a Podium location by ID** (Update). Update a location in Podium. Requires id. Returns addressDetails, displayName, name, phoneNumber, podiumPhoneNumber, archived, createdAt, updatedAt, archivedAt, organizationUid, and uid. Address must follow ISO convention.
- **Create a Podium appointment** (Create). Create an appointment in Podium. Requires contactName, contactPhoneNumber, datetime, and locationUid. Returns fields such as uid (appointment identifier), assignedUser, status, type, note, and createdAt in the response.
- **List all Podium campaigns** (List). List all automated campaigns in Podium. Returns createdAt, updatedAt, endedAt, startedAt, name, message, status, uid, organization, and locations for each campaign. Campaigns are sorted by updatedAt in descending order.
- **Get single Podium campaign by ID** (Get). Get a specific campaign in Podium by id. Returns fields including uid, name, status, createdAt, updatedAt, startedAt, endedAt, message, organization, and locations.
- **Create a Podium campaign** (Create). Create a campaign in Podium. Requires locations, name, and status. Returns uid (campaign identifier), createdAt, startedAt, endedAt, updatedAt (timestamps), status, message, name, organization, and locations for the created campaign.
- **Update a Podium campaign by ID** (Update). Update a campaign in Podium. Requires id. Returns campaign fields including uid, name, status, message, locations, organization, createdAt, updatedAt, startedAt, and endedAt.
- **Delete a Podium campaign by ID** (Delete). Delete a campaign in Podium. Requires id. Returns fields including uid, name, status, organization, message, locations, createdAt, updatedAt, startedAt, endedAt. The response contains all campaign fields.
- **List all Podium contact attributes** (List). List contact attributes in Podium tied to the ownerResource on the token. Returns uid, label, dataType, isEncrypted, createdAt, updatedAt, and ownerResource for each attribute.
- **Get single Podium contact attribute by ID** (Get). Get a contact attribute in Podium by id. Returns fields: uid (Podium unique identifier), label (attribute label), dataType (attribute value type), isEncrypted (encryption status), ownerResource (resource owner info), createdAt, and updatedAt.
- **Create a Podium contact attribute** (Create). Create a contact attribute in Podium. Requires dataType, label, and ownerResourceType. Returns uid, label, dataType, isEncrypted, ownerResource, createdAt, and updatedAt fields in the response.
- **Update a Podium contact attribute by ID** (Update). Update a contact attribute in Podium using id. Returns createdAt, dataType, isEncrypted, label, ownerResource, uid, and updatedAt fields in the response. Requires id.
- **Delete a Podium contact attribute by ID** (Delete). Delete a contact attribute in Podium by id. Returns uid, label, dataType, isEncrypted, ownerResource, createdAt, and updatedAt fields in the response.
- **List all Podium contact tags** (List). List all contact-tags in Podium. Returns uid, label, description, createdAt, updatedAt, and organization for each tag.
- **Get single Podium contact tag by ID** (Get). Get a contact tag in Podium for an organization using id. Returns uid, label, description, organization.uid, createdAt, and updatedAt fields in the response.
- **Create a Podium contact tag** (Create). Create a contact tag in Podium. Requires label and description. Returns uid (tag identifier), label, description, organization reference, createdAt, and updatedAt for the tag in the response.
- **Update a Podium contact tag by ID** (Update). Update a contact tag in Podium. Requires id. Returns uid, label, description, createdAt, updatedAt, and organization fields in the response.
- **List all Podium contacts** (List). List all contacts in Podium. Returns each contact's uid, name, address, channels, emails, phoneNumbers, tags, attributes, conversations, locations, organization, createdAt, and updatedAt fields in the response.
- **Create a Podium contact** (Create). Create a contact. If a contact with the same phone number, email, or conversation uid is found it will update the contact. Requires locations and name. Returns the identifier of the created contact in the response.
- **Get single Podium contact by ID** (Get). Get a contact in Podium using id, which can be a conversation uid, an email address, or a phone number. Returns fields such as uid, name, address, emails, phoneNumbers, channels, attributes, tags, conversations, locations, organization, createdAt, and updatedAt in the response.
- **Update a Podium contact by ID** (Update). Update a contact in Podium using id (conversation uid, email, or phone number). Returns identifier of the updated contact in the response.
- **Delete a Podium contact by ID** (Delete). Delete a contact in Podium using id (conversation uid, email, or phone number). Returns identifier field to confirm deletion.
- **Podium contacts opt out** (Action). Opt out a contact from receiving campaign messages in Podium. Requires the channel.identifier and channel.type parameters. Returns contact fields such as uid, name, channels, phoneNumbers, emails, attributes, tags, address, conversations, createdAt, updatedAt, organization, and locations. Application must be whitelisted.
- **Podium contacts remove attribute** (Delete). Remove an attribute from a contact in Podium. Requires contact_id and uid. Returns identifier of the contact whose attribute was removed.
- **Podium contacts update contact attribute** (Update). Update a contact attribute in Podium using contact_id and uid. Returns identifier indicating the contact whose attribute was updated.
- **Podium contacts add attribute** (Add). Add an existing attribute to a contact in Podium. Requires contact_id and uid. Returns identifier to retrieve the contact in the response.
- **Podium contacts remove tag** (Delete). Remove an existing tag from an existing contact in Podium. Requires contact_id and uid. Returns identifier field representing the contact's identifier in the response.
- **Podium contacts add tag** (Add). Add an existing tag to an existing contact in Podium. Requires contact_id and uid. Returns identifier indicating the contact the tag was added to.
- **List all Podium conversations** (List). List all conversations in Podium. Returns assignedUserUid, channel (identifier and type), closed status, contactName, createdAt, lastItemAt, locationUid, uid, and updatedAt for each conversation. If cursor is used, other parameters are ignored.
- **Get single Podium conversation by ID** (Get). Get a conversation in Podium by id. Returns assignedUserUid, channel details, closed status, contactName, createdAt, lastItemAt, locationUid, uid, and updatedAt fields in the response.
- **Update a Podium conversation by ID** (Update). Update a conversation in Podium using id. Returns assignedUserUid, channel, closed, contactName, createdAt, lastItemAt, locationUid, uid, and updatedAt fields in the response. id is required.
- **Podium conversations writeback lead** (Action). Writeback lead to the connected CRM in Podium. Requires conversation_id. Returns conversation (with uid) in the response. No other identifiers are assigned by Podium.
- **Podium conversations create note** (Create). Create a note for a specific conversation in Podium. Requires conversation_id. Returns uid of the note, body, senderName, createdAt, updatedAt, and related organization, location, conversation objects.
- **List all Podium conversation assignees** (List). Get conversation assignees in Podium. Requires conversation_id. Returns assignedUserUid, assigneeType, assigneeUid, and assignees (list of assignee user uids) in the response.
- **Update a Podium conversation assignee by ID** (Update). Update conversation-assignees in Podium for a specific conversation using conversation_id. Returns assignedUserUid, assigneeType, assigneeUid, and assignees for the updated conversation.
- **Delete a Podium SCIM user by ID** (Delete). Delete a SCIM user resource in Podium. Requires id (provided as email). A successful response returns no content.
- **Update a Podium SCIM user by ID** (Update). Update a SCIM user resource in Podium to be deactivated. Requires id as the user's email. Returns no content in the response.
- **List all Podium conversation leads** (List). Get a conversation lead ID in Podium. Requires location_uid, organization_uid, and conversation_id. Returns leadId and conversation.uid associated with the conversation.
- **List all Podium webhooks** (List). List webhooks tied to the authorized user in Podium. Returns uid (webhook unique identifier), eventTypes (events webhook listens to), url (webhook target URL), disabled (status), and createdAt, updatedAt timestamps.
- **Get single Podium webhook by ID** (Get). Get a webhook in Podium. Requires id. Returns createdAt, disabled, eventTypes, locationUid, organizationUid, secret, uid, updatedAt, url fields in the response.
- **Create a Podium webhook** (Create). Create a webhook in Podium. Requires eventTypes and url. One of locationUid or organizationUid is required (if both provided, organizationUid is used). Returns uid, eventTypes, url, createdAt, updatedAt, disabled, locationUid, organizationUid, and secret.
- **Update a Podium webhook by ID** (Update). Update a webhook in Podium by id. locationUid and organizationUid cannot be updated. Returns uid, url, eventTypes, disabled, secret, createdAt, updatedAt, locationUid, and organizationUid fields in the response.
- **Delete a Podium webhook by ID** (Delete). Delete a webhook in Podium. Requires id. Returns uid, url, eventTypes, disabled, secret, createdAt, updatedAt, organizationUid, and locationUid fields for the deleted webhook in the response.
- **List all Podium feedback surveys** (List). List all feedback surveys in Podium. Surveys are sorted by createdAt descending. Returns fields such as uid, createdAt, updatedAt, score, adjustedScore, customerName, location, attributions, channel, currentStep, and messages in the response.
- **List all Podium conversation messages** (List). Retrieve messages from a conversation in Podium. Requires conversation_id. Returns fields such as uid, body, createdAt, contactName, senderUid, items with attachments and metadata like deliveryStatus.
- **Get single Podium conversation message by ID** (Get). Retrieve a specific message in Podium using conversation_id and id. Returns message details including body, createdAt, senderUid, items, location, and status fields.
- **Create a Podium conversation message** (Create). Send a message with an attachment in Podium. Returns message fields including uid, body, items (attachments), createdAt, senderUid, and conversation. Supported attachment file types include images (.png, .jpg, .gif), videos (.mp4, .mov, .avi), documents (.pdf, .csv, .docx), and audio files (.mpeg, .wav, .ogg). Maximum file size is 30 MB. The rate limit is 10 requests per minute. Requires valid body, channel, and locationUid parameters in the request.
- **Podium conversation messages import** (Import). Import a message into a conversation in Podium. Requires body, channel, contactName, direction, locationUid, and publishedAt. Returns message fields such as uid, body, items, createdAt, and senderUid in the response. This does not send a message, just imports it into a conversation.
- **Podium conversation messages send** (Send). Send a message in Podium. Requires body, channel, and locationUid. Returns fields including uid (message id), body (message text), createdAt (message creation timestamp), items (associated attachments), and failureReason (if sending failed). A message can only be sent on behalf of a user if they have the necessary permissions to send messages in conversations assigned to them, conversations assigned to others, and unassigned conversations.
- **List all Podium templates** (List). List all templates in Podium. Returns fields such as uid, title, subject, type, accessLevel, createdAt, updatedAt, and templateItems for each template in the response. Requires read_templates scope.
- **Create a Podium template** (Create). Create a message template in Podium. Returns template fields including uid, title, text, accessLevel, subject, type, createdAt, updatedAt, and organization, location, or user references. Required parameters: text, title, type, accessLevel.
- **Delete a Podium template by ID** (Delete). Delete a template in Podium. Requires id. Returns the deleted template's details, including uid, title, text, subject, accessLevel, organization, location, user, templateItems, createdAt, updatedAt, deletedAt, isFavorite, nonDeletable, type, and variables.
- **Update a Podium template by ID** (Update). Update a message template in Podium. Requires id. Returns accessLevel, attachmentUrl, createdAt, deletedAt, isFavorite, lastUsedAt, location, nonDeletable, organization, subject, templateItems, text, title, type, uid, updatedAt, user, variables.
- **List all Podium products** (List). List all products in Podium. Returns uid, name, description, price, images, xid, archivedAt, insertedAt, and updatedAt for each product. Requires read_products scope.
- **Get single Podium product by ID** (Get). Get a product in Podium using id. Returns name, description, price, images list (with uid, url, isPrimary), archivedAt, insertedAt, updatedAt, xid, and product uid fields in the response. Requires id.
- **Podium products delete images** (Delete). Delete images from a specific product in Podium. Requires id of the product, and the request must include locationUid and uids. Returns for each image: isPrimary, productUid, uid, and url.
- **Podium products upload images** (Upload). Upload images to a specific product in Podium using product_id, images, and locationUid. Returns identifier for the created async product task and resource URL in the response.
- **List all Podium invoices** (List). List all invoices in Podium. Returns fields such as uid, amount, status, createdAt, paidAt, lineItems, allowedPaymentMethods, customerName, payments, and location for each invoice.
- **Get single Podium invoice by ID** (Get). Get an invoice in Podium. Requires id and location_id. Returns allowedPaymentMethods, amount, canceledAt, channel, conversationUid, createdAt, currencyRef, customerName, invoiceNumber, lineItems, location, payments, status, tipAmount, and uid in the response.
- **Create a Podium invoice** (Create). Create an invoice in Podium. Providing the readerUid property creates a card_present invoice; if omitted, a card_not_present invoice is created. Requires channelIdentifier, customerName, invoiceNumber, lineItems, and locationUid. Returns allowedPaymentMethods, amount, channel, createdAt, currencyRef, customerName, invoiceNumber, invoiceServiceChargeItems, lineItems, location, paidAt, payments, readerUid, requester, status, tipAmount, uid, and key payment and refund details.
- **Podium invoices cancel** (Cancel). Cancel an invoice in Podium. Requires invoice_id. Returns invoice fields such as allowedPaymentMethods, amount, canceledAt, canceledNote, channel, createdAt, customerName, status, uid, and more.
- **Podium invoices refund** (Action). Refund an invoice in Podium. Requires invoice_id. Returns invoice fields such as uid, amount, status, payments, refunds, and more in the response. The invoice must currently have a status of paid. If an invoice has a status of created, it cannot be refunded, but can be canceled. An invoice can have multiple refunds. The total refunded amount cannot exceed the invoice's amount.
- **Get single Podium payment by ID** (Get). Get a payment in Podium by id. Returns bankAccountLast4, cardBrand, createdAt, fee, refunds, settledAt, status, uid, and other payment details. Requires id.
- **Get single Podium reader by ID** (Get). Get a specific card reader in Podium by id. Returns uid, label, locationUid, status, createdAt, and updatedAt fields in the response. Requires id.
- **Get single Podium refund by ID** (Get). Get refund in Podium using id and location_id. Returns amount, cardBrand, cardLast4, createdAt, location.uid, notes, reason, settledAt, status, and uid in the response.
- **Create a Podium refund** (Create). Create a refund in Podium. Requires amount, channelIdentifier, customerName, locationUid, readerUid, and reason. Returns uid, amount, status, cardBrand, cardLast4, reason, createdAt, settledAt, location, and notes. Only works with Podium Payment Card Reader. Action creates an Unlinked Refund and requires sufficient account balance; operation may fail if balance is insufficient.
- **List all Podium reviews** (List). List all reviews in Podium. Returns attributions, author, createdAt, isRecommendation, locations, needsResponse, responses, review details, uid, and updatedAt fields for each review.
- **Get single Podium review by ID** (Get). Get a review in Podium by id. Returns uid, author, review body, rating, siteName, attributions, createdAt, locations, responses, isRecommendation, needsResponse, and updatedAt fields.
- **List all Podium review invites** (List). List all review invites in Podium. Returns attributions, channel, conversationItemUid, createdAt, customerName, deliveryStatus, languages, linkClicked, linkClickedAt, location, sender, shortUrl, test, uid, updatedAt, and url fields in the response.
- **Get single Podium review invite by ID** (Get). Get a review invite in Podium by id. Returns uid, createdAt, deliveryStatus, channel, customerName, linkClicked, attributions, location, sender, shortUrl, url, and updatedAt fields in the response. Requires id.
- **Create a Podium review invite** (Create). Create a review invite link in Podium. Returns uid, shortUrl, url, customerName, channel, deliveryStatus, createdAt, and other invite details. Do not send the same review invitation link to multiple contacts. Doing so can interfere with reporting in Podium, and may cause the invitation link to stop working. Generate a new review invitation link every time you send one to a contact.
- **List all Podium sites summary** (List). Get summary of reviews for connected sites in Podium. Returns siteName, averageRating, and reviewCount for each site. For locationUids, add each as locationUids[] in URL. Returns these fields in the response.
- **List all Podium review summary** (List). Get a summary of reviews for each location in Podium. Returns averageRating, locationUid, and reviewCount fields for each location. Requires access to all visible locations.
- **List all Podium review responses** (List). List responses of a specific review in Podium. Requires review_id. Returns body, isDeleted, likeCount, publishDate, siteAuthorName, source, and uid fields for each response.
- **Create a Podium review response** (Create). Create a response for a given review in Podium. Requires review_id. Returns body, isDeleted, likeCount, publishDate, siteAuthorName, source, and uid fields for the created review response.
- **Update a Podium review response by ID** (Update). Update a review response in Podium. Requires review_id and id. Returns body, isDeleted, likeCount, publishDate, siteAuthorName, source, and uid fields in the response.
- **Create a Podium review attribution** (Create). Attribute a user to a review in Podium. Requires review_id, locationUid, and userUid. Returns createdAt, updatedAt, isDeleted, siteReviewId, uid, user, editedByUser, and reviewInvite fields in the response.
- **Delete a Podium review attribution by ID** (Delete). Remove a user attribution from a review by id in Podium. Requires userUid. Returns createdAt, editedByUser, isDeleted, reviewInvite, siteReviewId, uid, updatedAt, and user fields in the response.
- **List all Podium campaign interactions** (List). List campaign interactions in Podium. Returns uid, interactionType, createdAt, updatedAt, and resource references (campaign, contact, conversation, location) for each interaction. If cursor is used, all other parameters are ignored.
- **Create a Podium campaign message** (Create). Create a message for a specific campaign in Podium. Requires id and channelIdentifier. Returns message fields such as uid, body, items, createdAt, failureReason, location, and senderUid.
- **Create a Podium data feed event** (Create). Process an event through a data feed in Podium. Requires data_feed_id. Returns dataFeedUid and uid for each processed data feed event in the response.
