{"server":"io.github.boardroomgen-ai-ae/boro-ai","count":13,"tools":[{"name":"ad_attribution","title":"Ad attribution","description":"Which advertisement produced which conversation: ad id, creative, first-touch flag, and the lead it bound to. The per-click id is NOT returned — only whether one exists. An empty result means no ad-driven conversation has been recorded in the window, not that the tool failed. [scope: marketing:read]","input_schema":{"type":"object","properties":{"limit":{"type":"integer","default":100,"maximum":500,"minimum":1,"description":"Maximum number of rows to return."},"since":{"type":"string","description":"today | week | month | 30d | ISO timestamp (Asia/Dubai days)."}},"additionalProperties":false},"output_schema":{"type":"object","properties":{"ok":{"type":"boolean","description":"False when the call was refused or failed; see error."},"error":{"description":"Machine-readable refusal code (a string), present only when ok is false."},"message":{"description":"Human-readable explanation of a refusal (a string)."}},"additionalProperties":true},"annotations":{"title":"Ad attribution","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-19T14:56:50.125Z"},{"name":"agent_config","title":"AI-agent configuration","description":"How the AI agent is set up for this workspace: mode and persona, working hours, hand-over rules, follow-up cadence, trigger list, actions, voice scenarios, and the TITLES of its knowledge documents. Document text is not returned — the list answers what the agent knows about; reading one whole is a separate, narrower ask. No credential of any kind is reachable from here: an agent's instructions are not its keys. [scope: agent:read]","input_schema":{"type":"object","properties":{},"additionalProperties":false},"output_schema":{"type":"object","properties":{"ok":{"type":"boolean","description":"False when the call was refused or failed; see error."},"error":{"description":"Machine-readable refusal code (a string), present only when ok is false."},"message":{"description":"Human-readable explanation of a refusal (a string)."}},"additionalProperties":true},"annotations":{"title":"AI-agent configuration","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-19T14:56:50.125Z"},{"name":"agent_conversations","title":"AI-agent conversations","description":"Conversations the AI agent handled, with intent, language, message count and the deal they bound to. Contacts masked. [scope: agent:read]","input_schema":{"type":"object","properties":{"limit":{"type":"integer","default":50,"maximum":200,"minimum":1,"description":"Maximum number of rows to return."},"since":{"type":"string","description":"today | week | month | 7d | ISO timestamp (Asia/Dubai days)."}},"additionalProperties":false},"output_schema":{"type":"object","properties":{"ok":{"type":"boolean","description":"False when the call was refused or failed; see error."},"error":{"description":"Machine-readable refusal code (a string), present only when ok is false."},"message":{"description":"Human-readable explanation of a refusal (a string)."}},"additionalProperties":true},"annotations":{"title":"AI-agent conversations","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-19T14:56:50.125Z"},{"name":"agent_get_conversation","title":"One conversation transcript","description":"One conversation with its transcript — what the customer wrote and what the agent answered. [scope: agent:read]","input_schema":{"type":"object","required":["conversation_id"],"properties":{"limit":{"type":"integer","default":100,"maximum":500,"minimum":1,"description":"Maximum number of rows to return."},"conversation_id":{"type":"string","format":"uuid","description":"UUID from agent_conversations."}},"additionalProperties":false},"output_schema":{"type":"object","properties":{"ok":{"type":"boolean","description":"False when the call was refused or failed; see error."},"error":{"description":"Machine-readable refusal code (a string), present only when ok is false."},"message":{"description":"Human-readable explanation of a refusal (a string)."}},"additionalProperties":true},"annotations":{"title":"One conversation transcript","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-19T14:56:50.125Z"},{"name":"crm_get_lead","title":"Get one lead","description":"One lead — notes, events, stage history and open tasks. Phone, e-mail and messenger ids are MASKED unless this key also holds crm:read_pii, which the workspace owner grants separately. Scoped to this workspace: a lead id from elsewhere reads as not_found. [scope: crm:read]","input_schema":{"type":"object","required":["lead_id"],"properties":{"lead_id":{"type":"string","format":"uuid","description":"UUID of the lead."}},"additionalProperties":false},"output_schema":{"type":"object","properties":{"ok":{"type":"boolean","description":"False when the call was refused or failed; see error."},"error":{"description":"Machine-readable refusal code (a string), present only when ok is false."},"message":{"description":"Human-readable explanation of a refusal (a string)."}},"additionalProperties":true},"annotations":{"title":"Get one lead","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-19T14:56:50.125Z"},{"name":"crm_leads_without_task","title":"Leads without a follow-up task","description":"Open leads with no unfinished task against them — the follow-up leak. Sorted by idle time, longest first. Idle days are counted in Asia/Dubai. [scope: crm:read]","input_schema":{"type":"object","properties":{"limit":{"type":"integer","default":50,"maximum":200,"minimum":1,"description":"Maximum number of rows to return."}},"additionalProperties":false},"output_schema":{"type":"object","properties":{"ok":{"type":"boolean","description":"False when the call was refused or failed; see error."},"error":{"description":"Machine-readable refusal code (a string), present only when ok is false."},"message":{"description":"Human-readable explanation of a refusal (a string)."}},"additionalProperties":true},"annotations":{"title":"Leads without a follow-up task","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-19T14:56:50.125Z"},{"name":"crm_list_leads","title":"List leads","description":"Leads in this workspace, newest activity first. Phone and email are MASKED here — use crm_get_lead for one record when the full contact is genuinely needed. `total` is the count before paging, so it answers 'how many leads exist'. [scope: crm:read]","input_schema":{"type":"object","properties":{"limit":{"type":"integer","default":50,"maximum":200,"minimum":1,"description":"Maximum number of rows to return."},"since":{"type":"string","description":"today | yesterday | week | month | 7d | 30d | ISO timestamp. Days are Asia/Dubai."},"stage":{"type":"string","description":"Stage name, exact (case-insensitive). Omit for all stages."},"offset":{"type":"integer","default":0,"maximum":5000,"minimum":0,"description":"Rows to skip before the first returned row (for paging)."},"pipeline_id":{"type":"string","format":"uuid","description":"UUID of one pipeline. Omit for all."}},"additionalProperties":false},"output_schema":{"type":"object","properties":{"ok":{"type":"boolean","description":"False when the call was refused or failed; see error."},"error":{"description":"Machine-readable refusal code (a string), present only when ok is false."},"message":{"description":"Human-readable explanation of a refusal (a string)."}},"additionalProperties":true},"annotations":{"title":"List leads","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-19T14:56:50.125Z"},{"name":"crm_pipeline_overview","title":"Pipeline overview","description":"Every pipeline and stage with its lead count and total value. The shape of the funnel. [scope: crm:read]","input_schema":{"type":"object","properties":{},"additionalProperties":false},"output_schema":{"type":"object","properties":{"ok":{"type":"boolean","description":"False when the call was refused or failed; see error."},"error":{"description":"Machine-readable refusal code (a string), present only when ok is false."},"message":{"description":"Human-readable explanation of a refusal (a string)."}},"additionalProperties":true},"annotations":{"title":"Pipeline overview","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-19T14:56:50.125Z"},{"name":"dashboard_snapshot","title":"Dashboard snapshot","description":"The workspace's own KPI contract as the dashboard renders it, with the time it was built. [scope: crm:read]","input_schema":{"type":"object","properties":{},"additionalProperties":false},"output_schema":{"type":"object","properties":{"ok":{"type":"boolean","description":"False when the call was refused or failed; see error."},"error":{"description":"Machine-readable refusal code (a string), present only when ok is false."},"message":{"description":"Human-readable explanation of a refusal (a string)."}},"additionalProperties":true},"annotations":{"title":"Dashboard snapshot","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-19T14:56:50.125Z"},{"name":"marketing_snapshot","title":"Marketing snapshot","description":"Advertising performance: spend, reach, clicks, cost per lead, per campaign, plus the CRM join. [scope: marketing:read]","input_schema":{"type":"object","properties":{},"additionalProperties":false},"output_schema":{"type":"object","properties":{"ok":{"type":"boolean","description":"False when the call was refused or failed; see error."},"error":{"description":"Machine-readable refusal code (a string), present only when ok is false."},"message":{"description":"Human-readable explanation of a refusal (a string)."}},"additionalProperties":true},"annotations":{"title":"Marketing snapshot","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-19T14:56:50.125Z"},{"name":"partner_overview","title":"Partner overview","description":"This partner's own cabinet: referral code and link, the clients who registered through it, the agreed commission rate, what has accrued so far, and which client workspaces this partner currently holds a grant for. Only answers for a token bound to a partner. [scope: partner:read]","input_schema":{"type":"object","properties":{},"additionalProperties":false},"output_schema":{"type":"object","properties":{"ok":{"type":"boolean","description":"False when the call was refused or failed; see error."},"error":{"description":"Machine-readable refusal code (a string), present only when ok is false."},"message":{"description":"Human-readable explanation of a refusal (a string)."}},"additionalProperties":true},"annotations":{"title":"Partner overview","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-19T14:56:50.125Z"},{"name":"voice_calls","title":"Voice calls","description":"Calls with direction, disposition and talk time. Customer numbers masked. [scope: crm:read]","input_schema":{"type":"object","properties":{"limit":{"type":"integer","default":50,"maximum":200,"minimum":1,"description":"Maximum number of rows to return."},"since":{"type":"string","description":"today | week | month | 7d | ISO timestamp (Asia/Dubai days)."}},"additionalProperties":false},"output_schema":{"type":"object","properties":{"ok":{"type":"boolean","description":"False when the call was refused or failed; see error."},"error":{"description":"Machine-readable refusal code (a string), present only when ok is false."},"message":{"description":"Human-readable explanation of a refusal (a string)."}},"additionalProperties":true},"annotations":{"title":"Voice calls","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-19T14:56:50.125Z"},{"name":"whoami","title":"Who am I (token and workspace)","description":"Who this token is, which workspace it can read, and which scopes it carries. Call this first: it tells you which of the other tools will work.","input_schema":{"type":"object","properties":{},"additionalProperties":false},"output_schema":{"type":"object","properties":{"ok":{"type":"boolean","description":"False when the call was refused or failed; see error."},"error":{"description":"Machine-readable refusal code (a string), present only when ok is false."},"message":{"description":"Human-readable explanation of a refusal (a string)."}},"additionalProperties":true},"annotations":{"title":"Who am I (token and workspace)","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-19T14:56:50.125Z"}],"next_cursor":null,"next_actions":[{"action":"get_connection","description":"Connection block to call these tools","href":"/v1/servers/io.github.boardroomgen-ai-ae%2Fboro-ai/connection?target=mcpServers","arguments":{"name":"io.github.boardroomgen-ai-ae/boro-ai","target":"mcpServers"}},{"action":"get_server","description":"Full descriptor with trust and connectability","href":"/v1/servers/io.github.boardroomgen-ai-ae%2Fboro-ai","arguments":{"name":"io.github.boardroomgen-ai-ae/boro-ai"}}]}