SprutTechnology.ExtensionStoreMcp 0.2.3

dotnet tool install --global SprutTechnology.ExtensionStoreMcp --version 0.2.3
                    
This package contains a .NET tool you can call from the shell/command line.
dotnet new tool-manifest
                    
if you are setting up this repo
dotnet tool install --local SprutTechnology.ExtensionStoreMcp --version 0.2.3
                    
This package contains a .NET tool you can call from the shell/command line.
#tool dotnet:?package=SprutTechnology.ExtensionStoreMcp&version=0.2.3
                    
nuke :add-package SprutTechnology.ExtensionStoreMcp --version 0.2.3
                    

sprutcam-extension-mcp

MCP-сервер для потока «написать расширение СПРУТКАМа в Cursor, ни разу не скопировав файл руками». Работает вместе с шаблоном sprutcam-extension-template.

Инструмент Что делает
create_extension_from_template Клонирует шаблон в папку с вашим именем, отвязывает его историю и переименовывает всё внутри.
publish_extension Собирает Release на вашей машине, отправляет результат сборки в магазин; магазин сам пакует .nupkg и заводит карточку.
check_extension_status Что магазин знает о расширении: есть ли карточка, одобрена ли, какая версия последняя.
get_extension_guide Библиотека навыков: какую из восьми точек входа СПРУТКАМа реализовать, как её зарегистрировать, минимальный скелет и грабли. Сначала type=list, потом сам тип.

Где документация самого API

Руководства этого сервера отвечают на «какую точку входа реализовать» — какой интерфейс написать и как его зарегистрировать. То, что вы вызываете внутри, описано отдельно:

  • Справочник CAM API — все интерфейсы, свойства и методы.
  • Уроки — тот же API по порядку, начиная с первого расширения.
  • cam-api-examples — рабочий пример на каждый тип расширения.

Полный список публичной документации СПРУТКАМа — public-docs.

Как устроена публикация

Исходники живут на GitVerse, а он не выдаёт подписанных жетонов сборки — тех, по которым магазин мог бы поверить роботу, что прогон и правда идёт из нужного репозитория. Конвейера в репозиториях расширений поэтому нет, и всё делается с машины автора:

  • сборка локальная. publish_extension вызывает dotnet build -c Release -t:PackReady у вас, загружает файлы сборки в магазин и просит его упаковать — пакет собирает сервер, а запускает это человек, а не робот;
  • репозиторий инструмент не создаёт. У GitVerse нет своего gh, а создание репозитория первым пушем в организацию у них запрещено («Push to create is not enabled for organizations»). Репозиторий заводите сами, а create_extension_from_template даёт готовую папку;
  • привязки «репозиторий → имя пакета» нет. Она нужна только доверенной публикации из CI; без CI привязывать нечего.

Установка (Cursor)

Нужны git и .NET SDK: 8 для самого инструмента и 10 для сборки расширения — шаблон собирается под net10.0-windows, потому что на .NET 10 работает сам СПРУТКАМ 20 (dotnet --list-sdks должен показать обе линии; ставятся рядом, с https://dot.net).

dotnet tool install -g SprutTechnology.ExtensionStoreMcp
sprutcam-extension-mcp setup

Пакет лежит на nuget.org (с 08.09.2026); обновление — dotnet tool update -g SprutTechnology.ExtensionStoreMcp.

setup прописывает сервер в ~/.cursor/mcp.json (файл сливается, чужие MCP-серверы остаются), регистрирует его в Claude Code, если тот установлен, и выполняет вход в магазин. После этого Cursor нужно перезапустить. --no-login пропускает вход.

Вход — sprutcam-extension-mcp login — открывает страницу входа в браузере; инструмент хранит только refresh-токен (в %APPDATA%) и пароля не видит, поэтому работают SSO и двухфакторка. --password оставлен запасным путём для машины без браузера.

Руками вместо setup — это login плюс в ~/.cursor/mcp.json:

{
  "mcpServers": {
    "sprutcam-extension-store": {
      "command": "sprutcam-extension-mcp"
    }
  }
}

Как это выглядит в работе

  1. «создай расширение СПРУТКАМа с именем ToolpathTimer» → create_extension_from_template разворачивает шаблон рядом с вашей рабочей папкой.
  2. «оно должно добавлять пункт в контекстное меню операции» → get_extension_guide (list → operation_popup) называет интерфейс, ключ в *.settings.json и то, что ломается. Те же тексты лежат в шаблоне как правила Cursor (.cursor/rules/type-*.mdc) — они генерируются из guides/ этого репозитория, инструмент отдаёт свежую копию.
  3. Пишете код в src/.
  4. «опубликуй как 0.1.0» → publish_extension.
  5. «опубликовалось?» → check_extension_status. Новое расширение ждёт модератора; ссылка на его карточку работает сразу, новые версии одобренного публикуются без ожидания.

Настройки

Переменная Зачем
SPRUTCAM_STORE_API другой адрес API магазина (стенд); по умолчанию — адрес из src/Brand.cs
SPRUTCAM_STORE_TOKEN готовый токен вместо сохранённого входа (отладка, CI)

Всё, что привязывает инструмент к магазину, лежит значениями в одном файле — src/Brand.cs (адрес магазина, Keycloak, метка пакета, адрес шаблона). Переезд магазина на постоянное имя — правка одной строки там.

Выпуск

dotnet pack src -c Release -o pkg          # pkg\SprutTechnology.ExtensionStoreMcp.<версия>.nupkg
.	ools\push-nuget.ps1                    # спросит ключ nuget.org скрытым вводом; -Remember сохранит его

Разработка

dotnet test tests/SprutCamExtensionMcp.Tests.csproj   # логика; процессы и магазин подделаны
dotnet run --project src                              # stdio-сервер, говорить с ним JSON-RPC

Руководства в guides/ — единственный источник правды: они вшиты в сборку для get_extension_guide, и из них же генерируется снимок правил Cursor в репозитории шаблона. После правки руководства:

powershell -NoProfile -File tools/sync-rules.ps1           # .cursor/rules/*.mdc + AGENTS.md в шаблоне
powershell -NoProfile -File tools/sync-rules.ps1 -Check    # exit 1, если снимок разошёлся

Два формата, один источник: Cursor сам подхватывает .cursor/rules/*.mdc, а Claude Code, Codex и Copilot читают AGENTS.md — поэтому генератор пишет ещё и его. Ссылки ведут на те же .mdc, ничего не дублируется.

-TemplateDir указывает на шаблон, если он лежит не рядом. Коммитить шаблон надо отдельно — скрипт только пишет файлы. Новая точка входа = файл руководства, строка в guides/_index.json (его читают тесты) и повторный прогон скрипта.

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

This package has no dependencies.

Version Downloads Last Updated
0.2.3 105 9/17/2026
0.2.2 92 9/17/2026
0.2.1 106 9/10/2026
0.2.0 111 9/8/2026
0.1.0 117 9/8/2026