API каталога, MCP-сервер и CLI
Каталог SkillFoxx открыт для агентов и приложений. Ни одному адресу на этой странице ключ не нужен.
Коротко
- npx skillfoxx: установщик, который ставит запись каталога в ваших агентов и ведет lock-файл.
- MCP-сервер https://skillfoxx.ru/api/mcp: поиск, карточка записи, план установки под агента, подбор под проект, как в «Подбор с Foxx AI».
- REST API /api/v1: список записей, поиск, рецепты установки, подбор под проект и проверка файлов.
- Рецепты установки, подписанные ключом Ed25519, и их JSON-схема.
- Выгрузка /catalog.json по лицензии CC BY 4.0.
- Файлы для агентов: /llms.txt, /server.json, /.well-known/mcp.json.
Все ответы в JSON UTF-8. Разделы каталога в адресах и параметрах: skills, mcp, cli, plugins, workflows, prompts.
CLI: npx skillfoxx
Установщик ставит записи каталога в агентов на вашей машине. Пакет skillfoxx лежит в npm и распространяется по лицензии MIT, нужен Node.js 18.18 или новее.
Установить запись
npx skillfoxx add mcp/vv-mcp-serverОстальные команды
npx skillfoxx search postgres
npx skillfoxx list
npx skillfoxx doctor
npx skillfoxx update
npx skillfoxx remove mcp/vv-mcp-serverИсходный код, сборка и сеть
- Исходный код CLI открыт: https://github.com/SkillFoxx-CLI/cli, лицензия MIT. Бандл в npm собран без минификации, его можно прочитать перед запуском.
- Пакет в npm собирает GitHub Actions из этого репозитория и подписывает происхождение сборки (provenance, SLSA): на странице пакета видно, из какого коммита он получен. Каждую версию владелец подтверждает двухфакторной защитой.
- CLI обращается только к skillfoxx.ru (подписанный рецепт записи и счетчик установок), api.github.com и raw.githubusercontent.com (файлы скилла на зафиксированном коммите).
- Счетчик установок анонимный: запись, агент, событие, версия CLI, случайный идентификатор и признак CI. Путей, переменных окружения и имени пользователя в нем нет. Отключить: DO_NOT_TRACK=1.
Команды
| Команда | Что делает |
|---|---|
| add <раздел>/<slug> | Ставит запись. Можно указать только slug: CLI найдет раздел сам, а если slug есть в нескольких разделах, спросит. |
| remove <запись> | Удаляет то, что поставил SkillFoxx. |
| update [запись] | Обновляет до версии, которую сверил SkillFoxx. Без аргумента проверяет все установленные записи. |
| list | Показывает, что установлено в проекте и у пользователя. |
| doctor | Ищет проблемы: файл изменен руками или пропал, есть сверенное обновление, запись снята или заблокирована, доступ вырос до широкого (risk=high). |
| search <запрос> | Ищет в каталоге, запрос от двух символов. |
Параметры
| Параметр | Что делает |
|---|---|
| --agent a,b | Агенты через запятую или all (все найденные на машине). Без флага CLI берет агента, внутри которого запущен (Claude Code, Cursor, VS Code). Если такого нет, CLI ищет агентов на машине: в терминале предлагает выбрать, без терминала берет всех найденных. Значения: claude-code, cursor, vscode, codex, gemini-cli, devin, cline, zoo-code, opencode, zed, goose, amp, hermes, sourcecraft, coddy, antigravity, kiro. |
| --project | Ставит в проект. Это выбор по умолчанию, если в текущей папке или выше есть .git, package.json или skillfoxx-lock.json. |
| --global | Ставит для пользователя. |
| -y, --yes | Отвечает «да» на все вопросы. Причины широкого доступа CLI при этом печатает в stderr. |
| --force | Заменяет ключ конфига или папку скилла, которые поставил не SkillFoxx или изменили руками. Старое уходит в резервную копию. |
| --dry-run | Показывает план и ничего не меняет. Вместе с --json печатает план в JSON. |
| --json | Вывод в JSON для search, list, doctor и add --dry-run. |
| --lang ru|en | Язык вывода. |
| -v, --version; -h, --help | Версия и справка. |
Куда CLI пишет
| Агент | MCP в проекте | MCP для пользователя | Скиллы в проекте |
|---|---|---|---|
| Claude Code | .mcp.json | ~/.claude.json | .claude/skills |
| Cursor | .cursor/mcp.json | ~/.cursor/mcp.json | .agents/skills |
| VS Code | .vscode/mcp.json | mcp.json в папке пользователя VS Code | .github/skills |
| Codex | .codex/config.toml | ~/.codex/config.toml | .agents/skills |
| Gemini CLI | .gemini/settings.json | ~/.gemini/settings.json | .agents/skills |
| Devin Desktop | .devin/mcp_config.json | ~/.config/devin/mcp_config.json | .devin/skills |
| Cline | нет | cline_mcp_settings.json в ~/.cline/data/settings | .cline/skills |
| Zoo Code | .roo/mcp.json | нет | .roo/skills |
| OpenCode | opencode.json | ~/.config/opencode/opencode.json | .agents/skills |
| Zed | .zed/settings.json | ~/.config/zed/settings.json | .agents/skills |
| Goose | нет | ~/.config/goose/config.yaml | .agents/skills |
| Amp | .amp/settings.json | ~/.config/amp/settings.json | .agents/skills |
| Hermes Agent | нет | ~/.hermes/config.yaml | .agents/skills |
| SourceCraft | .codeassistant/mcp.json | нет | нет |
| Coddy | нет | нет | .agents/skills |
| Claude Desktop | нет | claude_desktop_config.json в папке Claude | нет |
| LM Studio | нет | ~/.lmstudio/mcp.json | нет |
CLI кладет файлы скилла в .agents/skills/<имя> (для пользователя в ~/.agents/skills) и подключает к папке каждого агента символической ссылкой. Если ссылку создать нельзя, копирует папку. Там, где в таблице стоит «нет», CLI печатает инструкцию вместо правки.
Что CLI проверяет до установки
- Подпись рецепта ключами, вшитыми в CLI. Рецепт без подписи, с неизвестным ключом, для другой записи или выданный больше 24 часов назад CLI отвергает.
- CLI скачивает файлы скилла с GitHub на зафиксированном коммите и сверяет sha каждого файла и общий отпечаток.
- Запись снята с публикации или у нее открыт инцидент: установки нет, код 3. Рецепта нет или статус unsupported: код 4.
- Широкий доступ требует согласия: вопрос в терминале или флаг --yes. Без терминала и без --yes CLI завершается с кодом 5.
- Рецепты со статусами ai и review CLI ставит с предупреждением.
- Если нет node, python3, uvx или docker, CLI предупредит, что сервер без них не запустится, и продолжит.
Конфиги, секреты и резервные копии
- CLI правит конфиг по одному ключу: комментарии, отступы и чужие серверы остаются на месте.
- Перед правкой CLI сохраняет копию в ~/.skillfoxx/backups и держит 20 последних копий. Ошибка или Ctrl+C откатывает установку.
- В файл проекта секрет не попадает. CLI пишет ссылку на переменную окружения, если агент ее понимает (Claude Code, Gemini CLI, Cursor, VS Code, Zoo Code, OpenCode), иначе печатает инструкцию.
- Для пользователя CLI записывает значение секрета в конфиг агента с правами 600, как это делают сами агенты. В lock-файле значений секретов нет.
- Установщик сам не ставит плагины Claude Code: он печатает команды /plugin для чата. CLI-инструменты ставит через npm, pip, brew, cargo или go после вашего подтверждения.
Lock-файлы и язык
skillfoxx-lock.json в корне проекта (его стоит коммитить) и ~/.skillfoxx/lock.json для пользователя хранят запись, хеш рецепта, коммит, статус, уровень доступа, агентов, пути и даты. Другую папку вместо ~/.skillfoxx задает переменная SKILLFOXX_HOME.
CLI берет язык вывода из LC_ALL, LC_MESSAGES или LANG, затем из языка системы (на macOS из AppleLanguages). Если определить не получилось, пишет по-русски. Флаг --lang задает язык явно.
Коды выхода
| Код | Значение |
|---|---|
| 0 | Успех. |
| 1 | Сбой или ответ «нет» на вопрос «Установить?». |
| 2 | doctor нашел проблемы. |
| 3 | Запись снята с публикации или заблокирована. |
| 4 | Автоматической установки нет. |
| 5 | Нужно согласие на широкий доступ. |
| 64 | Ошибка в аргументах. |
| 130 | Установку прервали, изменения отменены. |
Телеметрия
После add, update и remove CLI отправляет на адрес POST /api/v1/installs запись, агент, событие, версию CLI, признак CI и случайный идентификатор установки из ~/.skillfoxx/config.json. Пути, переменные и имя пользователя не уходят. Отключить: DO_NOT_TRACK=1, DISABLE_TELEMETRY=1 или SKILLFOXX_TELEMETRY=0.
Из этих событий складывается счетчик установок на карточке: разные устройства за 30 дней, только события add, без запусков в CI. Число появляется от 10 установок. События старше 90 дней сервер удаляет.
MCP-сервер
Адрес https://skillfoxx.ru/api/mcp, транспорт streamable HTTP без сессий, ответы в JSON. Ключ не нужен, лимит 120 запросов в минуту с одного IP-адреса.
Пишет в базу только report_install: он добавляет анонимное событие в счетчик установок. Остальные инструменты только читают каталог.
Claude Code
claude mcp add --transport http skillfoxx https://skillfoxx.ru/api/mcpCursor, .cursor/mcp.json
{
"mcpServers": {
"skillfoxx": {
"url": "https://skillfoxx.ru/api/mcp"
}
}
}VS Code, .vscode/mcp.json
{
"servers": {
"skillfoxx": {
"type": "http",
"url": "https://skillfoxx.ru/api/mcp"
}
}
}Codex, ~/.codex/config.toml
[mcp_servers.skillfoxx]
url = "https://skillfoxx.ru/api/mcp"Инструменты
| Инструмент | Параметры | Что возвращает |
|---|---|---|
| search_entries | query (от 2 до 120 символов), lang, limit (от 1 до 20, по умолчанию 10) | Опубликованные записи: id, название, tagline, тип, путь и полный адрес. |
| get_entry | section, slug, lang | Карточку: что делает, когда подходит и когда нет, ограничения, уровень доступа с причинами, способы установки, рецепт со статусом, признак официального вендора, инструкцию для агента, лицензию и ★ репозитория. |
| plan_install | section, slug, agent, lang | Шаги установки под одного агента: команды, путь и фрагмент конфига, ссылки установки в Cursor и VS Code, переменные с плейсхолдерами вместо секретов, статус рецепта, уровень доступа и reportToken. |
| report_install | section, slug, agent, event (add или remove), reportToken | {"ok": true} или ошибку: invalid_token, not_found, rate_limited. |
| recommend_for_project | goal (до 2 000 символов), frameworks (до 40), dependencies (до 400), files (до 400), problems (до 20), lang | До 12 записей: название, тип, адрес, уровень доступа и что совпало с проектом. |
| list_categories | lang | Категории: slug, название и число записей. |
lang принимает ru или en, по умолчанию ru. section: skills, mcp, cli, plugins, workflows, prompts. agent в plan_install: claude-code, cursor, vscode, codex, gemini-cli, devin, cline, zoo-code, opencode, zed, sourcecraft, coddy, antigravity, kiro; подходят и написания vs-code, github-copilot, windsurf, roo-code, gemini. Если у записи нет рецепта под этого агента, придет agent_not_supported со списком поддерживаемых агентов. Если рецепта нет совсем, plan равен null, а message объясняет почему.
Как сообщить об установке
- Агент вызывает plan_install, спрашивает пользователя, ставит запись и только после успешной установки вызывает report_install с reportToken.
- Токен действует 2 часа и привязан к записи и IP-адресу. С одного адреса в сутки засчитывается одна MCP-установка записи.
- Если ставили через npx skillfoxx, report_install не нужен: CLI сообщает сам. Если пользователь отказался от статистики, инструмент не вызывают.
В recommend_for_project отправляйте только выжимку о проекте, без кода и секретов. Сервер передает этот текст в OpenAI для подбора по смыслу и не сохраняет его.
REST API
Базовый адрес https://skillfoxx.ru/api/v1. Ключ не нужен. Лимиты считаются по IP-адресу за минуту, при превышении придет ответ 429.
GET /api/v1/entries
Опубликованные записи по 50 на страницу. Порядок как в каталоге: сначала выбор редакции, затем ★ репозитория, затем дата публикации.
| Параметр | Значение |
|---|---|
| lang | ru или en, по умолчанию ru. |
| section | skills, mcp, cli, plugins, workflows, prompts. Неизвестное значение игнорируется. |
| category | slug категории, список отдает list_categories. |
| agent | slug агента, например cursor или claude-code. |
| ru | 1: только российский стек. |
| page | Номер страницы с 1. |
Ответ: page, totalPages, totalDocs и entries с полями id, type, slug, title, titleOriginal, tagline, url, source, riskLevel, isRuStack, stars (★ репозитория), license, install (method и command). Кэш 5 минут, CORS открыт.
Пример
curl 'https://skillfoxx.ru/api/v1/entries?lang=ru§ion=mcp&ru=1&page=1'GET /api/v1/search
Поиск по опубликованным записям. q от 2 до 120 символов, lang, limit до 50 (по умолчанию 12). Ответ {"hits": [...]} с полями id, title, titleOriginal, tagline, type, href. href относительный и без префикса языка. Когда совпадений по словам мало, поиск добирает записи по смыслу через эмбеддинги OpenAI. Кэш на 1 минуту. Заголовка CORS у этого адреса нет: с вашего сайта в браузере вызывайте его через ваш сервер.
Пример
curl 'https://skillfoxx.ru/api/v1/search?q=postgres&lang=ru&limit=5'GET /api/v1/recipe/<slug>
Находит разделы, в которых есть такой slug: {"matches": [{"section", "slug", "title"}]}. Этим адресом пользуется npx skillfoxx add <slug>. Сам рецепт отдает адрес с разделом, он описан ниже.
Пример
curl https://skillfoxx.ru/api/v1/recipe/vv-mcp-serverPOST /api/v1/scan
Подбор под проект, как на странице «Подбор с Foxx AI» (/scan). Тело {"input": "...", "lang": "ru"}, input от 3 до 50 000 символов: описание задачи или package.json. Ответ: answer (текст модели), sources (записи с href и тем, что совпало) и mode (project или question). Текст запроса уходит в OpenAI. Лимит 20 запросов в минуту. Ответ 429 с телом {"error": "quota"} значит, что запросы на сегодня закончились; при "needLogin": true продолжить можно после входа через Яндекс ID.
Пример
curl -X POST https://skillfoxx.ru/api/v1/scan \
-H 'content-type: application/json' \
-d '{"input": "интернет-магазин на Next.js с оплатой ЮKassa", "lang": "ru"}'POST /api/v1/validate
Проверка файла, как на странице /validator. Тело {"content": "...", "format": "skill_md"}. format: skill_md, plugin_json, server_json, agents_md или cursor_mdc; без него сервер определит формат сам. content до 200 000 символов. Лимит 60 запросов в минуту.
POST /api/v1/installs
Служебный адрес для событий CLI. Сервер принимает только запросы с User-Agent skillfoxx-cli/<версия>, остальным отвечает 202 и ничего не записывает. Чтобы ваша интеграция попадала в счетчик, вызывайте report_install в MCP.
Рецепты установки и подпись
Рецепт описывает, что ставится (скилл, MCP-сервер, плагин, CLI или правила), из какого коммита и какие переменные нужны. Как мы собираем и сверяем рецепты, написано в методологии.
GET /api/v1/recipe/<раздел>/<slug>
curl -i https://skillfoxx.ru/api/v1/recipe/mcp/vv-mcp-serverОтвет: entry (slug, type, section, url, canonicalSource), recipe (объект по схеме или null), status, reason (только у unsupported и review), risk (level и reasons), officialVendor, checkedAt, hash, blocked (открытый инцидент серьезности high или critical, иначе null) и issuedAt. Адрес и причины берутся из русской карточки. Кэш 5 минут, ETag и ответ 304 на If-None-Match, лимит 60 запросов в минуту, 404 для записи, которой нет в каталоге.
Статусы
| Статус | Что значит |
|---|---|
| auto | Рецепт собран из манифестов репозитория и данных карточки, источники совпали. ИИ не участвовал. |
| ai | Рецепт собрала модель ИИ, разобрав README. Каждый путь нашелся в репозитории, а каждый пакет в реестре. Ручной проверки не было, на карточке и в CLI стоит предупреждение. |
| verified | Рецепт проверил человек из редакции. Автоматически этот статус не ставится. |
| review | Сверка нашла изменение, важное для безопасности. API отдает последнюю принятую версию, новая ждет проверки. |
| unsupported | Автоматической установки нет, recipe равен null. Сюда же попадает рецепт, который не прошел проверку по схеме. |
Подпись Ed25519
Каждый ответ рецепта подписан. Заголовок x-skillfoxx-signature имеет вид v1;kid=<ключ>;sig=<подпись в base64url>. Подписано сообщение из строки skillfoxx-recipe-v1, перевода строки и тела ответа байт в байт.
Открытые ключи (SPKI DER в base64) лежат в /.well-known/skillfoxx-recipe-keys.json, тот же список вшит в CLI. По плану ротации новый ключ появляется в списке за 30 дней до переключения сервера, старый исчезает через 30 дней после.
Проверка подписи на Node.js
// verify.mjs, Node.js 18+: node verify.mjs
import { createPublicKey, verify } from 'node:crypto'
const base = 'https://skillfoxx.ru'
const { keys } = await (await fetch(`${base}/.well-known/skillfoxx-recipe-keys.json`)).json()
const res = await fetch(`${base}/api/v1/recipe/mcp/vv-mcp-server`)
const body = await res.text()
const [, kid, sig] = /^v1;kid=(sf-[0-9a-f]{8});sig=([A-Za-z0-9_-]+)$/.exec(res.headers.get('x-skillfoxx-signature'))
const key = createPublicKey({ key: Buffer.from(keys.find((k) => k.kid === kid).publicKey, 'base64'), format: 'der', type: 'spki' })
console.log(kid, verify(null, Buffer.from('skillfoxx-recipe-v1\n' + body), key, Buffer.from(sig, 'base64url')))Проверяйте подпись до разбора JSON и сверяйте entry.section и entry.slug с тем, что запрашивали. CLI вдобавок отвергает ответ, если issuedAt старше 24 часов.
Выгрузка каталога
Все опубликованные записи одним файлом: /catalog.json с русскими текстами и /catalog.en.json с английскими (где перевода нет, текст русский). Сервер собирает файл по запросу и держит в памяти до часа.
Верхний уровень: version, generatedAt, lang, license (name, url, attribution, scope), count и entries. Поля записи: slug, section, type, title, titleOriginal, tagline, url, canonicalSource, source, risk, officialVendor, recipe, recipeStatus, recipeCheckedAt, recipeHash, updatedAt.
Кэш на час, ETag и ответ 304 на If-None-Match, заголовок Link с rel="license". Лимит 20 запросов в минуту. Если база недоступна, сервер отдает прошлую версию, а если ее нет, отвечает 503 с Retry-After.
Скачать
curl -O https://skillfoxx.ru/catalog.jsonАдреса записей с рецептом auto, нужен jq
curl -s https://skillfoxx.ru/catalog.json | jq -r '.entries[] | select(.recipeStatus == "auto") | .url'llms.txt и файлы для агентов
| Адрес | Что внутри |
|---|---|
| /llms.txt | Описание каталога для языковых моделей: состав по разделам (числа считает база), адреса MCP и API, как ссылаться на SkillFoxx. Обновляется раз в час. |
| /server.json | Манифест MCP-сервера в формате реестра MCP, имя ru.skillfoxx/catalog. |
| /.well-known/mcp.json | Адрес MCP-сервера, транспорт и список инструментов. |
| /.well-known/skillfoxx-recipe-keys.json | Открытые ключи подписи рецептов. |
| /.well-known/skills/index.json | Скиллы каталога по стандарту well-known: минимальный и расширенный доступ, файлы с GitHub на проверенном коммите. Hermes Agent: hermes skills search https://skillfoxx.ru --source well-known. |
| /schemas/install-recipe.v1.json | JSON-схема рецепта. |
| /rss.xml | 50 последних записей каталога. |
Лимиты и кэш
| Адрес | Лимит с IP-адреса | Кэш |
|---|---|---|
| /api/mcp | 120 в минуту | нет |
| /api/v1/entries | 60 в минуту | 5 минут |
| /api/v1/search | 120 в минуту | 1 минута |
| /api/v1/recipe/<section>/<slug> | 60 в минуту | 5 минут, ETag |
| /api/v1/recipe/<slug> | 60 в минуту | 5 минут |
| /api/v1/scan | 20 в минуту | нет |
| /api/v1/validate | 60 в минуту | нет |
| /catalog.json, /catalog.en.json | 20 в минуту | 1 час, ETag |
Поминутные счетчики сервер держит в памяти. Полную копию каталога берите из catalog.json: один файл скачивается быстрее обхода страниц и не нагружает сайт.
Лицензии
- Тексты и метаданные SkillFoxx в API, MCP и выгрузке доступны по лицензии CC BY 4.0. Указывайте источник «SkillFoxx (skillfoxx.ru)» со ссылкой на сайт.
- Код записей принадлежит их авторам и распространяется по их лицензиям. В ответы и выгрузку он не входит, там только ссылки на первоисточник.
- CLI skillfoxx распространяется по лицензии MIT, а лицензии вшитых библиотек лежат в THIRD_PARTY_LICENSES.txt внутри пакета.
- Звезды и лицензии записей приходят из GitHub и относятся ко всему репозиторию.
Связь
Об ошибке в записи или рецепте сообщите кнопкой «Сообщить о проблеме» на странице записи. Свой скилл или сервер предложите через форму добавления. Новости API и CLI выходят в Telegram-канале @skillfoxxru.
Модели для агента по одному ключу
SkillFoxx APISkillFoxx APIЗакрытая бета
API каталога на этой странице бесплатный. SkillFoxx API платный: один ключ к GPT, Claude, Gemini и DeepSeek, оплата в рублях, работа без VPN, подключение Claude Code, Cursor и Codex одной командой.
Моделей в шлюзе: 12
Записаться в бетуБесплатные инструменты
Цены API нейросетей в рублях, калькулятор, счетчик токенов, проверка ключей и Telegram-ботов.
Все инструменты