Навыки агента, MCP-серверы или файлы правил: что выбрать
Узнайте, как выбрать между MCP, навыками и файлами правил для кодирующего агента. Сравните стоимость каждого метода в токенах и затраты на поддержку при работе с контекстом.
Навыки агента, MCP-серверы и файлы правил: краткий ответ
Навыки агента, MCP-серверы и файлы правил предоставляют кодирующему агенту необходимые данные. Выбор инструмента зависит от типа этих данных. Протокол MCP (Model Context Protocol) предназначен для информации, которая может измениться при следующем обращении. Навык (skill) подходит для процедур, которые можно описать сегодня и которые останутся актуальными через шесть недель. Файл правил (rules file) предназначен для небольшого набора фактов, которые должны соблюдаться в каждой сессии.
У этого выбора есть цена, и эта цена — контекст. Каждый токен, потраченный на ненужную агенту инструкцию, — это токен, который нельзя использовать для анализа кода. Кроме того, вы платите за этот токен при каждом обращении, так как всё окно контекста отправляется повторно с каждым запросом. Поэтому правильный вопрос заключается не в том, какой механизм может выполнить задачу. В большинстве случаев с этим справятся все три. Вопрос в том, какой из них потребляет меньше всего ресурсов в режиме ожидания.
Стоимость использования каждого компонента
Эти три механизма загружаются в разное время, и именно этот временной фактор определяет разницу в их стоимости.
Файл правил загружается целиком при запуске каждой сессии, независимо от того, актуален он или нет. Claude Code считывает CLAUDE.md в начале каждого диалога и загружает его полностью, невзирая на объем. Рекомендуемый лимит составляет менее 200 строк на файл, так как более длинный файл потребляет больше контекста и хуже соблюдается моделью. Оба этих фактора действуют в одном направлении, поэтому файл правил на 900 строк не просто бесполезен, а вреден.
Навык (skill) загружается в два этапа. При запуске в контекст попадает только строка description из frontmatter каждого SKILL.md, чтобы модель знала о существовании навыка и понимала, когда его применять. Тело навыка загружается только в момент его вызова. Таким образом, справочный документ на 400 строк практически не расходует ресурсы до тех пор, пока он не понадобится.
Раньше MCP server был самым затратным компонентом, и именно здесь большинство прочитанных вами сравнений уже устарели. В текущей версии Claude Code поиск инструментов (tool search) включен по умолчанию. При запуске сессии загружаются только имена инструментов и поле инструкций сервера, а полные схемы JSON (JavaScript object notation) откладываются до тех пор, пока Claude не начнет их поиск. Добавление сервера больше не требует предварительной траты тысяч токенов. Затраты все еще существуют, и они по-прежнему требуют полной предварительной загрузки в конфигурациях, где поиск инструментов отключен.
The data behind this chart
[
{
"label": "Rules file, 200 lines",
"at_startup": "2,500",
"after_use": "2,500"
},
{
"label": "Skill, 12 KB body",
"at_startup": 40,
"after_use": "3,000"
},
{
"label": "MCP server, tool search on",
"at_startup": 500,
"after_use": "3,200"
},
{
"label": "MCP server, tool search off",
"at_startup": "4,500",
"after_use": "4,500"
}
]Это оценочные значения, а не измерения с вашей машины. Они основаны на объеме текста, который загружает каждый механизм (примерно четыре символа на токен): файл правил на 200 строк занимает около 10 KB в формате markdown, описание навыка — около 160 символов, а сервер, предоставляющий двенадцать инструментов, несет около 18 KB схем плюс блок инструкций на 2 KB. Claude Code обрезает каждое описание инструмента и каждое поле инструкций сервера на отметке 2 KB, поэтому для этой части существует верхний предел. В следующем разделе показано, как получить ваши собственные реальные показатели.
Рассматривайте первые две строки вместе. Файл правил стоит 2,500 токенов в сессии, где он никому не понадобился. Навык стоит 40 токенов в той же сессии и 3,000 в той одной из десяти сессий, где он срабатывает. Последние две строки — это один и тот же сервер, с включенным и выключенным поиском инструментов: 500 токенов против 4,500. Этот разрыв — причина, по которой старые советы о раздувании контекста через MCP все еще циркулируют.
Для работы поиска инструментов требуется модель, поддерживающая блоки tool_reference, что по состоянию на август 2026 года означает Claude Sonnet 4.5, Haiku 4.5, Opus 4.5 и более поздние версии. Claude Code отключает эту функцию, если ANTHROPIC_BASE_URL указывает на сторонний хост, так как большинство прокси не пересылают такие блоки. Используйте ENABLE_TOOL_SEARCH для управления этой настройкой: false загружает все схемы сразу, true откладывает загрузку всех схем, а auto загружает их сразу только в том случае, если они занимают менее 10% окна контекста.
# Load schemas up front only if they fit in 5% of the window
ENABLE_TOOL_SEARCH=auto:5 claudeРешающий вопрос: меняются ли данные между вызовами?
Задайте этот вопрос первым, так как он сразу исключает один из вариантов. Если агенту нужно читать или записывать данные, которые могут измениться к следующему обращению, вам нужен сервер. Система отслеживания задач, база данных, панель мониторинга, ваш собственный внутренний API (интерфейс прикладного программирования). Запись данных не поможет, так как информация устаревает в тот момент, когда кто-то другой редактирует запись.
Если ответ останется верным через 6 недель без какого-либо обслуживания, вам нужен навык (skill). Чек-лист релиза. Процедура миграции. Формат ответов об ошибках. Требования к написанию тестов в этом репозитории. Навык — это файл в git. У него нет порта, нет процесса и нет режима отказа, кроме неверного содержания, которое можно выявить при code review.
Если это факт, который должен применяться к работе, о которой вы еще не задумывались, поместите его в файл правил. Run make lint before committing. Never push to main. Handlers live in src/api/handlers/. По одной строке на каждый. Как только запись превращается в последовательность шагов, она перестает быть фактом и становится процедурой, поэтому её следует перенести в навык.
Когда достаточно файла правил
Файлы правил загружаются из нескольких мест, от наиболее общих к наиболее специфичным: управляемый файл политики, ваш личный ~/.claude/CLAUDE.md, файл ./CLAUDE.md или ./.claude/CLAUDE.md проекта, а также игнорируемый git файл ./CLAUDE.local.md. Все найденные файлы объединяются, а не переопределяют друг друга, при этом файлы, расположенные ближе к вашей рабочей директории, считываются в последнюю очередь.
Claude Code считывает CLAUDE.md, а не AGENTS.md. Если в вашем репозитории уже есть AGENTS.md для других инструментов, не поддерживайте две копии, которые со временем начнут различаться.
ln -s AGENTS.md CLAUDE.mdСимволическая ссылка при успешном выполнении ничего не выводит. Запустите сессию, выполните /context и убедитесь, что CLAUDE.md появился в разделе Memory files. Если его там нет, агент его не видит, и никакая переформулировка не поможет. Если вам также нужны строки, специфичные для Claude, используйте форму импорта и разместите их после импорта.
@AGENTS.md
## Claude Code
Use plan mode for changes under `src/billing/`.Здесь есть одна ловушка. Импорты @path не сохраняют контекст. Импортируемый файл разворачивается и загружается при запуске вместе с файлом, который на него ссылается, с глубиной вложенности до четырех уровней. Разделение файла правил на 600 строк на шесть импортов упорядочивает его для людей, но никак не меняет стоимость в токенах. Стоит ознакомиться с соглашениями, лежащими в основе AGENTS.md и его аналога для людей, прежде чем выбирать структуру.
Что действительно снижает стоимость, так это .claude/rules/ с полем paths. Файл правил, содержащий frontmatter paths, загружается только тогда, когда агент обращается к файлу, соответствующему одному из шаблонов.
---
paths:
- "src/api/**/*.ts"
---
# API rules
- Every endpoint validates its input.
- Use the standard error response shape.Правило без поля paths загружается при запуске с тем же приоритетом, что и .claude/CLAUDE.md. Поэтому рабочая схема — это короткие безусловные правила плюс список paths для всего, что имеет значение только внутри одной директории.
Когда вам нужен навык
Навык — это каталог, содержащий SKILL.md. Персональные навыки хранятся в ~/.claude/skills/<name>/SKILL.md и применяются к любому проекту на вашей машине. Проектные навыки находятся в .claude/skills/<name>/SKILL.md, перемещаются вместе с репозиторием и могут быть проверены в pull request, как и любой другой файл.
mkdir -p ~/.claude/skills/summarize-changes---
name: summarize-changes
description: Summarizes uncommitted changes and flags anything risky. Use when the user asks what changed, wants a commit message, or asks to review their diff.
---
Run `git status` and `git diff` against the merge base.
Group the changes by intent, not by file.
Call out anything touching auth, migrations or deletions.description — это единственная часть файла, которая учитывается в контексте до запуска навыка, поэтому она выполняет две задачи. Она описывает, что делает навык, и определяет, когда его следует использовать. Описание вида "Помогает с развертыванием" не дает модели данных для сопоставления с запросом, поэтому навык просто не активируется, и вы решите, что навыки не работают.
Имя каталога становится командой, поэтому в примере выше вы получаете /summarize-changes. В персональном или проектном навыке параметр name в заголовке задает только отображаемую метку в списках.
После вызова навыка его содержимое в отрендеренном виде добавляется в диалог как единое сообщение и остается там до конца сессии. Claude Code не перечитывает файл при последующих обращениях. Пишите постоянные инструкции, а не разовые шаги, и делайте тело навыка лаконичным, так как с этого момента каждая строка становится постоянной нагрузкой на каждый запрос. После автоматического сжатия Claude Code повторно прикрепляет последний вызов каждого навыка, сохраняя первые 5000 токенов каждого из них в рамках общего бюджета в 25000 токенов. Если вызвать несколько крупных навыков в одной сессии, самые старые из них будут полностью удалены, поэтому может показаться, что навык перестал работать после долгого диалога. Вызовите его снова, и он вернется. Если одна и та же процедура применима к нескольким кодовым базам, используйте один навык для нескольких репозиториев, вместо того чтобы копировать файл.
Когда вам нужен MCP server
Добавление сервера выполняется одной командой, а его формат определяется используемым транспортом.
# Remote HTTP server
claude mcp add --transport http notion https://mcp.notion.com/mcp
# Remote HTTP server behind a bearer token
claude mcp add --transport http secure-api https://api.example.com/mcp \
--header "Authorization: Bearer your-token"
# Local stdio server: everything after -- is passed through untouched
claude mcp add --env AIRTABLE_API_KEY=YOUR_KEY --transport stdio airtable \
-- npx -y airtable-mcp-serverРазделитель -- имеет значение. Для сервера, работающего через stdio, он отделяет параметры Claude Code от командной строки запуска вашего сервера. Если его пропустить, --port 8080, предназначенный для сервера, будет интерпретирован как опция для claude mcp add, которая в результате выдаст ошибку.
claude mcp list
claude mcp get notionclaude mcp add подтверждает действие строкой Added ..., которая лишь сообщает о том, что конфигурация была записана на диск. claude mcp list — это команда, которая показывает реальное положение дел, так как она выводит статус работоспособности для каждого сервера: ✔ Connected, ! Needs authentication или ✘ Failed to connect. Статус ошибки означает, что Claude Code не смог связаться с сервером, а не то, что команда вывода списка не сработала. Внутри сессии /mcp предоставляет аналогичный обзор по каждому серверу, включая количество доступных инструментов.
Каждый вызов MCP server является независимым и содержит всё необходимое, и именно поэтому MCP server не запоминает ваши предыдущие запросы. Это архитектурное решение, которое влечет за собой следующее: любое состояние, которое необходимо сохранить, должно находиться на стороне сервера — в базе данных или файле, — и теперь это зона вашей ответственности.
MCP-сервер — это процесс, который нужно запускать
Вот те расходы, которые обычно упускают при сравнении решений от вендоров. Skill — это файл. MCP-сервер — это программное обеспечение, которое где-то выполняется, и если это «где-то» является вашим VPS (виртуальным выделенным сервером), то вы сами отвечаете за его работоспособность.
Stdio-сервер — это самый простой вариант. Claude Code запускает его как дочерний процесс при начале сессии, и он завершается вместе с ней. Его не нужно мониторить или обновлять по отдельному расписанию. Удаленный HTTP-сервер — это долгоживущий сервис, и ему требуется всё то же, что и любому другому подобному сервису.
[Unit]
Description=Notes MCP server
After=network-online.target
Wants=network-online.target
[Service]
User=mcp
WorkingDirectory=/srv/notes-mcp
ExecStart=/usr/bin/node /srv/notes-mcp/dist/server.js
Environment=PORT=8931
Restart=on-failure
RestartSec=5
NoNewPrivileges=true
PrivateTmp=true
[Install]
WantedBy=multi-user.targetsudo systemctl daemon-reload
sudo systemctl enable --now notes-mcp
systemctl is-active notes-mcp
journalctl -u notes-mcp -n 50 --no-pagersystemctl is-active должен выводить active. Если он выводит failed, причину следует искать в журнале; при первом запуске это почти всегда отсутствие переменной окружения или порт, уже занятый другим процессом. Restart=on-failure здесь обязателен, так как упавший MCP-сервер не сообщает о своей неисправности. Вы узнаете об этом только тогда, когда агент сообщит, что не может прочитать ваш трекер задач.
Привяжите процесс к 127.0.0.1 и установите перед ним reverse proxy с поддержкой TLS (transport layer security). MCP-сервер, который имеет доступ к вашей базе данных и отвечает на публичном порту без аутентификации — это база данных, которую вы выставили в открытый доступ. В Running an MCP server on a VPS подробно описана настройка прокси, сертификатов и межсетевого экрана.
Затем честно оцените объем регулярной работы. Сервис требует обновлений безопасности по собственному графику, не связанному с агентом, который с ним взаимодействует. Его OAuth-токен истекает, и claude mcp list начинает выводить ! Needs authentication в самый неподходящий момент. Его учетные данные хранятся в конфигурационном файле или заголовке Authorization, поэтому они требуют такого же внимания, как и любые другие секреты, что само по себе является отдельной темой: keeping secrets out of an AI agent's reach. Ничего из этого не требуется для работы со skill.
Взвесьте все за и против, прежде чем приступать к разработке. Если данные, стоящие за предлагаемым сервером, меняются примерно раз в квартал, то skill, который указывает агенту, где искать информацию и что означают поля, обойдется дешевле, чем сервис, который вам придется постоянно поддерживать в рабочем состоянии.
Как оценить стоимость собственного контекста
Перестаньте гадать и выполните /context в рамках сессии. Команда выведет подробную информацию о запуске: системный промпт, файлы памяти, инструменты и MCP-серверы с указанием веса токенов для каждого из них.
Проверьте два момента. В разделе Memory files убедитесь, что в списке присутствуют все ожидаемые файлы правил. Если файл отсутствует, агент его не видит, поэтому в первую очередь исключите этот вариант, если инструкции игнорируются. Затем посмотрите на стоимость ваших серверов. Если сервер, которым вы пользуетесь дважды в месяц, занимает одну из верхних строчек в списке, отключите его в /mcp и включайте обратно только для тех сессий, где он необходим. Конфигурация при этом сохраняется.
Удаленный сервер также может сообщать статус cached 2h ago · connects on first use · 5 tools. Это означает, что Claude Code считал список инструментов из предыдущей сессии вместо подключения при запуске; соединение будет установлено при первом вызове инструмента. Инструменты доступны с вашего первого сообщения, поэтому исправлять ничего не нужно. Установите MCP_DISCOVERY_CACHE=0, если хотите, чтобы все серверы подключались при запуске. Для получения более полной картины ознакомьтесь с разделом управление окном контекста Claude Code, где описано, что сохраняется после сжатия, а в разделе во сколько на самом деле обходятся эти токены цифры переведены в денежный эквивалент.
Почему мой навык не срабатывает?
Обычно причина кроется в description. Это единственный текст в контексте перед запуском навыка, поэтому если он не описывает ситуацию, соответствие не будет найдено. Впишите триггер в предложение: "Use when the user asks what changed, wants a commit message, or asks to review their diff." Расплывчатые описания приводят к «тихим» сбоям, из-за чего проблему трудно заметить.
Вторая причина — опечатка во frontmatter, и в этом случае система выдаст явную ошибку. Неизвестный ключ отклоняется сразу:
Unexpected key(s) in SKILL.md frontmatter: argument-hint. Allowed properties are: allowed-tools, compatibility, description, license, metadata, nameТретья причина — расположение. Проектные навыки загружаются из .claude/skills/ в вашей рабочей директории и во всех родительских папках вплоть до корня репозитория. Навыки во вложенных директориях ниже той, из которой вы запустились, при старте не загружаются. Они появляются только тогда, когда агент впервые читает или редактирует файл внутри этой поддиректории, поэтому до этого момента они не отображаются в автодополнении и их нельзя вызвать по имени.
Аналогом такого «тихого» сбоя в MCP является запись .mcp.json с url, но без type. Claude Code считывает любую запись без type как stdio-сервер, поэтому пропускает её и сообщает:
MCP server "notes" has a "url" but no "type"; add "type": "http" (or "sse" / "ws") to this entryИспользование всех трех механизмов вместе
Эти механизмы не конкурируют друг с другом. Эффективная конфигурация использует каждый из них там, где это наиболее выгодно. Файл правил содержит несколько строк, которые верны в любых условиях. Навыки (skills) содержат процедуры и загружаются только тогда, когда они применимы. Один сервер MCP, иногда два, связывают системы, содержимое которых невозможно предсказать заранее. Если вы все еще формируете свое представление о первом из них, в том, чем на самом деле является навык агента подробно описан этот формат.
Один тест позволяет разрешить большинство споров о том, где должно находиться то или иное решение. Удалите его, начните новый сеанс и дайте агенту соответствующее задание. Если агент стал работать лишь медленнее, значит, это решение относилось к навыку. Если агент уверенно выдает неверный результат, значит, место этого решения — в файле правил. Если агент вообще не может получить информацию, значит, вам был нужен сервер, и теперь вам также нужен план по обеспечению его работоспособности.
FAQ
Что выбрать: навык (skill) или запуск MCP-сервера?
Выбор зависит от того, меняется ли информация между вызовами. Если агенту нужно считывать актуальное состояние, которое может изменить кто-то другой (например, трекер задач, база данных или дашборд), вам нужен MCP-сервер, так как любая записанная информация устаревает сразу после изменения записи. Если вы можете записать ответ один раз и он останется верным через шесть недель, создавайте навык. Навык — это файл в git, для которого не нужно запускать процесс, открывать порт или планировать обновления, поэтому это более экономный вариант во всех случаях, когда это возможно.
Занимают ли MCP-серверы всё ещё место в контекстном окне?
Гораздо меньше, чем раньше. В текущей версии Claude Code поиск инструментов включен по умолчанию, поэтому при запуске сессии загружаются только имена инструментов и поле инструкций сервера, а полные схемы подгружаются, когда Claude выполняет поиск. Предварительная загрузка всё ещё происходит, если поиск инструментов отключен: при использовании ENABLE_TOOL_SEARCH=false, при указании ANTHROPIC_BASE_URL на сторонний прокси или при работе с моделями старше поколения Claude 4.5. Запустите /context, чтобы проверить текущий режим работы, так как цифры в старых сравнительных обзорах основаны на предположении о полной предварительной загрузке.
Читает ли Claude Code файл AGENTS.md?
Нет. Claude Code читает CLAUDE.md. Если в вашем репозитории уже есть AGENTS.md для других агентов, настройте один файл на другой, вместо того чтобы хранить две копии. Выполните ln -s AGENTS.md CLAUDE.md для создания обычной символической ссылки или добавьте @AGENTS.md в первую строку файла CLAUDE.md, а инструкции для Claude разместите ниже. Затем начните сессию и выполните /context, чтобы убедиться, что CLAUDE.md отображается в разделе Memory files.
Почему мой навык перестал работать в середине сессии?
Обычно причина в автоматическом сжатии (auto-compaction). Когда история диалога суммируется, Claude Code повторно прикрепляет последний вызов каждого навыка, сохраняя первые 5000 токенов каждого из них в рамках общего лимита в 25000 токенов для всех навыков. Этот лимит заполняется начиная с последнего вызванного навыка, поэтому, если вы вызвали несколько объемных навыков, содержимое старых будет полностью удалено. Вызовите навык снова, чтобы восстановить его полное содержимое.
Как предотвратить загрузку длинного файла правил в каждой сессии?
Перенесите части, которые нужны лишь иногда, в файлы .claude/rules/ с полем paths в заголовке (frontmatter), чтобы каждый из них загружался только тогда, когда агент обращается к соответствующему файлу. Разделение файла на импорты @path не поможет, так как импортируемые файлы разворачиваются и загружаются при запуске вместе с файлом, который на них ссылается. Любая многошаговая процедура, а не постоянный факт, должна быть оформлена как навык, так как тело навыка не расходует ресурсы, пока он не вызван.