Resources and prompts
Besides tools, the server offers three things the client uses on its own: resources (documents the user attaches to the conversation), prompts (ready-made scripts the user picks) and completions (autocomplete for the arguments of both). In the 2026-07-28 era, it also asks for confirmation before running a destructive tool.
None of this opens a new path to your data: everything goes through the same tools, under the same permissions and the same token scope. With a read-only token, resources and completions stay available, but a prompt that writes — like review_portal_access, which resends invitations — does not show up.
Resources
A resource is a document identified by a URI. The user picks, say, a portal user, and the MCP client reads the document and puts it in context, without the model having to call a tool.
| URI | What comes back |
|---|---|
kobana://dashboards/organization | The token's organization (JSON) |
kobana://dashboards/schemas | The API resource catalogue (JSON) |
kobana://dashboards/schemas/{resource} | A resource's fields: type, enum, meaning, which ones sort (JSON) |
kobana://dashboards/portal_users/{id} | One portal user, with its status and the tenant ID it sees records for (JSON) |
resources/list returns the fixed URIs and resources/templates/list the templates with {id}.
- Permissions. Each resource is read by the matching tool (
kobana://dashboards/portal_users/{id}isdashboards_portal_users_get). It is only listed, and only read, if you can run that tool. - Not found. An unknown URI, or a record that does not exist in this organization, is
-32002in the 2025 era and-32602in2026-07-28— see Errors. - No change subscriptions. The server is stateless: there is no
resources/subscribeand no list-changed notice.
Prompts
A prompt is a ready-made instruction you pick in the client that becomes the first message of the conversation. It only shows up if you can run every tool it relies on.
| Prompt | Arguments | What it does |
|---|---|---|
tenant_overview | tenant_id | Who signs in to the portal for one tenant ID: the portal users that share it, and their status. |
review_portal_access | tenant_id (optional) | Finds portal users still waiting on an invitation and offers to resend it, one confirmation at a time. |
team_access_review | — | Who is on the dashboard team, with which role and permissions. |
A missing required argument is -32602.
Completions
completion/complete suggests values while you type an argument:
- Ids (the
{id}of portal users): searches the matching listing, under its permission. If you cannot list, there is no suggestion. {resource}ofkobana://dashboards/schemas/{resource}: the catalogue names, by prefix.
With no source of suggestions, the answer is an empty list, and you keep typing.
Confirming destructive tools
Destructive tools — the ones that delete, close, suspend or deactivate a record, or send an email or invitation — are marked with destructiveHint. The server does not rely on the client alone: in the 2026-07-28 era it asks for the confirmation itself:
- The first
tools/callruns nothing. It comes back withresultType: "input_required"and a one-question form: run this action, with these arguments? - The client shows the question and re-sends the same call with your answer.
- Only an explicit yes runs it. Declining or cancelling returns an
isErrorresult withUSER_DECLINED, and nothing changes.
The confirmation holds only for that call: the same tool, the same arguments, the same person and organization, for 5 minutes. An answer cannot be reused for another record or another action; if anything does not match, the server simply asks again. And it is single-use: re-sending a call that was already confirmed returns isError with confirmation_replayed, and nothing runs — to repeat the action, call the tool again and confirm again.
A client that cannot confirm — on the 2025 era, or on 2026-07-28 without declaring elicitation forms — does not run destructive tools: the call returns isError with confirmation_required and nothing is executed. Every other tool keeps working. If the server cannot record the confirmation at that moment, the tool is refused too, with confirmation_unavailable; try again later.