# Карточки сообщества, MCP-серверы и скиллы — всё подключается стрелкой

> NeuroSquad открывается: карточки, которые может сделать кто угодно, MCP-серверы и скиллы из публичных каталогов, проверенные карточки. Как всё изолировано и почему стрелка остаётся разрешением.

- URL: https://neurosquad.ai/ru/blog/cards-mcp-skills-by-arrow/
- Published: 2026-09-25
- Publisher: NeuroSquad (https://neurosquad.ai/)

До этой недели каждая карточка на холсте NeuroSquad была нашей. 0.1.123 изменил это сразу в трёх местах: **карточки сообщества**, которые может сделать и опубликовать на GitHub кто угодно, **MCP-серверы** из официального реестра MCP и **скиллы** со skills.sh — и каждое из этого выдаётся конкретному агенту стрелкой. Через полтора часа 0.1.125 добавил **проверенные карточки**: отрецензированный список со значком, у которого точный смысл.

У холста есть одно правило, благодаря которому его можно читать: агент пользуется ровно тем, на что указывают его стрелки. Открывать холст для чужого кода имело смысл, только если это правило уцелеет. Большая часть работы в этих выпусках — о том, чтобы оно уцелело.

## Сначала — сделать карточку дешёвой в добавлении

Первые карточки вшивались в приложение руками: тип карточки в объединении типов, ветка на холсте, подписи, иконки, запись в таблицах MCP-сервера, шаг в каскаде удаления — около десятка мест на карточку. По одной это терпимо, а при параллельной работе над несколькими — гарантированный конфликт.

Поэтому сначала встроенные карточки стали плагинами: одна папка на стороне страницы, один модуль в главном процессе, IPC-каналы под общим префиксом, MCP-инструменты, которые регистрирует сама карточка, строки в собственном файле. Холст, сайдбар, стрелки и удаление обращаются с любой плагин-карточкой одинаково. Когда карточка — плагин, дать написать её кому-то другому — вопрос изоляции, а не проводки.

## Карточки сообщества: песочница, из которой не выбраться за пределы карточки

Карточка сообщества — это маленькое веб-приложение. Его можно было бы запускать в отдельном нативном веб-представлении, но это оверлей уровня ОС: он лежал бы поверх холста, а не внутри него, и не масштабировался и не обрезался бы вместе с ним. Вместо этого карточка работает в изолированном iframe с непрозрачным origin, который отдаётся через собственный протокол приложения. Прежде чем строить на этом, мы проверили, что такой фрейм может и чего не может в этой конкретной версии Electron:

- Он работает в **отдельном процессе ОС**. Карточка, крутившая пустой цикл четыре секунды, не заморозила холст: таймер хоста продолжал тикать, самый большой разрыв — 63 мс.
- `window.api`, Node и `require` там просто нет, а обращение к родительской странице бросает ошибку безопасности.
- `localStorage` и IndexedDB недоступны (отсюда собственный API хранилища), а внешние запросы блокирует политика безопасности контента фрейма.
- Он не может открывать окна, уходить в полноэкранный режим, читать буфер обмена и включать микрофон.

Две проверки не прошли, и именно они самые ценные. WebRTC полностью игнорирует политику безопасности контента: WebRTC-соединение дотянулось до TCP-порта на локальной машине. Исправление прямолинейное — загрузочный скрипт карточки удаляет конструктор WebRTC до того, как выполнится любой код карточки. Вторая была в приложении, а не во фрейме: его обработчик разрешений выдавал микрофон любому, кто попросит. Теперь он выдаёт его только собственной странице приложения верхнего уровня — это строка «Доступ к микрофону выдаётся только самому приложению» в журнале изменений.

Карточка никогда не общается со страницей, на которой нарисована. Она получает порт сообщений в главный процесс, привязанный к одному экземпляру карточки, и каждый запрос проверяется там по правам, которые пакет объявил, а вы выдали при установке. Всё, что доходит до другой карточки или агента, — передача данных через порт, промпт агенту, ввод в терминал, — требует **и** права, **и** стрелки между двумя карточками. Стрелка — это согласие именно на этот поток данных.

Установка — по адресу на GitHub, с привязкой к коммиту и сверкой с хэшем дерева файлов пакета. Обновления происходят только по вашему клику и сначала показывают, что изменилось в правах. Как сделать свою карточку — на [странице Card SDK](https://neurosquad.ai/ru/card-sdk/).

## Проверенные карточки: значок, который значит одно

У установки по адресу есть очевидная дыра: как найти карточку, которую стоит ставить? 0.1.125 добавляет каталог карточек, проверенных командой NeuroSquad; он лежит в публичном репозитории и пополняется через пул-реквесты. Искать по нему можно в меню «Своя карточка…» или в настройках.

![Вкладка «Проверенные» в выборе своей карточки: проверенная карточка с зелёным значком-щитом](https://neurosquad.ai/blog/cards-mcp-skills-by-arrow/verified-ru.webp)

*Проверенные карточки в меню выбора. Щит означает, что проверен именно этот код, — а не что он никогда не может навредить.*

Значок решает главный процесс, и значит он ровно следующее: установленная карточка взята из проверенного репозитория, на проверенном коммите, **и** хэш её файлов, посчитанный при установке, совпадает с хэшем в каталоге. Локальная папка разработки, другой коммит или другие файлы — значка нет.

Установка из каталога идёт на шаг дальше: если имя, версия или хэш не совпадают с записью каталога, установка **отклоняется**. Выбирать приходилось между «поставить без значка» и «не ставить», а подменённый пакет — не то, что стоит тихо ставить. Более новая проверенная версия предлагается как обновление с обычным сравнением прав и никогда не ставится сама; карточка, пропавшая из списка, теряет значок, и с вашего холста ничего не удаляется.

## MCP-серверы и скиллы — по стрелке

Каталог в приложении ищет по официальному реестру MCP (около 35 тысяч серверов) и по skills.sh (20 тысяч самых устанавливаемых скиллов). Поиск локальный, прямо в приложении, по снимкам, которые идут вместе с ним и обновляются инкрементально, — поэтому он работает без сети и мгновенно.

![Вкладка MCP-серверов в каталоге с результатами поиска](https://neurosquad.ai/blog/cards-mcp-skills-by-arrow/catalog-ru.webp)

*Поиск по реестру MCP прямо в приложении. Перед установкой видно, что будет запущено, и согласие спрашивается один раз.*

Очевидный способ дать агенту MCP-сервер — прописать его в конфиг агентского CLI. Мы сознательно так не сделали. NeuroSquad сам выступает MCP-клиентом каждого установленного сервера и отдаёт его инструменты через собственный MCP-сервер как `<alias>__<tool>` — только агентам, у которых есть стрелка к карточке сервера, и только пока эта стрелка существует. В папки настроек вашего CLI ничего не пишется, а секреты сервера не покидают главный процесс. Claude Code подхватывает новую стрелку без перезапуска; остальные CLI видят её при следующем старте.

*Копия: установленный MCP-сервер, два агента и стрелка, которая отдаёт сервер ровно одному из них.* (interactive: https://neurosquad.ai/ru/blog/cards-mcp-skills-by-arrow/)

Скиллы устроены так же — через один инструмент, `skill_load`, в описании которого перечислены подключённые к агенту скиллы и когда какой применять. Один флаг отделил функцию от демонстрации: агенты прячут MCP-инструменты за поиском инструментов, и в живой проверке свежий агент ни разу не загрузил подходящий скилл. С пометкой «загружать всегда» он сам загрузил нужный.

*То же для скилла: подключён стрелкой, загружается, когда этого требует задача.* (interactive: https://neurosquad.ai/ru/blog/cards-mcp-skills-by-arrow/)

## Что изменил аудит безопасности

Оба выпуска перед выходом прошли аудит безопасности, и три его результата стоит описать:

- **У каждого агента свой токен** для MCP-сервера приложения, выведенный из секрета текущего запуска и id агента. Раньше один агент теоретически мог действовать от имени другого; теперь чужой путь отвечает 401.
- **Сторонние инструменты живут на втором MCP-сервере**, которого нет в списке заранее разрешённых инструментов CLI. Поэтому CLI спрашивает вас перед каждым вызовом инструмента с чужого сервера, — а список инструментов при установке запоминается отпечатком, так что сервер, который позже поменяет свои инструменты, ждёт, пока вы примете изменения.
- **Скилл берётся целиком, с одного коммита.** Собственный хэш содержимого skills.sh не воспроизводится по файлам, которые он отдаёт, поэтому приложение закрепляет свой SHA-256 ровно тех файлов, которые вы просмотрели, и ставит именно их.

Не всё встаёт на место. Официальный удалённый сервер Figma отвечает 403 на динамическую регистрацию клиента — он принимает только одобренных клиентов, — поэтому каталог предлагает вместо него сервер сообщества, который работает с личным токеном. Пакеты, которым нужен локальный HTTP-сервер, пока не поддерживаются. И то и другое записано, а не обойдено.

Подробнее — на страницах [MCP-серверов](https://neurosquad.ai/ru/mcp/) и [скиллов](https://neurosquad.ai/ru/skills/), полный список — в журнале изменений [0.1.123](https://neurosquad.ai/ru/changelog/#v0.1.123) и [0.1.125](https://neurosquad.ai/ru/changelog/#v0.1.125).
