Подключение доступов (MCP)
Overview
MCP — способ дать агенту доступ к внешней службе: к твоему хостингу, базе, сервису макетов. Как связка ключей: без нужного ключа дверь не открывается, но выглядит она точно так же, как открытая. → что такое MCP
Отсюда главная беда: отсутствующий доступ не даёт ошибку. Агент не говорит «я не вижу лог», он пересказывает вероятный лог. Не говорит «я не знаю схему базы», а пишет запрос к выдуманным колонкам. Человек получает правдоподобный вымысел и не может отличить его от факта.
Скил закрывает это: подключает всё, что можно подключить без человека, а остальное превращает в короткий список со ссылкой на нужную страницу и объяснением, почему я не могу сделать это сам.
Как запускать
bash ~/.claude/skills/mcp-setup/scripts/ensure-mcp.sh # подключает
bash ~/.claude/skills/mcp-setup/scripts/ensure-mcp.sh --check-only # только показать
bash ~/.claude/skills/mcp-setup/scripts/ensure-mcp.sh --open # плюс открыть сайты в браузере
bash ~/.claude/skills/mcp-setup/scripts/add-key.sh <служба> <КЛЮЧ> # сохранить ключ и подключить
По умолчанию скрипт подключает, а не докладывает. --open открывает страницы
входа прямо в браузере — использовать, только когда человек сказал «давай подключим»:
самовольно открытые вкладки раздражают.
Запускается перед деплоем, перед работой с базой, перед рисованием макетов и схем — и всегда, когда вызов инструмента упал с ошибкой доступа, а не кода.
Как читать вывод
| Строка | Что значит | Что делаю |
|---|---|---|
OK <имя> |
подключено и работает | молчу |
+ подключил <имя> |
я подключил сам | баннер 🔌 Я ПОДКЛЮЧИЛ, строка пользы |
AUTH <имя> |
сервер есть, но нужен вход | выношу в блок «что сделать тебе» |
FAILED <имя> |
сервер отвечает ошибкой | говорю вслух, какой возможности нет |
ЧЕЛОВЕК что|ссылка|почему |
нужен ключ из его аккаунта | даю ссылку и готовую команду add-key.sh |
KEYCMD … |
готовая команда для человека | вставляю её в блок «что сделать тебе» дословно |
AUTH опаснее, чем «нет». Отсутствующий сервер честен — его не видно.
Сервер в состоянии «нужен вход» притворяется рабочим: инструменты видны,
каждый вызов падает. Человек уходит чинить код вместо того, чтобы войти в аккаунт.
Что подключается само, а что нет
Разбор по службам — что ломается без каждой, команда или ссылка:
references/services.md.
Правило одно: у человека я прошу только ключ. Найти инструкцию, вспомнить адрес сервера, собрать команду, подключить, проверить — моя работа целиком. Его работа — принести ключ, потому что ключ лежит в его аккаунте и больше нигде.
| Служба | Что делаю я | Что делает человек |
|---|---|---|
| Playwright | всё | ничего |
| Vercel | добавляю сервер | подтверждает вход в браузере (/mcp) |
| 21st.dev | добавляю сервер | подтверждает вход |
| draw.io | всё | ничего |
| Stitch | собираю и выполняю команду подключения | приносит ключ |
| Supabase | то же | приносит токен |
Как просить ключ
Не «сходи почитай инструкцию и пришли адрес сервера» — это перекладывание работы. Пункт человеку состоит из трёх вещей и укладывается в две строки:
Открой stitch.withgoogle.com → Settings → API Tokens → Generate New Token. Скопируй ключ и выполни:
bash ~/.claude/skills/mcp-setup/scripts/add-key.sh stitch <КЛЮЧ>Дальше я всё сделаю сам. Ключ нужен потому, что он лежит в твоём аккаунте; в чат его присылать нельзя — команда сохранит его на диск.
Скрипт add-key.sh кладёт ключ в ~/.claude/.secrets/ с правами 600
(файл видно только владельцу) и сразу подключает службу. Человек делает
одно действие, не два.
Ключ в чат не просить никогда. Присланный в переписку ключ считается утёкшим: он остаётся в истории. Если человек всё же прислал — скажи об этом и попроси отозвать ключ на той же странице, где он его брал.
Проверять делом, а не списком
✔ Connected у сервера с ключом означает только, что сервер отвечает.
Негодный ключ виден не в списке, а при первом вызове инструмента.
Поэтому после подключения — сделай самый дешёвый настоящий вызов
(например, список проектов) и только потом объявляй 🔌 Я ПОДКЛЮЧИЛ.
Правила разговора
- Баннер до запуска. Человек не должен гадать из-за паузы.
- Последствие вместо факта. Не «Supabase не подключён», а «схему базы я буду только предполагать — имена колонок в моих запросах непроверены».
- Максимум три пункта человеку. Больше трёх — я свалил свою работу.
- Ссылка обязательна. Пункт без ссылки заставляет человека искать страницу самому — это та же перекладка работы, только незаметная.
- Три части в каждом пункте: что сделать · зачем · почему я не могу сам. Без третьей части это выглядит как лень.
Rationalization Table
| Отговорка | Реальность |
|---|---|
| «Разберусь с доступом, когда упрётся» | Упрётся в виде выдуманного лога, который не отличить от настоящего |
| «Сервер в списке есть, значит работает» | Needs authentication — тоже «в списке». Каждый вызов упадёт |
| «Скажу, что нужно подключить» | Подключаю сам всё, где не нужен его аккаунт |
| «Дам название сервиса, он найдёт» | Название без ссылки — задание на поиск, а не помощь |
| «Пусть прочитает инструкцию и пришлёт адрес сервера» | Читать инструкцию — моя работа. Его — только ключ |
| «Пусть пришлёт ключ в чат, я вставлю» | Ключ в переписке считается утёкшим. Только через add-key.sh |
| «Сервер в состоянии Connected — ключ рабочий» | Негодный ключ виден только при вызове. Проверяй делом |
| «Опишу, что примерно в базе» | Не прочитал — не пересказывай. Скажи «не вижу схему» |
| «Подключу всё на будущее» | Только то, что нужно текущей задаче |
Red Flags — остановись
- Начал деплой, не посмотрев состояние доступов
- Пересказываешь лог или схему, которых не читал
- Написал «нужен Supabase» без ссылки и без причины, почему сам не можешь
- Просишь токен в чат
- Список для человека длиннее трёх пунктов