Знайомство з 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 серверів
- Підтримка агентів