Запознаване с 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 сървъри
  • Поддръжка на агенти