Знайомство з Model Context Protocol (MCP)

Якщо ви ще не дивилися Model Context Protocol (MCP), то рекомендую ознайомитися, хоча б по діагоналі.

Документація: modelcontextprotocol.io/introduction Специфікація протоколу: 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": "unknown"
  },
  "error?": {
    "code": "number",
    "message": "string",
    "data?": "unknown"
  }
}

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

Зараз описані такі можливості (capabilities):

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

У можливостях збентежила відсутність версійності всередині однієї можливості. Для експериментальних, наприклад, довелося робити окрему. Боюся, далі буде хаос із сумісністю або якийсь костиль, типу версій в іменах. Ну або додадуть у наступних версіях.

Поточний роадмап: modelcontextprotocol.io/development/roadmap

  • Віддалені підключення MCP
  • Референсна імплементація клієнта
  • Управління пакетами для MCP серверів
  • Підтримка агентів