b24-mcp
A read-only Bitrix24 MCP server that lets an AI agent query fresh portal data via your personal webhook.
Verify the webhook connection and find people by ID, email, or name (
whoami,person_find).Read calendar events for a date window with attendees and host info (
calendar_events).List tasks by role, inspect task headers, read task discussions, and track task updates (
tasks_list,task_get,task_chat,tasks_updates).Read group/personal/project chats, list collaborative projects and their child chats, and read project discussions (
chat_read,projects_list,project_chats,project_read).List completed calls/meetings with ready AI follow-ups and fetch summaries, agreements, action items, participants, and optional transcripts (
followups_list,followup_get).Note: the README advertises
approvals,group_get,task_stages, andtask_result, but those tools are absent from this schema.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@b24-mcp list my tasks for today"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
b24-mcp
A local MCP server for Bitrix24. It gives your AI agent fresh data from your portal — calendar, tasks and their discussions, chats, collab projects, AI call analyses, and people cards.
Read-only. Works with any portal — cloud or on-premise — through your personal inbound webhook.
Why bother if the agent can already do HTTP
The agent can call REST itself. But then:
on every request it assembles the URL, remembers method names and API versions, parses the response;
the token passes through its environment on every call;
nothing stops it from calling a method that changes the portal.
The server removes this: the agent calls a business operation (tasks_list, task_chat), while transport, versions, pagination, and normalization live inside. Only read operations and only the listed ones are exposed — raw REST is not exposed at all.
Related MCP server: Bitrix24 MCP Bridge
What it can do (14 tools)
Tool | What it does |
| Who owns the webhook — a quick check that the connection is alive |
| Find a person: position, department, contacts, whether active |
| Events in a window: time, participants, who is the organizer, meeting or personal block |
| A person's tasks in the |
| Task header: description, status, deadline, whether there is a chat |
| Discussion inside the task — that's where the substance is, not in the fields |
| Task results: they are not in the chat, only a system line without text there |
| What is moving in your tasks over a window + what new ones appeared |
| Read a dialog: group chat or direct message |
| Collab projects by activity freshness |
| What a project consists of: child chats |
| Discussion in the project chat |
| Calls with a ready AI analysis over a window |
| Call analysis: topic, agreements, action items, transcript |
Responses are normalized: lists come as {items, count, limit}, markup is stripped, limits are clamped.
Installation
Python 3.11+ is required.
git clone <этот-репозиторий> b24-mcp && cd b24-mcp
python3 -m venv .venv
.venv/bin/python -m pip install -e .Configuration
1. Issue an inbound webhook on your portal. Developer section: Applications → Developers → Other → Inbound webhook.
Scopes used by the server:
Scope | What for |
| people and org structure |
| events |
| tasks |
| chats: task, personal, group, project |
| AI call analyses (everything else works without it) |
Fewer scopes — less risk. Start without call, add it when you need calls.
2. Put the webhook in .env:
cp .env.example .env
chmod 600 .env # сервер откажется читать файл, доступный другимB24_WEBHOOK=https://<твой-портал>/rest/<число>/<токен>/
B24_USER_ID=<твой id> # необязательно: определится сам через user.current3. Connect it to your MCP client. Example for Claude Code (~/.claude.json):
{
"mcpServers": {
"b24": {
"command": "/абсолютный/путь/b24-mcp/.venv/bin/python",
"args": ["-m", "b24_mcp.server"],
"env": { "B24_MCP_ENV": "/абсолютный/путь/b24-mcp/.env" }
}
}
}Restart the client and ask the agent: "check the connection to the portal" — it will call whoami.
Security
The token lives in
.envwith600permissions. The server checks permissions at startup and refuses to work if the file is readable by others.The token never appears in tool responses, logs, or error texts. The operation name and time are logged, not the URL.
Read-only. The client is created with write methods blocked at the transport level, and only the listed operations are exposed. Even a bug in a tool's code will not create a task or send a message.
Honest boundary: this removes the class of "secret accidentally leaked into command output," but it does not take the shell away from the agent. If it has filesystem access, it can still read
.env— just like any process running under your user.Only what the webhook owner is a participant in is visible. The server cannot reach other people's private chats and events.
If the token leaks — revoke the webhook on the portal and issue a new one; you only need to change
.env.
Development
.venv/bin/python -m pip install -e '.[dev]'
.venv/bin/python -m pytest -q --asyncio-mode=autoTests run without a network. They pin the tool list (a new one will not appear silently), the read-only barrier, the normalization contract, and the portal response shapes — including the ones that are easy to miss.
Two contract pitfalls that cost debugging time (covered by tests):
The call transcript is in the
transcriptionfield (nottranscript), the summary comes in segments ({segments: [{title, summary}]}), agreements and tasks are under theagreement/actionItemkeys, nottext. A miss gives a silently empty response, not an error.A call participant is identified by the
userIdfield, notid. Readingidwill returnNone— and the participant cannot be linked to a person.
Boundaries
The server deliberately does not do:
write operations — does not create tasks, send messages, or change the portal;
heavy runs — a full sweep of all correspondence over a month, exporting quarterly reports, summarizable traversals with checkpoints. A tool call lives within a single agent turn: there is a time ceiling and nowhere to save progress. Such tasks are solved by a separate script, not an MCP tool.
License
MIT.
Available Tools
13 toolscalendar_eventsB
События календаря: время, участники, кто host.
is_meeting + attendees дают отличить структурную встречу от личного
блока. Одиночное событие с проектным названием — спроси владельца, с кем
это, не классифицируй молча.
Inputs: days, start, user_id. Returns: result
chat_readA
Прочитать диалог, где ты участник: групповой чат или личку.
Вложения отдаются списком (имя, размер, disk_id) — ссылки на скачивание сюда не попадают, они могут нести auth-параметр.
Inputs: full, limit, chat_id, user_id, +1 more. Returns: result
followup_getA
Разбор звонка: тема, повестка, договорённости, action items, участники.
⚠️ action_items — СЫРЬЁ портала, а не готовый список твоих задач. Кому
принадлежит задача, решай по говорящему и адресату: «ты сделай» → владелец
адресат, «я сделаю» → владелец говорящий. Для этого бери transcript=True.
Inputs: call_id (required), transcript. Returns: result
followups_listC
Завершённые звонки с ГОТОВЫМ AI-разбором за окно.
Звонки без разбора портал не возвращает — пустой список это норма, а не сбой.
Inputs: days, user_id, max_items. Returns: result
person_findA
Найти человека на портале: должность, отдел, контакты, активен ли.
Зови ЭТО до обращения по ID — в крупной компании есть однофамильцы.
Inputs: query (required), limit. Returns: result
project_chatsA
Из чего состоит проект: дочерние чаты (задачи, синки, под-чаты).
Главный чат проекта сюда не входит — это и есть project_id.
Inputs: project_id (required). Returns: result
project_readC
Прочитать обсуждение в чате проекта.
Inputs: chat_id (required), days, limit, live_only. Returns: result
projects_listC
Проекты-коллабы по свежести активности.
Проект группирует чаты (задачи, синки, под-чаты); их содержания обычно нет в заметках — это прямой слой слепых пятен.
Inputs: limit. Returns: result
task_chatB
Обсуждение внутри задачи — там суть, а не в полях.
Системные записи (назначения, смены сроков) по умолчанию скрыты.
Inputs: task_id (required), full, limit, include_system. Returns: result
task_getB
Шапка задачи: тело, статус, дедлайн, есть ли чат обсуждения.
Inputs: task_id (required). Returns: result
tasks_listB
Задачи человека в выбранной роли.
Дефолт responsible = «висит лично на нём». У руководителя почти все
видимые задачи чужие (он постановщик/наблюдатель) — без роли список шумит.
Поле self_note помечает «заметки сам себе» (постановщик = исполнитель).
Inputs: role, limit, user_id, include_done. Returns: result
tasks_updatesA
Что шевелится в СВОИХ задачах за окно + какие появились новые.
Идёт по recent-хвосту, а не по списку своих member-задач (их тысячи → таймаут). Дёшево: последняя реплика уже приходит в recent.
Inputs: days, deep. Returns: result
whoamiA
Кто владелец подключённого вебхука. Быстрая проверка, что мост живой.
Inputs: no named parameters. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 13 tools
Each tool targets a distinct resource or aspect: calls (followups_list vs followup_get), tasks (list, get, chat, updates), people, projects, calendar, and chat. No overlapping purposes; descriptions clarify boundaries.
Mostly consistent verb_noun snake_case pattern (e.g., tasks_list, task_get, project_read). Minor inconsistencies: plural vs singular (tasks_list vs task_get, followups_list vs followup_get) and a standalone unlike whoami.
13 tools cover the apparent domain of a CRM portal (people, tasks, projects, calls, calendar, chats) without redundancy. Each tool earns its place for a focused integration.
Heavily read-oriented: tools retrieve data but lack create, update, or delete operations. Users can inspect tasks, projects, calls, and chats but cannot modify them, causing dead ends for agents needing to take action.
Maintenance
Related MCP Connectors
MCP server that delivers up-to-date Bitrix24 REST API documentation.
MCP server enabling AI agents to manage Bitrix24 features via standardized protocol
An MCP server that provides read access to your cloud storage providers, bank accounts and more.
Read-only MCP server for ClassQuill, a tutoring-business-management platform.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceMCP server for Bitrix24 CRM integration, enabling AI agents to manage contacts, deals, tasks, and more via natural language.7 npmMIT
- AlicenseNot gradedqualityBmaintenanceЛокальный MCP-сервер, дающий ИИ-агенту read-only доступ к задачам, проектам и чатам Bitrix24 в объёме прав пользователя — через браузерное расширение, переиспользующее живую сессию. Без прав администратора и без официального REST-вебхука.641 npmMIT
- AlicenseBqualityCmaintenanceUniversal MCP server for the Bitrix24 REST API, enabling full read and write access to CRM, tasks, calendar, disk, and more. Supports any MCP client with stdio or Streamable HTTP transport.881MIT
- AlicenseNot gradedqualityDmaintenanceA secure, self-hosted MCP server for Bitrix24 CRM that enables reading CRM data and performing confirmation-gated writes through schema discovery and OAuth integration.7 npmMIT