Boardroom Revenue Control
Read-only sales CRM for AI clients: leads, pipeline, AI-agent chats, calls, ad attribution.
我该使用它吗
质量与安全性
基于对工具定义和协议合规性的自动分析。
上下文开销
这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。
安装
一键安装
将以下内容添加到你的 `claude_desktop_config.json` 文件中:
{
"mcpServers": {
"boro-ai": {
"url": "https://control.boardroom-ai.ae/mcp"
}
}
}远程端点
https://control.boardroom-ai.ae/mcpstreamable-http它能做什么
工具清单
工具(13)
🟢whoami
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.
输入模式
{
"type": "object",
"properties": {},
"additionalProperties": false
}输出模式
{
"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
}🟢crm_list_leads(stage, pipeline_id, since, limit, offset)
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]
输入模式
{
"type": "object",
"properties": {
"stage": {
"type": "string",
"description": "Stage name, exact (case-insensitive). Omit for all stages."
},
"pipeline_id": {
"type": "string",
"format": "uuid",
"description": "UUID of one pipeline. Omit for all."
},
"since": {
"type": "string",
"description": "today | yesterday | week | month | 7d | 30d | ISO timestamp. Days are Asia/Dubai."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 200,
"default": 50,
"description": "Maximum number of rows to return."
},
"offset": {
"type": "integer",
"minimum": 0,
"maximum": 5000,
"default": 0,
"description": "Rows to skip before the first returned row (for paging)."
}
},
"additionalProperties": false
}输出模式
{
"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
}🟢crm_get_lead(lead_id)
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]
输入模式
{
"type": "object",
"properties": {
"lead_id": {
"type": "string",
"format": "uuid",
"description": "UUID of the lead."
}
},
"required": [
"lead_id"
],
"additionalProperties": false
}输出模式
{
"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
}🟢crm_pipeline_overview
Every pipeline and stage with its lead count and total value. The shape of the funnel. [scope: crm:read]
输入模式
{
"type": "object",
"properties": {},
"additionalProperties": false
}输出模式
{
"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
}🟢crm_leads_without_task(limit)
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]
输入模式
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 200,
"default": 50,
"description": "Maximum number of rows to return."
}
},
"additionalProperties": false
}输出模式
{
"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
}🟢ad_attribution(since, limit)
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]
输入模式
{
"type": "object",
"properties": {
"since": {
"type": "string",
"description": "today | week | month | 30d | ISO timestamp (Asia/Dubai days)."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 500,
"default": 100,
"description": "Maximum number of rows to return."
}
},
"additionalProperties": false
}输出模式
{
"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
}🟢agent_conversations(since, limit)
Conversations the AI agent handled, with intent, language, message count and the deal they bound to. Contacts masked. [scope: agent:read]
输入模式
{
"type": "object",
"properties": {
"since": {
"type": "string",
"description": "today | week | month | 7d | ISO timestamp (Asia/Dubai days)."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 200,
"default": 50,
"description": "Maximum number of rows to return."
}
},
"additionalProperties": false
}输出模式
{
"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
}🟢agent_get_conversation(conversation_id, limit)
One conversation with its transcript — what the customer wrote and what the agent answered. [scope: agent:read]
输入模式
{
"type": "object",
"properties": {
"conversation_id": {
"type": "string",
"format": "uuid",
"description": "UUID from agent_conversations."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 500,
"default": 100,
"description": "Maximum number of rows to return."
}
},
"required": [
"conversation_id"
],
"additionalProperties": false
}输出模式
{
"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
}🟢dashboard_snapshot
The workspace's own KPI contract as the dashboard renders it, with the time it was built. [scope: crm:read]
输入模式
{
"type": "object",
"properties": {},
"additionalProperties": false
}输出模式
{
"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
}🟢marketing_snapshot
Advertising performance: spend, reach, clicks, cost per lead, per campaign, plus the CRM join. [scope: marketing:read]
输入模式
{
"type": "object",
"properties": {},
"additionalProperties": false
}输出模式
{
"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
}🟢agent_config
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]
输入模式
{
"type": "object",
"properties": {},
"additionalProperties": false
}输出模式
{
"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
}🟢partner_overview
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]
输入模式
{
"type": "object",
"properties": {},
"additionalProperties": false
}输出模式
{
"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
}🟢voice_calls(since, limit)
Calls with direction, disposition and talk time. Customer numbers masked. [scope: crm:read]
输入模式
{
"type": "object",
"properties": {
"since": {
"type": "string",
"description": "today | week | month | 7d | ISO timestamp (Asia/Dubai days)."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 200,
"default": 50,
"description": "Maximum number of rows to return."
}
},
"additionalProperties": false
}输出模式
{
"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
}社区
证据