Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,542Letters: 14Defects: 1,324counted 2 min ago
teppi

Server definition

Hash
sha256:a2efe6f0f48846ac157650303863bb47ccc1c9be01e777d519e1e99c066071e1
What it is
What a remote MCP server returned when asked what it offers: 15 tools

The blob, as servednamed by its sha256

{ "instructions": "# Support operations with Supovia\n\nThis skill drives the Supovia MCP connector. The user must connect Supovia and\nauthorize an account with access to the intended organization. If a call fails\nwith an authorization error, ask the user to connect or reauthorize Supovia\ninstead of retrying with guessed identifiers.\n\n## Interactive workspace\n\nUse `open_supovia` with no arguments when the user wants to open the product\nand browse visually. It is a read-only sidebar entrypoint with up to 100 items,\nusing the same tenant authorization as the other tools. Selection shares bounded\nentity context with the host; subsequent writes still require their normal approval.\n\n## Privacy boundary\n\nSupovia exposes only bounded operational metadata and published help-center\ncontent. Message bodies, previews, and message identifiers are unavailable to\nboth the model and every MCP App view. Customer identifiers, organization IDs,\nstaff IDs, credentials, agent prompts, arbitrary metadata, and internal notes\nare intentionally unavailable too. Never claim to have read an excluded\nthread, ask the user to paste private customer data into chat, or try to\nrecover fields the tools omit.\n\n`show_customer_inbox` returns only an unread-conversation aggregate to the\nmodel; its embedded view receives conversation IDs needed for an explicit\nfollow-up plus channel, status, unread count, and timestamps.\n`get_conversation` is model-visible and returns only safe metadata plus bounded\nsender-category activity counts. `open_customer_inbox_conversation` is\napp-only because the inbox calls it when a row is selected, but it refreshes\nonly the same safe metadata and never loads a thread. Do not instruct the model\nto call that app-only tool directly.\n\n## Identifiers\n\nDo not guess identifiers. Resolve them from the connector:\n\n- Start with `list_websites` when the user names a site or domain. Use the\n returned website ID for filters that require `websiteId`.\n- Use `list_conversations` to resolve a conversation ID before a state change.\n- Use `list_documents` or `search_documents` to resolve a document ID or slug.\n- Campaign IDs are returned only as inventory by `list_campaigns`; there is no\n tool that sends a campaign.\n\nOpaque pagination cursors are bound to their original filters. Reuse a cursor\nonly with exactly the same website, resolved-state, locale, or slug filters\nthat produced it. Start a new listing when any filter changes.\n\n## Available tools\n\nWorkspace and workload:\n\n| Tool | Use it when someone asks… |\n| ------------------------------------ | ----------------------------------------------------------------------- |\n| `list_websites` | which websites their support chat runs on; also resolves the website ID |\n| `get_website` | about one website by name or ID, such as whether its AI agent is on |\n| `show_support_overview` | for a quick visual summary of websites and recent conversations |\n| `get_unresolved_conversation_counts` | how many conversations are still open, in total or per website |\n\nConversation triage:\n\n| Tool | Use it when someone asks… |\n| ---------------------------------- | ------------------------------------------------------------------------------------------ |\n| `list_conversations` | which conversations are open, unread or recently active (optionally by website and state) |\n| `show_customer_inbox` | to see unread conversations in an inbox view; the model receives only the unread aggregate |\n| `get_conversation` | about one conversation's status and sender counts, never its text |\n| `open_customer_inbox_conversation` | never: the embedded inbox calls it when a row is selected; it is not a model workflow step |\n\nKnowledge base and campaigns:\n\n| Tool | Use it when someone asks… |\n| ------------------ | ---------------------------------------------------------------------------------- |\n| `list_documents` | which help articles exist, by website, language or original slug |\n| `search_documents` | which article covers a topic: up to five matches in one language (English default) |\n| `get_document` | for one article's text, capped at 20,000 characters |\n| `list_campaigns` | which email campaigns a website has, without recipients, subject or content |\n\nWrites:\n\n| Tool | Use it when the user… |\n| ---------------------- | ------------------------------------------------------------------------------- |\n| `send_message` | approves an exact reply; it reaches the customer on the conversation's channels |\n| `resolve_conversation` | wants one conversation resolved or reopened (idempotent) |\n\nBoth writes declare `destructiveHint: true` because Claude's current review\nrule treats sends and state changes as destructive operations that require\nconfirmation. That hint does not mean `resolve_conversation` deletes a thread;\nit remains an idempotent resolved-state update.\n\nThere is no Supovia MCP tool for creating or editing websites, documents,\ncampaigns, customers, phone numbers, or AI receptionists. Do not promise those\nactions or substitute an unrelated tool.\n\n## Triage workflow\n\nWhen asked what needs attention:\n\n1. Call `show_support_overview` for a compact card when the user wants a visual\n summary.\n2. Call `get_unresolved_conversation_counts` when they need complete totals;\n its sorted per-website preview is capped at 100 and reports truncation;\n the overview count covers only its displayed sample.\n3. Use `list_conversations` with `resolved: false` and the relevant website ID\n to identify the newest open threads.\n4. Use `show_customer_inbox` when the user wants a visual unread-workload view.\n It shows only channel, status, unread count, timestamps, and the conversation\n ID needed for an explicit follow-up; it cannot display thread content.\n\nReport which website has the open work, the bounded page size, and whether a\ncursor says more results exist. Do not describe a sample as the full backlog.\n\n## Researching a support answer\n\nFor a product or policy question:\n\n1. Resolve the website with `list_websites`.\n2. Call `search_documents` with a concise semantic query, the website ID and\n the customer's language as `locale`: without it only English articles are\n searched.\n3. Read the best candidate with `get_document`.\n4. Ground the answer in that article and say when the returned content was\n truncated.\n\n`get_document` verifies ownership even though the underlying public document\nroute can resolve slugs across tenants. A `not-found` result is intentionally\nambiguous; do not treat it as proof that another organization's article\nexists.\n\n## Sending a reply\n\n`send_message` requires an idempotency key. Generate one stable, unique value\nfor the approved conversation-and-text pair and reuse that same value only when\nretrying an ambiguous result. Reusing it with different input is rejected.\n\nBefore calling it:\n\n1. Resolve the exact conversation ID; never use an ID guessed from prose.\n2. Obtain the exact reply text from the user, or present a draft based only on\n model-visible context and ask for explicit approval.\n3. Show the destination conversation ID and final text together. The reply\n reaches the customer on the conversation's own channels — chat, plus email\n or WhatsApp when reachable, or Messenger for a Facebook thread — and a\n reply to an App Store or Google Play review publicly replaces that review's\n developer response.\n4. Generate a stable idempotency key, then call `send_message` after approval.\n5. If the call times out or returns an ambiguous transport error, retry only\n with the exact same conversation, text, and idempotency key.\n\nThe connector never supplies customer text. The user may provide the relevant\ncontext or an exact message without copying personal data the model does not\nneed.\n\n## Resolving or reopening\n\n`resolve_conversation` changes only the `resolved` field and is idempotent, but\nit still changes shared support state. Confirm the conversation ID and desired\nstate when the user's intent is ambiguous. Use `resolved: false` only when the\nuser explicitly wants to reopen a thread.\n\nResolving a conversation does not send a customer message. If both are\nrequested, send the approved reply first, verify success, then resolve.\n\n## Campaign boundary\n\n`list_campaigns` exposes only campaign identity and timestamps. It deliberately\nomits recipients, subject and message content because the API's by-ID campaign\nroute lacks a safe tenant boundary. There is no send operation. Never claim to\nhave inspected campaign content or launched a campaign.\n\n## Interactive views\n\nThe support overview, activity inbox, and conversation activity summary are MCP\nApp views. When a card already renders the requested facts, add only useful\ninterpretation in prose. Never imply that an app contains thread text: no MCP\nApp receives message bodies, previews, message identifiers, customer details,\nor internal notes.\n", "tools": [ { "description": "Use this when someone asks about one customer conversation's status, such as whether it is resolved or unread and how many messages the customer, staff and AI agent sent. Returns its channel, status, unread count, times and sender counts from the latest 50 public messages (no message text or internal notes). Not for reading or quoting what was said.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "conversationId": { "description": "Conversation id, up to 200 characters", "maxLength": 200, "minLength": 1, "type": "string" } }, "required": [ "conversationId" ], "type": "object" }, "name": "get_conversation", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "conversation": { "anyOf": [ { "additionalProperties": false, "properties": { "activity": { "additionalProperties": false, "properties": { "agentMessages": { "maximum": 50, "minimum": 0, "type": "integer" }, "customerMessages": { "maximum": 50, "minimum": 0, "type": "integer" }, "internalNotesExcluded": { "const": true, "type": "boolean" }, "latestPublicActivityTime": { "anyOf": [ { "maxLength": 100, "type": "string" }, { "type": "null" } ] }, "operatorMessages": { "maximum": 50, "minimum": 0, "type": "integer" }, "sampleHasMore": { "description": "True when the conversation has more than 50 recent records", "type": "boolean" }, "sampledPublicMessages": { "maximum": 50, "minimum": 0, "type": "integer" }, "unknownSenderMessages": { "maximum": 50, "minimum": 0, "type": "integer" } }, "required": [ "sampledPublicMessages", "customerMessages", "operatorMessages", "agentMessages", "unknownSenderMessages", "latestPublicActivityTime", "sampleHasMore", "internalNotesExcluded" ], "type": "object" }, "channel": { "anyOf": [ { "maxLength": 100, "type": "string" }, { "type": "null" } ] }, "creationTime": { "anyOf": [ { "maxLength": 100, "type": "string" }, { "type": "null" } ] }, "id": { "maxLength": 200, "type": "string" }, "lastEditTime": { "anyOf": [ { "maxLength": 100, "type": "string" }, { "type": "null" } ] }, "resolved": { "type": "boolean" }, "unreadMessageCount": { "maximum": 9007199254740991, "minimum": 0, "type": "integer" }, "websiteId": { "anyOf": [ { "maxLength": 200, "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "websiteId", "channel", "resolved", "unreadMessageCount", "creationTime", "lastEditTime", "activity" ], "type": "object" }, { "type": "null" } ], "description": "Safe conversation metadata with sender counts over at most the 50 most recent public messages; null when not found. No message body, preview, message id, customer identifier, staff id, internal note, organization id or arbitrary metadata is returned." }, "status": { "enum": [ "found", "not-found" ], "type": "string" } }, "required": [ "status", "conversation" ], "type": "object" } }, { "description": "Use this when someone needs the text of one help-center article, to quote it or answer a customer from it. Returns the article's title, slug, language, published flag and text up to 20000 characters, with the text's format (html, markdown, plain-text). Not for finding articles on a topic.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "documentId": { "description": "Article id; takes precedence over slug", "maxLength": 200, "minLength": 1, "type": "string" }, "locale": { "description": "Language code for the slug lookup, e.g. en, it or fr; defaults to en", "maxLength": 20, "minLength": 1, "type": "string" }, "slug": { "description": "Article slug, used only when documentId is omitted", "maxLength": 300, "minLength": 1, "type": "string" } }, "type": "object" }, "name": "get_document", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "document": { "anyOf": [ { "additionalProperties": false, "properties": { "content": { "maxLength": 20000, "type": "string" }, "contentFormat": { "anyOf": [ { "enum": [ "html", "markdown", "plain-text" ], "type": "string" }, { "type": "null" } ], "description": "Syntax the content is written in; null for an empty article" }, "contentTruncated": { "description": "True when the content was cut at 20000 characters", "type": "boolean" }, "creationTime": { "anyOf": [ { "maxLength": 32, "type": "string" }, { "type": "null" } ] }, "id": { "pattern": "^[0-9a-f]{24}$", "type": "string" }, "lastEditTime": { "anyOf": [ { "maxLength": 32, "type": "string" }, { "type": "null" } ] }, "locale": { "anyOf": [ { "maxLength": 20, "type": "string" }, { "type": "null" } ] }, "published": { "type": "boolean" }, "slug": { "anyOf": [ { "maxLength": 300, "type": "string" }, { "type": "null" } ] }, "title": { "anyOf": [ { "maxLength": 200, "type": "string" }, { "type": "null" } ] }, "websiteId": { "anyOf": [ { "pattern": "^[0-9a-f]{24}$", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "title", "slug", "locale", "websiteId", "published", "content", "contentFormat", "contentTruncated", "creationTime", "lastEditTime" ], "type": "object" }, { "type": "null" } ], "description": "The article; null when it is missing or belongs to another organization. Organization ids, translator ids, deprecated slugs, embeddings and arbitrary metadata are never returned." }, "status": { "enum": [ "found", "not-found" ], "type": "string" } }, "required": [ "status", "document" ], "type": "object" } }, { "description": "Use this when someone asks how many customer conversations are still open or unresolved, in total or per website. Returns the total plus a per-website count, largest first, listing up to 100 websites (no customer or message data). Not for finding which conversations are open.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": {}, "type": "object" }, "name": "get_unresolved_conversation_counts", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "totalClamped": { "type": "boolean" }, "totalUnresolved": { "description": "Unresolved conversations across every website, listed or not", "maximum": 9007199254740991, "minimum": 0, "type": "integer" }, "websiteCount": { "maximum": 9007199254740991, "minimum": 0, "type": "integer" }, "websites": { "description": "Up to 100 websites with the most unresolved conversations, largest first. Customer identifiers, staff ids, message text and organization ids are never returned.", "items": { "additionalProperties": false, "properties": { "unresolvedCount": { "maximum": 9007199254740991, "minimum": 0, "type": "integer" }, "websiteId": { "maxLength": 200, "minLength": 1, "type": "string" }, "websiteName": { "anyOf": [ { "maxLength": 200, "type": "string" }, { "type": "null" } ] } }, "required": [ "websiteId", "websiteName", "unresolvedCount" ], "type": "object" }, "maxItems": 100, "type": "array" }, "websitesTruncated": { "description": "True when more than 100 websites have unresolved conversations", "type": "boolean" } }, "required": [ "websites", "websiteCount", "websitesTruncated", "totalUnresolved", "totalClamped" ], "type": "object" } }, { "description": "Use this when someone asks about one of their Supovia websites by name or id, such as whether its AI customer agent is on. Returns the website's id, name, domain, AI-agent status and created and edited times, or not-found. Not for the help articles published on it.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "idOrName": { "description": "Website id, exact vanity id (its lowercase public address) or exact display name", "maxLength": 200, "minLength": 1, "type": "string" } }, "required": [ "idOrName" ], "type": "object" }, "name": "get_website", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "status": { "enum": [ "found", "not-found" ], "type": "string" }, "website": { "anyOf": [ { "additionalProperties": false, "properties": { "agentEnabled": { "type": "boolean" }, "creationTime": { "anyOf": [ { "maxLength": 32, "type": "string" }, { "type": "null" } ] }, "domain": { "anyOf": [ { "maxLength": 253, "type": "string" }, { "type": "null" } ] }, "id": { "pattern": "^[0-9a-f]{24}$", "type": "string" }, "lastEditTime": { "anyOf": [ { "maxLength": 32, "type": "string" }, { "type": "null" } ] }, "name": { "anyOf": [ { "maxLength": 200, "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "name", "domain", "agentEnabled", "creationTime", "lastEditTime" ], "type": "object" }, { "type": "null" } ], "description": "Safe website metadata; null when not found. Organization ids, agent prompts, credentials, integration configuration and arbitrary metadata are never returned." } }, "required": [ "status", "website" ], "type": "object" } }, { "description": "Use this when someone asks which email campaigns one of their websites has. Returns each campaign's id, name and created and edited times, 20 per page by default (no recipients, subject or content). Not for sending a campaign.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "cursor": { "description": "The page.nextCursor of the previous page for the same website; absent for the first page", "maxLength": 4096, "type": "string" }, "limit": { "description": "Campaigns per page, from 1 to 50; defaults to 20", "exclusiveMinimum": 0, "maximum": 50, "type": "integer" }, "websiteId": { "description": "Website whose campaigns to list", "pattern": "^[0-9a-f]{24}$", "type": "string" } }, "required": [ "websiteId" ], "type": "object" }, "name": "list_campaigns", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "campaigns": { "description": "Campaign identity only. Recipient lists, subjects, message content, user ids, organization ids and arbitrary metadata are excluded.", "items": { "additionalProperties": false, "properties": { "creationTime": { "anyOf": [ { "maxLength": 32, "type": "string" }, { "type": "null" } ] }, "id": { "pattern": "^[0-9a-f]{24}$", "type": "string" }, "lastEditTime": { "anyOf": [ { "maxLength": 32, "type": "string" }, { "type": "null" } ] }, "name": { "anyOf": [ { "maxLength": 200, "type": "string" }, { "type": "null" } ] }, "websiteId": { "anyOf": [ { "pattern": "^[0-9a-f]{24}$", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "name", "websiteId", "creationTime", "lastEditTime" ], "type": "object" }, "maxItems": 50, "type": "array" }, "page": { "additionalProperties": false, "description": "hasMore is true when more campaigns follow; pass nextCursor as cursor to get them", "properties": { "count": { "maximum": 50, "minimum": 0, "type": "integer" }, "hasMore": { "type": "boolean" }, "nextCursor": { "anyOf": [ { "maxLength": 4096, "type": "string" }, { "type": "null" } ] } }, "required": [ "count", "hasMore", "nextCursor" ], "type": "object" } }, "required": [ "campaigns", "page" ], "type": "object" } }, { "description": "Use this when someone asks which customer conversations are open, unread or recently active, optionally for one website. Returns conversation ids with website, channel, resolved flag, unread count and times, most recent activity first, 20 per page by default (no message text or customer details). Not for open-conversation totals.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "cursor": { "description": "The page.nextCursor of the previous page with the same filters; absent for the first page", "maxLength": 2048, "type": "string" }, "limit": { "description": "Conversations per page, from 1 to 50; defaults to 20", "exclusiveMinimum": 0, "maximum": 50, "type": "integer" }, "resolved": { "description": "true for resolved conversations, false for open ones; omit for both", "type": "boolean" }, "websiteId": { "description": "Only conversations on this website; every website when absent", "maxLength": 200, "type": "string" } }, "type": "object" }, "name": "list_conversations", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "conversations": { "description": "Most recent activity first: the id needed for a follow-up call, website id, channel, resolved state, unread count and timestamps. Message bodies, message ids, customer identifiers, internal notes, arbitrary metadata and organization ids are excluded.", "items": { "additionalProperties": false, "properties": { "channel": { "anyOf": [ { "maxLength": 100, "type": "string" }, { "type": "null" } ] }, "creationTime": { "anyOf": [ { "maxLength": 100, "type": "string" }, { "type": "null" } ] }, "id": { "maxLength": 200, "type": "string" }, "lastEditTime": { "anyOf": [ { "maxLength": 100, "type": "string" }, { "type": "null" } ] }, "resolved": { "type": "boolean" }, "unreadMessageCount": { "maximum": 9007199254740991, "minimum": 0, "type": "integer" }, "websiteId": { "anyOf": [ { "maxLength": 200, "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "websiteId", "channel", "resolved", "unreadMessageCount", "creationTime", "lastEditTime" ], "type": "object" }, "maxItems": 50, "type": "array" }, "page": { "additionalProperties": false, "description": "hasMore is true when more conversations follow; pass nextCursor as cursor to get them", "properties": { "count": { "maximum": 50, "minimum": 0, "type": "integer" }, "hasMore": { "type": "boolean" }, "nextCursor": { "anyOf": [ { "maxLength": 2048, "type": "string" }, { "type": "null" } ] } }, "required": [ "count", "hasMore", "nextCursor" ], "type": "object" } }, "required": [ "conversations", "page" ], "type": "object" } }, { "description": "Use this when someone asks which help articles or support docs exist, optionally for one website, language or article. Returns each article's id, title, slug, language, website and published flag, most recently edited first, 20 per page by default, without the article text. Not for finding articles about a topic.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "cursor": { "description": "The page.nextCursor of the previous page with the same filters; absent for the first page", "maxLength": 4096, "type": "string" }, "limit": { "description": "Articles per page, from 1 to 50; defaults to 20", "exclusiveMinimum": 0, "maximum": 50, "type": "integer" }, "locale": { "description": "Only articles in this language code, e.g. en, it or fr; every language when absent", "maxLength": 20, "minLength": 1, "type": "string" }, "slugOriginal": { "description": "Only the language versions of one article: its original slug before translation", "maxLength": 300, "minLength": 1, "type": "string" }, "websiteId": { "description": "Only articles on this website; every website when absent", "pattern": "^[0-9a-f]{24}$", "type": "string" } }, "type": "object" }, "name": "list_documents", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "documents": { "description": "Article metadata, most recently edited first. Document content, embeddings, prompts, organization ids and arbitrary metadata are excluded.", "items": { "additionalProperties": false, "properties": { "creationTime": { "anyOf": [ { "maxLength": 32, "type": "string" }, { "type": "null" } ] }, "id": { "pattern": "^[0-9a-f]{24}$", "type": "string" }, "lastEditTime": { "anyOf": [ { "maxLength": 32, "type": "string" }, { "type": "null" } ] }, "locale": { "anyOf": [ { "maxLength": 20, "type": "string" }, { "type": "null" } ] }, "published": { "type": "boolean" }, "slug": { "anyOf": [ { "maxLength": 300, "type": "string" }, { "type": "null" } ] }, "title": { "anyOf": [ { "maxLength": 200, "type": "string" }, { "type": "null" } ] }, "websiteId": { "anyOf": [ { "pattern": "^[0-9a-f]{24}$", "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "title", "slug", "locale", "websiteId", "published", "creationTime", "lastEditTime" ], "type": "object" }, "maxItems": 50, "type": "array" }, "page": { "additionalProperties": false, "description": "hasMore is true when more articles follow; pass nextCursor as cursor to get them", "properties": { "count": { "maximum": 50, "minimum": 0, "type": "integer" }, "hasMore": { "type": "boolean" }, "nextCursor": { "anyOf": [ { "maxLength": 4096, "type": "string" }, { "type": "null" } ] } }, "required": [ "count", "hasMore", "nextCursor" ], "type": "object" } }, "required": [ "documents", "page" ], "type": "object" } }, { "description": "Use this when someone asks which websites their Supovia support chat runs on, or a website's id is needed. Returns each website's id, name, domain and whether its AI customer agent is on, most recently edited first, 20 per page by default. Not for customer conversations.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "cursor": { "description": "The page.nextCursor of the previous page; absent for the first page", "maxLength": 4096, "type": "string" }, "limit": { "description": "Websites per page, from 1 to 50; defaults to 20", "exclusiveMinimum": 0, "maximum": 50, "type": "integer" } }, "type": "object" }, "name": "list_websites", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "page": { "additionalProperties": false, "description": "hasMore is true when more websites follow; pass nextCursor as cursor to get them", "properties": { "count": { "maximum": 50, "minimum": 0, "type": "integer" }, "hasMore": { "type": "boolean" }, "nextCursor": { "anyOf": [ { "maxLength": 4096, "type": "string" }, { "type": "null" } ] } }, "required": [ "count", "hasMore", "nextCursor" ], "type": "object" }, "websites": { "description": "Websites in the signed-in organization, most recently edited first. Prompts, credentials, integration configuration, organization ids and arbitrary metadata are excluded.", "items": { "additionalProperties": false, "properties": { "agentEnabled": { "type": "boolean" }, "creationTime": { "anyOf": [ { "maxLength": 32, "type": "string" }, { "type": "null" } ] }, "domain": { "anyOf": [ { "maxLength": 253, "type": "string" }, { "type": "null" } ] }, "id": { "pattern": "^[0-9a-f]{24}$", "type": "string" }, "lastEditTime": { "anyOf": [ { "maxLength": 32, "type": "string" }, { "type": "null" } ] }, "name": { "anyOf": [ { "maxLength": 200, "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "name", "domain", "agentEnabled", "creationTime", "lastEditTime" ], "type": "object" }, "maxItems": 50, "type": "array" } }, "required": [ "websites", "page" ], "type": "object" } }, { "description": "Use this when the embedded Supovia inbox opens a conversation the user selected. Returns whether it was found and gives the view its channel, status, unread count and times (no message text or customer details). Not for questions asked in chat.", "inputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "properties": { "conversationId": { "description": "Conversation id the user selected in the inbox view", "maxLength": 200, "minLength": 1, "type": "string" } }, "required": [ "conversationId" ], "type": "object" }, "name": "open_customer_inbox_conversation", "outputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": false, "properties": { "status": { "enum": [ "opened", "not-found" ], "type": "string" } }, "required": [ "status" ], "type": "object" } }, { "description": "Use this when someone wants to open Supovia and browse their workspace interactively. Support websites, conversation activity and help articles. Starts with up to 100 items. Not for changing data.", "inputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "properties": {}, "type": "object" }, "name": "open_supovia", "outputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": false, "properties": { "items": { "items": { "additionalProperties": false, "properties": { "defaultLocale": { "anyOf": [ { "maxLength": 32, "type": "string" }, { "type": "null" } ] }, "id": { "anyOf": [ { "maxLength": 200, "type": "string" }, { "type": "null" } ] }, "locales": { "items": { "maxLength": 32, "type": "string" }, "maxItems": 100, "type": "array" }, "logoUrl": { "anyOf": [ { "maxLength": 2048, "type": "string" }, { "type": "null" } ] }, "name": { "maxLength": 200, "type": "string" }, "subtitle": { "maxLength": 300, "type": "string" } }, "required": [ "id", "name", "subtitle", "logoUrl", "defaultLocale", "locales" ], "type": "object" }, "maxItems": 100, "type": "array" }, "truncated": { "type": "boolean" } }, "required": [ "items", "truncated" ], "type": "object" } }, { "description": "Use this when someone wants to mark a customer conversation resolved or done, or reopen it. Returns the conversation id, resolved state and last edit time, and the operator dashboard updates live. Repeating the same state has no further effect. Not for replying to the customer.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "conversationId": { "description": "Conversation to update", "maxLength": 200, "minLength": 1, "type": "string" }, "resolved": { "description": "true to mark it resolved (the default), false to reopen it", "type": "boolean" } }, "required": [ "conversationId" ], "type": "object" }, "name": "resolve_conversation", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "conversation": { "anyOf": [ { "additionalProperties": false, "properties": { "id": { "maxLength": 200, "type": "string" }, "lastEditTime": { "anyOf": [ { "maxLength": 32, "type": "string" }, { "type": "null" } ] }, "resolved": { "type": "boolean" } }, "required": [ "id", "resolved", "lastEditTime" ], "type": "object" }, { "type": "null" } ], "description": "Only the id, resolved state and last edit time; null when not found. Customer identifiers, staff ids and organization ids are never returned." }, "status": { "enum": [ "updated", "not-found" ], "type": "string" } }, "required": [ "status", "conversation" ], "type": "object" } }, { "description": "Use this when someone asks which help article covers a topic or question on one of their websites. Returns up to 5 matching published articles with id, title, slug and language, matched by meaning in one language (English by default). Not for reading an article's text.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "locale": { "description": "Language code to search in, e.g. en, it or fr; defaults to en", "maxLength": 20, "minLength": 1, "type": "string" }, "query": { "description": "What the article should cover, in natural language, up to 500 characters", "maxLength": 500, "minLength": 1, "type": "string" }, "websiteId": { "description": "Website whose help center to search", "pattern": "^[0-9a-f]{24}$", "type": "string" } }, "required": [ "query", "websiteId" ], "type": "object" }, "name": "search_documents", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "documents": { "description": "Closest matches first. Content chunks, embeddings, scores, prompts and arbitrary metadata are excluded.", "items": { "additionalProperties": false, "properties": { "id": { "pattern": "^[0-9a-f]{24}$", "type": "string" }, "locale": { "anyOf": [ { "maxLength": 20, "type": "string" }, { "type": "null" } ] }, "slug": { "anyOf": [ { "maxLength": 300, "type": "string" }, { "type": "null" } ] }, "title": { "anyOf": [ { "maxLength": 200, "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "title", "slug", "locale" ], "type": "object" }, "maxItems": 5, "type": "array" } }, "required": [ "documents" ], "type": "object" } }, { "description": "Use this when the user approves an exact reply to send to a customer in one Supovia conversation. Returns the conversation id and send time. The reply reaches the customer on the conversation's own channels (chat, email, WhatsApp or Messenger); replies to app-store reviews are public. Not for internal notes or closing the conversation.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "content": { "description": "Exact reply text the user approved, 1 to 4,000 characters", "maxLength": 4000, "minLength": 1, "type": "string" }, "conversationId": { "description": "Conversation to reply in", "maxLength": 200, "minLength": 1, "type": "string" }, "idempotencyKey": { "description": "Unique key you generate for this conversation and text, up to 255 characters; reuse it only to retry the same send", "maxLength": 255, "minLength": 1, "type": "string" } }, "required": [ "conversationId", "content", "idempotencyKey" ], "type": "object" }, "name": "send_message", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "conversationId": { "description": "Conversation the reply was added to", "maxLength": 200, "type": "string" }, "creationTime": { "anyOf": [ { "maxLength": 100, "type": "string" }, { "type": "null" } ], "description": "When the reply was recorded; no message id or text is echoed" }, "status": { "const": "sent", "type": "string" } }, "required": [ "status", "conversationId", "creationTime" ], "type": "object" } }, { "description": "Use this when someone wants to see their unread customer conversations in an inbox view. Returns how many of the 50 most recently active conversations have unread messages; the view lists up to 20 with channel, status, unread count and times (no message text or customer details). Not for complete open-conversation totals.", "inputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "properties": {}, "type": "object" }, "name": "show_customer_inbox", "outputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": false, "properties": { "conversationsHaveMore": { "description": "True when conversations exist beyond the 50 sampled or the 20 the view lists", "type": "boolean" }, "unreadConversationCount": { "description": "Conversations with unread messages among the 50 most recently active", "maximum": 50, "minimum": 0, "type": "integer" } }, "required": [ "unreadConversationCount", "conversationsHaveMore" ], "type": "object" } }, { "description": "Use this when someone wants a quick visual summary of their customer support. Returns a card with up to 20 websites (name, domain, AI agent on or off) and the 20 most recently active conversations (channel, open or resolved, times), optionally for one website. Not for complete open-conversation totals.", "inputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "properties": { "websiteId": { "description": "Only this website; every website when absent", "maxLength": 200, "minLength": 1, "type": "string" } }, "type": "object" }, "name": "show_support_overview", "outputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": false, "properties": { "conversations": { "description": "The 20 most recently active conversations: channel, resolved state and timestamps. Customer identifiers, internal record ids, message bodies, prompts, credentials, internal notes, organization ids and arbitrary metadata are excluded.", "items": { "additionalProperties": false, "properties": { "channel": { "anyOf": [ { "maxLength": 100, "type": "string" }, { "type": "null" } ] }, "creationTime": { "anyOf": [ { "maxLength": 32, "type": "string" }, { "type": "null" } ] }, "lastEditTime": { "anyOf": [ { "maxLength": 32, "type": "string" }, { "type": "null" } ] }, "resolved": { "type": "boolean" } }, "required": [ "channel", "resolved", "creationTime", "lastEditTime" ], "type": "object" }, "maxItems": 20, "type": "array" }, "conversationsHaveMore": { "type": "boolean" }, "openConversationCount": { "description": "Open conversations among the 20 shown, not the organization total", "maximum": 20, "minimum": 0, "type": "integer" }, "websites": { "description": "Up to 20 websites: name, domain and AI-agent status only", "items": { "additionalProperties": false, "properties": { "agentEnabled": { "type": "boolean" }, "domain": { "anyOf": [ { "maxLength": 253, "type": "string" }, { "type": "null" } ] }, "name": { "anyOf": [ { "maxLength": 200, "type": "string" }, { "type": "null" } ] } }, "required": [ "name", "domain", "agentEnabled" ], "type": "object" }, "maxItems": 20, "type": "array" }, "websitesHaveMore": { "type": "boolean" } }, "required": [ "websites", "websitesHaveMore", "conversations", "conversationsHaveMore", "openConversationCount" ], "type": "object" } } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:a2efe6f0f48846ac157650303863bb47ccc1c9be01e777d519e1e99c066071e1 | sha256sum