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,728토큰 (도구 정의)
~1.5 KB일반적인 응답 크기
상당한 주의 영향 (128k 컨텍스트의 2.13%)

이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.

설치

원클릭 설치

`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개