{"data":{"slug":"singchat","verdict":"passed","scannedAt":"2026-10-26T04:30:47.016Z","scannerVersion":"1.2.1","latest":{"id":"4bd37423-db21-48f9-8ac1-46aae728f89e","createdAt":"2026-10-26T04:30:47.016Z","version":"0.2.0","trigger":"tools_changed","scannerVersion":"1.2.1","verdict":"passed","checks":[{"id":"hidden_instructions","status":"passed","findings":0,"label":"Hidden instructions"},{"id":"hidden_text","status":"passed","findings":0,"label":"Invisible text"},{"id":"sensitive_access","status":"passed","findings":0,"label":"Access to credentials"},{"id":"remote_code","status":"passed","findings":0,"label":"Downloads and runs code"},{"id":"exfiltration","status":"passed","findings":0,"label":"Sends data out"},{"id":"secrets","status":"passed","findings":0,"label":"Leaked secrets"}],"findings":[],"toolCount":17},"history":[{"id":"4bd37423-db21-48f9-8ac1-46aae728f89e","createdAt":"2026-10-26T04:30:47.016Z","version":"0.2.0","trigger":"tools_changed","scannerVersion":"1.2.1","verdict":"passed","checks":[{"id":"hidden_instructions","status":"passed","findings":0,"label":"Hidden instructions"},{"id":"hidden_text","status":"passed","findings":0,"label":"Invisible text"},{"id":"sensitive_access","status":"passed","findings":0,"label":"Access to credentials"},{"id":"remote_code","status":"passed","findings":0,"label":"Downloads and runs code"},{"id":"exfiltration","status":"passed","findings":0,"label":"Sends data out"},{"id":"secrets","status":"passed","findings":0,"label":"Leaked secrets"}],"findings":[],"toolCount":17},{"id":"438e6cac-d264-4bb9-ad0c-446f07cc3035","createdAt":"2026-10-25T23:23:25.127Z","version":"0.2.0","trigger":"new","scannerVersion":"1.2.1","verdict":"passed","checks":[{"id":"hidden_instructions","status":"passed","findings":0,"label":"Hidden instructions"},{"id":"hidden_text","status":"passed","findings":0,"label":"Invisible text"},{"id":"sensitive_access","status":"passed","findings":0,"label":"Access to credentials"},{"id":"remote_code","status":"passed","findings":0,"label":"Downloads and runs code"},{"id":"exfiltration","status":"passed","findings":0,"label":"Sends data out"},{"id":"secrets","status":"passed","findings":0,"label":"Leaked secrets"}],"findings":[],"toolCount":null}],"endpoint":{"url":"https://mcp.singchat.org","transport":"streamable-http","status":"ok","checkedAt":"2026-10-26T04:29:52.466Z","toolCount":17,"latencyMs":830,"error":null},"tools":[{"name":"add_knowledge","title":"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.","access":"write","accessDeclared":false,"hash":"5e0ae1fea77e6e42d011b5d7425b2560cf7c8e182d268fd71c2b01d3a1eb6511","inputSchema":"{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"properties\": {\n    \"answer\": {\n      \"description\": \"The answer. Required when type='qa'.\",\n      \"type\": \"string\"\n    },\n    \"question\": {\n      \"description\": \"The question. Required when type='qa'.\",\n      \"type\": \"string\"\n    },\n    \"type\": {\n      \"description\": \"'url' to crawl a website, or 'qa' to add a question/answer pair.\",\n      \"enum\": [\n        \"url\",\n        \"qa\"\n      ],\n      \"type\": \"string\"\n    },\n    \"url\": {\n      \"description\": \"Website root URL to crawl. Required when type='url'.\",\n      \"format\": \"uri\",\n      \"type\": \"string\"\n    }\n  },\n  \"required\": [\n    \"type\"\n  ],\n  \"type\": \"object\"\n}"},{"name":"claim_account","title":"Claim SingChat account","description":"Return the link to claim (permanently secure) this SingChat workspace by setting an email and password. Use this for workspaces that were auto-created via MCP so the user does not lose access. The link is single-use and expires after 15 minutes. Requires an authenticated legacy workspace.","access":"unknown","accessDeclared":false,"hash":"fd962e425f4ee49ef0719f7f24b3f156911d6bcf4efff1282a8116b76ea886c6","inputSchema":"{\n  \"properties\": {},\n  \"type\": \"object\"\n}"},{"name":"configure_agent","title":"Configure AI agent","description":"Configure this workspace's AI support agent. All fields are optional, only the fields you pass are updated; the rest keep their current values. Call with no fields to just read back the current configuration. Does not touch or return any API keys.","access":"unknown","accessDeclared":false,"hash":"c53cf88584b5e0f80f1a9220e88d06074c9882627efd69edda7ee06fbbf41651","inputSchema":"{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"properties\": {\n    \"enabled\": {\n      \"description\": \"Turn the automated AI agent on (true) or off (false).\",\n      \"type\": \"boolean\"\n    },\n    \"greetingMessage\": {\n      \"description\": \"First message visitors see when they open the chat. Pass an empty string to clear it.\",\n      \"maxLength\": 2000,\n      \"type\": \"string\"\n    },\n    \"model\": {\n      \"description\": \"Chat model id, e.g. gpt-4o-mini.\",\n      \"maxLength\": 80,\n      \"minLength\": 1,\n      \"type\": \"string\"\n    },\n    \"providerMode\": {\n      \"description\": \"'platform' = platform-hosted keys (billed via AI credits); 'byok' = bring your own key.\",\n      \"enum\": [\n        \"platform\",\n        \"byok\"\n      ],\n      \"type\": \"string\"\n    },\n    \"systemPrompt\": {\n      \"description\": \"The agent's system prompt / persona and answering rules.\",\n      \"maxLength\": 8000,\n      \"minLength\": 1,\n      \"type\": \"string\"\n    }\n  },\n  \"type\": \"object\"\n}"},{"name":"fetch","title":"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.","access":"read","accessDeclared":false,"hash":"819ded6562dd9fd87be7eb9d059a153ec45e8c96c290eb1554bb4c56a856a488","inputSchema":"{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"properties\": {\n    \"id\": {\n      \"description\": \"The document id returned by the search tool.\",\n      \"type\": \"string\"\n    }\n  },\n  \"required\": [\n    \"id\"\n  ],\n  \"type\": \"object\"\n}"},{"name":"get_analytics","title":"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).","access":"read","accessDeclared":false,"hash":"acdfb555767f1a1c0634ba406e5d021b6c33019356e183f36a002af0875e930a","inputSchema":"{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"properties\": {\n    \"days\": {\n      \"default\": 30,\n      \"description\": \"Look-back window in days for the conversation/message stats (default 30).\",\n      \"maximum\": 365,\n      \"minimum\": 1,\n      \"type\": \"integer\"\n    }\n  },\n  \"type\": \"object\"\n}"},{"name":"get_conversation","title":"Get conversation","description":"Fetch a single conversation with its contact details and the most recent messages (oldest→newest).","access":"read","accessDeclared":false,"hash":"46b1745d71697aa64fe7745328fdfdd5098a1868c16a94a6372907586954b0c4","inputSchema":"{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"properties\": {\n    \"conversationId\": {\n      \"description\": \"The conversation id (from list_conversations).\",\n      \"minLength\": 1,\n      \"type\": \"string\"\n    }\n  },\n  \"required\": [\n    \"conversationId\"\n  ],\n  \"type\": \"object\"\n}"},{"name":"get_embed_snippet","title":"Get widget 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.","access":"read","accessDeclared":false,"hash":"6299b6db6cb2e004233f3cd3fb171988e34420244896b8cfd30b9b72318cfcfd","inputSchema":"{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"properties\": {\n    \"platform\": {\n      \"description\": \"Which snippet to return. Omit to get all three.\",\n      \"enum\": [\n        \"html\",\n        \"react\",\n        \"next\"\n      ],\n      \"type\": \"string\"\n    }\n  },\n  \"type\": \"object\"\n}"},{"name":"list_conversations","title":"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.","access":"read","accessDeclared":false,"hash":"7b9852c9663993bd80224c16b1cc901d60a6b9b7135e27fb7648dda3486038e0","inputSchema":"{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"properties\": {\n    \"limit\": {\n      \"description\": \"Max conversations to return (default 100).\",\n      \"exclusiveMinimum\": 0,\n      \"maximum\": 200,\n      \"type\": \"integer\"\n    },\n    \"search\": {\n      \"description\": \"Free-text match on contact name/email and the last message preview.\",\n      \"type\": \"string\"\n    },\n    \"status\": {\n      \"description\": \"Only conversations with this status.\",\n      \"enum\": [\n        \"OPEN\",\n        \"PENDING\",\n        \"RESOLVED\",\n        \"SNOOZED\"\n      ],\n      \"type\": \"string\"\n    }\n  },\n  \"type\": \"object\"\n}"},{"name":"list_knowledge","title":"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.","access":"read","accessDeclared":false,"hash":"4202845614a524ade05c6c982c627eb723748e64a81572a4619eddb28cac4f9c","inputSchema":"{\n  \"properties\": {},\n  \"type\": \"object\"\n}"},{"name":"manage_faq","title":"Manage FAQ","description":"List, create, update, or delete this workspace's FAQ items (shown in the chat widget and usable by the AI agent). Set `action` to 'list' | 'create' | 'update' | 'delete'. 'create' needs `question` + `answer`; 'update' and 'delete' need `id`.","access":"unknown","accessDeclared":false,"hash":"b0c0b9adf907165c965d86a0367ad3155cce9002d5824348025af629ca89c983","inputSchema":"{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"properties\": {\n    \"action\": {\n      \"description\": \"Which FAQ operation to run.\",\n      \"enum\": [\n        \"list\",\n        \"create\",\n        \"update\",\n        \"delete\"\n      ],\n      \"type\": \"string\"\n    },\n    \"answer\": {\n      \"description\": \"Answer text. Required for 'create'; optional for 'update'.\",\n      \"maxLength\": 4000,\n      \"minLength\": 1,\n      \"type\": \"string\"\n    },\n    \"enabled\": {\n      \"description\": \"Whether the FAQ item is visible/active. Optional for 'create' and 'update'.\",\n      \"type\": \"boolean\"\n    },\n    \"id\": {\n      \"description\": \"FAQ item id. Required for 'update' and 'delete'.\",\n      \"type\": \"string\"\n    },\n    \"question\": {\n      \"description\": \"Question text. Required for 'create'; optional for 'update'.\",\n      \"maxLength\": 500,\n      \"minLength\": 1,\n      \"type\": \"string\"\n    }\n  },\n  \"required\": [\n    \"action\"\n  ],\n  \"type\": \"object\"\n}"},{"name":"ping","title":"Ping","description":"Health check for the SingChat MCP server. Returns 'pong' and whether this request is authenticated to a workspace.","access":"unknown","accessDeclared":false,"hash":"f45fc976909638701e1c016179cafc6d0f3789b9c69f2885dc1073e91bedcba7","inputSchema":"{\n  \"properties\": {},\n  \"type\": \"object\"\n}"},{"name":"reply_to_conversation","title":"Reply to conversation","description":"Send an agent reply through a supported SingChat real-time inbox. This takes the conversation over from the AI and broadcasts the message to the visitor and agent inbox. Email, Telegram, and WhatsApp conversations are rejected before any change.","access":"write","accessDeclared":false,"hash":"d3712b2bd8f0dafb41ca7056de70a426bb1f489cab68eeb005b78ab3258043ea","inputSchema":"{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"properties\": {\n    \"content\": {\n      \"description\": \"The reply text to send to the visitor.\",\n      \"minLength\": 1,\n      \"type\": \"string\"\n    },\n    \"conversationId\": {\n      \"description\": \"The conversation id to reply in.\",\n      \"minLength\": 1,\n      \"type\": \"string\"\n    }\n  },\n  \"required\": [\n    \"conversationId\",\n    \"content\"\n  ],\n  \"type\": \"object\"\n}"},{"name":"resolve_conversation","title":"Resolve conversation","description":"Mark a conversation as RESOLVED (closes it). The visitor's widget will no longer show it as active.","access":"unknown","accessDeclared":false,"hash":"74560883d30e4ae531f27fd4f888671361b7aae171e8e4645fdc34b7b9cff9e8","inputSchema":"{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"properties\": {\n    \"conversationId\": {\n      \"description\": \"The conversation id to resolve.\",\n      \"minLength\": 1,\n      \"type\": \"string\"\n    }\n  },\n  \"required\": [\n    \"conversationId\"\n  ],\n  \"type\": \"object\"\n}"},{"name":"search","title":"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.","access":"read","accessDeclared":false,"hash":"edd348cbd82efcd3c6a3012cc9c68185d18f1e5ee4f2dc597fa25503601b7d8e","inputSchema":"{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"properties\": {\n    \"query\": {\n      \"description\": \"The search query or user question.\",\n      \"type\": \"string\"\n    }\n  },\n  \"required\": [\n    \"query\"\n  ],\n  \"type\": \"object\"\n}"},{"name":"search_knowledge","title":"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).","access":"read","accessDeclared":false,"hash":"dda89924b30c14cfb3ef02ce39d28184aa70715932e5657a0d507cc960efac55","inputSchema":"{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"properties\": {\n    \"query\": {\n      \"description\": \"The search query / user question.\",\n      \"minLength\": 1,\n      \"type\": \"string\"\n    },\n    \"topK\": {\n      \"description\": \"Max number of chunks to return (default 5).\",\n      \"maximum\": 20,\n      \"minimum\": 1,\n      \"type\": \"integer\"\n    }\n  },\n  \"required\": [\n    \"query\"\n  ],\n  \"type\": \"object\"\n}"},{"name":"set_keywords","title":"Add keyword auto-reply","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').","access":"write","accessDeclared":false,"hash":"ef0da9f33c5ffb768c635fa009905542d0a91105a59479dc60d7fe8fee95f347","inputSchema":"{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"properties\": {\n    \"keywords\": {\n      \"description\": \"Trigger words/phrases (case-insensitive).\",\n      \"items\": {\n        \"maxLength\": 80,\n        \"minLength\": 1,\n        \"type\": \"string\"\n      },\n      \"maxItems\": 20,\n      \"minItems\": 1,\n      \"type\": \"array\"\n    },\n    \"matchType\": {\n      \"description\": \"CONTAINS (default) = keyword appears anywhere in the message; EXACT = whole message equals the keyword.\",\n      \"enum\": [\n        \"CONTAINS\",\n        \"EXACT\"\n      ],\n      \"type\": \"string\"\n    },\n    \"reply\": {\n      \"description\": \"The reply text to send.\",\n      \"maxLength\": 2000,\n      \"minLength\": 1,\n      \"type\": \"string\"\n    }\n  },\n  \"required\": [\n    \"keywords\",\n    \"reply\"\n  ],\n  \"type\": \"object\"\n}"},{"name":"singchat_setup","title":"Set up SingChat","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).","access":"unknown","accessDeclared":false,"hash":"cef39a904b199a87fb02a5d66f600a5faaaefd4029e5e1ff01c4849d8aaf5f4f","inputSchema":"{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"properties\": {\n    \"name\": {\n      \"description\": \"Optional workspace/brand name for a newly created workspace. Ignored if a key is already set.\",\n      \"maxLength\": 120,\n      \"type\": \"string\"\n    }\n  },\n  \"type\": \"object\"\n}"}],"toolsHash":"524e8a352bc25e15149ef64daac31270d11767523800b6b7be6567a7fb2feecc","toolsPinnedAt":"2026-10-26T04:29:52.480Z","toolsLastSeenAt":"2026-10-26T04:29:52.466Z","toolChanges":[]}}