Mcp Intro

Если вы еще не смотрели Model Context Protocol (MCP), то рекомендую ознакомиться, хотя бы по диагонали. Документация - https://modelcontextprotocol.io/introduction Спецификация протокола - https://spec.modelcontextprotocol.io/specification/2024-11-05/

Для решаемой задачи “нужен API, чтобы соединять мир с LLM, но чем закончится, непонятно”, API получился неплохим. Простой (построен на базе JSON-RPC 2.0), компактный (JSON-Schema занимает 2000 LOC) и расширяемый через capabilities. В протоколе есть синхронная коммуникация через request/response и асинхронная через односторонние notifications. Примитивы приятные: структура для ошибок и id для “склеивания запросов и ответов” предусмотрены, а непонятных полей нет:

{
  jsonrpc: "2.0",
  id: string | number,
  result?: {
    [key: string]: unknown;
  },
  error?: {
    code: number,
    message: string,
    data?: unknown;
  }
}

Взаимодействие двуфазное. На старте клиент и сервер обмениваются версиями и “возможностями” (capabilities), которые могут предоставлять друг другу.

Сейчас описаны такие “возможности”:

  • client:roots - способность предоставлять список “папок” файловой системы. Пока непонятно.
  • client:sampling - поддержка запросов к LLM клиента со стороны сервера. Название странное, но окей. Через эту же capability, по идее, можно спрашивать что-то и у пользователя.
  • server:prompts - умение предоставлять клиенту “полезные” промпты в контексте данного сервера, среди которых пользователь уже может выбрать, что ему нужно.
  • server:resources - предоставление доступа к ресурсам. Ресурсы могут быть текстовыми и бинарными. Идентифицируются по uri (https://, file://, git://). Пока только чтение и подписка на изменение, записи нет.
  • server:tools - тут все понятно, полная аналогия с обычными tools.
  • server:logging - возможность отправлять логи клиенту.

В возможностях смутило отсутствие версионности внутри одной возможности. Для экспериментальных, например, пришлось делать отдельную. Боюсь, дальше будет хаос с совместимостью или какой-нибудь костыль, типа версий в именах. Ну или добавят в следующих версиях.

Текущий роадмап: https://modelcontextprotocol.io/development/roadmap

  • удалённые подключения MCP
  • референсная имплементация клиента
  • управление пакетами для MCP серверов
  • поддержка агентoв