MCP Protocol: новый строительный блок для инструментов разработки ИИ
Протокол Model Context, расширяющий возможности искусственного интеллекта в IDE, стремительно набирает популярность. Почему так происходит и почему нам, разработчикам, стоит обратить на это внимание?
Одной из актуальных тем на стыке инструментов для написания кода на основе ИИ и инструментов для разработчиков стал протокол MCP (Model Context Protocol), представленный в ноябре 2024 года компанией Anthropic. Он стремительно набирает популярность, а модели ИИ и инструменты для разработчиков стремятся добавить его поддержку.
Аналогия с MCP заключается в том, что это «порт USB-C для приложений ИИ», поскольку он создаёт универсальную точку расширения для подключения LLM и инструментов разработки друг к другу, а также к базам данных, системам обработки заявок и т. д. Эта концепция становится популярной и в других областях, но изначально MCP создавался как способ расширить возможности таких IDE для разработчиков, как Claude Desktop, Claude Code, VS Code, Cursor, Windsurf и других. Сегодня мы сосредоточимся на этой области и рассмотрим:
- Что такое MCP? Практический пример. Раньше я использовал отдельный инструмент для запросов к базе данных в рабочем приложении. Но с помощью MCP я могу «общаться» с базой данных прямо из IDE, и это меняет всё!
- Происхождение MCP. Два инженера из Anthropic — Дэвид Сориа Парра и Джастин Спар-Саммерс — решили улучшить работу Claude Desktop с помощью инструментов для разработчиков.
- Чтобы понять MCP, нужно разобраться в протоколе Language Server Protocol (LSP). Многие ключевые идеи MCP основаны на подходе Microsoft, направленном на упрощение добавления поддержки языков программирования в IDE.
- Архитектура MCP. Клиенты и серверы, где серверы часто представляют собой локальные процессы.
- Исходный код MCP-сервера. Как простой локальный MCP-сервер помогает нам понять, как он работает.
- Угрозы безопасности. При текущей реализации MCP защита выглядит удручающе слабой, и злоумышленники, скорее всего, воспользуются возможностью получить SSH-ключи и другие личные учётные данные, к которым локальные серверы MCP могут легко получить несанкционированный доступ. Эту проблему нужно решать, и быстро.
- Сценарии использования в будущем. Подключение Figma к VS Code, 3D-моделирование с помощью Cursor и управление 3D-принтером из Windsurf — всё это возможно с помощью MCP. Кроме того, MCP набирает популярность за пределами IDE.
Для этой статьи я побеседовал с одним из создателей MCP, Дэвидом Сорией Паррой, инженером-программистом в Anthropic. Спасибо за информацию!
1. Что такое MCP? Практический пример
У меня есть API, который обеспечивает работу этого микросайта, где участники с годовой подпиской могут запросить промокод на 12 месяцев бесплатного доступа к Perplexity и 3 месяца бесплатного доступа к Kagi. Сайт работает на Node. js с использованием TypeScript и PostgreSQL в качестве базы данных.
Всякий раз, когда я вношу изменения в бэкенд или фронтенд и редактирую данные, я делаю две вещи:
- Моя IDE с самим кодом и встроенным терминалом
- Интерфейс администратора базы данных для запроса таблиц или изменения схем, если это необходимо. Я использую PgAdmin.
IDE становятся все умнее благодаря функциональности LLM; Windsurf и Cursor обладают агентскими возможностями, поэтому могут предлагать изменения для нескольких файлов одновременно. Однако они не могут подключиться к моей базе данных PostgreSQL для запроса данных. Но с MCP они могут – и я тоже.
MCP расшифровывается как Model Context Protocol и является связующим звеном, позволяющим инструментам LLM, таким как IDE с улучшенным искусственным интеллектом, таким как Cursor, Windsurf и другим, получать доступ к дополнительным инструментам.
Вот как я использую подсказки LLM, чтобы сделать свою базу данных доступной в IDE. В этом примере я использовал Windsurf, но то же самое можно сделать в Cursor, Zed и VS Code.
Добавление MCP-сервера PostgreSQL в мою IDE
Для начала в разделе «Настройки» в подразделе «Cascade» (агентские возможности Windsurf) я выбираю «Добавить сервер MCP». Здесь отображается раскрывающийся список с готовыми серверами:
Добавление означает настройку строки подключения к вашей базе данных, которая может быть локальной базой данных Postgres, работающей на вашем компьютере, или удалённой. Я использовал строку удалённого подключения для подключения к базе данных на моём сервере. После добавления подключённая база данных отображается как сервер MCP, готовый к использованию:
В дальнейшем при вводе любой команды в интерфейсе Cascade LLM может принять решение использовать этот сервер. Позвольте мне начать с вопроса о промокодах:
«Сколько пользователей воспользовались промокодами kagi за последние 10 дней?»
Языковая модель пытается сгенерировать SQL-сервер для получения ответа, но выдаёт имя несуществующей таблицы (что довольно типично для языковых моделей):
Однако именно здесь начинается «волшебство», благодаря тому, что LLM выполняет дополнительные итерации, используя этот новый инструмент базы данных. LLM обращается к моему экземпляру PostgreSQL, чтобы найти правильное имя таблицы:
Затем он отправляет ещё один запрос:
Чёрт! — названия столбцов снова неверны! Но программа запрашивает определение таблицы и быстро исправляет его:
Наконец-то всё стало правильно:
Что действительно впечатляет, так это то, что процесс занял всего несколько секунд, и мне не пришлось ничего вводить. Языковая модель «вычислила» правильные названия таблиц и столбцов, имея доступ к базе данных.
Уровень LLM над PostgreSQL
Теперь, когда я добавил свою базу данных в качестве сервера MCP, я могу «общаться» со своими данными на естественном языке, а LLM преобразует их в SQL-запрос, а затем обратно в мой вопрос. Это касается не только простых вопросов с простым SQL-запросом, но и более неоднозначных.
Другие вопросы, которые я задавал:
- «Наблюдался ли необычный всплеск регистраций за последние два месяца?»
- «Какие подозрительные адреса электронной почты были зарегистрированы недавно? Есть какие-то закономерности?»
- «В каких доменах больше всего регистраций?»
- «Сколько осталось невостребованных промокодов?»
Возможность взаимодействовать с инструментами разработчика через мою IDE кажется «будущим». Не то чтобы я не мог найти ответы на вышеперечисленные вопросы без этого; я мог бы написать SQL-команды, или их серию, или небольшую программу для циклического выполнения команд и их обобщения. Однако я, скорее всего, не стал бы этого делать, потому что на ввод SQL-кода уходит время. Но поскольку я могу легко вводить вопросы, я это и сделал!
Подумайте о том, что произойдёт, если вы сможете «общаться» со своими инструментами разработчика через IDE. Например, использовать естественный язык для взаимодействия с:
- Система контроля версий («Можете ли вы создать пул-реквест со всеми изменениями, кроме одного в index.ts?»)
- Базы данных («Можете ли вы создать новую таблицу для регистрации пользователей? Используйте инкрементный счетчик в качестве первичного ключа и сохраняйте временную метку для каждого журнала регистрации»)
- Система отслеживания заявок/ошибок («Были ли зарегистрированы ошибки, связанные с этой функцией?»)
- Поставщик услуг мониторинга («Были ли за последнюю неделю всплески активности, связанные с ошибками при входе в систему или выходе из неё?»)
- Система флагов функций / экспериментов («Какие флаги были полностью внедрены как минимум за неделю? Можете ли вы помочь определить их и создать PR-запрос для их удаления?»)
Использование этих инструментов из IDE упрощает работу. Кроме того, если мы можем их использовать, то и ИИ-агенты смогут, а значит, они смогут выполнять более сложные задачи.
Мне кажется, что концепция MCP может стать ещё одним шагом вперёд в повышении продуктивности разработчиков. Вероятно, это также расширит возможности ИИ-агентов, поскольку у них появятся дополнительные инструменты для решения более сложных задач. Трудно представить, что коммерческие поставщики не будут стремиться добавить серверы MCP, которые позволят клиентам проще использовать инструменты из IDE.
Как разработчики, мы сможем экспериментировать с инструментами, которые повысят нашу продуктивность. Следует отметить, что MCP всё ещё находится на ранней стадии развития и не имеет проверенных торговых площадок, поддержка MCP в IDE появилась всего несколько месяцев назад, а в реализациях MCP есть много тревожных уязвимостей, о которых мы расскажем в разделе «Угрозы безопасности» ниже.
2. Происхождение MCP
Протокол MCP был разработан двумя инженерами-программистами из Anthropic, Дэвидом Сорией Паррой и Джастином Спаром-Саммерсом. Дэвид рассказал историю создания в выпуске подкаста Latent Space.
«В июле 2024 года я работал над внутренними инструментами для разработчиков. Мы стремились дать больше возможностей сотрудникам Anthropic для глубокой интеграции с нашими моделями и максимально эффективного обучения наших моделей.Имея опыт работы с инструментами для разработки, я быстро оценил все преимущества Claude Desktop, в том числе такие функции, как Artifacts, но был разочарован ограниченным набором функций и отсутствием возможности его расширения. В то же время я выполняю свою повседневную работу в IDE. В IDE есть доступ к таким вещам, как локальная файловая система, но нет такого инструмента, как Artifacts, или чего-то подобного.Я постоянно копировал данные между Claude Desktop и IDE, и это меня раздражало. Я думал, что знаю, как создавать все интеграции, но что мне нужно сделать, чтобы эти IDE могли создавать интеграции?Если присмотреться, то можно увидеть, что проблема «интеграции ИИ» — это проблема MxN. У вас есть M приложений (например, IDE) и N интеграций.Размышляя над этой проблемой, я работал над протоколом Language Server Protocol (LSP) внутри компании, но этот проект ни к чему не привёл. Но если объединить эти идеи: LSP и недовольство интеграцией с IDE, — и дать им настояться несколько недель, то появится идея «давайте создадим какой-нибудь протокол для решения этой проблемы».
Подробнее об истории протокола MCP можно узнать из этого выпуска подкаста Latent Space.
Открытый исходный код протокола MCP
Дэвид объединился с коллегой-инженером Джастином, и они создали первые прототипы, продолжили работу над ними и через шесть недель получили первую работающую интеграцию MCP для Claude Desktop.
Они поделились прототипом внутри компании, и коллеги-разработчики из Anthropic были в восторге. Готовясь к публикации протокола в открытом доступе, участники внутреннего хакатона Anthropic создали множество интересных приложений, в том числе сервер MCP, управляющий 3D-принтером. Это подтвердило догадку Дэвида и Джастина о том, что MCP может быть очень полезен в реальном мире.
Они провели дополнительную доработку и объявили об открытом доступе к протоколу MCP 25 ноября прошлого года. На тот момент протокол MCP был таким:
- Веб-сайт, на котором описан протокол, способы реализации сервера MCP и руководства для клиентов (например, по интеграции протокола в IDE)
- Спецификация самого протокола
- SDKдля Python, TypeScript, Java, Kotlin и C#
- Примерысерверных и клиентских реализаций для справки
Быстрое внедрение в отрасль
Всего за четыре месяца MCP превратился из простого протокола, который использовал Claude Desktop с открытым исходным кодом, во все основные IDE, а инструменты искусственного интеллекта добавили поддержку MCP, включая OpenAI:
- Июль 2024 года: в Anthropic начинается разработка MCP
- Август:
- Zed редактор добавляет поддержку сервера MCP. Забавный факт: Дэвид и Джастин использовали Zed на работе и встроили клиент MCP в Zed!
- Январь 2025 года:
- Февраль:
- Claude Code — это запущенный Anthropic — агентный инструмент командной строки с поддержкой MCP
- Виндсерфинг добавляетдобавляет поддержку MCP
- Neovim получаетподдержку MCP через плагин
- Марш:
- Cloudflare выпускаетруководство по развертыванию готового к работе удаленного сервера MCP.
- Sentry запускает свой сервер MCP, став первым крупным поставщиком, добавившим готовый к использованию удаленный сервер. Реализация Sentry была основана на руководстве, предоставленном Cloudflare.
- OpenAI добавляетподдержку MCP в свой Agents SDK
- Апрель:
- VS Code добавляетподдержку MCP
- GitHub запускает свой официальный сервер MCP (в режиме публичного предварительного просмотра)
- Zapier запускаетсписок серверов MCP
- Сервисы CI/CD, такие как Bitrise и CircleCI (CI/CD), запускают свои серверы MCP
Единственная заметная IDE, в которой на данный момент отсутствует поддержка MCP, — это JetBrains IDEs, которая должна добавить поддержку MCP в следующем выпуске IDE, который ожидается в ближайшее время. Редко можно увидеть такое быстрое внедрение во всех основных IDE. Очевидно, что MCP даёт большие преимущества разработчикам, использующим инструменты искусственного интеллекта, поэтому IDE хотят добавить эту функцию. Так совпало, что лучшие IDE, которые инженеры чаще всего называли любимыми IDE с функциями искусственного интеллекта — Cursor, VS Code, Windsurf, Zed, Neovim и Cline — одними из первых получили поддержку MCP!
3. Разберитесь в LSP, чтобы понять MCP
Давайте заглянем в мир протоколов языковых серверов, потому что именно это решение вдохновило разработчиков MCP.
Общая проблема, с которой IDE сталкивались десятилетиями, заключалась в том, что они хотели добавить поддержку как можно большего числа языков программирования, что также означало добавление поддержки таких вещей, как:
- Подсветка синтаксиса
- Завершение кода (автозаполнение)
- Пометка предупреждений / ошибок в строке
- Выполнение простых операций по рефакторингу
Предполагая, что существует M IDE и N языков программирования, это проблема MxN. Наивное решение состояло в том, чтобы для каждой M IDE создать ручную поддержку для каждого N языков, насколько это возможно. Для поставщиков IDE это была большая работа, которую необходимо повторять всякий раз, когда начинает распространяться новый язык программирования:
Для нас, разработчиков, это означало, что IDEs хорошо поддерживает лишь ограниченное количество языков. Например, удачи в попытках кодирования с использованием C # в Android Studio!
Расширения / плагины — это обходной путь, позволяющий IDE выполнять сложную работу: в IDE, поддерживающих фреймворки расширений / плагинов, сторонние разработчики могут создавать плагины, например для подсветки синтаксиса на определённом языке. Это лучше, чем ничего, но требует от разработчиков больших усилий. Кроме того, многие IDE не предоставляют возможности расширения, которые обеспечивали бы удобство для разработчиков при использовании таких функций, как автодополнение и подсветка синтаксиса.
В 2016 году Microsoft выпустила протокол Language Server Protocol (LSP), изначально разработанный для Visual Studio Code. Идея заключается в том, что для каждого языка реализация LSP-сервера может предоставлять языковые функции. Теперь редакторы могут использовать LSP-сервер — существующую реализацию, часто с открытым исходным кодом, — вместо того чтобы создавать собственную:
Это повлияло на количество разрабатываемых IDE:
- Новые и уже существующие интегрированные среды разработки могут легко добавлять поддержку новых языков благодаря простому в использовании протоколу (LSP)
- Для большинства языков существует официальная реализация LSP, предоставляемая разработчиками языка (например, gopls для Go), и часто разработчики или поставщики IDE могут выбирать из нескольких реализаций LSP. Например, для C# популярными LSP являются OmniSharp и csharp-ls
Сегодня LSP поддерживают следующие IDE:
- VS Код
- Зед Редактор
- IntelliJ интегрированные среды
- Eclipse, Neovim, Emacs
- Многие другие небольшие редакторы, такие как Atom, Helix Editor, Kate и другие
Известные отсутствующие включают:
- Visual Studio — флагманская интегрированная среда разработки Microsoft (не путать с VS Code). Использует собственные языковые инструменты для поддержки языков
- XCode — существует официальный сервер Swift LSP, но XCode использует собственную систему анализа кода
- Android Studio: отсутствует поддержка LSP, поскольку IDE основана на IntelliJ Community Edition и поддерживает более ограниченный набор языков программирования, чем полноценные IDE IntelliJ
4. Архитектура MCP
Успех LSP убедил Дэвида и Джастина в том, что протокол позволяет:
- Разработчикам IDE следует уделять больше внимания созданию других отличительных функций IDE, а не языковых функций LSP
- Разработчики языковых серверов сосредоточились на создании надёжных реализаций
- ... в результате улучшилась вся экосистема
Основная идея MCP схожа с идеей LSP: вместо того чтобы каждая IDE или другой инструмент на основе ИИ создавали поддержку для множества функций, можно определить серверы MCP, которые добавят поддержку нужной функции. Серверы MCP могут использоваться несколькими IDE, и они сами решают, какие функции интегрировать или создавать.
MCP сделала несколько других выборов в отличие от LSP. Дэвид говорит, что они тщательно изучили распространённую критику в адрес LSP и приняли несколько других проектных решений:
- Инициализация серверов: разработчики хотели сделать этот процесс максимально простым с точки зрения реализации. Недостаток LSP в том, что инициализация серверов — довольно сложный процесс
- Заголовки: в протоколе LCP используется довольно уникальный подход к JSON-RPC, который предполагает отправку HTTP-заголовков на входе и выходе. Команда Anthropic выбрала более стандартный подход на основе JSON
Одним из содержательных постов, повлиявших на мнение команды, была статья LSP: хорошее, плохое и ужасное Майкла Пейтона Джонса.
Примеры MCP-серверов из эталонных серверов:
- PostgreSQL: доступ к базе данных только для чтения с проверкой схемы.
- GitHub: управляйте своим репозиторием, выполняйте операции с файлами git и получайте доступ к GitHub API
- Файловая система: выполняет безопасные операции с файлами в вашей локальной файловой системе
- Google Диск: поиск файлов и доступ к ним на подключенном Google Диске
- Puppeteer: автоматизация браузеров и выполнение операций по веб-скрапингу
- Sentry: извлекает логи и анализирует их из подключенной учетной записи Sentry.io
- Redis: взаимодействие с подключенными хранилищами данных Redis типа «ключ-значение»
Серверы могут быть локальными или удалёнными:
- Локальный сервер MCP:интегрированная среда разработки подключается к локально запущенному процессу, который может выполнять любые действия: от взаимодействия с удалённым сервером до доступа к локальной файловой системе. Слово «локальный» указывает на место, где запущен процесс. Например, сервер MCP PostgreSQL — это локальный процесс, запущенный в Node, который подключается к локальной или удалённой базе данных PostgreSQL.
- Удаленный сервер MCP: интегрированная среда разработки подключается к удаленному серверу, а не к локальному процессу, например к серверу MCP компании Sentry, где IDE подключается к серверу Sentry, проходит аутентификацию с использованием учетных данных, а затем может отправлять запросы о данных, доступных клиенту Sentry.
Разновидности MCP-серверов
Я наблюдаю за несколькими условными группами серверов MCP в зависимости от того, кто их создаёт:
- Официальные удалённые серверы MCP: в случае с GitHub, поддерживающим различные действия, связанные с GitHub, через MCP, они могут создать сервер. На данный момент лишь у немногих поставщиков есть официальный удалённый сервер, но ситуация может измениться.
- Проверенные локальные серверы MCP: локальные оболочки для доступа к таким ресурсам, как файловая система, различные базы данных, например Postgres или Redis, или сервисы, такие как GitLab или Slack. На данный момент я видел только те, которые не предоставляются официальными поставщиками, но они проверены, так как созданы доверенной стороной. Подробнее об этом в разделе о безопасности ниже.
- Серверы с открытым исходным кодом: многие серверы MCP имеют открытый исходный код, поэтому вы можете изучить их код. Если лицензия позволяет, создайте форк и свой собственный сервер.
- Закрытый исходный код / приватность: любой может создать приватный сервер MCP с закрытым исходным кодом, который будет доступен только ему или его коллегам, как в примере выше, где сервер MCP написан на одном файле Python и запускается локально или даже распространяется внутри команды.
Однако пока не существует удобного сервиса для поиска проверенных серверов. Кроме того, в текущем, раннем поколении инструментов MCP есть проблемы с безопасностью.
5. Исходный код сервера MCP
Итак, как выглядит сервер MCP? Это зависит от того, локальный он или удалённый.
Серверы могут быть написаны на любом языке. Давайте рассмотрим простой сервер, написанный на Python, который получает данные о погоде с помощью API Национальной метеорологической службы США. Это пример из документации MCP. Этот пример показателен: мы могли бы легко создать серверы, которые вместо получения данных о погоде выполняли бы локальные операции или отправляли другие удалённые запросы.
Мы создаём файл weather.py и начинаем с инициализации сервера MCP. Вот как это выглядит:
Класс FastMCP — это оболочка, которая автоматически генерирует определения инструментов, упрощая создание инструментов MCP.
В файле weather.py мы определяем вспомогательный метод make_nws_request для получения данных о погоде:
Теперь давайте добавим основную функцию этого инструмента: получение прогноза погоды. Мы определяем метод get_forecast и помечаем его как «инструментальный» метод для MCP Server с помощью атрибута @mcp.tool().
Обратите внимание на важность четких описаний! Мы добавили четкие описания для функции («Получить прогноз погоды для определенного места») и аргументов («Широта/долгота места»). Это важно, потому что языковая модель будет пытаться заполнить параметры на основе описаний. С таким описанием, если мы спросим у LLM: «Какой прогноз погоды в Нью-Йорке?», LLM сможет определить, что этот сервер MCP подходит для использования и что сначала нужно получить долготу и широту Нью-Йорка — данные, которые более крупная модель, такая как Anthropic Sonnet 3.7, может сгенерировать достаточно точно.
Мы почти закончили, осталось только инициализировать и запустить сервер. Добавляем это в weather.py:
Тестирование MCP-сервера: для базового тестирования мы можем запустить MCP-сервер из командной строки с помощью:
uv run weather.py
В качестве контекста uv — это менеджер пакетов Python, аналогичный Node в мире Node.js. Эта команда запускает наш файл weather.py, и мы можем вызвать
Мы можем проверить, правильно ли работает MCP-сервер, запустив его из Claude Desktop (или любой другой IDE, поддерживающей MCP-серверы). В Claude Desktop нам нужно добавить MCP-сервер в файл конфигурации claude_desktop_config.json. Мы просто указываем на наш локальный файл weather.py:
Как это работает во время выполнения
Подключение серверов MCP при инициализации: после добавления в конфигурацию IDE или инструмент (в данном случае Claude Desktop) подключает сервер MCP при перезапуске:
А теперь давайте спросим: «Какая погода в Нью-Йорке?»
Принятие решения об использовании MCP-сервера: после нашего вопроса наша языковая модель решает, что, вероятно, следует использовать погодный MCP-инструмент. Она преобразует «Нью-Йорк» в широту и долготу и хочет вызвать наш MCP-сервер. Прежде чем сделать это в первый раз, Claude выводит полезное предупреждение о том, что MCP может быть вредоносным.
Разбор ответа. Клод обращается к нашему серверу MCP и получает этот ответ. Затем LLM анализирует этот ответ и генерирует выходные токены (наш ответ):
Вот и всё! Мы создали сервер MCP и сделали его доступным для нашего клиента MCP (интегрированной среды разработки или такого инструмента, как Claude Desktop).
6. Угрозы безопасности
MCP — это мощный протокол, который позволяет подключать множество полезных источников данных. Однако при подключении таких объектов, как базы данных или сервисы, вам часто приходится передавать секретные данные на сервер MCP, а также предоставлять серверу доступ к вашей файловой системе. Это означает, что злоумышленники могут получить доступ к конфиденциальным данным и нанести серьёзный ущерб. С точки зрения безопасности, существующие инструменты MCP несовершенны и полны уязвимостей.
Атаки на цепочки поставок не являются чем-то новым, и локальный сервер MCP представляет собой скрытый вектор атаки. При обновлении до последней версии и запуске сервера существует риск кражи конфиденциальных данных, таких как SSH-ключи. Защита от атак на цепочки поставок аналогична защите от атак на пакеты npm. Например, используйте локальный реестр, в котором хранятся только проверенные пакеты, не обновляйте пакеты вслепую и используйте области видимости, чтобы все запросы к пакетам отправлялись в реестр по умолчанию.
Атаки на цепочку поставок для локальных MCP-серверов представляют такую же угрозу, как и для LSP. В случае с LSP речь идёт об установке расширения, которое может быть вредоносным, и IDE должна защищаться от этого. Новый вектор атак для MCP связан с поддержкой удаленных MCP-серверов, о которых LSP не имеет ни малейшего представления.
Имейте в виду, что в пространстве MCP существуют новые типы атак, о которых рассказал стартап в области искусственного интеллекта Invatiant Labs:
Атака с использованием инструмента-отравителя: атака, которой особенно уязвимы инструменты LLM, в том числе MCP. На первый взгляд безобидный инструмент содержит скрытые вредоносные инструкции, которые не видны пользователю, одобряющему инструмент, и которые заставляют LLM выполнять вредоносные действия. Ниже приведён пример сервера MCP, используемого для простой задачи сложения. Пользователь вводит запрос, который запускает этот инструмент, и инструмент затем раскрывает файл конфигурации mcp.json, который может содержать конфиденциальные данные, например строку подключения к базе данных или сохранённые SSH-ключи:
Обман MCP: злоумышленник на сервере меняет описание инструмента после того, как клиент его одобрил. Уязвимость, позволяющая проводить атаки с подменой инструментов, заключается в том, что клиенты MCP, такие как Cursor, Windsurf или Claude Desktop, позволяют серверу MCP менять описание после того, как пользователь его одобрил. Очевидно, что эти инструменты не сообщают об этом пользователю. Злоумышленник на сервере MCP вводит в заблуждение, а затем, после одобрения и нескольких использований, незаметно меняет область применения, чтобы можно было проводить вредоносные манипуляции.
Перехват аутентификации из другого сервиса: когда к одному клиенту подключено несколько MCP-серверов, вредоносный MCP-сервер может использовать описание своего инструмента для получения учетных данных с других MCP-серверов и их утечки. Например, если вы подключите вредоносный сервер-подражатель и почтовый MCP-сервер для отправки и получения электронных писем, то вредоносный сервер сможет получить доступ к учетным данным вашего почтового сервера, получить полный доступ к вашему почтовому ящику, просматривать все ваши сообщения и отправлять электронные письма от вашего имени. Подробнее об этой атаке.
«Спящая угроза»: сервер MCP WhatsApp тайно крадёт сообщения WhatsApp. Чтобы продемонстрировать эти уязвимости, компания Invariant Labs создала на первый взгляд безобидный сервер MCP, который позволяет взаимодействовать с WhatsApp для отправки и получения сообщений. В настоящее время WhatsApp не предлагает сервер MCP, поэтому все серверы MCP, позволяющие большим языковым моделям использовать WhatsApp, являются сторонними. Атака происходит следующим образом:
- Пользователь устанавливает на первый взгляд безобидный сервер WhatsApp MCP, который позволяет отправлять и получать сообщения WhatsApp
- После установки плагин выполняет атаку с отравлением инструмента, имитируя кражу MCP: он незаметно меняет описание инструмента, чтобы все сообщения перенаправлялись на другой номер, неизвестный пользователю
Полное описание атаки см. здесь. Эта атака может быть направлена на любой сервис; она может привести к раскрытию строк подключения к базе данных, утечке учетных данных GitHub, а также любой другой конфиденциальной информации, которую вы используете!
Для того чтобы MCP можно было использовать повсеместно, необходимо решить проблемы с безопасностью. Эти проблемы нужно будет решать на стороне клиента, то есть в IDE, которые запускают серверы MCP. На данном этапе вполне понятно, что IDE, интегрирующие MCP, сосредоточены на выпуске работающего продукта.
Сейчас я бы действовал с особой осторожностью при использовании ненадёжных MCP-серверов, потому что безопасность MCP-серверов во всех IDE оставляет желать лучшего.Новые векторы атак наверняка будут вскоре устранены IDE или, по крайней мере, их будет сложнее реализовать, но пока я бы посоветовал следующее:
- Для локальных MCP-серверов: используйте только те, которые вы проверили и которым доверяете. Используйте проверенную торговую площадку, например ту, что есть в вашей IDE, или создайте список проверенных пакетов, в котором вы фиксируете версии и избегаете автоматических обновлений, или запускайте только те пакеты, которые вы собрали самостоятельно.
- Для удаленных MCP-серверов: используйте только те, которые поставляются поставщиками.
7. Сценарии использования в будущем
Протокол MCP предоставляет языковым моделям инструменты для взаимодействия с любыми другими приложениями, открывая такие инновационные возможности, как:
Подключите свой код к проектам Figma. Figma создала плагин MCP, который может взаимодействовать с IDE, поэтому вы можете дать LLM команду реализовать проект Figma или создать проекты Figma для вас.
Создавайте музыку, общаясь с языковой моделью. Дизайнер и разработчик Сиддхарт Ахуджа создал сервер MCP для прямого взаимодействия с программой для создания музыки Abelton. Подключив этот MCP, языковая модель может создавать музыку на основе запроса. Послушайте здесь.
Создавайте 3D-модели с помощью подсказок. В 3D-играх, очевидно, используются 3D-модели, которые часто создаются с помощью программы Blender. Теперь Claude Desktop может взять изображение и создать 3D-модель в Blender. Подсказка:
Результат работы LLM в Blender:
Создайте карту, подключив геопространственное программное обеспечение. Подключив программное обеспечение для пространственной визуализации QGIS, вы можете создать векторную карту на основе реальной карты с учетом ваших предпочтений, например в отношении цветовой гаммы:
Для этих целей вам не нужно использовать LLM из вашей IDE! В большинстве приведённых выше примеров используется Claude Desktop, но другие LLM могут легко добавить поддержку протокола MCP в свои приложения. Трудно представить, почему ChatGPT и Google Gemini не последуют этому примеру, а когда они это сделают, люди, не связанные с разработкой, скорее всего, начнут использовать MCP ещё чаще. Поставщики LLM вынуждены добавлять эту функцию, иначе они рискуют потерять долю рынка в пользу Claude Desktop из-за постоянно растущего числа поставщиков медицинских услуг, которые уже работают с Claude.
LLM, подключенный к любому программному обеспечению, открывает множество новых возможностей, в том числе:
- Управляйте аппаратным обеспечением с помощью LLM! Команда Anthropic добавила поддержку MCP в 3D-принтер и теперь может давать ему команды. Мы можем представить себе множество других типов аппаратного обеспечения, которые можно добавить. Один из инженеров-программистов наверняка подключит самодельные праздничные гирлянды с компьютерным управлением к своей IDE к началу праздников.
- Люди могут “разговаривать” с программным обеспечением. Например, спросите магистра права: “Создайте векторное изображение в Photoshop на основе этой фотографии, но с этими отличиями”.
- Агенты с искусственным интеллектом получают больше инструментов для работы. С каждым новым созданным программным обеспечением агенты с искусственным интеллектом могут начать использовать их для выполнения более сложных задач. Например, подключив к IDE такие инструменты, как Linear, Slack, Figma и инструмент для создания скриншотов, разработчик может дать команду: «Возьми задачу по улучшению дизайна экрана входа в систему, возьми прикреплённый дизайн Figma, выполни первую реализацию, сделай скриншот результата реализации и опубликуй его в канале Slack команды после завершения».
Это возможности, которые потенциально могут изменить то, как выполняется работа, и то, какой объем работы может выполнить один инженер-программист. Это еще одно подтверждение того, что LLM являются крупнейшим прорывом в разработке программного обеспечения за последние десятилетия.
Блюда на вынос
MCP обладает огромным потенциалом для повышения продуктивности инженеров, а значит, этот подход, скорее всего, будет быстро распространяться.
- Поставщики инструментов для разработчиков ухватились за возможность создавать MCP-серверы и ещё больше «привязывать» разработчиков к использованию своих инструментов — теперь через IDE!
- IDEs, скорее всего, сосредоточатся на устранении уязвимостей в системе безопасности MCP. Это новая область, поэтому поиск подходящих решений для поставщиков атак может занять больше времени
Показательно, что именно стремление инженеров-программистов решить эту проблему привело к изобретению универсального коммуникационного моста между большими языковыми моделями и программным обеспечением. Были и другие попытки определить протоколы, которые позволили бы большим языковым моделям выполнять универсальные задачи и быть расширяемыми:
- Агенты OpenAI:SDK для создания автономных агентов
- Langbase Pipes: ИИ-агент, представляющий собой бессерверный API
В обоих случаях разработчики сосредоточились на агентах, а не на инструментах для разработчиков. Но кто создаёт агентов? Конечно же, разработчики!
Команда Anthropic, создававшая MCP, не стремилась решить глобальную проблему. Они просто хотели улучшить инструменты для разработчиков. Поэтому они решили проблему MxN, связанную с тем, что M инструментов для разработчиков (интегрированных сред разработки) должны поддерживать N различных плагинов/инструментов для разработчиков.
Решив эту проблему с помощью универсального коммуникационного уровня для инструментов разработки, они добились быстрого внедрения в IDE. Теперь все IDE поддерживают этот универсальный коммуникационный уровень под названием MCP. Возможно, мы сможем использовать тот же уровень для общего развития ИИ, не ограничиваясь инструментами для разработчиков?
Открытые подходы, как правило, распространяются на рынке разработчиков быстрее, чем закрытые. Одна из причин, по которой MCP так быстро распространился, заключается в том, что он открытый. Его создала компания Anthropic, но лицензия у него разрешительная, как у MIT, и мы приветствуем вклад разработчиков. Проект на GitHub не зависит от Anthropic, и легко заметить, что этот проект со временем может стать независимым, даже если для его развития потребуется поддержка компании.
Внедрение разрешительного протокола с открытым исходным кодом сопряжено с относительно низким риском для разработчиков, и, возможно, именно поэтому многие IDE поспешили добавить поддержку. Сравните это с ситуацией, когда протокол не является открытым или его реализация привязана к компании: разработчики IDE не спешили бы внедрять его, и он, скорее всего, не стал бы отраслевым стандартом.
Опытные инженеры-программисты станут ещё более востребованными. За два с половиной года никто не изобрёл протокол связи между LLM и программным обеспечением, который пользовался бы большой популярностью. Так как же двум инженерам из Anthropic, которые не являются специалистами по искусственному интеллекту, удалось это сделать?
Ранее Дэвид почти 10 лет проработал в Meta, занимаясь инфраструктурой для разработчиков, а Джастин был инженером-программистом в GitHub, а затем в Meta, где создавал программные системы, работавшие в огромных масштабах.
Одна из причин популярности протокола MCP заключается в том, что он хорошо продуман и прост в интеграции. Как будто разработчики, создавшие его, уже прошли этот путь и знают, что нужно для создания чего-то, что практически напрашивается на внедрение. Здесь важен опыт: время, которое Дэвид потратил на работу над протоколами Language Server, было очень полезным, как и опыт Джастина в масштабировании систем. Эта пара разработала протокол MCP, чтобы обеспечить его максимальную эффективность в долгосрочной перспективе, и их опыт помог им достичь этой цели. Они даже изучили самые слабые места LSP от Microsoft и разработали протокол с учётом этих недостатков, чтобы MCP не сталкивался с прогнозируемыми проблемами.
Если вы разработчик, изучите серверы MCP; они могут повысить продуктивность вашего рабочего процесса и показать, насколько полезными могут быть большие языковые модели в повседневной работе. Я советую осторожно поэкспериментировать с некоторыми из них и всегда помнить об их уязвимостях в плане безопасности.
Если вы работаете в компании, которая продает продукты разработчикам, рассмотрите возможность создания локальных или удаленных MCP-серверов для клиентов. У Cloudflare есть хорошее руководство по созданию удаленных серверов. Если вы работаете над инструментами для разработчиков, которые считаются MCP-клиентами, то поддержка MCP вскоре, скорее всего, станет базовым требованием для клиентов, поэтому вы можете рассмотреть возможность добавления поддержки MCP.
Каков ваш опыт использования MCP? Если вы его используете, не стесняйтесь оставлять комментарии.