Skip to content

oscript-library/autumn-mcpify

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

autumn-mcpify

Превращает CLI-приложение на autumn-cli в MCP-сервер (Model Context Protocol, stdio) — чтобы ИИ-агенты могли вызывать команды приложения как инструменты.

Единый источник истины — обычная CLI-команда. Помечаешь подкоманду маркером &ДоступноВMCP — и она автоматически появляется как MCP-инструмент. Схема параметров генерируется рефлексией из аннотаций autumn-cli (&Опция/&Аргумент/&НаборОпций/ &Перечисление/&Т*) — дублировать ничего не нужно.

Быстрый старт

Точка входа MCP-сервера приложения (например src/mcp.os):

#Использовать autumn
#Использовать autumn-cli
#Использовать autumn-mcpify
#Использовать "."          // исходники приложения: команды, сервисы, наборы опций

Запуск = Новый MCP_Запуск();
Запуск.Старт();

autumn-mcp подключать в точке входа не нужно — его тянет сам autumn-mcpify (внутри MCP_Запуск).

Регистрация сервера у клиента (Claude Code / Cursor / IDE), рабочий каталог — корень проекта:

// .mcp.json
{ "mcpServers": {
    "myapp": { "command": "oscript", "args": ["src/mcp.os"] }
}}

Аннотации autumn-mcpify (&ДоступноВMCP и др.) ставятся на команды, поэтому #Использовать autumn-mcpify нужен и в обычной точке входа CLI (src/main.os) — иначе OneScript не разрешит маркеры при штатном запуске приложения.

Как пометить команду

&ПодкомандаПриложения(Имя = "compile", Родитель = "КомандаCf", Описание = "Собрать cf")
&ДоступноВMCP
Процедура ПриСозданииОбъекта()
КонецПроцедуры

Всё. Команда работает и в CLI (myapp cf compile ...), и как MCP-инструмент cf_compile. Имя инструмента = путь подкоманды через _.

Маркеры намерения

Рядом с &ДоступноВMCP:

&MCPДлительная                    // долгая команда → по умолчанию исполняется в фоне (taskId)
&MCPТолькоЧтение                  // readOnlyHint = true
&MCPРазрушающая                   // destructiveHint = true, readOnlyHint = false
&MCPИдемпотентная                 // idempotentHint = true
&MCPВнешнийМир                    // openWorldHint = true (иначе false)
&MCPЗаголовок("Дружелюбное имя")  // title (по умолчанию = описание команды)

&MCPДлительная управляет фоновым исполнением (см. ниже). Остальные маркеры транслируются в блок annotations ответа tools/list (хинты протокола MCP): по ним клиент решает, например, спрашивать ли подтверждение перед вызовом. Требуется сервер autumn-mcp ≥ 1.1.0 (с поддержкой АннотацииИнструмента()); со старым сервером маркеры безвредно игнорируются.

Сессионный кэш опций

Когда команда вызывается с опциями, их значения запоминаются на сессию по имени опции и автоматически подставляются в последующие команды с такой же опцией. Например, строку подключения ibconnection достаточно указать один раз — дальше она применяется ко всем командам, где есть эта опция (в т.ч. к опциям из общих наборов &НаборОпций). Явно переданное в вызове значение всегда перекрывает кэш.

Кэшируются только опции (&Опция); позиционные аргументы (&Аргумент) — нет. Это поведение описано в описании каждого инструмента, чтобы было понятно клиенту.

Длительные команды: фон и поллинг

Команды с &MCPДлительная по умолчанию исполняются фоном (не блокируют stdio): запускается отдельный процесс oscript <точка входа CLI> <подкоманда> <флаги>, вывод пишется в файл, инструмент сразу возвращает taskId. Эффективные опции (с учётом кэша) реконструируются в CLI-флаги — дочерний процесс самодостаточен.

Инструмент Назначение
task_status состояние по taskId: running / completed / failed
task_result результат и лог (доступен и пока задача выполняется)
task_cancel отменить (завершает дерево процессов)

Опция background: false у длительной команды — выполнить синхронно с потоковым логом.

Отладочный лог: опция debug

У каждой команды есть debug. При debug: true команда выполняется синхронно, уровень логгеров поднимается до Отладки, собранный лог возвращается в результате (в т.ч. при исключении). Длительную команду debug переводит в синхронный режим.

Конфигурация (zero-config)

По умолчанию параметры выводятся из соглашений (запуск oscript <entry> из корня проекта):

Параметр Умолчание
Рабочий каталог ТекущийКаталог()
Точка входа CLI <рабочий каталог>/src/main.os
Путь oscript автоопределение в PATH
Каталог фоновых задач <рабочий каталог>/build/.mcp-tasks
Префикс логгера (debug) "" (все логгеры)

Нестандартное приложение переопределяет нужное до Старт():

Запуск = Новый MCP_Запуск();
Запуск.Конфигурация()
    .УстановитьТочкаВходаCLI("app/cli.os")
    .УстановитьПрефиксЛоггера("myapp");
Запуск.Старт();

Архитектура

Сервер — отдельная точка входа (не подкоманда myapp mcp): так рогатки autumn-cli и autumn-mcp не конфликтуют (обе вешают ПриЗапускеПриложения). MCP_Запуск строит autumn-контекст с ЗапускатьРогатки = Ложь и запускает сервер (MCP_Сервер из autumn-mcp) вручную. Команды исполняются in-process: бин команды резолвится из контейнера, сервисы &Пластилин автовайрятся, поля заполняются Рефлектором. Лог стримится клиенту как notifications/message.

autumn-mcp подключается только в MCP_Запуск (#Использовать autumn-mcp). OneScript компилирует классы лениво, поэтому этот #Использовать срабатывает лишь при Новый MCP_Запуск() — в точке входа MCP. При штатном запуске приложения (#Использовать autumn-mcpify в main.os, чтобы разрешить маркеры &ДоступноВMCP) MCP_Запуск не инстанцируется, autumn-mcp не загружается, и его рогатка не перехватывает обычные команды.

Класс Роль
MCP_Запуск сборка контекста и запуск сервера
MCP_Конфигурация параметры запуска (zero-config соглашения + сеттеры)
MCP_РеестрИнструментов рефлексия команд autumn-cli → MCP-инструменты + JSON Schema
MCP_ИнструментКоманды исполнение команды in-process: синхронно / фоном / debug
MCP_КэшОпций сессионный кэш значений опций по имени
MCP_РеестрЗадач реестр фоновых задач: запуск процесса, статус, лог, отмена
MCP_ИнструментЗадачи инструменты task_status / task_result / task_cancel
MCP_АппендерУведомлений аппендер logos → notifications/message (стриминг лога)
MCP_БуферАппендер буфер-аппендер logos для захвата debug-лога
MCP_АннотацияДоступноВMCP маркер &ДоступноВMCP (opt-in)
MCP_Аннотация* маркеры намерения (&MCPДлительная и пр.)

Проверка вручную

printf '%s\n' \
  '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"probe","version":"1"}}}' \
  '{"jsonrpc":"2.0","id":2,"method":"tools/list"}' \
  | oscript src/mcp.os

About

Превращает CLI-приложение на autumn-cli в MCP-сервер

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • 1C Enterprise 100.0%