Один URL — і ChatGPT, Claude, Cursor чи будь-який інший MCP-сумісний клієнт може знайти аналіз, назвати ціну й термін, пояснити підготовку, показати найближче відділення та чинні акції. Без реєстрації, без персональних даних, лише читання.
localeMCP (Model Context Protocol) — відкритий стандарт, за яким AI-модель підключається до зовнішніх сервісів. Сервер описує свої інструменти, а клієнт викликає їх під час розмови. ТОВ "СМАРТЛАБ" публікує такий сервер для свого відкритого каталогу.
Запитайте свого асистента: «Скільки коштує ТТГ у СМАРТЛАБ і як підготуватись?» — і отримаєте актуальну відповідь із прайсу, а не з пам'яті моделі. Замовлення й результати — як і раніше, на smartlab.ua, у застосунку або у відділенні.
Стандартний MCP-сервер без кастомних SDK. Підключається за одним URL до Claude, ChatGPT, Cursor, Claude Code та власних агентів. Строга схема входу, передбачувана структура відповіді, зрозумілі помилки.
Асистенти відповідають про аналізи з нашого прайсу, а не вигадують. Сервер захищає бекенд від навантаження (кеш, ліміти, запобіжник) і віддає лише те, що вже є на сайті.
Версія 0.1 свідомо обмежена відкритим каталогом: лише те, що вже опубліковано на smartlab.ua.
Версія 0.2 проєктується окремо і не є розширенням поточної. Терміни повідомимо після завершення тестування версії 0.1.
Ключ доступу видає ТОВ "СМАРТЛАБ". Введіть його нижче — і адреса в усіх інструкціях підставиться сама.
POST · JSON-RPC 2.0https://mcp.smartlab.ua/mcp/<ключ доступу>claude mcp add --transport http smartlab "https://mcp.smartlab.ua/mcp/<ключ>"
# перевірка
claude mcp list
Файл .cursor/mcp.json у проєкті або глобальний:
{
"mcpServers": {
"smartlab": { "url": "https://mcp.smartlab.ua/mcp/<ключ>" }
}
}
Будь-який MCP SDK зі Streamable HTTP. Приклад на TypeScript:
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
const client = new Client({ name: "my-agent", version: "1.0" });
await client.connect(new StreamableHTTPClientTransport(new URL("https://mcp.smartlab.ua/mcp/<ключ>")));
const r = await client.callTool({ name: "smartlab_search_tests", arguments: { query: "ТТГ", per_page: 5 } });
console.log(r.structuredContent);
Для скриптів, які вміють надсилати заголовки, ТОВ "СМАРТЛАБ" може видати ключ: тоді додайте Authorization: Bearer <ключ>.
Кожен інструмент повертає текст і structuredContent з фіксованим набором полів. Ідентифікатори (test_id, branch_id, group_id, promotion_id) беруться з відповідей інших інструментів. Усі приймають locale: uk (типово), ru, en.
smartlab_search_testsПошук аналізів, комплексів, check-up та УЗД за назвою, абревіатурою («ТТГ», «TSH») або кодом. Повертає ціни, термін, біоматеріал, ознаку комплексу, id.
query (≤ 100 символів) або group_id, page, per_page (≤ 50)smartlab_get_test_groupsДерево груп каталогу з підгрупами та кількістю досліджень. Id групи підходить для перегляду через пошук.
localesmartlab_get_popular_testsТоп-10 досліджень, як на головній smartlab.ua, з актуальними цінами. Добрий старт, коли пацієнт не знає, що шукати.
localesmartlab_get_complex_compositionСклад комплексу або check-up: перелік досліджень із цінами, ціна комплексу та сума частин окремо.
complex_idsmartlab_get_test_infoПовна картка: опис, показання, метод і референтні значення, підготовка, ціна, взяття біоматеріалу, склад, пов'язані дослідження, кількість відділень.
test_id, include_branch_idssmartlab_get_test_priceБазова ціна, CITO, термін, вартість взяття біоматеріалу та орієнтовний підсумок. Акційна ціна — окремим полем promo_price_uah, коли є.
test_idsmartlab_get_preparationПравила підготовки простим текстом: натще, час доби, ліки, обмеження.
test_idsmartlab_get_sampling_feesТарифи на взяття біоматеріалу (венозна кров, зішкріб тощо), які додаються до ціни дослідження.
localesmartlab_list_citiesУсі міста й містечка, де є відділення СМАРТЛАБ.
localesmartlab_find_branchesВідділення за містом, адресою, координатами (сортує за відстанню), послугами (УЗД, ЕКГ, лікар, дитяче) або за доступністю конкретного аналізу.
city, address, near {lat,lng}, services[], test_id, limit (≤ 30)smartlab_get_branchАдреса, телефон, посилання на карту та нормалізований тижневий графік: відкриття, забір крові до, видача результатів до.
branch_idsmartlab_get_promotionsЧинні акції: назва, короткий опис, максимальна знижка, дати, місто (якщо акція локальна), посилання на умови. Плюс постійні «Дні здоров'я».
include_expired (типово false), localesmartlab_get_promotionПовні умови однієї акції та дослідження, які в неї входять, з акційними цінами.
promotion_idsmartlab_get_newsОстанні новини smartlab.ua: нові лікарі, відділення, послуги, обладнання, бонусні програми. Тизер і посилання, найновіші першими.
limit (≤ 20), localesmartlab_get_news_articleПовний текст однієї новини без розмітки.
news_idАсистент сам обирає ланцюжок інструментів. Так виглядають найчастіші запити пацієнтів.
smartlab_search_tests→smartlab_get_test_price→smartlab_get_preparationsmartlab_find_branches→smartlab_get_branchsmartlab_search_tests→smartlab_get_complex_composition→smartlab_get_promotions→smartlab_get_promotionsmartlab_get_popular_tests→smartlab_get_test_info| Що | Значення | Навіщо |
|---|---|---|
| Ліміт запитів | 60 за хвилину на клієнта, сплеск до 20 | захист бекенду лабораторії; у відповідь — HTTP 429 |
| Пакетні запити JSON-RPC | заборонені (HTTP 400) | один HTTP-запит = один виклик |
| Розмір сторінки | per_page ≤ 50, limit ≤ 30 | каталог не для масового вивантаження |
| Кеш | 5–15 хвилин | ціни оновлюються з прайсу з такою затримкою |
| Ціни | базові, у гривнях | акції — окремими інструментами та полем promo_price_uah |
| Графік відділень | тижневий | святкові дні уточнюйте за 0 800 750 070 |
| Тимчасова недоступність | isError: true з людяним текстом | внутрішні помилки бекенду назовні не виходять; повторіть за хвилину |
| Невалідний вхід | помилка валідації з описом поля | id — hex або число до 32 символів; запит — до 100 символів без розмітки |
Усі інструменти позначені readOnlyHint. Сервер фізично не має маршрутів до замовлень, результатів чи особистого кабінету: у його allow-list лише 13 публічних GET-адрес каталогу та сайту.
Сервер не приймає й не зберігає жодних даних пацієнта. Заголовки клієнта (у тому числі Authorization) ніколи не передаються далі. У логах — лише назва інструмента, тривалість і тип помилки.
Асистент отримує від сервера інструкцію не ставити діагнози, не призначати дослідження й не тлумачити результати, а скеровувати до лікаря. Сервер не приймає й не віддає жодних персональних чи медичних даних пацієнтів.
Тексти з каталогу очищаються від розмітки та прихованих символів; асистент отримує інструкцію не сприймати їх як команди. Внутрішні помилки бекенду назовні не потрапляють.