MCP App Store
by KeenEthics

Overview

Work with customer support in your connected Sonny workspace. Find conversations and contacts, read messages and help articles, add internal notes, update conversations, and send replies when requested. You can also manage tags and help content and review support reports and customer satisfaction. Requires an existing Sonny account. Access is limited by your workspace role, selected channels, and granted permissions. Sending a reply can deliver a message to a customer; drafts are not sent automatically. This connection does not provide background inbox monitoring.

Tools

add_conversation_tag

ChatGPT
Applies an existing workspace tag to an accessible conversation. Existing assignments are preserved. Read assigned tags with get_conversation. Required scopes: conversations:write.

create_internal_note

ChatGPT
Adds an internal note with optional attachmentIds from uploads owned by the current sender and conversation. Attachment-only notes are supported. This endpoint never sends a customer-facing message. Required scopes: messages:write.

create_kb_article

ChatGPT
Creates an article in the source's help center and indexes it into the AI knowledge base when published. Slugs are auto-derived from the title when omitted and deconflicted automatically. Required scopes: kb:write.

create_kb_category

ChatGPT
Creates a category in the source's help center. Slugs are auto-derived from the name when omitted. Required scopes: kb:write.

create_tag

ChatGPT
Creates a workspace tag with a unique name and optional hex color. Requires access to all channels. Required scopes: tags:write.

edit_message

ChatGPT
Edits the plain-text body of your own human customer reply. Requires messages:send and access to the conversation source. Preserves attachments and the original send time; clears prior HTML and link preview. Updates the transcript and connected chat clients without sending another email or notification. Delivered emails remain unchanged. Incoming messages, bot replies, notes and replies from other teammates cannot be edited. Wait until pending email delivery completes before editing. Never use this to ask a customer for payment card numbers, bank details, government ID numbers, health information, passwords or one-time codes. Required scopes: messages:send.

get_contact

ChatGPT
Returns one workspace contact. Required scopes: contacts:read.

get_conversation

ChatGPT
Returns one conversation with contact, assignee, group, and tags. Required scopes: conversations:read.

get_conversation_context

ChatGPT
One bounded read of conversation state, full messages without HTML, latest reply delivery, and investigation checks. Follow message pagination before answering. Use expectedLastMessageId and a stable idempotencyKey when replying. after reads only new messages; omit it after transcript edits. Checks marked stale need verification; fresh checks retain their timestamps and references. Required scopes: conversations:read, messages:read.

get_conversation_csat

ChatGPT
Returns the customer's rating and comment for one conversation, or null data when the customer has not rated it yet. Required scopes: csat:read.

get_csat_summary

ChatGPT
Returns customer satisfaction scores on the 1–3 scale (1 bad, 2 okay, 3 great) for the whole workspace, per channel type (chat, email), and per source (channel), with the rating distribution, satisfaction rate (share rated great), and response rate against conversations closed in the same window. Omit every filter for the all-time global score. Required scopes: csat:read.

get_kb_article

ChatGPT
Returns one article including its sanitised HTML body. Required scopes: kb:read.

get_kb_category

ChatGPT
Returns one category in the accessible help center. Required scopes: kb:read.

get_report

ChatGPT
Uses the dashboard's reporting queries and date/source/assignee/tag filters. Kinds: overview (counts, response times and CSAT), volume, response-times, agents, sources, tags, csat, ai, knowledge, leads, online-hours. Knowledge uses the date range and permitted sources, independent of source/assignee/tag selections. Online hours describes workspace presence for accessible teammates; conversation counts remain channel-scoped. Responses are not cached. Existing CSAT endpoints retain their separate scope and populations. Required scopes: reporting:read.

get_tag

ChatGPT
Returns one shared workspace tag by ID. Available to channel-scoped keys with tags:read. Required scopes: tags:read.

list_channels

ChatGPT
Returns the stable channel values accepted by conversation filters. Required scopes: conversations:read.

list_contacts

ChatGPT
Returns workspace contacts with tags and conversation counts. Filter by exact stored property values; multiple property filters must all match. Required scopes: contacts:read.

list_conversations

ChatGPT
For oldest waiting sellers use status=open, awaitingReply=true, sort=waitingSince, direction=asc, compact=true. waitingSince is the first incoming message since the last reply; reminders and internal notes do not reset it. Returns non-trash, non-spam conversations with attention, assignment, snooze, priority and tag filters. Set status=open, awaitingReply=true and sourceId to list one store's waiting customers. Unread is specific to the current teammate. Tags match any supplied ID. Defaults remain compact=false and snoozed=any. Use sync for durable message and state changes. Required scopes: conversations:read.

list_csat_ratings

ChatGPT
Returns individual customer ratings with comments, newest first. Filter by rating value (for example rating=1 for every bad rating, or rating=1,2), source, channel type, assignee, contact, comment presence, and time window. Required scopes: csat:read.

list_kb_articles

ChatGPT
Returns the help center articles for a source, ordered by position. Use status to filter drafts or published articles. Required scopes: kb:read.

list_kb_categories

ChatGPT
Returns the help center categories for a source, ordered by position. Required scopes: kb:read.

list_members

ChatGPT
Lists active assignable teammates with current availability and effective channel access. Omits email and teammates outside accessible channels. Required scopes: members:read.

list_messages

ChatGPT
Returns chronological messages. Use after with the last seen message ID for cheap rereads; compact=true returns sender, time, read time and a 200-character text preview without attachment or transcript payloads. Full mode includes fresh 15-minute attachment download URLs, agent-only image extraction, and video transcripts. While full-mode readings are running, readsInProgress suggests the next call; waitSeconds can hold that call up to 30 seconds. Required scopes: messages:read.

list_sources

ChatGPT
Returns configured workspace sources and the conversation channels each source supports. Required scopes: conversations:read.

list_tags

ChatGPT
Returns all workspace tag IDs, names and colors, ordered by name. Available to channel-scoped keys with tags:read; tag definitions are shared across channels. Use add_conversation_tag with conversations:write to tag only accessible conversations. Tag creation, editing and deletion still require an all-channel key. Required scopes: tags:read.

list_teams

ChatGPT
Lists workspace teams and their accessible active members. Channel-restricted callers see only teams with an accessible member. Required scopes: members:read.

remove_conversation_tag

ChatGPT
Removes a tag from an accessible conversation without deleting the workspace tag. Read assigned tags with get_conversation. Required scopes: conversations:write.

send_message

ChatGPT
Sends a customer-facing reply as the authenticated teammate. Pass expectedLastMessageId to fail with 409 if any newer message or note arrived, and idempotencyKey to replay the saved result safely after a retry. internalNote and status can be saved with the reply in one transaction; these fields also require messages:write and conversations:write respectively. Accepts attachmentIds from uploads owned by that sender and conversation, including attachment-only replies. Delivery follows the conversation's channel: realtime chat (with an email copy when the visitor is offline) or email from the source's sending identity. Check emailDeliveryStatus for email delivery: failed means the reply was saved but the email was not sent; retry it from the inbox. Requires the messages:send scope, granted separately from messages:write. Never use this to ask a customer for payment card numbers, bank details, government ID numbers, health information, passwords or one-time codes. Required scopes: messages:send.

update_conversation

ChatGPT
Changes status, priority, assignee, team, snooze, tags or channel. Pass sourceId to move the conversation to another channel, optionally with channel to pick chat or email when the destination has both; the destination need not be one the key can access, though the conversation being moved must be, and a key loses a conversation it moves out of its own channels. Moving to an email channel requires the conversation to have a contact email. The move is audit-logged and noted on the thread. Request assignment=round_robin with a team to select an available member (409 if none). Preserves audit, CSAT, notification, search, realtime, and webhook side effects. Required scopes: conversations:write.

update_kb_article

ChatGPT
Updates supplied article fields and re-syncs the AI knowledge index. Publishing stamps publishedAt the first time only. Required scopes: kb:write.

update_kb_category

ChatGPT
Updates supplied category fields. Articles keep their category unless it is deleted. Required scopes: kb:write.

Capabilities

Writes

Example Prompts

Click any prompt to copy it.

Similar Apps