# Miro

> Доски Miro: MCP (чтение/саммари, layout-DSL, диаграммы, комменты) + REST v2 (коннекторы, теги — чего MCP не умеет). Триггеры: «миро», «что на доске».

- Skill: `jhamidun/miro` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add jhamidun/miro`
- Raw SKILL.md: https://api.skillmd.com/api/skills/jhamidun/miro/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: JHamidun (https://skillmd.com/u/jhamidun)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/jhamidun/miro

---


# Miro

Два независимых пути к доскам. **Сначала определи, какой нужен** — они покрывают РАЗНОЕ.

## Выбор пути

| Задача | Путь | Почему |
|--------|------|--------|
| Прочитать/суммаризовать доску, понять что на ней | **MCP** | `context_get`, `context_explore` — единственный способ получить смысловую выжимку |
| Создать пачку стикеров/фреймов/шейпов, разложить layout | **MCP** | `layout_create` — DSL, вся раскладка одним вызовом |
| Диаграмма (flowchart, mindmap, UML, sequence, ERD) | **MCP** | `diagram_create` из DSL |
| Док, таблица, код-виджет, прототип из HTML | **MCP** | Специализированные инструменты, в REST их нет |
| Комментарии: прочитать, ответить, закрыть | **MCP** | `comment_*` |
| **Коннекторы (стрелки между элементами)** | **REST** | ❗ MCP их НЕ умеет |
| **Теги, группы, app cards, embeds** | **REST** | ❗ MCP их НЕ умеет |
| Точечное редактирование одного элемента по id | **REST** | MCP правит через find-and-replace по DSL |
| Скриптовая пакетная обработка, свои пайплайны | **REST** | Не тратит дневную MCP-квоту |

**Правило:** сложил доску через MCP → соединил элементы стрелками через REST. Это типичный совместный сценарий.

## Путь 1 — MCP (основной)

Конфиг сервера едет вместе с паком — в `~/.claude/settings.json` → `mcpServers`:
```json
"miro": { "type": "http", "url": "https://mcp.miro.com/" }
```
Не видишь `miro` в выводе `/mcp` — значит блок не доехал: допиши его туда сам и перезапусти сессию.

**Авторизация** (один раз): `/mcp` в сессии → выбрать miro → войти в браузере → выбрать команду.
Из терминала: `claude mcp login miro`. Сбросить: `claude mcp logout miro`.

Доступен на **всех планах**. Free/Starter/Business/Educational — включён по умолчанию.
Enterprise — выключен, нужен админ (Admin settings → Apps & Integrations → MCP).

**Дневная квота вызовов** (сброс 00:00 UTC, считается ПО ВСЕМ инструментам):

| План | Вызовов/день |
|------|--------------|
| Free | 100 |
| Starter | 500 |
| Business | 2 000 |
| Enterprise | 10 000 |

Полный список 31 инструмента с назначением → `references/mcp-tools.md`.

### Критичные гочи MCP

1. **Одна команда за раз.** Авторизация строго 1:1 — ты подключён ровно к одной команде Miro, и это состояние общее для ВСЕХ MCP-клиентов сразу. Авторизовался в другую команду — предыдущая отвалилась. Доска из чужой команды → «access denied».
2. **Доски сами не находятся.** В каждом запросе давай **полный URL доски**. `board_search_boards` ищет только внутри авторизованной команды.
3. **AI-кредиты жрёт ровно один инструмент** — `context_get`. Остальные 30 не тратят кредиты, но **тратят дневную квоту**. На Free одна болтливая сессия сборки доски выест все 100 вызовов.
4. **Не ставь плагин Miro поверх этого конфига.** Плагин + ручной сервер = две OAuth-сессии и дублирующиеся инструменты. Пак везёт ручной конфиг — держи что-то одно: либо этот блок в `settings.json`, либо плагин.
5. **Устаревшие имена в старых блогах:** `table_create_new` → `table_create`, `draft_doc_new` → `doc_create`, `create_diagram` → `diagram_create`, `code_widget_list` → `code_widget_list_items`.
6. **Раскладка с первого раза редко идеальна.** Говори явно, куда класть («в пустое место справа»), иначе агент положит поверх существующего. Один артефакт за запрос, не вся доска одним вызовом.

### Порядок работы с layout и диаграммами

DSL-инструменты парные: **сначала спецификация, потом создание**.
```
layout_get_dsl   → узнать формат  → layout_create / layout_update
diagram_get_dsl  → узнать формат  → diagram_create
```
Не вызывай `layout_create` вслепую — формат DSL меняется, спека берётся с сервера.

## Путь 2 — REST API v2

CLI: `python ~/.claude/tools/miro_client.py <команда>` — 31 команда, `--json` у каждой.

```bash
python ~/.claude/tools/miro_client.py whoami              # проверить токен
python ~/.claude/tools/miro_client.py boards              # список досок
python ~/.claude/tools/miro_client.py items <board_id> --type sticky_note --all
python ~/.claude/tools/miro_client.py sticky <board_id> --text "Идея" --x 0 --y 0
python ~/.claude/tools/miro_client.py connect <board_id> --from <item_id> --to <item_id>
python ~/.claude/tools/miro_client.py bulk <board_id> --file items.json
```

**Токен** — `MIRO_ACCESS_TOKEN` в `~/.claude/.credentials.master.env`
(шаблон: `~/.claude/templates/.credentials.master.env.example`).
Получение (5 минут, без Enterprise): miro.com → Settings → **Your apps** → Create new app →
галочку «Expire user authorization token» **НЕ ставить** (иначе токен живёт 60 минут) →
Permissions: `boards:read` + `boards:write` → внизу страницы **«Install app and get OAuth token»** → выбрать команду.

Детали эндпоинтов, лимитов и подводных камней → `references/rest-api.md`.

### Лимиты REST

Кредитная система, **100 000 кредитов/мин на пользователя-приложение**:
L1 чтение = 50 кр. · L2 создание/правка = 100 кр. · L3 создание/удаление доски = 500 кр. · L4 копирование доски = 2000 кр.

`POST /items/bulk` тарифицируется **за каждый элемент** (20 штук = 2000 кредитов) — экономит задержку, но не кредиты.

### Что доступно только на Enterprise

Организации и команды (`/v2/orgs/*`), аудит-логи, SCIM, legal hold/eDiscovery и **экспорт доски через API**.
На Free/Starter/Business экспорта в REST нет — выгружай из UI (PDF/картинка/CSV) либо снимай `viewLink` headless-браузером.

## Быстрая диагностика

| Симптом | Причина и фикс |
|---------|----------------|
| Инструментов miro не видно | Не пройдена авторизация → `/mcp` или `claude mcp login miro` |
| «Access denied» на доску | Доска в другой команде; переавторизуйся в нужную, либо дай полный URL |
| «Invalid response» при входе | Почистить куки miro.com в браузере |
| «Client not registered» | Сбросить MCP-токены и авторизоваться заново |
| Упёрлось в дневной лимит | Ждать 00:00 UTC или уйти на REST (у него своя квота) |
| Нужны стрелки/теги/группы | Это не умеет MCP — путь 2, REST |

