Boardroom Revenue Control

Read-only sales CRM for AI clients: leads, pipeline, AI-agent chats, calls, ad attribution.

我該用這個嗎

品質與安全性

B
說明品質
100%
結構描述完整度
64%
命名品質
80%
汙染風險
100%
權限相符程度
100%
協定合規性
100%

根據工具定義與協定合規性的自動化分析。

上下文成本

~2,728Token(工具定義)
~1.5 KB典型回應大小
顯著的注意力影響(128k 上下文的 2.13%)

這是每次將伺服器的工具載入模型上下文時所消耗的約略 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
}

社群

為此伺服器評分

證據

近期觀測

已驗證未記錄版本13 個工具