kaiten-mcp
kaiten-mcp
MCP-сервер для Kaiten — интеграция канбан-досок и задач Kaiten с AI-ассистентами (Cursor, Claude Code и любым MCP-клиентом).
Управляйте карточками прямо из чата: создавайте задачи, перемещайте по колонкам, обновляйте описания, оставляйте комментарии и теги — без ручного копирования из веб-интерфейса и без огромных JSON-ответов API в контексте модели.
Зачем это нужно
Подключить Kaiten к Cursor / Claude Code через Model Context Protocol
Работать с пространствами, досками, колонками и карточками голосом агента
Экономить токены: ответы компактные по умолчанию (описания — только по запросу)
Развернуть локально (stdio) или для команды (Streamable HTTP / Docker / Kubernetes)
Возможности
Локальный транспорт stdio для Cursor и Claude Code
Удалённый Streamable HTTP (
POST /mcp) для командного хостингаТокен Kaiten на каждый запрос (credentials не сохраняются на диске)
Компактные списки: страница по умолчанию 20 (макс. 100), без вложений и «шумных» вложенных полей
Бенчмарки размера payload (
kaiten-mcp-benchmark), чтобы ответы не раздувались со временемСтруктурированные логи в stderr (безопасно для stdio MCP)
Быстрый старт
Требования
Python 3.12+
API-токен Kaiten (Профиль → API-ключ в вашем инстансе, например
https://<компания>.kaiten.ru/profile/api-key)
1. Установка и запуск
export KAITEN_API_TOKEN='ваш-токен'
export KAITEN_WORKSPACE_SLUG='ваша-компания' # → https://ваша-компания.kaiten.ru/api/v1
uvx kaiten-mcp --transport stdiouvx скачивает пакет из PyPI, создаёт изолированное окружение и запускает сервер.
Клонировать репозиторий не требуется.
Для on-prem / кастомного домена вместо slug задайте полный корень API:
export KAITEN_BASE_URL='https://kaiten.example.com/api/v1'Остальные переменные — в .env.example.
2. Cursor
Конфиг проекта уже есть: .cursor/mcp.json.
Экспортируйте токен и workspace в окружение, которое наследует Cursor:
export KAITEN_API_TOKEN='ваш-токен'
export KAITEN_WORKSPACE_SLUG='ваша-компания'Перезапустите Cursor после смены переменных окружения.
Откройте Output → MCP Logs и убедитесь, что сервер
kaitenподключился.Попросите агента: «покажи пространства» или «найди задачи на доске …».
${env:KAITEN_API_TOKEN} и ${env:KAITEN_WORKSPACE_SLUG} подставляет Cursor. Не коммитьте реальные токены.
3. Claude Code
Конфиг проекта: .mcp.json.
export KAITEN_API_TOKEN='ваш-токен'
export KAITEN_WORKSPACE_SLUG='ваша-компания'
claude mcp listИли вручную:
claude mcp add --transport stdio kaiten -- uv run kaiten-mcp --transport stdioПримеры запросов к агенту
«Покажи все пространства в Kaiten»
«Найди доски в пространстве X и создай карточку „Исправить баг логина“»
«Перенеси задачу #1234 в колонку In Progress»
«Добавь комментарий к карточке #1234: готово к ревью»
«Повесь тег „hotfix“ на задачу #1234»
Типовой порядок инструментов:
list_spaces→list_boards→list_columns/list_lanescreate_task/list_tasks/get_task/update_task/move_taskadd_comment/add_tag_to_taskпри необходимости
Инструменты MCP
Инструмент | Назначение |
| Список пространств (id, title) |
| Доски пространства |
| Колонки доски |
| Дорожки доски |
| Создать карточку ( |
| Детали задачи ( |
| Фильтрованный компактный список (query, board, column, tag, …) |
| Обновление полей (title, description, owner, condition, …) |
| Перемещение (board / column / lane / sort) |
| Комментарии |
| Теги |
| Добавить тег по имени |
| Снять тег по id |
Удалённый сервер / Docker / Kubernetes
Streamable HTTP:
uv run kaiten-mcp --transport streamable-http --host 0.0.0.0 --port 8000Health:
GET /healthzMCP:
POST /mcp
Docker:
docker pull ghcr.io/evvfebruary/kaiten-mcp:latest
docker run --rm -p 8000:8000 \
-e KAITEN_WORKSPACE_SLUG=ваша-компания \
ghcr.io/evvfebruary/kaiten-mcp:latestДля локальной разработки образ можно собрать командой docker build -t kaiten-mcp ..
Каждый клиент передаёт свой токен:
Authorization: Bearer <kaiten-api-token>Примеры конфигов:
Заметки для Kubernetes:
Stateless-реплики допустимы (
stateless_http=True)TLS — на Ingress
Увеличьте proxy/read timeouts для streaming
Не логируйте заголовок
AuthorizationУ Kaiten лимит порядка ~50 req/s — делите бюджет между репликами
Модель с Bearer-токеном на запрос — осознанный выбор v1 (не browser OAuth).
Переменные окружения
Переменная | Обязательна | Описание |
| Да (stdio) | API-токен; для HTTP — также в |
| Да* | Slug: |
| Да* | Полный корень API (on-prem); имеет приоритет над slug |
| Нет | Bind для HTTP (по умолчанию |
| Нет |
|
| Нет |
|
| Нет | Компактные redacted-превью в логах |
| Нет | Метрики размера payload без секретов |
* Нужен либо KAITEN_WORKSPACE_SLUG, либо KAITEN_BASE_URL.
Экономия токенов
Размер страницы списка по умолчанию: 20 (макс. 100)
В списках нет описаний, вложений и глубоких дублей
Мутации возвращают id/url и изменённые поля
Обрезка явная:
truncated,next_offset,has_moreКоротко описанные схемы инструментов
Проверка бюджетов размера ответа:
uv run kaiten-mcp-benchmark
uv run kaiten-mcp-benchmark --checkЛогирование
Логи всегда идут в stderr (совместимо со stdio MCP).
export KAITEN_LOG_LEVEL=INFO
export KAITEN_LOG_FORMAT=json
uv run kaiten-mcp --transport stdio --log-format jsonПолезные события: server_starting, tool_start / tool_success / tool_error, kaiten_request, kaiten_rate_limited.
Секреты редактируются; токены видны только как fingerprint вида token_fp=len=40:…ab12.
Разработка
uv sync --all-groups
uv run ruff format .
uv run ruff check .
uv run ty check
uv run pytest
uv run kaiten-mcp-benchmark --checkLive smoke (опционально, не в CI по умолчанию):
KAITEN_API_TOKEN=... KAITEN_WORKSPACE_SLUG=... uv run pytest -m liveПубликация релизов (PyPI, GHCR, Official MCP Registry) описана в RELEASING.md.
Структура
src/kaiten_mcp/
api/ # HTTP-клиент и адаптеры эндпоинтов
tools/ # MCP-инструменты
auth.py # Токен на запрос
config.py # Настройки
presentation.py
metrics.py
server.py
__main__.py
tests/
benchmarks/
examples/remote-mcp/
server.json # Official MCP Registry metadata
RELEASING.mdБезопасность
Токен берётся из HTTP Bearer или
KAITEN_API_TOKENна каждый запросСервер не пишет токены на диск
Предпочитайте переменные окружения, а не хардкод в MCP JSON
Права на стороне Kaiten определяются токеном вызывающего
FAQ
Как подключить Kaiten к Cursor?
Установите зависимости через uv, задайте KAITEN_API_TOKEN и KAITEN_WORKSPACE_SLUG, перезапустите Cursor — конфиг уже в .cursor/mcp.json.
Где взять API-токен Kaiten?
В вашем инстансе: Профиль → API-ключ (https://<компания>.kaiten.ru/profile/api-key). OAuth у публичного API Kaiten для этого сценария не используется.
Чем этот сервер отличается от других kaiten-mcp?
Фокус на компактных ответах и экономии контекста модели, плюс готовый remote Streamable HTTP для команды без хранения токенов на сервере.
Можно ли развернуть для всей команды?
Да: Docker / Kubernetes с streamable-http; каждый сотрудник передаёт свой Bearer-токен в заголовке.
Работает ли с on-prem Kaiten?
Да — задайте KAITEN_BASE_URL на ваш /api/v1.