Перейти до основного вмісту
Основний10 хв1649 слів

MCP tools vs resources vs prompts: що і коли використовувати

Практичне порівняння MCP tools, resources і prompts: control plane, discovery, schemas, permissions, freshness, UX, тестування та безпечний вибір primitive для MCP server.

Зміст статті
  1. 01Коротка відповідь: дія, контекст і шаблон взаємодії — різні контракти
  2. 02Control plane визначає UX, але не надає authorization
  3. 03Tools: typed operation contract із найвищим authority risk
  4. 04Resources: URI, freshness і context budget мають бути явними
  5. 05Prompts: reusable workflow із видимими arguments, не policy boundary
  6. 06Decision matrix і anti-patterns для одного доменного workflow
  7. 07Contract tests, canary rollout і rollback

Передумови

Коротка відповідь: дія, контекст і шаблон взаємодії — різні контракти

MCP tool описує операцію, яку модель може запропонувати викликати з типізованими аргументами: знайти замовлення, обчислити тариф або створити чернетку. Resource надає контекст, який host application може прочитати за URI й додати до розмови: файл, schema, довідник або snapshot. Prompt є параметризованим шаблоном повідомлень, який користувач свідомо обирає для повторюваного workflow. Це не три способи опублікувати одну функцію, а три різні control planes.

Вибирайте primitive за власником наступного кроку. Якщо потрібна зовнішня операція або authoritative lookup з runtime parameters — tool. Якщо користувач чи application має вибрати й прочитати матеріал як контекст — resource. Якщо продукту потрібна видима стартова команда з аргументами й підготовленими messages — prompt. Один server може мати всі три: prompt формує task, resource додає policy, tool виконує дозволений lookup. Prompt або resource не повинні маскувати side effect, а tool не варто використовувати лише для передачі статичного тексту.

  • Змінює або обчислює стан за runtime input → tool.
  • Надає адресований content для context → resource.
  • Запускає user-selected reusable interaction → prompt.
  • Потребує двох ролей → композиція primitives із окремими contracts.

architecture

Карта системи: MCP tools vs resources vs prompts: що і коли використовувати

Схема побудована з ключових секцій статті та показує послідовність або архітектурні блоки, які потрібно опрацювати.

comparison

Критерії вибору й порівняння

Візуалізація використовує тези, приклади та наступні кроки статті як перевірювані контрольні точки, а не декоративні елементи.

Control plane визначає UX, але не надає authorization

Специфікація описує tools як model-controlled: client може показати їх моделі й дозволити їй обрати виклик. Для sensitive operation client має показати inputs і дати людині можливість відмовити. Resources є application-driven: host сам вирішує, чи показати picker, пошук, automatic inclusion або інший інтерфейс. Prompts є user-controlled: вони задумувались як доступні користувачу команди або templates, хоча конкретний UI протокол не нав'язує.

Ці labels не є authorization. Модельний вибір tool не надає права на side effect; вибір resource не доводить доступ до кожного URI; запуск prompt не підтверджує всі операції, описані в його тексті. Client і server окремо перевіряють identity, scopes, tenant, target та актуальний стан. Для consequential action потрібні preview, confirmation або policy gate на момент виконання, а не довіра до того, що користувач колись натиснув назву prompt.

Tools: typed operation contract із найвищим authority risk

Tool definition має стабільне name, зрозумілий description та valid JSON Schema для input. Optional outputSchema дає client змогу перевірити structuredContent; це корисно для downstream automation, але не доводить істинність даних. Server валідовує schema й business constraints, перевіряє permission на конкретний object і повертає tool execution error для виправних domain failures. Protocol error залишайте для malformed request або невідомого tool.

Розділяйте read і write operations. `orders.get` може бути low-risk lookup, тоді як `orders.refund` потребує amount, currency, order version, reason, idempotency key та approval receipt. Не створюйте універсальний `execute_api` з довільними path і body: така абстракція ховає authority від моделі, reviewer і audit log. Tool annotations корисні як hints для UX, але client не повинен вважати їх довіреною security policy без trust у server.

Tool result може містити text, structured content, resource link або embedded resource. Це не перетворює tool на resource: виклик усе ще є операцією з inputs, timeout, error semantics і audit event. Якщо великий результат має стабільний URI або перевикористовується, поверніть короткий structured summary та resource link замість копіювання всього corpus у кожний result.

  • Input schema перевіряє форму; policy перевіряє право й намір.
  • Output schema перевіряє структуру; authoritative system перевіряє факт.
  • Write tool → exact target, confirmation, idempotency і postcondition.
  • Невизначений timeout → reconcile перед retry.

Resources: URI, freshness і context budget мають бути явними

Resource має унікальний URI й може містити text або binary content із MIME type. Resource templates публікують параметризовані URI, а optional completion допомагає підібрати argument. Client спочатку робить resources/list або templates/list, а потім resources/read. Підписки й listChanged є окремими optional capabilities; сам факт підтримки resources не означає automatic refresh.

Для production додайте source owner, data classification, revision або lastModified, allowed audience, size budget і cache policy. Annotations `audience`, `priority` та `lastModified` є hints для client, а не access-control decisions. Server перевіряє URI, authorization і resource permission на кожне read. Не вкладайте секрет у передбачуваний URI й не припускайте, що невідображений елемент неможливо прочитати прямим request.

Resource підходить для context, але не гарантує, що модель його використала або процитувала правильно. Eval має перевіряти current revision, passage support, conflict disclosure, no-answer behavior і cross-scope canary. Для frequently changing business fact іноді кращий read-only tool, який робить authoritative lookup у момент запиту; для browseable документації зі стабільними identifiers resource дає кращий discovery та cache contract.

  • Stable browseable content → resource або resource template.
  • Live parameterized fact → часто read-only tool.
  • Subscription не замінює revision check перед важливим рішенням.
  • URI visibility не дорівнює permission.

Prompts: reusable workflow із видимими arguments, не policy boundary

Prompt definition має name, optional title і description та список arguments. prompts/get повертає description і messages, куди server підставляє перевірені arguments. Messages можуть містити text, image, audio або embedded resource. Хороший prompt пояснює outcome й очікувані inputs: `review_incident` із incident ID і review depth корисніший за нечіткий `analyze`.

Prompt зручний для discoverable slash-command, onboarding або стандартизованої послідовності аналізу. Він не є server-side automation і не гарантує виконання інструкцій моделлю. Не вставляйте hidden approval, credential чи незворотну дію в template. Якщо workflow потребує tool, prompt може підготувати messages і попросити аналіз, але client усе одно застосовує tool policy, а server повторно авторизує call.

Versionуйте зміст template або принаймні зберігайте hash у evaluation evidence. listChanged повідомляє, що каталог змінився, але активна розмова могла вже включити старі messages. Regression set має перевіряти argument escaping, prompt injection у user-provided field, відсутні arguments, locale, embedded-resource permissions і поведінку після зміни template.

Decision matrix і anti-patterns для одного доменного workflow

Уявімо support server. `support://policies/refunds/2026-09` — resource, бо це versioned policy content для читання. `draft_refund_review` — prompt, бо користувач обирає повторюваний review template з ticket ID. `tickets.get` і `refunds.create_draft` — tools, бо вони роблять runtime lookup та створюють контрольований draft. Остаточний `refunds.submit` варто відокремити з сильнішим scope і confirmation. Така композиція робить source, reasoning workflow і authority видимими окремо.

Поширені помилки: опублікувати кожний database row як tool; заховати write request у resource URI; повертати stale policy через tool без revision; використати prompt як system policy; дублювати однаковий content у prompt, resource і tool description; оголосити один mega-tool для всіх API. Вони погіршують discovery, збільшують context, розмивають permissions і роблять eval нездатним локалізувати failure.

Перед реалізацією заповніть коротку картку: user outcome, controller, data owner, freshness, input/output shape, side effects, permission check, audit event, failure semantics, context cost і rollback. Якщо дві сутності мають різні authority або lifecycle, дайте їм різні primitives навіть тоді, коли backend endpoint спільний.

  • Context failure → перевірте resource revision і selection.
  • Instruction failure → перевірте prompt version і argument handling.
  • Execution failure → перевірте tool schema, policy, effect і reconciliation.
  • Змішаний failure → збережіть окремі receipts для кожної межі.

Contract tests, canary rollout і rollback

Contract suite починайте з capability combinations: server із кожною primitive окремо, усіма трьома та зі змінами catalog. Перевірте pagination, unknown names/URI, invalid arguments, MIME handling, structured output, listChanged і resource subscription лише там, де capability оголошена. Negative security cases підміняють tenant, target, URI, prompt argument і tool result; додають indirect injection у resource та повторюють write після ambiguous timeout.

Проведіть end-to-end eval на synthetic support case: користувач обирає prompt, client читає конкретну policy revision, model пропонує read tool, а write draft проходить окреме confirmation. Evidence pack містить protocol version, capability manifest, catalog hashes, resource revision, rendered prompt, tool inputs/results, approval receipt, final state і reviewer verdict. Це дозволяє визначити, яка межа зламалась, не покладаючись на fluent final answer.

Rollout почніть з одного read-only resource, одного prompt і одного read-only tool. Після перевірки scope та audit додайте reversible draft write; irreversible action залишайте поза model authority до окремого approval contract. Rollback вимикає affected capability або tool, відкликає scope, pin-ить останню перевірену resource/prompt revision і зберігає read-only diagnostics. Повторна активація потребує regression для зміненого primitive та всієї композиції, яку він живить.

  • Hard gate → cross-tenant read, hidden side effect або unauthorized write.
  • Quality gate → stale revision, unsupported claim або ambiguous prompt outcome.
  • Compatibility gate → advertised capability не відповідає method behavior.
  • Recovery gate → retry не дублює effect і не губить audit chain.

Практичні приклади

Support workflow із трьома primitives

Користувач запускає prompt для review ticket. Client читає versioned refund-policy resource. Модель викликає read-only ticket tool, готує висновок і лише після окремого confirmation викликає create-draft tool. Evidence зберігає revisions і receipts на кожній межі.

Коли resource краще за tool

Server публікує каталог versioned API schemas як resource templates. Host дає користувачу picker і кешує незмінні revisions. Tool знадобиться лише для live schema validation проти конкретного deployment, а не для повторної передачі статичного документа.

FAQ

У чому головна різниця між MCP tools, resources і prompts?

Tool є model-controlled operation, resource — application-managed context за URI, prompt — user-selected reusable message template. Конкретний client визначає UI, але authority та permission завжди перевіряються окремо.

Чи може tool повертати resource?

Так. Tool result може містити embedded resource або resource link. Проте виклик лишається operation contract із inputs, errors і audit, а resource зберігає власні URI, permission та freshness semantics.

Коли для читання даних обрати tool, а коли resource?

Resource підходить для browseable, адресованого й часто versioned content. Read-only tool кращий для live parameterized lookup, де результат залежить від runtime input, authorization та authoritative current state.

Чи prompt може автоматично схвалити tool call?

Ні. Запуск prompt не є authorization на наступну дію. Client застосовує confirmation policy, а server перевіряє identity, scope, target і state під час кожного consequential tool call.

Пов’язані матеріали

Model Context Protocol: архітектура і безпечна інтеграція

Як MCP стандартизує зв’язок між AI-хостом і серверами інструментів, які ролі мають host, client і server та де проходять межі довіри.

Розробка MCP server

MCP server перетворює дані й операції системи на типізовані ресурси, промпти та інструменти. Матеріал показує, як спроєктувати вузький контракт, валідовувати запити, обмежувати повноваження і тестувати сервер незалежно від конкретної моделі.

Розробка MCP client

MCP client відкриває capabilities серверів для AI-застосунку та відповідає за discovery, consent, маршрутизацію і безпечне виконання. Розглядаємо життєвий цикл сесії, роботу зі схемами, ізоляцію результатів, сумісність і відмовостійкість.

Tool calling і контракти інструментів

Як дозволити LLM викликати функції без передачі їй необмежених повноважень: schema, policy, idempotency, timeouts, verification і audit trail.

MCP security checklist: як безпечно запустити server і client

Практичний security checklist для Model Context Protocol: trust boundaries, OAuth, token audience, SSRF, session binding, tool permissions, local-server sandbox, негативні тести, audit evidence і rollback.

Тестування MCP-інтеграцій

Тестування MCP-інтеграцій має перевіряти не лише happy path, а й negotiation, schema compatibility, authorization, недовірені результати та невизначені side effects. Будуємо багаторівневу стратегію від unit-тестів до end-to-end eval.

Observability для MCP

Observability для MCP пов’язує protocol session, запит моделі, tool call, policy-рішення і downstream effect. Матеріал визначає корисні метрики, безпечні traces, кореляцію помилок, SLO та діагностику без витоку prompt, токенів і персональних даних.

MCP Apps vs plain tool output: коли AI-інтеграції потрібен UI

Практичний вибір між звичайною текстовою або structured MCP-відповіддю та інтерактивним MCP App: критерії цінності, архітектура, безпека, fallback, тестування і rollout.

MCP Tasks vs synchronous tool calls: як виконувати довгі операції

Практичний вибір між звичайним MCP tools/call і експериментальними MCP Tasks для довгих операцій: capability negotiation, стани, polling, cancellation, безпека, тести та rollout.

Human-in-the-loop для AI

Human-in-the-loop для AI — практичний розбір production-архітектури: залучення людини в конкретній точці ризику з достатнім контекстом для реального, а не формального контролю. Матеріал охоплює контракти, межі повноважень, failure modes, оцінювання та контрольований rollout.

Retries, rate limits та idempotency

Як повторювати тимчасові збої без retry storm, обробляти 429, використовувати exponential backoff, jitter, retry budget та idempotency keys для безпечних операцій.

Джерела

  1. Tools — MCP specification 2025-11-25первинне
  2. Resources — MCP specification 2025-11-25первинне
  3. Prompts — MCP specification 2025-11-25первинне
  4. Lifecycle — MCP specification 2025-11-25первинне
  5. MCP schema reference 2025-11-25первинне