Бесплатный интерактивный курс · aicoding.space
MCP-навыки: агент выходит в мир
Практический курс по @dzhechkov/skills-mcp — 16 навыков-инструкций к MCP-серверам: поиск, почта, календарь, таблицы, задачи, Notion и Obsidian, git и GitLab, ComfyUI и самообучающаяся память AgentDB. Вместе с Леной ты поймёшь, чем навык отличается от сервера, соберёшь связку «сервер + навык + агент», разберёшься с транспортами и ключами, научишься подбирать поисковый навык под вопрос, безопасно работать с почтой и доводить правку до слияния — и узнаешь, почему самая честная страница пакета говорит «измерено, не запомнено».
Содержание курса
1. Навык — это не сервер
Что лежит в @dzhechkov/skills-mcp на самом деле — и почему после установки пакета почта сама не прочитается.
Ключевая мысль: навык — это инструкция к MCP-серверу, а не сам сервер
Лена поставила пакет, открыла Claude Code и сказала: «найди в почте письмо от бухгалтерии». Агент ответил, что не умеет читать почту. Лена решила, что пакет сломан. Пакет цел — сломано было её ожидание, и оно, скорее всего, совпадает с твоим.
Навык — это инструкция к MCP-серверу, а не сам сервер. MCP (Model Context Protocol) — протокол, по которому агент вызывает внешние инструменты: поиск, почту, календарь. Сервер — отдельная программа, которая эти инструменты реально выполняет. А навык из этого пакета — файл SKILL.md: он объясняет агенту, какой сервер поставить, какие у него инструменты, какие параметры, когда что вызывать и на какие грабли не наступать.
Пакет @dzhechkov/skills-mcp на npm — это 16 таких инструкций для шестнадцати серверов: поиск (brave-search, exa-search, jina-reader, context7, reddit), почта и календарь (gmail, google-calendar), таблицы и задачи (google-sheets, google-tasks, clickup), знание (notion, obsidian), код (git-mcp, gitlab), картинки (comfyui) и самообучающаяся память (agentdb-memory). Исходники — в зеркале на GitHub.
Значит, рабочая связка всегда из трёх частей:
- сервер — программа, которую ты добавляешь командой
claude mcp add …; - навык — инструкция, которую раскладывает
dz init; - агент — тот, кто читает инструкцию и вызывает сервер.
Убери любую часть — и ничего не заработает. Лена убрала первую: сервер Gmail она не добавляла, поэтому агенту было нечего вызывать, сколько бы инструкций у него ни лежало.
Компромисс: такое разделение честнее, чем «поставил пакет — всё работает», но требует понимать, где кончается навык и начинается сервер. Зато один и тот же навык годится для Claude Code, Claude Desktop, Cursor и VS Code — в SKILL.md есть блоки конфигурации для каждого.
💬 Скажи словами. Как только связка собрана, команды больше не нужны: «найди письмо от бухгалтерии» — и агент сам возьмёт gmail_search. Команды в этом курсе — чтобы ты понимал, что происходит под капотом.
2. Три способа установить навыки
Пресет mcp, точечный --select и голый npm install — что выбирает Лена и почему.
Ключевая мысль: dz init --preset mcp ставит все 16 навыков разом
Лена открыла README и увидела три команды установки. «Какая правильная?» — правильные все три, но для разных ситуаций. Выбирай по тому, что ты знаешь заранее.
- Пресет — если хочешь всё.
dz init --target claude-code --preset mcpставит все 16 навыков разом. Пресетmcp— именованный набор в каталоге dz (пакет harness-presets), и его состав — ровно этот пакет. - Точечно — если знаешь имена.
dz init --target claude-code --select brave-search,exa-search,gmailкладёт только перечисленные. Имена — из таблицы Skill Inventory в README. - Голый npm — если dz не нужен.
npm install @dzhechkov/skills-mcpпросто скачает папки с SKILL.md вnode_modules; раскладывать их по проекту придётся самому.
Лена выбрала пресет — и правильно для первой недели: пока не знаешь, что понадобится, дешевле иметь все инструкции под рукой. Инструкции ничего не стоят в работе: навык активируется только когда задача совпала с его триггерами (об этом — секция 4), а лишние просто лежат.
Что реально стоит ресурсов — серверы, а их пресет не добавляет. Так что «поставить все 16 навыков» ≠ «запустить 16 серверов»: серверы ты добавишь по одному, когда дойдёшь до каждого.
Компромисс: пресет быстр, но прячет от тебя список; --select прозрачен, но требует знать имена; npm install не зависит от dz вовсе, но и не раскладывает ничего. Лена через месяц пересобрала арсенал через --select — когда уже знала, чем пользуется.
💬 Скажи словами. «Поставь мне все MCP-навыки» → ассистент выполнит dz init --preset mcp. Лена так и сделала — команду она увидела уже в ответе.
3. Две половины запуска
Quick Setup из README: сервер регистрирует claude mcp add, инструкцию кладёт dz init — и порядок имеет значение.
Ключевая мысль: claude mcp add регистрирует сервер, dz init — навык
После секции 1 Лена поняла, чего не хватает, и открыла раздел Quick Setup. Там шесть строк claude mcp add и одна dz init. Это и есть вся механика: claude mcp add регистрирует сервер, dz init — навык. Две половины, и обе обязательны.
Вот те самые строки из README — обрати внимание, что они разные по форме:
claude mcp add brave-search -- npx @brave/brave-search-mcp-server— локальный сервер, запускается через npx;claude mcp add --transport http exa https://mcp.exa.ai/mcp— размещённый сервер, ходим по HTTP;claude mcp add gogcli-gmail -- gogcli-mcp-gmail— локальный, но не через npx: бинарник ставится заранее;claude mcp add clickup -- npx @taazkareem/clickup-mcp-server;claude mcp add context7 -- npx @upstash/context7-mcp;claude mcp add --transport http jina https://mcp.jina.ai/mcp.
Всё после -- — команда запуска сервера; всё до — имя, под которым Claude Code его запомнит. Потом одна строка dz init --target claude-code --preset mcp кладёт инструкции.
Порядок на самом деле такой: выбрать сервер → добавить его → дать ему ключ (если нужен) → положить навык → проверить. Проверка — claude mcp list: если сервера в списке нет, первая половина не сделана, и никакой навык этого не исправит. Лена сначала запускала dz init и удивлялась тишине; теперь она начинает с claude mcp list и смотрит, кого не хватает.
Компромисс: две команды вместо одной — лишний шаг, зато каждую половину можно менять независимо: сервер обновится через npx, навык — через dz upgrade, и они не сломают друг друга.
💬 Скажи словами. «Подключи Brave Search» → ассистент выполнит claude mcp add brave-search -- npx @brave/brave-search-mcp-server и сам спросит про ключ. Лена перестала вспоминать синтаксис -- уже на второй день.
4. Навык включается сам
Как агент понимает, что пора брать gmail, а не notion — и что делать, если он выбрал не то.
Ключевая мысль: триггерные фразы во frontmatter SKILL.md
Связка собрана. Лена ничего не вызывает руками — она пишет «найди в почте счёт от подрядчика», и агент берёт gmail. Пишет «сделай страницу в Notion из этих заметок» — берёт notion. Кто решает, какой навык брать?
Решает совпадение. У каждого навыка в шапке SKILL.md (это frontmatter — блок метаданных в начале файла) есть описание и триггерные фразы: слова и обороты, при которых навык уместен. Агент сравнивает твою задачу с ними и подгружает подходящую инструкцию. Ни команды, ни меню — только слова.
Два инструмента, когда совпадение не сработало:
dz info <skill-id>— показывает точные триггеры и файлы навыка. Лена так узнала, чтоexa-searchреагирует на «семантический поиск» и «исследование компании», аbrave-search— на «свежие новости» и «местные заведения».dz registry search <term>— ищет навык по слову в каталоге. Полезно, когда не помнишь имя.
Есть и обратная сторона: два навыка могут претендовать на одну задачу. «Поищи в вебе» подходит и brave, и exa, и jina. Тогда агент выберет по описанию — а ты можешь подсказать: «поищи в Exa, нужен именно смысловой поиск». Уточнение словами дешевле, чем правка триггеров.
Компромисс: авто-активация избавляет от заучивания имён, но делает выбор непрозрачным — пока не заглянешь в dz info. Лена держит за правило: если агент взял не тот навык дважды подряд, она смотрит триггеры обоих и уточняет формулировку.
💬 Скажи словами. Это и есть вся секция: слова — единственный интерфейс. «Какие триггеры у gmail?» → ассистент выполнит dz info gmail.
5. stdio или http: где живёт сервер
Почему exa и jina добавляются с --transport http, а brave и git — через npx, и что это меняет для тебя.
Ключевая мысль: транспорт stdio или http
Лена заметила, что строки claude mcp add бывают двух видов, и спросила: «а почему exa — по адресу, а brave — через npx?» Ответ — транспорт: stdio или http. Это то, ПО ЧЕМУ агент разговаривает с сервером.
- stdio — сервер запускается у тебя на машине как процесс, а агент пишет ему в стандартный ввод и читает стандартный вывод. Так работают brave-search, git-mcp, gitlab, notion, obsidian, comfyui, clickup, context7, gmail, google-calendar, google-sheets, google-tasks, reddit, agentdb-memory. Признак в команде:
-- npx <пакет>или-- <бинарник>. - http — сервер размещён у поставщика, у тебя ничего не запускается; агент ходит по URL. Так работают exa (
https://mcp.exa.ai/mcp) и jina (https://mcp.jina.ai/mcp). Признак:--transport http <url>.
Иногда один сервер даёт оба варианта. У exa-search в SKILL.md две установки: размещённая (claude mcp add --transport http exa https://mcp.exa.ai/mcp, рекомендована) и локальная (claude mcp add exa-search -- npx exa-mcp-server). У jina — ещё и SSE-вариант (--transport sse https://mcp.jina.ai/sse). У gitlab заявлены stdio, SSE и Streamable HTTP.
Что это меняет для Лены:
- Ключ. У stdio ключ передаётся серверу через переменную окружения (
-e BRAVE_API_KEY=…); у http — в заголовке запроса (x-api-keyв конфигурации Claude Desktop для exa). - Зависимости. stdio требует, чтобы npx или бинарник были на машине; http — только сеть.
- Обновления. stdio-сервер обновляется через npx при следующем запуске; http-сервер обновляет поставщик, ты этого не видишь.
Компромисс: stdio держит данные локально и работает без интернета там, где сервер локальный (git, obsidian, comfyui), но требует установки; http ставится одной строкой и не занимает машину, но твои запросы уходят к поставщику. Лена выбрала http для exa и jina и stdio для всего, что трогает её файлы.
6. Ключи: сколько прав давать
Куда класть BRAVE_API_KEY, что значит -e у clickup, и почему Лена отозвала свой первый токен GitLab.
Ключевая мысль: минимальные права для токена
Первый токен GitLab Лена сделала со скоупом api — «чтобы точно всё работало». Через неделю она его отозвала и сделала новый с read_api + read_repository. Что изменилось за неделю? Она прочитала SKILL.md до конца.
Ключи в этом пакете передаются серверу тремя способами — и все три описаны в SKILL.md каждого навыка:
- Флаг
-eв claude mcp add —claude mcp add clickup -e CLICKUP_API_KEY=pk_xxx -- npx @taazkareem/clickup-mcp-server. Ключ уходит в окружение процесса сервера. - Блок
envв конфигурации —claude_desktop_config.json,.cursor/mcp.json,.vscode/mcp.json:"env": { "BRAVE_API_KEY": "…" }. В VS Code можно${input:clickupApiKey}— тогда редактор спросит ключ, а не хранит его в файле. - Заголовок для http-серверов —
"headers": { "x-api-key": "…" }у размещённого exa.
Теперь про то, СКОЛЬКО прав давать. У gitlab в SKILL.md есть таблица скоупов: api — полный доступ, read_api — только чтение, read_repository — файлы репозитория, write_repository — push, merge, ветки. И прямо сказано: минимальные права для токена — read_api + read_repository, если нужно только читать; api — только когда действительно нужны записи. Это принцип минимальных привилегий: токен умеет ровно то, что ты от агента ждёшь, и ни на йоту больше.
Зачем это Лене? Агент — не она. Он может неверно понять задачу, а токен с api позволит ему слить merge request, который она хотела лишь посмотреть. Токен с read_api такого не позволит физически — отказ на стороне GitLab, до ущерба.
Где ключей нет вовсе — тоже полезно знать: context7 («Auth: None required»), jina для базового использования, reddit в анонимном режиме (~10 запросов в минуту; REDDIT_CLIENT_ID / REDDIT_CLIENT_SECRET поднимают лимит), agentdb (всё локально, в одном .db-файле).
Компромисс: узкий токен придётся расширять, когда задачи вырастут — это лишняя итерация. Зато ошибка агента с узким токеном — отказ, а с широким — инцидент.
💬 Скажи словами. «Подключи GitLab, только на чтение» → ассистент напомнит про скоупы read_api + read_repository и попросит токен — вставлять его в чат не нужно, положи в окружение.
7. Пять поисковых навыков — какой брать
brave, exa, jina, context7, reddit: пять разных вопросов, а не пять одинаковых поисков.
Ключевая мысль: подбор поискового навыка под задачу
У Лены пять поисковых навыков, и первую неделю она звала все «поиском». Потом заметила, что они отвечают на разные вопросы. Подбор поискового навыка под задачу — не про то, какой лучше, а про то, какой вопрос ты задаёшь.
- brave-search — «что есть в вебе прямо сейчас?» Пять инструментов:
brave_web_search,brave_local_search(заведения: адрес, часы, рейтинг),brave_video_search,brave_image_search,brave_news_search. Параметры:count1–20,freshness—pd(день),pw(неделя),pm(месяц),py(год),summary: true— сводка от ИИ. Запрос не длиннее 400 символов. - exa-search — «найди по смыслу».
web_searchсtype: neural(понимает намерение) илиkeyword(точное совпадение),num_results1–100,category:company,research_paper,news,github,tweet,pdf;find_similar— страницы, похожие на данный URL. - jina-reader — «прочитай мне эту страницу».
read_urlпревращает любой URL в чистый markdown,extract_dataвынимает структуру по схеме,search_webищет и отдаёт результаты уже markdown-ом. - context7 — «как сейчас выглядит API этой библиотеки?»
resolve_library→get_library_docs→ актуальная документация вместо памяти модели;search_docs— по всем библиотекам сразу. - reddit — «что об этом говорят люди?»
search_posts,get_post,get_comments,list_subreddit(hot, new, top, rising),search_subreddit,get_user_posts.
Цепочка, которую Лена собрала за один вечер: exa нашёл статьи по смыслу («как строить MCP-сервер на TypeScript», category: github), jina прочитал лучшую из них в markdown, context7 проверил, что сигнатуры в статье не устарели, reddit показал, на что жалуются те, кто уже пробовал. Четыре навыка — один вопрос, разложенный на четыре.
Компромисс: пять навыков означают пять ключей и пять наборов триггеров; агент иногда возьмёт brave там, где ты ждал exa (секция 4). Зато каждый отвечает на свой вопрос лучше универсального поиска — и ты это чувствуешь по первому же результату.
💬 Скажи словами. «Найди свежие новости про X за неделю» → brave_news_search с freshness: pw. «Найди похожие на эту страницу» → find_similar из exa. Слово «похожие» и слово «свежие» уже выбирают навык за тебя.
8. Почта: черновик, потом отправка
gog auth, синтаксис поиска Gmail, gmail_draft вместо gmail_send и один опасный gmail_bulk.
Ключевая мысль: черновик gmail_draft перед отправкой
Почта — первое, ради чего Лена вообще взялась за пакет. И первое, где агент может натворить необратимое: письмо не вернёшь, удалённое не восстановишь. Поэтому у навыка gmail в SKILL.md есть раздел Tips, и его главная строка — черновик gmail_draft перед отправкой, когда не уверен.
Сначала подключение — здесь оно самое длинное в пакете, потому что сервер не через npx:
- Поставить gogcli — CLI для сервисов Google:
brew install gogcliна macOS или скачать бинарникgogдля Linux (команда есть в SKILL.md). - Поставить сам сервер:
npm install -g gogcli-mcp-gmail. - Авторизоваться:
gog auth add your@gmail.com --services gmail— откроется браузер, ты выдаёшь права на чтение, отправку и изменение. - Зарегистрировать:
claude mcp add gogcli-gmail -- gogcli-mcp-gmail.
Восемь инструментов: gmail_search (синтаксис тот же, что в строке поиска Gmail: from:, to:, subject:, is:unread, has:attachment, newer_than:7d, older_than:30d; max_results 1–100), gmail_get (письмо целиком по id), gmail_send, gmail_draft, gmail_label, gmail_forward, gmail_autoreply и gmail_bulk — массовое действие над всем, что нашёл запрос: archive, delete, mark_read, mark_unread, label.
Три привычки из раздела Tips, которые Лена сделала своими:
- Сначала искать, потом писать — чтобы не заводить второй тред там, где есть первый.
- Черновик, когда не уверен —
gmail_draft, прочитать глазами, потом отправить. Особенно для писем наружу. - bulk — только с проверенным запросом: сперва
gmail_searchс тем жеquery, посмотреть, что попало, и лишь затемgmail_bulk. Пример из SKILL.md безопасен именно поэтому:category:promotions is:read older_than:30d+archive— архив, не удаление.
Компромисс: черновик и предварительный поиск — два лишних шага на каждое письмо; зато отправка, которую агент понял неверно, остаётся в черновиках, а не в чужом ящике.
💬 Скажи словами. «Набросай ответ подрядчику, но не отправляй» — агент возьмёт gmail_draft. Слова «не отправляй» — самый дешёвый предохранитель в этом пакете.
9. Три Google — три разных входа
Календарь, Таблицы и Задачи — один аккаунт, а способы авторизации у серверов не совпадают.
Ключевая мысль: три разных способа авторизации Google
Лена подключила календарь, обрадовалась и пошла подключать таблицы тем же способом. Не сработало. Потом задачи — снова по-другому. Сюрприз пакета: у трёх навыков одного и того же Google три разных способа авторизации, потому что за ними три разных сервера от трёх разных авторов.
- google-calendar (
@cocal/google-calendar-mcp): переменнаяGOOGLE_OAUTH_CREDENTIALS— путь к JSON-файлу OAuth-клиента из Google Cloud (тип «Desktop app», напримерgcp-oauth.keys.json). Послеclaude mcp add google-calendar -- npx @cocal/google-calendar-mcpнужно попросить агента пройти вход в Google — и только потом вызыватьlist_eventsилиcreate_event. - google-sheets (
mcp-google-sheets): по умолчанию сервисный аккаунт —SERVICE_ACCOUNT_PATHк JSON-ключу; необязательныйDRIVE_FOLDER_IDограничивает доступ одной папкой Диска. Альтернатива — OAuth черезGOOGLE_SHEETS_CLIENT_ID,GOOGLE_SHEETS_CLIENT_SECRET,TOKEN_PATH. - google-tasks (
@zcaceres/gtasks): проще всего через Smithery —npx -y @smithery/cli install @zcaceres/gtasks --client claude; вручную — клонировать репозиторий,npm run build, затем один разnpm run start auth(браузер, OAuth), после чего ключи лягут в.gdrive-server-credentials.json.
Заметь ещё одно расхождение, которое стоит знать: таблица Skill Inventory в README подписывает эти три сервера как «Smithery (googlecalendar)», «Smithery (googlesheets)», «Smithery (googletasks)», а SKILL.md называет конкретные пакеты. Источник истины — SKILL.md: там строка установки, там переменные. Таблица — краткая подпись, и она отстала (измерено чтением обоих файлов, 2026-09-02).
Что умеют, когда вошли:
- календарь:
list_events(диапазонtime_min/time_max,query,single_eventsраскрывает повторяющиеся),create_event— с участниками, местом и RRULE для повторов; - таблицы:
read_sheet(диапазон в A1-нотации,value_render_option: FORMULAпокажет формулы, а не значения),write_sheet(USER_ENTEREDразбирает формулы,RAWпишет как есть); - задачи:
list_task_lists,list_tasks,create_task,update_task,complete_task,delete_task,move_task.
Компромисс: три входа — втрое больше настройки, чем хотелось бы, и DRIVE_FOLDER_ID — единственное место, где можно сузить доступ. Зато каждый сервер выбран за полноту инструментов, а не за единообразие входа.
💬 Скажи словами. «Поставь встречу с Алисой на завтра в 14:00 и повторяй каждую среду» → create_event с RRULE. Лена ни разу не писала RRULE руками — только читала, что агент собрал.
11. От ветки до слияния
17 инструментов git-mcp и MR-цикл gitlab — как Лена доводит правку до слияния, не открывая браузер.
Ключевая мысль: путь merge request: ветка, коммит, push, пайплайн, слияние
У Лены два навыка про код, и она путала их первые дни. Разница простая: git-mcp — то, что происходит в репозитории на диске; gitlab — то, что происходит на сервере GitLab вокруг репозитория. Вместе они дают путь merge request: ветка, коммит, push, пайплайн, слияние — целиком через агента.
git-mcp (claude mcp add git -- npx @cyanheads/git-mcp-server) — 17 инструментов, каждый с параметром repo_path (или общий GIT_DEFAULT_PATH в окружении): git_status, git_diff (цель HEAD, main..feature, --staged, можно сузить до файла), git_log (max_count, branch, author, since, file_path), git_commit (список файлов — застейджит их сам), git_branch, git_merge, git_rebase, git_stash, git_cherry_pick, git_clone, git_fetch, git_pull, git_push, git_reset, git_tag, git_worktree, git_remote. Число 17 — это ровно столько заголовков ### git_… в SKILL.md; таблица README говорит то же.
gitlab (claude mcp add gitlab -- npx @zereight/mcp-gitlab, токен из секции 6, GITLAB_URL для своего инстанса): проекты, create_merge_request, list_merge_requests, approve_merge_request, merge_merge_request, задачи (create_issue, update_issue), пайплайны (list_pipelines, get_pipeline, retry_pipeline, cancel_pipeline), wiki, релизы, теги, вехи.
Путь Лены от правки до слияния, без единой вкладки браузера:
git_branch— новая ветка.git_commitс именами файлов — застейджит и закоммитит.git_push— ветка на сервере.create_merge_request— MR из ветки в main.get_pipeline— дождаться зелёного; если красный —retry_pipeline.approve_merge_request→merge_merge_request— только если у токена есть право на запись.
Шаг шесть — то место, где секция 6 возвращается: с read_api агент дойдёт до пятого шага и остановится. Лена так и оставила: слияние она нажимает сама, с отдельным токеном, — не потому что агент плох, а потому что необратимое действие она хочет видеть глазами.
Компромисс: два сервера вместо одного — два ключа, два набора триггеров; зато граница между «диск» и «сервер» совпадает с границей прав, и её легко удерживать.
💬 Скажи словами. «Заведи ветку fix-login, закоммить оба файла и открой MR в main» — три инструмента git-mcp и один gitlab в одной фразе.
12. Память агента: измерено, не запомнено
35 инструментов AgentDB, 23 мёртвых имени в прошлой версии навыка и мост к dz recall — самая честная страница пакета.
Ключевая мысль: измерено, не запомнено: tools/list вместо старого списка
Лена попросила агента «запомнить, как мы починили N+1 в GraphQL». Агент вызвал инструмент из старой версии навыка — и получил «no such tool». Это не её ошибка, и SKILL.md теперь говорит об этом прямо.
agentdb-memory — самообучающаяся векторная память: claude mcp add agentdb -- npx agentdb@latest mcp start, без ключей, всё в одном локальном .db-файле (SQLite). Сервер регистрирует 35 инструментов — измерено на agentdb 3.0.0-alpha.20, 2026-08-26. И вот история, ради которой эта секция существует: предыдущая версия страницы перечисляла 26 имён, из которых существовали только 3. Имена были придуманы по аналогии — к каждому приписали префикс agentdb_, а префикс носят только инструменты хранилища. 23 мёртвых имени в опубликованном пакете.
Лечение — не новый список (он сгниёт так же), а принцип измерено, не запомнено: tools/list вместо старого списка. SKILL.md даёт способ проверить самому: запустить stdio-процесс сервера, послать две строки JSON-RPC — сначала initialize, затем tools/list — и прочитать ответ на второй. Сначала initialize: голый tools/list не отвечает ничем. Если имя со страницы не нашлось — список сдвинулся, ты не ошибся (навык ставит @latest на alpha-пакет, поверхность движется).
Что в 35 — по группам из SKILL.md:
- хранилище (12):
agentdb_init,agentdb_insert,agentdb_search(HNSW — быстрый поиск ближайших векторов),agentdb_pattern_store,agentdb_pattern_search,agentdb_statsи другие; - Reflexion (3):
reflexion_store— задача + исход + самокритика + награда,reflexion_retrieve; - причинный граф (3):
causal_add_edge,causal_query,causal_traverse; - библиотека навыков (3):
skill_create,skill_search; - обучение и RL (10):
learning_feedback— сигнал «пригодилось ли», от него следующий поиск лучше; - опыт и аудит (4):
recall_with_certificate— воспоминание с проверяемым сертификатом происхождения.
Мост к dz, ради которого Лена его поставила: dz recall --all --json выгружает всё, чему научился харнес, agentdb_pattern_store кладёт каждую запись с эмбеддингом, agentdb_pattern_search ищет по смыслу — «как мы обходили N+1?» найдёт запись и с другой формулировкой. Лексический recall остаётся в CLI, семантический — здесь.
Есть и страж, а не только слова: тест пакета tests/agentdb-skill-honesty.test.js проверяет, что число в README равно числу строк в таблицах SKILL.md, что штамп «Measured, not remembered» стоит над таблицами, что ни один пример не зовёт имя, которого нет в таблице. Число нельзя поправить в одном месте и забыть в другом — тест упадёт.
Компромисс: @latest на alpha означает, что имена будут дрейфовать и дальше — цена за свежесть. Зато страница теперь говорит, как проверить её саму, и это единственная честная форма документации для движущейся цели.
13. Мост к приложению на твоей машине
Obsidian и ComfyUI: MCP-сервер здесь — не сервис, а мост к программе, которая должна быть уже запущена.
Ключевая мысль: MCP-сервер как мост к локальному приложению
Последние два навыка Лена подключала вечером — и оба «не ответили». Сервер в claude mcp list есть, ключ на месте, а инструмент возвращает ошибку соединения. Общая причина: это MCP-сервер как мост к локальному приложению — он ничего не делает сам, а пересылает вызовы программе, которая должна быть уже запущена у тебя.
obsidian (claude mcp add obsidian -- npx obsidian-mcp-server): мост к твоему хранилищу заметок через плагин Local REST API. Порядок из SKILL.md:
- Obsidian → Settings → Community Plugins → Browse → найти «Local REST API» → установить.
- Включить плагин и взять из его настроек API-ключ →
OBSIDIAN_API_KEY(обязателен). - Плагин слушает
https://localhost:27124— это значение по умолчанию дляOBSIDIAN_REST_URL.
Инструменты: read_note (путь внутри хранилища, например Daily Notes/2026-06-03.md), write_note (создать или перезаписать; frontmatter — часть содержимого), search_notes (по тексту или тегу, context_length — сколько символов вокруг совпадения показать).
comfyui (claude mcp add comfyui -- npx comfyui-mcp): мост к ComfyUI — генерации изображений. Требуется запущенный ComfyUI на http://127.0.0.1:8188 (или свой COMFYUI_URL) и хотя бы одна скачанная модель. Сервер даёт 80+ инструментов: execute_workflow, text_to_image, image_to_image, inpaint, list_models, switch_model, queue_status, vram_status, free_vram, upscale_image. Раздел Procedure в SKILL.md строг: проверить, что ComfyUI доступен, до любой генерации — и не пытаться запускать ComfyUI программно; разрешение под модель (SDXL — 1024×1024, SD 1.5 — 512×512); vram_status перед загрузкой модели, free_vram при нехватке; всегда сообщать seed — без него результат не повторить.
Общее у обоих: если Obsidian закрыт или ComfyUI не запущен, мост ведёт в пустоту. Проверка — не claude mcp list (сервер-мост там будет), а само приложение: открыт ли Obsidian с включённым плагином, отвечает ли 127.0.0.1:8188.
На этом арсенал Лены собран целиком: почта, календарь, таблицы, задачи, пять поисков, знание в Notion и Obsidian, код в git и GitLab, картинки, память. Ни одной команды она не набирает — только говорит. А когда что-то не отвечает, у неё есть карта: сервер (секция 3) → ключ (6) → доступ (10) → приложение (13).
Компромисс: мост зависит от приложения — ещё один движущийся элемент; зато данные никуда не уходят: заметки остаются в твоём хранилище, картинки — на твоей видеокарте.
💬 Скажи словами. «Найди в заметках всё про MCP-сервер и допиши итоги в сегодняшнюю» — search_notes + write_note. «Сгенерируй превью, seed запиши» — и Лена получает путь к файлу, параметры и seed, как требует Procedure.
Частые вопросы
- Таблица README называет сервер «Smithery (googlecalendar)», а SKILL.md — @cocal/google-calendar-mcp. Кому верить?
SKILL.md: там строка установки, транспорт и переменные окружения — то, что реально выполняется. Таблица Skill Inventory — краткая подпись, и для google-calendar, google-sheets, google-tasks, notion и reddit она отстала от SKILL.md (сверено чтением обоих файлов 2026-09-02). При расхождении открывай dz info <skill-id>.
- Нужно ли ставить все 16 серверов, если я поставил пресет mcp?
Нет. Пресет кладёт 16 инструкций, а они ничего не стоят в работе — навык активируется только по совпадению с триггерами. Серверы добавляй по одному командой claude mcp add, когда доходишь до задачи. Ресурсы тратят серверы, а не навыки.
- Куда класть API-ключи и токены?
Никогда в SKILL.md и не в чат. Для stdio-серверов — флаг -e в claude mcp add или блок env в конфиге клиента; для http-серверов — заголовок (x-api-key у exa). В VS Code можно ${input:…}, чтобы ключ не лежал в файле. Права — минимальные: у gitlab read_api + read_repository, пока не нужна запись.
- Имя инструмента из SKILL.md сервер не знает. Что делать?
Измерить: послать серверу initialize, затем tools/list, и сверить ответ со страницей. Для agentdb-memory это описано прямо в навыке — сервер ставится с @latest на alpha-пакет, имена дрейфуют; список сдвинулся, ты не ошибся.
- Сервер есть в claude mcp list, ключ верный, а инструмент возвращает пустоту или ошибку соединения. Где искать?
По карте из курса: Notion — интеграция не подключена к страницам (меню ⋯ → Connections); Obsidian — не открыт или не включён плагин Local REST API на 27124; ComfyUI — не запущен на 8188. Список серверов не показывает состояние приложения за мостом.
- Работает ли пакет с Cursor и VS Code, а не только с Claude Code?
Инструкции — да: в SKILL.md у clickup, context7, jina-reader, reddit, google-tasks есть готовые блоки для .cursor/mcp.json и .vscode/mcp.json, у остальных — для claude_desktop_config.json. Раскладка навыков под другую платформу — через dz init --target <платформа>.
- README говорит «v0.3.0», а package.json — 0.3.10, и CHANGELOG кончается на 0.1.0 с десятью навыками. Какая версия настоящая?
Настоящая — та, что на npm: https://www.npmjs.com/package/@dzhechkov/skills-mcp. В дереве пакета package.json показывает 0.3.10, строка Status в README и CHANGELOG отстали (измерено чтением файлов 2026-09-02). Число навыков считай по таблице Skill Inventory — их 16.