Сразу вывод: когда Skill едет поверх MCP, инструкция может остаться Markdown. Контракт обнаружения — по-прежнему JSON. 16 сентября 2026 Tommaso Stocchi из Microsoft Agent Framework выложил сопоставление: консультант горнолыжного курорта перешёл с «каждый специалист крутит свою модель» на «родитель загружает Skill по запросу, затем бьёт в MCP-инструменты напрямую». Сервисы остаются распределёнными. Рассуждение уходит в родительский контекст. Статья сайта от 11 сентября про MCP / Skills / Tools / Subagents закрыла четыре слоя. Этот текст только дополняет, что случилось после той даты: как выглядит документ обнаружения, где на самом деле стоит SEP-2640, и почему JSON всё равно проверяют первым.
Текст актуален на 22 сентября 2026. SEP-2640 (Skills Extension) 3 сентября пометили как Accepted. Это не Final. Демо Microsoft фиксирует исторический Draft skill://index.json. Более новый черновик берёт skills/list и skills/get. В поле уже две формы обнаружения. Совместимость — лучший первый вопрос, чем «Skills уже заменили Agents».
Что на самом деле вышло 16 сентября
Пост Stocchi называется From Specialist Agents to Distributed Skills over MCP. Консультант курорта раньше звал четырёх специалистов через A2A: погода, безопасность, лыжный коучинг, очереди на подъёмниках. У каждого специалиста свои инструкции, инструменты и цикл модели. Второй путь превращает те же доменные сервисы в MCP-провайдеры: каждый публикует описание, SKILL.md и типизированные MCP-инструменты. Консультант берёт у MAF SkillsProvider и MCPSkillsSource для обнаружения и загрузки. SkillToolsMiddleware после успешного load_skill вешает инструменты этого провайдера на следующий ход модели.
Веб-исследование остаётся обычным инструментом агента. Гибрид намеренный: автономность там, где она нужна; ограниченную компетенцию превратить в Skill. Четыре MCP-эндпоинта живут на /skillsmcp. На поверхности ресурсов обычно только:
skill://index.json
skill://<skill-name>/SKILL.md
skill:// именует ресурс на уже настроенном MCP-соединении. Это не hostname, и проза Skill не должна открывать новый сетевой ход. Аутентификация, транспорт и авторизация остаются в инфраструктуре и коде, не в Markdown.
Это не MCP вместо A2A
Оригинал проводит чистую границу. A2A отдаёт задачу другому циклу рассуждения. Distributed Skill отдаёт компетенцию и её операции текущему циклу. Одной таблицы хватит:
| Что важно | Agent как инструмент (A2A) | Distributed Skill |
|---|---|---|
| Что обнаруживает родитель | Специалиста-агента, которого можно вызвать | Компетенцию, которую можно загрузить |
| Где крутятся инструкции специалиста | Контекст модели специалиста | Контекст модели родителя |
| Кто выбирает доменные операции | Модель специалиста | Модель родителя |
| Что крутится удалённо | Цикл специалиста и его инструменты | MCP-инструменты и сервисы за ними |
| Что остаётся распределённым | Agents, сервисы, данные | Skill-провайдеры, сервисы, данные |
Имя и описание Agent Card становятся записью обнаружения. Системный промпт становится SKILL.md. Параметры инструментов становятся MCP input / output Schema. Бизнес-сервисы остаются за обработчиками инструментов. Эндпоинт, auth и транспорт с Card не принадлежат описанию Skill. Это совпадает со статьёй от 11 сентября: Skills — инструкция, MCP — сокет, Tools — контракт. Изменилось, как инструкцию обнаруживают — не схлопывание трёх слоёв в один.
Контракт обнаружения: skill://index.json
Оркестратору не нужна каждая инструкция на каждый запрос. Ему нужен каталог, которого хватает для маршрутизации. Индекс погодного провайдера в демо:
{
"$schema": "https://schemas.agentskills.io/discovery/0.2.0/schema.json",
"skills": [
{
"name": "weather",
"type": "skill-md",
"description": "Weather intelligence agent providing real-time conditions, forecasts, and storm alerts for the ski resort",
"url": "skill://weather/SKILL.md"
}
]
}
Это индекс обнаружения Agent Skills с семантикой MCP: url — resource URI, не https-хост. $schema указывает на discovery 0.2.0 на schemas.agentskills.io. Описание отвечает, когда брать эту компетенцию. SKILL.md отвечает как — называет операции вроде weather_forecast, диапазоны, единицы и запрет выдумывать наблюдения. Типы и границы этих операций по-прежнему даёт JSON Schema из MCP tools/list.
При старте родитель тянет каталог и tools/list по MCP. Модель сначала видит сводки Skill и хелперы загрузки, не каждую Schema операций. После load_skill("weather") middleware вешает эту группу. Инструмент в контексте — ещё не исполнение.
SEP-2640: Accepted, не Final
SEP-2640 — привязка Skills на Extensions Track: отдавать Agent Skills через MCP Resources. Идентификатор расширения — io.modelcontextprotocol/skills. Раскладка каталога, YAML frontmatter и progressive disclosure остаются у спецификации Agent Skills. SEP только фиксирует транспорт.
По сверке 10 сентября в посте Stocchi: ревизия 3 сентября пометила Accepted и перенесла обнаружение на skills/list и skills/get (с пагинацией; в записях uri, разобранный frontmatter и манифест ресурсов с digest sha256:). Соответствующий PR тогда ещё не был смержен. Демо фиксирует более ранний Draft: читает skill://index.json и не реализует новые методы. Инкубационный репозиторий всё ещё Experimental.
Не пишите чужое «Final 13 сентября» в продакшен-чеклист. Что твёрдо на 22 сентября 2026: Accepted, не Final, в ходу две формы обнаружения. Считать Draft-индекс обязательным пунктом ядра MCP — значит спорить с собственной сноской оригинала.
Контракт инструментов по-прежнему JSON Schema
Прогноз в демо берёт hours с Range(1, 24) и включает UseStructuredContent. SDK публикует определение инструмента. Обработчик валидирует диапазон, затем зовёт доменный сервис. SKILL.md подсказывает, какой инструмент взять. Он не заменяет Schema параметров и серверные проверки.
Авторитетные операции приходят из tools/list. Исполнение — tools/call. Инструкции — resources/read. Все три хода — JSON-RPC. Skill может сказать «пагинируй»; он не сохранит ваш cursor. Может упомянуть шаг approval; он не обеспечит авторизацию. Это тот же слой, что почему Tool Calling зависит от JSON Schema: проза выбирает дорогу, контракт отсекает незаконные аргументы.
Три парных прогона: быстрее, не дешевле по токенам
Один и тот же промпт («учитывая погоду и время ожидания, откуда мне начинать?»), то же приложение Aspire, gpt41, три свежих диалога. Путь A2A: 6 / 6 / 7 вызовов модели (специалисты могут идти параллельно). Путь Skills каждый раз 3: сначала load_skill, затем прямые MCP-операции, затем финальный ответ. Среднее client wall-clock около 6.35 с против 15.48 с.
Токены не упали. За три прогона на стороне Skills наблюдали около 13 533 против около 11 134 у A2A — примерно на 22% больше. Меньше прыжков модели — не меньший накопительный контекст: инструкции, групповые Schema и результаты складываются за три вызова. Счётчики кэша A2A были неполными. Это не счёт и не контролируемый эксперимент. Оригинал сам так пишет: три пары, не доказательство равной правильности или полноты.
Структурный вывод — одно предложение: вы выкидываете вложенный цикл специалиста, не JSON-круги. Индексы обнаружения, Schema инструментов, структурированные результаты по-прежнему ходят. Просто живут как несколько контрактов в родительском контексте, а не как речь от каждого специалиста.
Две формы обнаружения, хосты не видят друг друга
Разрыв уже был виден в августе–сентябре 2026. UseMcpSkills в Microsoft.Agents.AI.Mcp всё ещё читает skill://index.json. Сервер, который реализует только skills/list, получает «no index resource». Сервер, который отдаёт только индекс без декларации расширения и digest, невидим для более нового хоста. Некоторые хосты уже помечают index-based серверы как legacy.
Не ставьте на победителя. Для маленького каталога отдавайте оба: Draft-индекс старым клиентам, skills/list / skills/get — хостам, которые заявили расширение. Отсутствующий или пустой listing нельзя читать как «у этого сервера нет Skill» — черновик разрешает частичное перечисление для больших или генерируемых каталогов.
Три JSON-документа, которые вы всё равно проверяете локально
- Документ обнаружения. Записи из
skill://index.jsonилиskills/list:name,type,description,url/uri. Сверьте с$schema. Лишние ключи, пустые описания или https-хост вurl— баги маршрутизации, не правки текста. - Schema инструментов. Возьмите
inputSchemaизtools/list. Заполните required, поставьтеadditionalProperties: false, ужмите enum и диапазоны. Имена, которые называет проза Skill, должны совпасть со списком. - Структурированные результаты. Демо включает Structured Content. Output обратно родителю всё равно должен быть легальным JSON, затем проверка по Schema. Не возвращайте целую строку базы или стек. См. почему после Agents API JSON ещё нужнее.
Смотреть документ обнаружения локальными JSON-инструментами
Прежде чем подключать MAF или любой Host, разложите в браузере три текста: индекс обнаружения, одну Schema из tools/list и образец объекта arguments для tools/call.
- Валидатор JSON — легальна ли грамматика; если есть Schema — сразу поля, required и лишние ключи.
- Форматирование JSON — разверните однострочный index и смотрите, правда ли
urlэтоskill://. - JSON Diff — сравните запись Draft-индекса с записью
skills/list, чтобы два каталога не разъехались.
Ничего не уходит из браузера. Стабилизируйте контракт обнаружения, потом пусть родитель грузит SKILL.md. Инструкция может менять формулировки. Имена полей и URI не должны ездить каждую неделю.
FAQ
SEP-2640 уже Final?
Нет. Ревизия 3 сентября — Accepted. Сверка Stocchi 10 сентября ещё видела открытый PR. Демо берёт исторический Draft skill://index.json. Не режьте старых клиентов по истории «уже Final».
Distributed Skill заменит A2A?
Не как общее правило. Оставляйте Agent, когда нужны независимый жизненный цикл, приватный контекст или отдельная модель. Переносите в Skill, когда нужны только инструкция плюс операции. Веб-исследование, оставленное инструментом агента, — как раз эта граница.
skill:// — это URL, который хост должен резолвить?
Нет. Он именует ресурс на уже настроенном MCP-соединении. Проза Skill не должна им открывать другой хост.
Если есть SKILL.md, JSON Schema всё ещё нужна?
Да. Markdown подсказывает выбор инструмента и как читать результаты. Типы, диапазоны и обязательные поля по-прежнему даёт Schema из tools/list и проверка, которую вы гоняете сами.
Достаточно ли одного skill://index.json?
Для части текущих клиентов Microsoft — да. Для хостов на новом черновике — нет. На маленьком каталоге отдавайте оба. Одна форма невидима для второй половины поля.
Путь Skills дешевле?
В демо wall-clock быстрее, наблюдаемые токены примерно на 22% выше. Это не контролируемый эксперимент. Сначала сравните маршрутизацию и структурированные результаты, потом счёт.
Итог
Демо 16 сентября не объявило, что агенты устарели. Оно объявило: компетенцию без вложенного рассуждения можно отдавать как инструкцию и операции, а поверхность обнаружения — JSON. Границы сервисов остаются. Выкидываете цикл модели специалиста. В руках по-прежнему индекс обнаружения, Schema инструментов и структурированный результат.
SEP-2640 всё ещё Accepted. Draft-индекс и skills/list какое-то время будут жить рядом. Сначала разгладьте три JSON-документа в локальном валидаторе, потом отдайте Host. Слои от 11 сентября не отменены. Отменено другое: «Skill — это только папка на диске». Модели и harness возьмут новые версии. name, url и inputSchema не должны разъезжаться вместе с ними.