📱

Get Our Mobile App

Take your business learning on the go!

Download on the App StoreGet it on Google Play

Разработка MCP-серверов в 1С

Владимир Харин - Просто Про 1С19:04

Transcription

Всем привет. Меня зовут Харин Владимир. Это видео о разработке MCP серверов на платформе 1С. Ну и для начала расскажу, что такое MCP сервер и как он вообще работает.

Сейчас многие, кто интересуется темой искусственного интеллекта, активно думают о том, как внедрить языковые модели в свою работу. Причём так, чтобы это было действительно полезно и эффективно. А понимание, как решать свои задачи с языковыми моделями эффективнее, ну, появляется с наработкой практики. И первое, обычное, с чем сталкиваются пользователи - это понимание, что из такой модели нужно предоставить полную картину, да, то есть грамотно поставить задачу и предоставить подробный её контекст. А есть известное выражение, которое звучит так, что модель настолько хороша, насколько хорош контекст, который вы предоставляете. А что это означает? Ну, то есть, чтобы получить от модели хорошее решение, нужно предоставить ей полную подробную постановку задачи. Ну, собрать для модели по задаче полноценный качественный контекст и оформить его в виде удобном для языковой модели. Может быть, само по себе достаточно трудоёмкой задачей и, возможно, для некоторых более трудоёмкой, чем э просто сделать работу своими руками. Это как написать грамотное, подробное ТЗ, в котором не только подробно описать задачу, но и вообще ввести исполнителя в курс дела. А это само по себе достаточно серьёзная работа.

Так вот, MCP или Model Context Protocol - это универсальный способ обеспечивать модели автоматической информации, необходимой им для решения ваших задач. То есть это своего рода мост между чатом с языковой моделью и внешним миром. А причём, ну, внешний мир, что это такое? Это могут быть там файлы на вашем компьютере, интернет-поиск, апи каких-то сервисов, записи базы данных. Вот. Ну, а нам, как одинсникам, было бы полезно, чтобы языковая модель могла работать с конфигурациями, базами 1С, то есть с метаданными, с данными. Вот. Ну, именно в таком вот контексте мы с вами будем в этом видео MCP рассматривать.

А для начала коротко расскажу, как вообще работают системы, которые, а, поддерживают, реализуют этот протокол. Ну, прежде всего, у нас есть MCP-клиенты и MCP-сервера. MCP-клиенты - это системы с искусственным интеллектом, которые реализуют клиентскую часть протокола MCP и позволяют подключать MCP-сервера к языковым моделям. Ну, пример таких систем это среда разработки курсор, там код десков, к веб-чатам некоторым можно MCP сервежа подключать. Ну, сейчас достаточно большой уже список систем, которые MCP поддерживают. MCP сервер - это сервис, который умеет выдавать информацию по запросу в определённом формате, да, и формат вот этого запроса ответа, он, собственно, у нас и регламентируется протоколом MCP.

Давайте посмотрим, как это работает на конкретном примере. А, предположим, у нас есть пользователь, который общается с языковой моделью через clad desktop. Это, ну, обычный час моделью, который устанавливается как локальное приложение и поддерживает подключение MCP серверов. И есть MCP-сервер, который может выдавать из базы 1S, ну, например, а, данные о продажах по организации за какой-то период. Когда пользователь запускает чат и подключает MCP сервер, то MCP сервер сообщает клиенту, что он умеет выдавать такие-то такие-то данные, и для этого ему нужны, ну, такие-то такие-то параметры. Пользователь ставит языковой модели задачу сравнить продажи там текущего месяца и предыдущего. Естественно, модель не имея этих данных ничего внятного пользователю не ответит. Вот. Но она знает, что есть подключенный MCP- сеервер, который эту информацию умеет выдавать. И тогда модель параллельно чато сполсользователям начинает общаться с MCP-сервером, формирует и отправляет ему запрос на получение нужных данных. А сервер эти данные присылает, модель их анализирует и формирует уже ответ пользователю. Если модель достаточно умная, она, в принципе, может даже сразу несколько вызовов сделать разных серверов на получение разных данных. Ну и, соответственно, таким образом самостоятельно собирает необходимую информацию для того, чтобы подготовить пользователю качественный ответ. То есть можно это представить так, что в чате с моделью, кроме вас, есть ещё MCP сервера, которые могут подкидывать дополнительную информацию в ваш чат по запросу о модели. Вот примерно такой принцип работы. И роль MCP как протокола здесь в том, чтобы стандартизировать вот этот взаимодействие между языковой моделью и какими-то внешними системами. Ну, а MCP сервер - это некая прослойка между моделью и вот этими вот нижними системами.

Ну, давайте будем уже подбираться к 1S и посмотрим, можно ли реализовать MCP-сервера на платформе 1S. А протокол MCP предлагает два основных способа взаимодействия сервера с клиентом в термёнах протокола транспорта. Первый из них - это STD IO, где MCP-сервер представляет собой обычное консольное приложение. которая запускается автоматически самим клиентом. Все настройки его находятся в конфигурации клиента. И, соответственно, оно работает у вас локально, только вы с ним работаете. Вот. И второй вариант - это HTTP, где у вас MCP сервер представляет собой веб-сервер отдельно запускаемый, а, к которому могут удалённо подключаться множество пользователей. Вот. Ну, и тут важно решить вопрос с безопасностью вот этого подключения. Хотя этот вариант более универсальный, можно и локально, в принципе, его запустить, этот HTTP, да, и с ним работать.

Так вот, в 1С мы STD EO транспорта реализовать не сможем, в принципе, потому что запустить конфигурацию как консольное приложение у нас возможности нету. А HTTP транспорт мы можем реализовать частично через HTTP-сервисы. Почему частично? Потому что MCP протокол подразумевает либо вариант стриминг HTTP, либо уже устаревший сервер Sent Events. И оба этих варианта HTP протокола подразумевают поддержку долгих соединений с частичной выдачей данных. Вот. А 1С этого не умеет, она, ну, на запрос отвечает всегда полностью, частично отвечать не может. Вот. Ну и, соответственно, у нас может быть проблемы, могут быть проблемы с какими-то клиентами, которые не захотят работать вот с таким неполным вариантом протокола. Ну, решение есть. Можно использовать небольшую прокси прокладку, которая реализует полноценно все варианты транспорта и при этом общается с 1С посредством, ну, стандартных HTTP-сервисов. Ну, таким образом, с одной стороны, соблюдаются все нюансы протокола в части транспорта. А с другой стороны, для общения с 1С используется стандартная для 1S-технология.

Давайте посмотрим, как это выглядит на практике. Отмечу, что мы из всех возможностей протокола NCP рассмотрим только инструменты как самая интересная часть протокола. И вот именно она поддерживается наиболее широко всеми клиентами. У меня на Гитхабе есть проект, вот он сейчас на экране, в котором реализована легко расширяемая заготовка MCP-сервера, подключаемого в любую конфигурацию 1S. А что входит в состав проекта? Ну, во-первых, это расширение 1S, которое вы подключаете в свою конфигурацию, нарабатываете его, дополняете своими инструментами выдачи данных. Во-вторых, Python Proxy небольшой. И в-третьих, есть примеры настроек подключения MCP-сервера в некоторые клиенты.

Давайте установим и настроим. Прежде всего вкачиваете проект какую-нибудь свою папку. Я предлагаю его клонировать стандартными средствами GIT. Ну, можно, в принципе, и скачать просто в виде архива. В папке Build у нас расширение, которое необходимо подключить вашу конфигурацию. Ну, вот у меня расширение уже немножко доработанное. А главный компонент в нём - это HTTP-сервис, э, который необходимо будет опубликовать на веб-сервере. Процесс публикации я уж так подробно не буду описывать, это уж немножко другая тема, да, но отмечу, что когда публикуем HTTP-сервисы, важно, чтобы у нас стояла вот эта вот галка публиковать HTTP-сервисы расширений по умолчанию. После публикации нашего сервиса его работоспособность можно проверить в браузере. Ну вот вот такой вот строкой, да. То есть адрес базы HS, MTP, Health. И должен быть выдан нам статус. Окей.

Если мы не хотим использовать прокси, то, в принципе, всё, можно подключать наш сервис, наш MCP-сервер к MCP-клиентам. Давайте попробуем на примере курсора это сделать. А вот у нас курсор. В курсоре открыт как раз открыта выгрузка исходника в той конфигурации, куда я подключил CP сервер. А, ну давайте мы его теперь сюда подключим. Значит, в настройках у нас Tools and Integrations. Отмечу, что курсор сильно меняется. Может быть, в будущем интерфейсно как-то это поменяется тоже. А, и здесь, соответственно, у нас есть возможность добавить произвольный MCP. Давайте в репозитории посмотрим пример настройки конкретно для курсора, для случая прямого обращения в 1S. Вот у нас файл MCPGON. Ну, тут все варианты транспорта у нас перечислены в подключении, да. Мы можем, в принципе, что сделать? Просто весь этот файл скопировать, э, сюда вот, да, таким вот образом. и просто убрать лишнее, да? Вот нам в данном случае остаётся только вот этот вариант 1S север напрямую. Так, а что не так? Лишнее убрал. Вот так вот. И здесь, соответственно, мы должны уже прописать адрес нашего MCP. Это у нас будет в данном случае вот такой вот. То есть адрес базы HS MCP. А сразу отмечу, что публикация должна была должна быть сделана так, чтобы для обращения к HTTP сервисам не требовалась авторизация. Для этого в файлике дефолт VRD, который создаётся при публикации на веб-сервере, нужно явно прописать логин и пароль. Вот такая настройка у нас получилась. Давайте посмотрим, что у нас в итоге будет видно в списке MCP. Да, вот он у нас, видите, появился. А причём подключился даже без проблем. Он говорит зелёным. И доступно у нас три инструмента. Ну, на самом деле, у вас будет доступно изначально только два вот этих первых инструмента. Третий - это уже у меня новый добавлен.

Давайте посмотрим, может ли курсор с ними работать. Открываем окно чата. Отмечу, что здесь должен быть режим. в режиме Ask MCP недоступны. Ну что мы спросим? Раз скажи, какие инструменты MCP MCP тебе доступны. Ну и вот нам курсор рассказал, какие именно инструменты ему доступны и что они умеют. Ну, давайте попробуем их использовать. Дадим такой запрос. Какие в конфигурации есть документы, заказы? Вот курсор пишет, что он вызывает наши MCP и, соответственно, формирует по ним ответ. Ну, давайте ещё один запрос попробуем. Расскажи структуру документа заказ клиентов. Вот опять-таки вызов инструмента мы видим. И дальше уже в чате нам формируется ответ с подробным описанием. А, значит, смотрите, что называется, из коробки у вас сразу после подключения MCP будут доступны инструменты для работы со списком метаданных конфигурации, в которую мы его подключаем, и получение структуры метаданных отдельных объектов. Это уже огромное подспорье для ваших дальнейших доработок, да, там что получение данных, что там какое-то тестирование и так далее. Везде так или иначе могут потребоваться информация о метадатах, да, и она у вас уже есть. Вы просто дальше дополняете свои инструменты, а модель уже сама решает, нужны ли ей метаданные, она может их получить или там вызывает ваши инструменты, а передавая им, может быть, те же самые метаданные, которые вот получены этими инструментами. Вот. Ээ хочу сказать, что даже вот в таком виде расширение, в принципе, уже весьма полезное. Вот я его, например, лично использую в разработке подключаю в конфигурации, с которыми работаю. И, соответственно, для написания кода в курсоре, точнее, при написании кода в курсоре языковая модель уже может автоматически обращаться к конфигурации и, соответственно, писать код, чётко ориентированный на структуру этой конфигурации. То есть пишет сразу же корректные запросы, корректные обращения к объектам конфигурации, ну вот и так далее. Всё, что связанное с метаданным, всё это у нас будет чётко соответствовать вашему вашей конфигурации.

Теперь о том, как добавлять свои инструменты в MCP-сервер на 1S. Механизм напоминает добавление дополнительных печатных форм в конфигурациях на БСП через расширение. А смысл в том, что вы добавляете новую обработку определённого формата и включаете её в подсистему. Ну вот в данном случае, если мы хотим добавить новые инструменты, то подсистема, контейнеры инструментов. В состав этой подсистемы нужно её включить. А в самой обработке, ну, давайте посмотрим на примере выдачи методанной конфигурации, должен быть реализован в модуле менеджера этой обработки должны быть реализованы два экспортных метода. Добавить инструменты и выполнить инструменты. В методе добавить инструменты мы должны сформировать список инструментов, которые мы добавляем с их подробным описанием. Вообще в MCP для этого предусмотрена специальная JSON схема. Ну нам сжесоном заморачиваться не надо. У нас всё это инкапсулировано в модулях расширения. И мы просто формируем список параметров инструмента с их описанием. И дальше таким методом добавляем инструмент и указываем также, что этот инструмент у нас делает. Ну а метод выполнить инструмент, как я думаю, понятно из названия. уже выполняет какие-то действия, которые этот инструмент, собственно, должен выполнять, да, и возвращает результат. Причём параметр аргумента здесь уже десь реализованная структура, в которой, собственно, те параметры, которые мы описали, э, когда инструмент добавляли, результат вызова инструмента - это чаще всего строка, ну, например, Markдаун, который языковые модели хорошо знают. А, но, в принципе, можно вернуть картинку, можно вернуть двоичные данные. Здесь тоже для этого возможности такие есть. Кстати, в репозитории вместе с расширением есть файлик AgentMD, в котором описание расширения и как его дорабатывать, по идее, оптимизированное под обработку языковыми моделями. Так что можете попробовать навайп-кодить себе MCP-сервер. Такое подключите этот файлик, а в контекст проекта.

Ну, я расскажу немного о подключении MCP сервера через Proxy. Это необходимо, если у нас не получается подключить вот в таком виде, как он из 1Скуется MCP сервер. А, по-моему, до сих пор некоторые MCP-клиенты поддерживают только STD транспорт. Вот. Ну или, может быть, мы не хотим из едино сделать публикацию без авторизации, да? Ну, в этом случае тоже, в принципе, можно решить вопрос через прокси. В документации есть описание, как его установить, как его настроить. Есть примеры, как его подключить к MCP-клиентам. Давайте посмотрим на примере того же курсора. Настройка получается, ну, чуть более громозская для примера с STDO. Ну, более тонкая. Тут также указывается путь к базе. А, ну можно ещё указать логин и пароль пользователя, под которым мы будем в базу подключаться. При этом работает MCP сервер абсолютно точно так же, как и вот он у нас работал при прямом подключении. А прокси можно подключать в режиме и также поддерживается запуск в режиме HTTP со стрипингом. Ну, кроме того, поддерживается также и устаревший сервер Cent Events.

Ну, давайте кратко подведём итоги. У нас есть расширение 1С, которое вы можете подключать свои базы, свои конфигурации, добавлять туда свои инструменты, выдача, может быть, и изменения данных. Требуется только опубликовать HTTP сервис из этого расширения и опционально настроить Python Proxy. После этого MCP сервер можно подключать ваши там системы с искусственным интеллектом, какие-то чаты с я исковыми моделями, и они смогут, что называется, дёргать инструменты вашего сервиса для получения необходимых данных. А буду рад, если проект окажется вам полезным. Делитесь вашими идеями о том, как можно применять MCP с 1С. Сейчас технологии на базе языковых моделей активно ищут варианты применения. И очень интересно, как какие задачи вы будете решать с помощью вот этой технологии. Ваши вопросы, предложения пишите выш на GitHub. Ну или можете обращаться ко мне напрямую. Всем спасибо. M.