📱

Get Our Mobile App

Take your business learning on the go!

Download on the App StoreGet it on Google Play

Как сделать MCP сервер из обычного приложения за 15 минут!

Павлин Шарит - ИТ вместе с Николаем Павлиным12:31

Transcription

В этом видео мы разберёмся, как из обычного фаста приложения можно сделать MCP-сервер.

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

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

Перед тем, как мы перейдём к практике, я напомню, что все самые важные ссылки, по моему мнению, есть в описании. Итак, перенеслись с вами в ноутбук. Давайте посмотрим на небольшой заготовленный мною пример. Повторюсь, он максимально учебный. Главное показать логику, как это всё работает.

У нас с вами есть ну какие-то пойдентик модели. Несмотря на то, что я использую наш шаблон для фастапе, в котором много что предусмотрено. Я здесь это всё использовал в одном файле. Если у вас большое приложение, так лучше не делать.

Что же у нас делает с вами endpoint? Он позволяет провести семантический анализ, проверить тональность текста. Логика максимально максимально простая. У нас есть хорошие слова, у нас есть плохие слова. Мы смотрим, каких слов больше, и в зависимости от этого даём результат.

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

Итак, после того, как посмотрели на функцию, нам с вами необходимо воспользоваться библиотекой. Библиотека называется Fast Up MCP. Давайте её установим с помощью вашего любимого пакетного менеджера. На канале есть видео много про них. И теперь мы подключим возможность экспоузить в той апи схеме, которую ожидает Clot и другие лмки. С помощью этого фаp. Мы с вами идём в сервер. Сервер. И здесь у меня инициализируется само приложение фатапе. И нам надо добавить одну небольшую функцию. Мы с вами импортируем Fast MCP, то есть это определённая обёртка над приложением, которое добавит необходимые роуты в необходимой схеме. И теперь можем запустить наше приложение. Для этого у меня вынесено в mainpй. Запускаем наше приложение. А в любом случае даже, ну да, конечно, здесь не ап. Копировал примера. У нас с вами нижнее подчёркивание а. Перезапускаем. В любом случае выложу этот пример, он будет доступен на гитхабе. Ссылку тоже оставлю в описании.

После того, как мы с вами запустили приложение, мы можем увидеть, ну, по slash, если у нас в def среде запущено наше приложение, то, что у нас с вами есть endpoint, который мы с вами описали. Более того, у нас появился новый endpoint, который называется как MCP, но здесь нет ничего человекачитаемого, но мы можем воспользоваться и просмотреть, какие тулзы у нас с вами объявлены. Есть такая штука, которая называется MCP. Это тоже приложение, написанное на ноде, которое предоставляет интерфейс для взаимодействия, ну, и дебага MCP серверов. Здесь мы указываем наш MCP URL. В нашем случае это 8.000/MCP. Ну и вот здесь, на самом деле, мы увидим, что уже идут пинги для проверки коннекта. Дальше мы с вами можем назвать коне, увидеть то, что мы с вами выполнили начальное подключение. Здесь у нас есть какая-то дефолтная инфа. И плюс, ну, допустим, мы можем посмотреть, какие endпоинты будут доступны нашим lлмкам. Нажать Tools, list to Tools. Вызвали эту команду и видим ответ. То, что у нас с вами есть название utilти text description, который взялся из нашего доктринга. Плюс, как видите, сюда автоматом эта библиотека пробрасывает все возможные метапараметры фостапе, то есть то, что мы отвечаем там 200м, content type application jon. Понятно, что все эти вещи они берутся автоматически на основе тех параметров, которые мы с вами вели. Ну, схемы данных, по сути. Здесь же видно, какие параметры мы принимаем, что это должен быть JON, текст, language и так далее. По сути, вот что-то подобное будет видеть наша Лэмка.

И уже здесь хочу дать первый совет, и он такой фундаментальный и важный. Для того, чтобы Лэмка понимала, что и когда нужно ей вызвать, важно описывать достаточно детально, когда ей могут пригодиться эти энпоинты, зачем их вызывать. Ну, как видите, параметры и выходные параметры у нас создаются автоматически. Но вот это важно уяснить. Если вы разрабатывали предложение, вы уже наверняка сталкивались с ситуацией, когда она там не вызывает tools. Хотя, казалось бы, вы говорили там вызывай, если тебе нужно посмотреть в базу данных. Пишите здесь максимально подробно в докрингах, ну или в самомпоинте.

Давай теперь попробуем подключить наш созданный MCP сервер, передать какой-то текст и отправить его для анализа. И по аналогии с предыдущим видеоролика мы сейчас с вами пойдём в настройки и поменяем наш config JSON. Видите, контекст се у нас с предыдущего остался. Ну а теперь наша задача будет добавить и наше приложение. Но перед тем, как мы перейдём, хочу напомнить то, что для меня фундаментальная цель - это сейчас 10.000 подписчиков на Ютубе, 2.000 в Телеграме. Если вы меня поддержите в достижении этой цели, там подпишитесь, поставите колокольчики, комментарии, лайки. Буду вам прямного благодарен. И напишите, пожалуйста, своё мнение о том контенте, который я делаю. Полезно вообще или, может быть, надо начать писать про другие темы.

Теперь наша с вами задача добавить сюда наш новый MCP сервер. И как вы видите, теперь у нас питоновское приложение, поэтому у нас команда будет отличаться. Добавили конфигурацию наш с вами фастапе Tools, который мы только что написали. Что здесь происходит? Мы точно также пользуемся дополнительным клиентом, то есть определённой прослойкой, которая умеет управлять MCP для нашего с вами LM приложения. И мы говорим то, что мы будем использовать MCP сервер, то есть который предоставляет функции, которые доступны по адресу local host 8.000.

Теперь наша с вами задача перезапустить cloud desktop и воспользоваться функцией, которую мы добавили. Давайте зайдём в настройки, посмотрим, что у нас всё с вами корректно подхватилось. девелопер и видим, что у нас здесь с вами есть Fast Tools. И давайте теперь попробуем провести семантический анализ нашего с вами текста, который мы передадим. Соответственно, мы просим провести семантический анализ текста. Что сейчас должно произойти? Он должен увидеть то, что ему доступны внешние функции. Ну, как и в прошлый раз мы говорим то, что да, о'кей, мы доверяем нашему внешнему сервису. Что он делает? Он вызывает нашу функцию, куда передаёт все вот эти параметры. Ну, в нашем случае текст и language. И дальше выполняется наш блок кода, который выполняет ту бизнеслойку, которую мы описали, отдаёт ответ. То есть здесь мы с вами увидим responsс. И дальше, взглянув на этот респонс, лмка сама, ну, как-то форматирует его и делает в удобный для нас вид. То есть таким образом мы только что научились с вами вот не просто коing создавать внешние серверы, которым лэмки могут подключаться и выполнять бизнес-логийку.

Много кто сейчас начал делать. Вот Клод уже, как я сказал до этого, сегодня ночью предоставил возможность интеграции с внешними. Уже есть жира, осана, не курсор, а новомодные там другие все штуки для управления проектами. Так что Larр вот вспомнил. Так что тема развивается. Я думаю, если там ваше приложение доставляет какую-то ценность когорте людей, кто использует лмки, возможно, вам стоит предусмотреть возможность внедрения из своего MCP-сервера, потому что вот видите, в Python это достаточно легко встраивается.

Ещё хотел сказать, что если вам нравится то, что мы с вами делаем, мы сейчас с вами смотрим на MCP высокоуровневого достаточно, но есть питоновские SDК на другие языки. Можем копнуть глубже и посмотреть, что там ещё предоставляется. Если вам это интересно, обязательно напишите в комментариях.

Мы же с вами давайте посмотрим на те практики разработок, которые стоит применять, когда мы пишем MCP сервера. Если мы посмотрим на параметры, которые предоставляет нам фастапе, то вы увидите, что у нас с вами есть, ну, точнее, в фастапе MCP, то вы увидите, что у нас с вами есть возможность заэксклюlдить какие-то конкретные operations ID. Дальше у нас с вами есть возможность за эксклюдить теги каких-то ваших ендпоинтов. И вот здесь я хочу подсветить, что я строго рекомендую здесь точно определять, что мы хотим предоставить для LLM, а что нет. Почему это важно? Потому что, если у нас с вами есть операции, которые доступны не только на чтение, но и на изменение данных, то ЛМКА может, ну, начать не то чтобы косячить, но считать, что она делает максимально правильные операции и какие-то данные удалить, какие-то данные изменить так, как пользователь мог не ожидать. Поэтому здесь, в первую очередь имеет смысл предоставлять доступ только к тем операциям, которые не несут за собой изменения. Ну, грубо говоря, мы можем исключить там post, put, delete, а геты все основные оставить для того, чтобы она могла собирать нужный контекст.

А следующий важный момент, то, что здесь у нас, в принципе, с вами поддерживается и аутентификация, потому что, как вы сейчас могли увидеть, мы никаких токенов с вами не пробрасываем. Мы всего лишь с вами сказали: "Вот такой endpint", и мы раздаём данные абсолютно всем. Понятно, что у нас может быть какая-то sensitive информация, которая недоступна для публичного доступа. Поэтому и сам MCP протокол, и фарживаются и авторизация просто по токену. То есть мы с вами здесь в опишке можем там прописать новый пес, который проверяет токен, с которым пользователь пришёл. А в нашем клод десктопе там в конфигурацию добавить допустим, параметры хедера, то, что вот с каким-то авторизационным токеном мы ходим. То есть вы можете вот настройку для MCP генерировать для каждого пользователя индивидуально, создавать там свой токен. Более того, поддерживается ОАaАУ протокол. Про него расскажу, наверное, когда расскажу про OAUЧ и как вообще там можно логиниться, грубо говоря, через Яндекс фаastстапе этого ещё не дошёл.

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

Надеюсь, что видеоролик был полезным. Если вам нравится то, что я делаю, то советую посмотреть другие видеоролики на моём канале. Как минимум высокоуровневый обзор по MCP, если вы работаете там с телеграммами, с ботами, делаете вебапы, Telegramапы, то есть классная серия видеороликов о том, как мы пишем полноценное продакш клиcker приложение. Тема, может быть, отпугивает, но тем не менее мы разобрали всё, что как и в IT через Telegram и так далее. Рад был всех видеть. Всем пока-пока.