{"serverId":"mcp-registry/org.singchat/singchat","tools":[{"name":"add_knowledge","fixed":{"name":"add_knowledge","description":"Train the AI agent by adding a knowledge source. type='url' crawls a website (up to 50 pages, fewer when the workspace knowledge-base quota is nearly full); type='qa' stores a single question/answer pair. Ingestion is asynchronous, the source starts as PENDING; poll `list_knowledge` for READY status.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["type"],"properties":{"url":{"type":"string","format":"uri","description":"Website root URL to crawl. Required when type='url'."},"type":{"enum":["url","qa"],"type":"string","description":"'url' to crawl a website, or 'qa' to add a question/answer pair."},"answer":{"type":"string","description":"The answer. Required when type='qa'."},"question":{"type":"string","description":"The question. Required when type='qa'."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Add knowledge"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":239,"tokensAfter":239},{"name":"fetch","fixed":{"name":"fetch","description":"Fetch the full text of a single document by id, using an id returned by the search tool. With a workspace API key this reads a knowledge document from that workspace; without a key it reads a SingChat help article. Returns id, title, text, url, and optional metadata.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"The document id returned by the search tool."}}},"annotations":{"readOnlyHint":true},"title":"Fetch"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":140,"tokensAfter":140},{"name":"get_analytics","fixed":{"name":"get_analytics","description":"Return a compact analytics summary for this workspace over the last `days` days (default 30): conversation counts + resolution rate, message volume + AI share, plus a live snapshot of today (UTC).","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"days":{"type":"integer","default":30,"maximum":365,"minimum":1,"description":"Look-back window in days for the conversation/message stats (default 30)."}}},"annotations":{"readOnlyHint":true},"title":"Get Analytics"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":137,"tokensAfter":137},{"name":"get_conversation","fixed":{"name":"get_conversation","description":"Fetch a single conversation with its contact details and the most recent messages (oldest→newest).","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["conversationId"],"properties":{"conversationId":{"type":"string","minLength":1,"description":"The conversation id (from list_conversations)."}}},"annotations":{"readOnlyHint":true},"title":"Get conversation"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":107,"tokensAfter":107},{"name":"get_embed_snippet","fixed":{"name":"get_embed_snippet","description":"Return the SingChat chat-widget embed code for this workspace's web inbox, in three flavors: plain HTML, React (useEffect), and Next.js (next/script). Requires a workspace API key. Optionally pass `platform` to get just one flavor.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"platform":{"enum":["html","react","next"],"type":"string","description":"Which snippet to return. Omit to get all three."}}},"annotations":{"readOnlyHint":true},"title":"Get widget embed snippet"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":139,"tokensAfter":139},{"name":"list_conversations","fixed":{"name":"list_conversations","description":"List the workspace's support conversations (agent/inbox view), newest activity first. Optionally filter by status or a free-text search over the contact name/email and last message. Returns a compact list: id, contact name, status, unreadCount, last message preview, updatedAt.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"limit":{"type":"integer","maximum":200,"description":"Max conversations to return (default 100).","exclusiveMinimum":0},"search":{"type":"string","description":"Free-text match on contact name/email and the last message preview."},"status":{"enum":["OPEN","PENDING","RESOLVED","SNOOZED"],"type":"string","description":"Only conversations with this status."}}},"annotations":{"readOnlyHint":true},"title":"List conversations"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":217,"tokensAfter":217},{"name":"list_knowledge","fixed":{"name":"list_knowledge","description":"List all knowledge documents for this workspace with their processing status (PENDING | PROCESSING | READY | FAILED) and chunk counts. Use this to check whether items added via add_knowledge have finished training.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true},"title":"List knowledge"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":85,"tokensAfter":85},{"name":"ping","fixed":{"name":"ping","description":"Health check for the SingChat MCP server. Returns 'pong' and whether this request is authenticated to a workspace.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true},"title":"Ping"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":54,"tokensAfter":54},{"name":"resolve_conversation","fixed":{"name":"resolve_conversation","description":"Mark a conversation as RESOLVED (closes it). The visitor's widget will no longer show it as active.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["conversationId"],"properties":{"conversationId":{"type":"string","minLength":1,"description":"The conversation id to resolve."}}},"annotations":{"readOnlyHint":true},"title":"Resolve conversation"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":104,"tokensAfter":104},{"name":"search","fixed":{"name":"search","description":"Search SingChat for relevant documents. When called with a workspace API key, this searches that workspace knowledge base; without a key it searches SingChat's own help content (what SingChat is, adding the chat widget, MCP setup, free tier, AI training, channels, white label, pricing). Returns a list of results with id, title, and url. Use the fetch tool with a result id to read the full text.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["query"],"properties":{"query":{"type":"string","description":"The search query or user question."}}},"annotations":{"readOnlyHint":true},"title":"Search"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":175,"tokensAfter":175},{"name":"search_knowledge","fixed":{"name":"search_knowledge","description":"Semantic search over the workspace knowledge base. Returns the most relevant chunks (with source document title and similarity score) for a query. Only searches documents that have finished training (status READY).","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["query"],"properties":{"topK":{"type":"integer","maximum":20,"minimum":1,"description":"Max number of chunks to return (default 5)."},"query":{"type":"string","minLength":1,"description":"The search query / user question."}}},"annotations":{"readOnlyHint":true},"title":"Search knowledge"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":161,"tokensAfter":161},{"name":"set_keywords","fixed":{"name":"set_keywords","description":"Add a keyword auto-reply rule: when an inbound message matches any of the keywords, the bot replies with the given text. Good for canned FAQ-style triggers (e.g. keyword 'invoice' -> 'Download it from the billing page').","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["keywords","reply"],"properties":{"reply":{"type":"string","maxLength":2000,"minLength":1,"description":"The reply text to send."},"keywords":{"type":"array","items":{"type":"string","maxLength":80,"minLength":1},"maxItems":20,"minItems":1,"description":"Trigger words/phrases (case-insensitive)."},"matchType":{"enum":["CONTAINS","EXACT"],"type":"string","description":"CONTAINS (default) = keyword appears anywhere in the message; EXACT = whole message equals the keyword."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true},"title":"Add keyword auto-reply"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":232,"tokensAfter":232},{"name":"singchat_setup","fixed":{"name":"singchat_setup","description":"Get the user up and running with SingChat live-chat. Call this FIRST. If no authenticated workspace is configured, this creates a brand-new free workspace and returns a short-lived, single-use browser claim link plus the website embed snippet. The user chooses their own sign-in details in the browser; no reusable credentials are returned to the model. If a workspace is already authenticated, it returns THIS workspace's embed snippet and dashboard link (it never creates a duplicate workspace).","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"name":{"type":"string","maxLength":120,"description":"Optional workspace/brand name for a newly created workspace. Ignored if a key is already set."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true},"title":"Set up SingChat"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":220,"tokensAfter":220}],"toolsChanged":13,"tokensSaved":0,"todo":[],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}