MCP (2/4), про MCP-сервер Что из себя представляет MCP-сервер? Как правило - это небольшая программа на любом языке программирования (чаще всего - Python/TypeScript), которая никакой логики в себе не содержит, и просто связывает внешнюю систему и MCP-клиент между собой. Аутентификация Довольно часто для доступа к внешней системе MCP-сервер содержит в себе процедуры аутентификации - т.е. именно ему нужно передавать все логины/пароли/токены, и он решает проблему с доступом LLM к каким-то вашим внутренним ресурсам. Как можно общаться с MCP-сервером? Есть 2 транспорта из коробки: ● stdio - т.е. через стандартный input/output: в этом случае MCP-сервер запускается MCP-хостом как консольное приложение. В этом случае предполагается, что вы скачиваете MCP-сервер в виде кода или готовой к запуску программы на машину, где у вас находится сам хост, и они работают в тесной связке, запускаясь вместе ● sse - это по имени Server-Sent Events, одного из стандартных (и древних) способов передачи сообщений поверх HTTP, использующего долгоживущее соединение для передачи данных в одном направлении (server -> client). В случае с MCP нам всё-таки нужен полноценный двусторонний обмен с сервером, и, соответственно, 2 endpoint'а: * GET с собственно SSE - по нему будут передаваться сообщения от сервера клиенту в режиме бесконечного стрима * обычный POST для передачи сообщений от клиента серверу Сервер с таким транспортом может быть запущен где угодно и может обслуживать много клиентов одновременно, в отличие от stdio. В подавляющем большинстве случаев, однако, сервера сделаны именно в варианте stdio, но есть способ конвертить stdio <-> sse, см. ниже, в разделе с инструментами. Где брать MCP-сервера? К примеру, тут: https://github.com/modelcontextprotocol/servers или тут: https://github.com/punkpeye/awesome-mcp-servers/ Вообще серверов буквально тысячи уже (https://glama.ai/mcp/servers, https://mcp.so/), но я бы советовал прям глазами проверять код тех, которые вы собираетесь использовать, т.к. порог входа низкий, модерации нет, многие вообще не работают - словом, это дикое поле :) Сколько серверов можно подключать к хосту? Явного ограничения нет, но список всех сущностей, которые предоставляет MCP-сервер (tools, resources, prompts, etc) с их описаниями передается LLM в контексте, чтобы она про них знала и могла попросить вызвать что-то, что нужно для решения задачи пользователя. Соответственно, надо быть аккуратным с подключением большого количества серверов - помимо отъедания ими контекста, можно ещё и запутать модель, и она будет вызывать не те функции, которые вы ожидаете. А если вы делаете свой сервер - лучше быть кратким и точным в своих описаниях и названиях экспортируемых сущностей. Пример сервера Вот пример простого MCP-сервера: https://github.com/modelcontextprotocol/servers/blob/main/src/postgres/index.ts - это всего лишь ~140 строк TypeScript кода, которые дают модели возможность просматривать схемы таблиц в вашем PostgreSQL и выполнять запросы к выбранной базе. Это stdio-сервер, и запускается он как консольное приложение, которому передаются данные для доступа к БД, к примеру, так: node <file-path-to>/index.js postgresql://myuser:mypassword@localhost:5432/mydb Оцените, насколько просто можно сделать сервер под свои задачи. Полезные инструменты MCP-inspector: https://github.com/modelcontextprotocol/inspector С его помощью можно проверять, работает ли MCP-сервер, узнать, какие сущности он экспортирует и посылать ему тестовые запросы. Supergateway: https://github.com/supercorp-ai/supergateway Имбовая штука для конверсии MCP-сервера sse <-> stdio. Я предпочитаю sse в силу большого количества багов вокруг stdio, так что все сервера перевел на sse с помощью Supergateway, собрав их в docker-compose и развесив контейнеры на разные порты на своей машине. Как вариант, для тех же целей можно использовать mcp-proxy: https://github.com/sparfenyuk/mcp-proxy #ai #mcp