MCP server for Kaspi — marketplace orders, payments (Kazakhstan)
Three tools with complete Zod schemas and descriptions in Russian. All tools are READ_ONLY and properly named with verb_noun pattern (get_orders, get_products, get_order). Schemas include proper type constraints (enums, min/max bounds). However, descriptions are minimal (10-20 chars in English translation), parameter descriptions lack context about when to use each tool, and output schemas are not documented. Error handling is basic (404 returns 'not found' text). No tool annotations (readOnlyHint, idempotentHint) despite all being read-only. Pagination is implemented but not clearly explained in descriptions.
Получение детальной информации о заказе Kaspi по ID.
Получение списка заказов Kaspi с фильтрацией по статусу и дате.
Получение списка товаров продавца на Kaspi.
Descriptions are too brief (10-20 chars). 'Получение списка заказов Kaspi с фильтрацией по статусу и дате' (~60 chars) lacks guidance on when to use get_orders vs get_order, what fields are returned, or prerequisites.
Output schemas are not documented. Handlers return JSON.stringify() of custom objects, but LLMs cannot see the field structure (id, код, сумма, статус, etc.) to plan downstream calls or extract data.
No tool annotations despite all tools being read-only. Adding readOnlyHint=true would signal to agents that these calls are safe to retry and have no side effects.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 53 | 2026-07-28+ | v2 |
Error handling is minimal. KaspiClient.get() throws generic errors ('Kaspi HTTP 404: ...') without recovery guidance. When an order is not found, returning 'Заказ {id} не найден' gives the LLM no next steps.
Pagination parameters (page_number, page_size) are present but descriptions do not explain the response structure (total count, next_cursor, or whether results are exhausted). LLMs cannot determine when to stop paginating.