Skip to main content

Zonka Feedback MCP Server

Written by Sonika Mehta

Connect your Zonka Feedback account to AI assistants like Claude, ChatGPT, and Gemini, and ask questions about your feedback data in plain language — right inside the AI tool.

The Model Context Protocol (MCP) is an open standard that lets AI tools connect to Zonka Feedback securely. Once connected, your AI assistant can:

  • Pull CX metrics — NPS, CES, CSAT, and sentiment — as values, trends, and breakdowns

  • Search and read survey responses, reviews, and feedback from your connected sources

  • Explore AI Feedback Intelligence themes, subthemes, and the verbatim quotes behind them

  • Look up contacts, segments, locations, users, and data sources

  • Answer questions about your feedback program using your live data

Looking for the technical details? For the full list of available tools and copy-paste setup for Cursor, VS Code, Gemini CLI, Claude Code, and Codex, see the MCP developer documentation.

Step 1 — Turn on the MCP server (admins only)

Before anyone on your account can connect, an admin needs to switch it on once:

  1. Go to Settings → AI Governance → AI Features.

  2. Find the Agents & MCP section.

  3. Turn on Connect MCP.

Once enabled, every user on your account can connect their own AI tool — you don't set people up individually. Each person's connection uses their own role, permissions, and location access, so turning it on doesn't widen what anyone can see.

Step 2 — Connect your AI tool

Claude (claude.ai and Claude Desktop)

Zonka Feedback is listed in Claude's connector directory, so there's nothing to paste or configure.

  1. Open Zonka Feedback in the Claude directory — or, in Claude, go to Settings → Connectors and find Zonka Feedback in the directory.

  2. Click Connect.

  3. Sign in to Zonka Feedback and approve the connection when the browser window opens.

The steps are the same on the web and desktop apps, and it works with any Claude plan that supports connectors.

ChatGPT

Zonka Feedback is a published app in ChatGPT, discoverable in the apps directory.

  1. Open Zonka Feedback in ChatGPT — or, in ChatGPT, go to Settings → Apps & Connectors and search for Zonka Feedback.

  2. Click Connect.

  3. Sign in to Zonka Feedback and authorize when prompted.

Available on ChatGPT plans that support apps and connectors.

Other tools (Cursor, VS Code, Gemini CLI, Claude Code, Codex)

Tools that don't sign in through a browser connect with a Personal Access Token instead. Create one in Zonka Feedback:

  1. Go to your profile → Zonka Feedback MCP → Personal Access Tokens.

  2. Enter a name you'll recognize later (for example, "Cursor on work laptop"), choose an expiry, and click Create Token.

  3. Copy the token right away — it's shown only once and can't be retrieved again. It starts with zf_.

Then add the token to your tool as a Bearer credential, using the server URL https://mcp.zonkafeedback.com. For exact, copy-paste setup steps for each tool, see the MCP developer documentation.

A token is tied to you: it carries your permissions, is read-only, and stops working if it

Step 3 — Check it's working

Once connected, ask your AI tool:

Are we connected to Zonka Feedback?

It should reply with your name, account, and the tools it can use. Then try prompts like:

  • What's our NPS this quarter, and how does it compare to last quarter?

  • Show me detractor responses with comments from the last 30 days.

  • Break down CSAT by location for August.

  • Which themes are driving negative sentiment right now?

  • Pull ten customer quotes behind our top negative theme.

  • What's our Google review rating trend this year, and how many reviews did we reply to?

What the AI can and can't see

  • Your login is the limit. Every request runs as you. Role permissions, survey scopes, and location restrictions apply exactly as they do in the app.

  • Read-only. The AI can read and analyze your feedback — it can't change anything in your account.

  • Module availability applies. Tools for modules you don't have (for example, the Intelligence Hub) return a clear message rather than empty data.

Troubleshooting

  • The AI tool doesn't show Zonka Feedback tools — restart the tool after connecting; most load connectors only at startup.

  • You're asked to sign in again, or hit an authorization loop — disconnect and reconnect to refresh the sign-in.

  • A token stopped working — it may have expired, been revoked, or your account access may have changed. Create a new one.

  • A teammate sees different results — that's expected: results follow each person's own permissions and modules.

Still stuck? Start a chat with us, or email hello@zonkafeedback.com.

Available tools

The server exposes 21 tools. What each user can actually call depends on their role, permissions, and the modules enabled on the account — who_am_i reports the exact availability.
​

who_am_i
Returns the current user, their account, and which tools they can use. Ask your AI tool to call this first when it's unsure whether a feature is available.
Parameters: none.
​

list_users
Lists all users in the account: platform users who can sign in, and external agents who are rated in feedback but cannot sign in. Key parameters:

  • search: Free-text match on name, email, mobile, or external ID

  • role: Filter by permission role, including account-defined custom roles; pass external to return only external agents

  • userLabel: Filter by a grouping label applied to users, such as a team or tier

  • pagination: { limit, cursor } — default 25 per page, max 200

get_user_details
Returns one user with their assigned locations, labels, and full permission set. Key parameters:

  • userId: The user to fetch, from list_users

list_surveys Lists surveys in the account. Key parameters:

  • search: Free-text match on survey name

  • locationId: Surveys assigned to one location, from list_locations

  • pagination: { limit, cursor } — default 25 per page, max 200

get_survey_details
Returns one survey's structure: every question with its type, its CX metric if any, and its answer choices. Question and choice IDs from here are required for answer-level filters in list_responses and get_survey_metric. Key parameters:

  • surveyId: The survey to fetch, from list_surveys

list_responses
Lists individual feedback records — survey responses, reputation reviews, and records from connected sources such as chats, tickets, and CSV imports. One row per record, not aggregated. All filters combine with AND. Key parameters:

  • dateRange: { from, to } ISO dates, interpreted in the account timezone

  • surveyId, datasourceId, locationId, userId: Scope to one survey, connected source, location, or rated team member

  • responseType, channel: Kind of record (survey, review, chat, ticket…) and how it was collected

  • npsBreakdown, cesBreakdown, csatBreakdown, reviewRating: CX score bands — for example detractor, high_effort, negative, or a 1–5 star rating

  • sentiment, urgency, churnRisk, intent, emotion: AI signals; values come from list_attributes

  • themeId, subThemeId: Feedback tagged with an Intelligence theme or subtheme

  • contactId, contactSegmentId: One contact's feedback, or feedback from a contact segment

  • search, tags, completionStatus: Free text across comments, manually applied tags, and Complete vs Partial

  • hasComment, hasNotes, hasTickets, hasTodo, replied, starred, important: Quick boolean toggles

  • filterExpression: Advanced conditions on per-question answers and contact attributes, combined with and / or / not

  • sortBy, pagination: recency (default), score, or sentiment; pages of up to 200

get_response_details
Returns one complete feedback record: the full question-and-answer set or the ticket, chat, CSV, or review content; AI signals; tags; internal notes; the associated contact; and data-source metadata. Key parameters:

  • responseId: The record to fetch, from list_responses

list_attributes
Returns the account-specific values usable as filters for one object type per call — response tags, channels, response types, and AI signal values; contact attributes with their keys and types; user roles and labels; location labels. Key parameters:

  • objectType: Required. One of response, contact, user, or location

get_survey_metric
Gets NPS, CES, CSAT, sentiment score, response count, completion rate, or average completion time for a survey over a date range and optional filters. Returns four shapes: value (a single value versus the previous period), trend (broken down by period), breakdown (split by one dimension), and pivot (a table of rows × columns). Key parameters:

  • metric: nps, ces, csat, sentiment, responseCount, completionRate, or avgCompletionTime

  • shape: value, trend, breakdown, or pivot

  • breakdownby: Dimension to split by — location, user, channel, survey, device, contact segment, sentiment, NPS/CES/CSAT band, and more (breakdown shape only)

  • row, column, value: Pivot axes and the metric computed at each cell (pivot shape only)

  • groupByDate: day, week, month, quarter, or year — required for trend

  • dateRange, compareDateRange: The period to measure and an optional period to compare against

  • surveyId, questionId, choiceId: Scope to a survey, a question, or a specific answer choice

  • Plus the same scope, AI-signal, and filterExpression filters as list_responses

list_contacts
Lists contacts with identity and subscription status. Key parameters:

  • search: Free-text match on name, email, mobile, or external ID

  • contactSegmentId: Contacts in a segment, from list_contact_segments

  • surveyId: Contacts sent, or who responded to, a survey

  • isUnsubscribed, isBounced: Contacts who opted out, or whose email hard-bounced

  • hasResponses, noResponses: Contacts who have — or have never — submitted a response

  • filterExpression: Advanced conditions on typed contact attributes

  • pagination: { limit, cursor } — default 25 per page, max 200

get_contact_details
Returns one contact with attributes, segment memberships, subscription status, and a timestamped activity timeline — surveys sent, opened, and answered; list additions; unsubscribes. Key parameters:

  • contactId: The contact to fetch, from list_contacts

list_contact_segments
Lists contact segments — saved groupings of contacts by shared traits. Static segments have fixed membership; dynamic segments re-evaluate at query time. Key parameters:

  • search: Free-text match on segment name

  • type: static or dynamic

  • pagination: { limit, cursor } — default 25 per page, max 200

list_locations
Lists configured locations — branches, stores, or sites set up in the account, each with an address and labels. Key parameters:

  • search: Free-text match on location name

  • locationLabel: Filter by a grouping label applied to locations, such as a region

  • pagination: { limit, cursor } — default 25 per page, max 200

list_datasources
Lists connected and imported data sources — review platforms, support ticketing and chat integrations, and CSV uploads. Key parameters:

  • search: Free-text match on source name

  • sourceType: Kind of data the source produces; values from list_attributes

  • status: Processing state of the last sync or import — in_progress, completed, or failed

  • pagination: { limit, cursor } — default 25 per page, max 200

list_intelligence_projects
Lists AI Feedback Intelligence projects. A project analyses one or more data sources to extract themes and subthemes and produce volume, NPS, CES, CSAT, and sentiment overall and per topic. Key parameters:

  • search: Free-text match on project name

  • status: in_progress, complete, or failed

  • projectType: ongoing (re-runs as data arrives) or onetime (a fixed snapshot)

  • datasourceId, surveyId: Projects analysing a given source or survey

  • pagination: { limit, cursor } — default 25 per page, max 200

get_intelligence_project_details
Returns one Intelligence project with its connected data sources, associated entities, and project users. Key parameters:

  • projectId: The project to fetch, from list_intelligence_projects; omit for account-level intelligence

get_intelligence_metric
Gets volume, NPS, CES, CSAT, and sentiment for an Intelligence project — or a single theme or subtheme — in four shapes: value, trend, breakdown, and pivot. Scope resolves most-specific-first: subtheme → theme → project → account. Key parameters:

  • metric: responseVolume, sentiment, nps, csat, or ces

  • shape: value, trend, breakdown, or pivot

  • breakdownby: Dimension to split by — location, user, contactSegment, theme, subTheme, or datasource (breakdown shape only)

  • row, column, value: Pivot axes and the metric computed at each cell (pivot shape only)

  • groupByDate: day, week, month, quarter, or year — required for trend

  • projectId, themeId, subThemeId: Scope; omit all for account-level intelligence

  • dateRange, compareDateRange: The period to measure and an optional period to compare against

  • sentiment, urgency, churnRisk, intent, emotion, datasourceId, locationId, contactSegmentId, filterExpression: Refine the underlying feedback

list_themes
Lists the themes of a completed Intelligence project — topics AI analysis has extracted to tag responses by their main idea. Pass a theme ID to list that theme's subthemes instead. Key parameters:

  • projectId: From list_intelligence_projects; omit for account-level themes

  • themeId: Returns this theme's subthemes instead of the top-level list

  • dateRange: { from, to } ISO dates

  • includeSubThemes: true nests each theme's subthemes in the result

  • datasourceId, contactSegmentId, locationLabel, userLabel, filterExpression: Refine which feedback the themes are computed from

  • pagination: { limit, cursor } — default 25 per page, max 200

get_theme_details
Returns one theme or subtheme in full: definition, volume, key analysis, NPS/CES/CSAT/sentiment metrics with distributions, its subthemes, and its positive and negative drivers. Key parameters:

  • themeId or subThemeId: Pass exactly one, from list_themes

  • projectId: From list_intelligence_projects; omit for account-level themes

list_quotes
Returns verbatim customer quotes behind a theme or subtheme — the exact text from a response that caused it to be tagged with that topic. Key parameters:

  • projectId: From list_intelligence_projects

  • themeId or subThemeId: The topic whose quotes to return, from list_themes

  • dateRange: { from, to } ISO dates

  • sentiment, urgency, churnRisk, intent, emotion: Filter quotes by AI signal

  • pagination: { limit, cursor } — default 25 per page, max 200

get_reputation_metric
Gets overall review rating, review count, replied-review count, and review sentiment across your reputation data sources — in four shapes: value, trend, breakdown, and pivot. Key parameters:

  • metric: rating (average stars), reviewCount, repliedReviewCount (with reply rate), or sentiment

  • shape: value, trend, breakdown, or pivot

  • breakdownby: location, datasource, or rating_bucket

  • groupByDate: day, week, month, quarter, or year — required for trend

  • dateRange, compareDateRange: The period to measure and an optional period to compare against

  • datasourceId, locationId, locationLabel, reviewRating: Scope to a review source, location, or star rating

  • sentiment, urgency, churnRisk, intent, emotion: Filter by AI signal
    ​

FAQs

Is it read-only? Yes. Every tool reads data; none of them change your account. Write features will come later, with their own controls.

Which regions are supported? All of them — US, EU, IN, and AU — through the same URL. Routing to your region is automatic.

Who on my team can connect? Once an admin enables MCP, any user can connect with their own login or a personal access token, carrying only their own permissions.

Does the AI store my data? The MCP server returns data to your AI tool at query time. How that tool keeps conversation data is governed by its own policy — review it before connecting, as you would any integration.

Do I need a token or just sign-in? If your tool supports browser sign-in (Claude, ChatGPT, Cursor), use that — there's nothing to copy. For tools without sign-in (Gemini CLI, Claude Code, Codex), create a Personal Access Token.
​
​

Did this answer your question?