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