Bitrix24 MCP Server
# Bitrix24 MCP Server
[](https://opensource.org/licenses/MIT)
[](https://www.python.org/downloads/release/python-3120/)
[](https://github.com/astral-sh/ruff)
Интеграционный сервер, использующий Model Context Protocol (MCP), для предоставления доступа к данным и функциям Bitrix24 для больших языковых моделей (LLM) и других AI-агентов. LLM могут безопасно взаимодействовать с вашими CRM-данными (контакты, сделки), используя предопределенные "инструменты" и "ресурсы", предоставляемые этим сервером через стандартный протокол MCP.
## Ключевые Особенности
* **Интеграция с Bitrix24:** Доступ к контактам и сделкам через Bitrix24 REST API.
* **Model Context Protocol (MCP):** Предоставляет стандартизированный интерфейс для взаимодействия с AI-моделями.
* **Инструменты (Tools):** Функции, которые AI может вызывать (например, поиск контактов, обновление стадии сделки).
* **Ресурсы (Resources):** Данные, которые AI может запрашивать (например, информация о конкретном контакте или список активных сделок).
* **Промпты (Prompts):** Шаблоны для генерации запросов к AI.
* **Асинхронность:** Построен на `asyncio` для эффективной обработки запросов.
* **Внедрение Зависимостей:** Использует `wireup` для управления зависимостями.
* **Конфигурируемость:** Настройки управляются через переменные окружения.
* **Структурированное Логирование:** Использует `structlog` для удобного отслеживания событий.
* **Расширяемость:** Легко добавлять поддержку новых сущностей Bitrix24 или новые MCP инструменты/ресурсы.
## Технологии
* Python 3.12+
* [Fast-Bitrix24](https://github.com/leshchenko1979/fast_bitrix24): Клиент для Bitrix24 REST API
* [MCP (Model Context Protocol)](https://github.com/mentalcalculation/mcp): Фреймворк для создания MCP серверов (`fastmcp`)
* [Pydantic & Pydantic-Settings](https://docs.pydantic.dev/): Валидация данных и управление настройками
* [Structlog](https://www.structlog.org/): Структурированное логирование
* [Ruff](https://github.com/astral-sh/ruff): Линтер и форматер кода
* Asyncio
* [Dishka](https://pypi.org/project/dishka/): CLI-утилиты для управления зависимостями и скриптами
## Начало Работы
### Предварительные Требования
1. **Python:** Версия 3.12 или выше.
2. **Bitrix24:**
* Аккаунт Bitrix24 (облачный или коробочный).
* Входящий вебхук (Webhook) с необходимыми правами (как минимум `crm`). [Как создать вебхук](https://helpdesk.bitrix24.ru/open/20886106/).
### Конфигурация
Серверу требуется задать переменную окружения `BITRIX_WEBHOOK_URL`:
```bash
export BITRIX_WEBHOOK_URL="https://your-domain.bitrix24.ru/rest/1/yoursecretcode/"
```
### Запуск Сервера
запустите MCP сервер:
```bash
uvx bitrix24-mcp
```
Вы увидите логи в консоли, включая информацию о зарегистрированных MCP инструментах и ресурсах.
### Запуск Тестового Скрипта
Для проверки базовой работоспособности интеграции с Bitrix24 API можно запустить тестовый скрипт:
```bash
python test_services.py
```
Скрипт выполнит несколько запросов к API Bitrix24 (получение списка контактов, получение контакта по ID, и т.д.) и выведет результаты.
## Использование
Запущенный MCP сервер готов принимать запросы от MCP-совместимых клиентов или LLM.
### Доступные MCP Инструменты (Tools)
Инструменты - это функции, которые AI может попросить выполнить.
* `tool://get_contact`
* **Описание:** Получение информации о контакте по ID.
* **Параметры:** `contact_id: int`
* **Возвращает:** JSON-строка с данными контакта.
* `tool://search_contacts`
* **Описание:** Поиск контактов по имени, телефону или email.
* **Параметры:** `query: str`, `search_type: str = "name"` (`name`, `phone`, `email`), `limit: int = 10`
* **Возвращает:** JSON-строка со списком найденных контактов.
* `tool://list_contacts`
* **Описание:** Получение списка контактов с возможностью фильтрации.
* **Параметры:** `limit: int = 50`, `company_id: int | None = None`
* **Возвращает:** JSON-строка со списком контактов.
* `tool://get_deal`
* **Описание:** Получение информации о сделке по ID.
* **Параметры:** `deal_id: int`
* **Возвращает:** JSON-строка с данными сделки.
* `tool://list_deals`
* **Описание:** Получение списка сделок с возможностью фильтрации.
* **Параметры:** `active_only: bool = False`, `contact_id: int | None = None`, `company_id: int | None = None`, `limit: int = 50`
* **Возвращает:** JSON-строка со списком сделок.
* `tool://update_deal_stage`
* **Описание:** Обновление стадии сделки.
* **Параметры:** `deal_id: int`, `stage_id: str` (например, `C14:WON`)
* **Возвращает:** JSON-строка с результатом операции (`{"success": true/false, "message": "..."}`).
### Доступные MCP Ресурсы (Resources)
Ресурсы - это данные, которые AI может запросить по URI.
* `contact://{contact_id}`
* **Описание:** Получение данных контакта по ID в читаемом формате.
* **Пример:** `contact://123`
* **Возвращает:** Текстовое представление данных контакта.
* `deal://{deal_id}`
* **Описание:** Получение данных сделки по ID в читаемом формате.
* **Пример:** `deal://456`
* **Возвращает:** Текстовое представление данных сделки.
* `deals://active`
* **Описание:** Получение списка активных сделок в читаемом формате.
* **Пример:** `deals://active`
* **Возвращает:** Текстовое представление списка активных сделок.
## Разработка и Участие
Мы приветствуем контрибьюторов!
### Настройка Среды Разработки
1. Выполните шаги из раздела [Установка](#установка).
2. Установите зависимости для разработки:
```bash
uv sync
```
### Качество Кода
* **Форматирование и Линтинг:** Используется `ruff`. Перед коммитом рекомендуется запускать:
```bash
ruff format .
ruff check . --fix
```
* **Типизация:** Проект использует строгую типизацию Python.
### Процесс Внесения Изменений
1. **Создайте Issue:** Опишите проблему или предлагаемое улучшение в разделе Issues репозитория.
2. **Форкните репозиторий:** Создайте свою копию проекта.
3. **Создайте ветку:** `git checkout -b feature/your-feature-name` или `bugfix/issue-number`.
4. **Внесите изменения:** Напишите код и тесты (если применимо).
5. **Проверьте качество кода:** Запустите `ruff`.
6. **Сделайте коммит:** `git commit -m "feat: Add support for Bitrix24 Leads"` (следуйте [Conventional Commits](https://www.conventionalcommits.org/) если возможно).
7. **Отправьте изменения в ваш форк:** `git push origin feature/your-feature-name`.
8. **Создайте Pull Request:** Откройте Pull Request из вашей ветки в `main` ветку основного репозитория. Опишите внесенные изменения и свяжите PR с созданным Issue.
## Лицензия
Этот проект лицензирован под лицензией MIT — см. файл [LICENSE](LICENSE) для подробностей.
TDQS
Scored across 6 tools
Every tool has a clearly distinct purpose with no ambiguity. Tools target specific resources (contacts vs. deals) and actions (get, list, search, update), making misselection unlikely. For example, get_contact and search_contacts serve different retrieval needs, while update_deal_stage is the only modification tool.
All tools follow a consistent verb_noun pattern with snake_case throughout. The naming is predictable: get_contact, get_deal, list_contacts, list_deals, search_contacts, and update_deal_stage. This uniformity aids agent understanding and tool selection.
Six tools is reasonable for a CRM-focused server, but it feels slightly under-scoped. While core read operations are covered, there are no create, update (except for deal stage), or delete tools, which might limit functionality. However, the count itself is well within typical ranges.
There are notable gaps in the tool surface for a CRM domain. It provides good read/search coverage for contacts and deals, but lacks create, update (beyond deal stage), and delete operations. This could cause agent failures when full CRUD workflows are needed, though basic retrieval tasks are supported.