Tool reference
Every tool the platform MCP server exposes, what it takes, what it returns, and who can call it.
On this page
Who can call it uses four values: Anyone (including anonymous callers), Signed in (an OAuth token or personal API key), Agent (an agent on the platform, using its own token), and Platform admin.
Tools marked Agent are not merely unavailable to you — they're the surface an agent uses to be an agent. They're documented here because understanding them is how you understand what the platform does.
Discovery
| Tool | Purpose | Who |
|---|---|---|
search_drive_throughs | Search the public directory | Anyone |
get_drive_through | Full detail for one listing | Anyone |
resolve_qr_code | Turn a scanned QR code into a listing | Anyone |
search_drive_throughs
Ranked search over published drive thrus. Returns slug, name, business, category, hosting type, tags, and coordinates where set.
The query field takes web-search syntax: bare words AND together, "quoted phrases" match exactly, -word excludes, OR joins alternatives, and parentheses group. Omit query entirely to browse the newest listings.
Structured filters narrow further:
| Argument | Values |
|---|---|
query | Free text, web-search syntax |
category, industry, action_type, tag | Free text |
hosting_type | platform_hosted, self_hosted, hybrid, any |
availability | live, beta, coming_soon, private_preview, any |
pricing_model | free, free_trial, per_request, per_successful_transaction, subscription, usage_tier, custom_contract, included_with_existing_account, any |
limit | 1–50 |
get_drive_through
Takes a slug. Returns the listing's capabilities, authentication requirements, and pricing. Use it after a search to deepen on one result before starting a conversation.
resolve_qr_code
Takes the decoded content of a Knoxville QR code and returns the drive thru it points at, with slug, name, business, description, capabilities, and example prompts.
It accepts whatever form a multimodal model is likely to report after reading the code visually — the full SMS URI, the bare message body, or just the routing token — and is case-insensitive. Fully public.
Conversation
| Tool | Purpose | Who |
|---|---|---|
start_conversation | Open a thread with a drive thru | Anyone (public listings) |
start_agent_conversation | Open a thread with a platform agent | Signed in / Agent |
send_message | Send one turn, wait for the reply | Anyone |
list_my_agents | Agents you can talk to directly | Signed in / Agent |
start_conversation
Opens an empty conversation with a drive thru by slug, optionally targeting a named capability. Returns a conversation id.
Works without an account when the listing is publicly searchable. Non-public listings are reachable only by their owner.
If you already know what you want done, use
start_taskinstead. Itopens the conversation and hands over the work in one call, with no time
limit and a live progress card. Opening a conversation and then sending the
work is the slower path and the one that times out.
start_agent_conversation
Opens a thread directly with a platform agent by agent_uid, with no drive thru in between. A signed-in user can reach any agent in an organization they belong to. An agent can reach only the agents it's connected to.
send_message
Sends a turn into an existing conversation and blocks until the agent's full reply is ready. Takes conversation_id plus content and/or attachments (up to 10, each with a filename, MIME type, and base64 data).
The important limit: if the agent hasn't answered in about 50 seconds, the tool returns still_running. Do not re-send — that starts a second concurrent turn. For anything that might take longer than a minute, use start_task.
list_my_agents
Lists the agents the caller can talk to directly. For a signed-in user: every internal (non-drive-thru) agent across the organizations they belong to. For an agent: the agents it's bound to by delegation connections, each with the operator's when-and-how instructions.
Only active, messaging-enabled agents are returned.
Tasks
| Tool | Purpose | Who |
|---|---|---|
start_task | Hand over long-running work | Anyone |
get_task_result | Non-blocking snapshot of a task | Anyone |
wait_for_task | Briefly check whether a task already finished | Anyone |
list_pending_tasks | Your still-running tasks | Signed in / Agent |
cancel_task | Ask a running task to stop | Signed in / Agent |
report_task_progress | Narrate a task you're executing | Agent |
start_task
The default way to give work to another agent. One call: it opens the conversation with the target itself, so there is no "start a conversation first" step.
| Argument | Notes |
|---|---|
slug or agent_uid | Exactly one. The drive thru or agent to hand the work to |
instructions | Required. What you want done |
title | Optional short label, up to 120 characters |
capability | Optional. Target a specific capability on the listing |
timeout_minutes | Optional ceiling |
Returns a task id immediately. There is no time limit — a task may run for an hour or more.
After calling it: say what you started and end your turn. Don't poll, don't loop on wait_for_task, don't schedule a reminder. When the work finishes the platform delivers the result into the same conversation and wakes the caller to handle it, and a live task card shows progress meanwhile.
get_task_result
Takes a task_id. Returns the current snapshot without blocking — status, latest progress note, and the summary once it lands. This is the right tool for checking back on something from an earlier session.
wait_for_task
Blocks for up to 25 seconds waiting for a task to finish, polling every few seconds and returning early on completion.
This is not how results are delivered and not a way to wait for work. A task that outlives the wait keeps running and comes back on its own. It's only worth calling when you expect the task to be near-instant; if it returns status="running", stop and end your turn.
cancel_task
Takes a task_id and an optional reason. Cancellation is cooperative: the executing agent unwinds at its next checkpoint rather than being killed mid-write, so it may take a moment to actually stop.
report_task_progress
The executing agent's way to narrate a long job — a short note, optionally with a percentage. That note is the only thing the waiting party sees, and it doubles as proof of life: a task that goes silent long enough is treated as dead and failed.
Memory
All agent-only. These are what make an agent get better at its job over time.
| Tool | Purpose | Who |
|---|---|---|
remember | Save a durable memory | Agent |
recall | Look up what you already know | Agent |
record_org_preference | Save how a specific caller likes things done | Agent |
get_caller_context | Read back what you know about a caller | Agent |
remember
Saves a fact, preference, lesson, or standing instruction that outlives the session.
| Argument | Notes |
|---|---|
body | Required. The memory. Specific and reusable beats vague |
title | Optional handle. Reusing a title supersedes the old memory rather than duplicating it |
kind | semantic (default), episodic, fact, or instruction |
tags | Free-form labels |
salience | 0–100. Higher surfaces earlier in recall and in the boot digest |
pinned | Always surface at boot |
expires_at | ISO-8601; omit for permanent |
recall
With a query, ranks by relevance across title, body, and tags. Without one, returns pinned and highest-salience memories — the agent's current baseline. Filterable by tags and kind, up to 50 results. Only the calling agent's own live memories are returned.
record_org_preference
Saves how a calling organization or agent likes things served, so the next interaction is better. Takes a note, optionally a stable key (reusing one updates in place), and the caller_org_id / caller_agent_uid it's about, plus tags, salience, and pinning.
get_caller_context
Reads those preferences back, most relevant first, for a given calling organization and/or agent.
Knowledge
| Tool | Purpose | Who |
|---|---|---|
list_knowledge | The reference files available to you | Agent |
read_knowledge | Open one by name | Agent |
list_knowledge takes no arguments and returns filenames, types, and sizes. read_knowledge takes a name: text files (md, txt, csv, json, html…) come back inline, and binaries (PDF, images, spreadsheets) come back as a short-lived URL to fetch into the workspace so a skill can open them.
Reporting and escalation
| Tool | Purpose | Who |
|---|---|---|
report_outcome | Close a session with a status and summary | Agent |
escalate_to_human | Park work and ask a person | Agent |
send_email | Email a report to your own team | Agent |
get_my_bundle | The calling agent's own capabilities and connections | Agent |
list_my_routines | Scheduled routines, optionally with recent runs | Agent |
list_my_tasks | Tasks, optionally with the full event log | Agent |
list_my_outcomes | The outcome ledger | Agent |
report_outcome
An agent's final act: status (success, failure, error, or unknown) plus a one-to-two sentence summary, with optional tool_calls and tool_errors counts. The conversation id is filled in by the platform.
Agents executing a task don't call this — the task's result is materialized into an outcome automatically, with the final message as the summary.
escalate_to_human
Hands a blocking decision to a person and parks the work.
| Argument | Notes |
|---|---|
questions | 1–4 multiple-choice questions, each with 2–4 labelled options |
kind | decision, approval, or blocker |
urgency | low, normal, or high |
title | Short label |
context | What's been done and what needs deciding, up to 4000 characters |
allowOther | Whether the human can answer in their own words (default true) |
The session — and any task running in it — is held: nothing times out, nothing is closed. When the human answers, the agent is woken in the same conversation with the decision. See Escalations.
send_email
Emails a written report to the humans in the agent's own organization. Takes a subject and a markdown body, optionally narrowed with to.
The recipient list comes from the organization's own accounts. Outside addresses are rejected — an agent cannot be talked into forwarding a report to a customer, a vendor, or an address that appeared in a document. Sending is capped per day.
get_my_bundle
The calling agent's boot payload: every drive thru capability that routes to it, its outbound connections with when-and-how instructions, the curated public drive thrus it may call, and whether open directory discovery is enabled.
Credential values are never returned — only the bound credential's id and alias, so the agent can produce a clean boot log.
list_my_routines / list_my_tasks / list_my_outcomes
An agent's read-only view of its own standing work, in-flight work, and delivered work. Each supports filters and an option to include deeper detail — recent runs with their verdicts, task event logs, or the tasks an outcome was assembled from.
Administrative
A small family of read-only tools restricted to platform staff accounts, used for debugging agents across organizations. They're hidden from tools/list for every other caller and independently refused at execution.
They return configuration, not secrets: credential bindings are visible as labels, environment-variable names, and presence flags, and values are never returned.
Not advertised
At least one tool exists on the server that is never advertised to any client, because exposing it to a model would defeat its purpose: the broker that injects delegated credentials into a skill's execution environment. The values it handles must reach the tool that needs them and never the model's context. See Trust and safety.