Archestra MCP Server

The Archestra MCP Server is built into every deployment and needs no installation. Its tools let an agent manage agents, MCP servers, policies, and knowledge, build apps, and run code in the sandbox. Every tool name starts with archestra__. This page lists tools by their short name.

Access

In Custom tool mode, assign the tools to the agent or MCP Gateway the client connects through. Auto mode uses tool discovery to reach tools the user can access. New agents include todo_write and query_knowledge_sources; enabled features add their own default tools. query_knowledge_sources appears only when the agent or gateway has at least one knowledge base or connector attached.

Two checks apply to every call:

  • Permissions. Each tool requires the RBAC permission in the last column of its table. tools/list shows a user only the tools their role allows; a user without knowledgeSource:create, for example, does not see create_knowledge_base. A tool marked † has an extra condition, described in its entry.
  • Guardrails. Built-in tools are trusted: tool invocation and trusted data policies do not evaluate them. query_knowledge_sources is the exception: invocation policies evaluate the call, and trusted data policies evaluate its results as sensitive data.

Tools Reference

Identity

ToolDescriptionRequired RBAC Permission
whoamiReturns the name and ID of the current agent.None (no additional RBAC permission required)

whoami

Required RBAC permission: None (no additional RBAC permission required)

This tool takes no arguments.

Output
FieldTypeRequiredDescription
agentIdstringYesThe ID of the current agent.
agentNamestringYesThe display name of the current agent.

Chat

ToolDescriptionRequired RBAC Permission
todo_writeWrite todos to the current conversation.None (no additional RBAC permission required)
ask_userAsk the user to pick from a short list of options.None (no additional RBAC permission required)

todo_write

Required RBAC permission: None (no additional RBAC permission required)

Input
ParameterTypeRequiredDescription
todosobject[]YesArray of todo items to write to the conversation.
todos[].idintegerYesUnique identifier for the todo item.
todos[].contentstringYesThe content or description of the todo item.
todos[].status"pending" | "in_progress" | "completed"YesThe current status of the todo item.
Output
FieldTypeRequiredDescription
successtrueYesWhether the write succeeded.
todoCountintegerYesHow many todo items were written.

ask_user

Required RBAC permission: None (no additional RBAC permission required)

Input
ParameterTypeRequiredDescription
questionstringYesThe question shown above the options.
headerstringNoA very short label shown as the question's tab, e.g. 'Visibility'.
optionsobject[]YesThe options the user can pick. Labels must be unique.
options[].labelstringYesThe option shown to the user.
options[].descriptionstringNoOptional extra detail shown next to the option.
allowMultiplebooleanNoWhen true, the user may select more than one option. Defaults to false (exactly one).
remedy_offer_idsstring[]NoExact offer IDs from the blocked ruling that this question asks the user to decide: a review execute_remedy_plan requires, or a plan that would prevent what the user asked for. Say in the question what it would prevent. Omit for ordinary questions.
Output
FieldTypeRequiredDescription
action"accept" | "decline" | "cancel"YesWhether the choice form was submitted, declined, or canceled.
selectedstring[]YesThe labels the user selected. Empty when declined or canceled.
timedOutbooleanNoTrue when the question expired without an answer.

Tool Discovery

ToolDescriptionRequired RBAC Permission
search_toolsSearch the tools available to this agent and to you on demand.None (no additional RBAC permission required)
run_toolDispatch to any tool available to this agent, including built-in platform tools, agent delegation tools ('agent-'), or third-party MCP tools exposed through the MCP Gateway (e.g.None (no additional RBAC permission required)

search_tools

Required RBAC permission: None (no additional RBAC permission required)

Input
ParameterTypeRequiredDescription
querystringYesKeywords for the capability you need — combine the action (verb + object) with the server/product name when you know it, e.g. 'github search repositories' or 'slack send message'. Avoid querying with a bare product/server name on its own. Results are keyword-ranked across tool names, descriptions, and argument names/descriptions. If nothing fits, reformulate with different keywords and search again rather than settling for a poor match.
limitintegerNoMaximum number of matching tools to return.
mode"keyword" | "regex"NoSearch mode. 'keyword' (default) keyword-ranks the query across tool fields. 'regex' treats query as a case-insensitive regular expression matched against tool names, titles, and descriptions — use it when you know a naming pattern, e.g. '^github__' or 'search|find'.
Output
FieldTypeRequiredDescription
totalintegerYesNumber of returned tools.
matchCountintegerYesTotal tools matching the query before the limit was applied (>= total).
truncatedbooleanYesTrue when matchCount exceeds the returned tools (results cut by limit).
hintstring | nullYesActionable guidance when results were truncated or empty (an empty result also names which query terms matched no tool text).
toolsobject[]Yes
tools[].toolNamestringYesExact tool name to pass to run_tool.
tools[].descriptionstring | nullYesShort tool description, if available.
tools[].source"archestra" | "mcp" | "agent_delegation"YesWhere the tool comes from.
tools[].serverstring | nullYesMCP server prefix for third-party MCP tools when available.
tools[].availablebooleanYesFalse when the tool's MCP connection is not installed; it stays discoverable but cannot run until reconnected.
tools[].unavailableReasonstring | nullYesCompact reason and recovery action when available is false; null otherwise.
tools[].paramsstringYesCompact one-line input signature — a summary, not the full schema. Parameters are joined by '; ', each rendered as name<!|?>:<type> where ! marks required and ? optional. Object parameters are expanded up to two levels as {child<!|?>:type{grandchild<!|?>:type}, …}, enums as enum(<json-values>), and a trailing — description is added when available. A trailing … on a type marks an object whose content is not fully shown (freeform or more deeply nested) — consult the task instructions or the full schema for its shape. Empty string when the tool takes no input. Pass matching values inside tool_args when calling run_tool; if a call is rejected as invalid, the error describes the expected input (for third-party tools, the full input schema).

run_tool

Required RBAC permission: None (no additional RBAC permission required)

Input
ParameterTypeRequiredDescription
tool_namestringYesName of the tool to invoke. Use the exact name as it appears in the tools list, e.g. 'archestra__whoami', 'context7__resolve-library-id', or an agent delegation name 'agent-'.
tool_argsobjectNoArguments object for the target tool; must match its input schema.

Skills

ToolDescriptionRequired RBAC Permission
list_skillsList the Agent Skills available in this organization — one line per skill (name and description).skill:read
load_skillLoad a specialized Agent Skill — a reusable SKILL.md instruction set.skill:read
create_skillCreate a new Agent Skill from a SKILL.md manifest.skill:create
update_skillUpdate an existing Agent Skill from a SKILL.md manifest.update on the skill (granted per item)
edit_skillMake a targeted edit to an existing Agent Skill without resending the whole SKILL.md.update on the skill (granted per item)

list_skills

Required RBAC permission: skill:read

This tool takes no arguments.

load_skill

Required RBAC permission: skill:read

Input
ParameterTypeRequiredDescription
namestringYesThe skill to load, as named by list_skills.
pathstringNoOptional. Omit (or pass an empty string) to load the skill's instructions and bundled-file list. Pass a resource path from that list (e.g. references/REFERENCE.md) to read one bundled file instead.

create_skill

Required RBAC permission: skill:create

Input
ParameterTypeRequiredDescription
initialGrantsobject[]No
initialGrants[].subjectobjectYes
initialGrants[].subject.type"user" | "team" | "serviceAccount" | "role" | "organization"Yes
initialGrants[].subject.idstring | "*"Yes
initialGrants[].actionsstring[]Yes
contentstringYesA complete SKILL.md manifest: a YAML frontmatter block with name and description (and optional license, compatibility, allowed-tools, agent, templated, metadata), followed by the Markdown instruction body. Set templated: true to render the body through Handlebars (e.g. {{user.name}}) at activation. allowed-tools is a space-separated list of tools the skill is pre-approved to use. agent names an agent the skill runs in — when set, activating the skill delegates it to that agent instead of loading the instructions into the caller's context.
filesobject[]NoOptional bundled resource files. Each is { path, content } with text content; the path prefix classifies the file — references/ for docs, scripts/ for code, assets/ for other files.
files[].pathstringYesResource path, e.g. references/API.md or scripts/run.py
files[].contentstringYesText content of the file
files[].encoding"utf8" | "base64"No

update_skill

Required RBAC permission: update on the skill (granted per item)

Input
ParameterTypeRequiredDescription
namestringYesThe current name of the skill to update, as named by list_skills.
contentstringYesA complete SKILL.md manifest: a YAML frontmatter block with name and description (and optional license, compatibility, allowed-tools, agent, templated, metadata), followed by the Markdown instruction body. Set templated: true to render the body through Handlebars (e.g. {{user.name}}) at activation. allowed-tools is a space-separated list of tools the skill is pre-approved to use. agent names an agent the skill runs in — when set, activating the skill delegates it to that agent instead of loading the instructions into the caller's context.
filesobject[]NoOptional. WHEN PROVIDED, REPLACES THE SKILL'S ENTIRE bundled file set. Omit it to leave the existing resource files untouched. There is no per-file patch: to change one file you must resend all of them — read the current files back first with load_skill (with and without a path).
files[].pathstringYesResource path, e.g. references/API.md or scripts/run.py
files[].contentstringYesText content of the file
files[].encoding"utf8" | "base64"No

edit_skill

Required RBAC permission: update on the skill (granted per item)

Input
ParameterTypeRequiredDescription
namestringYesThe current name of the skill to edit, as named by list_skills.
baseVersionintegerYesThe version the edit is based on — the version shown on the <skill_content>/<skill_file> frame you loaded with load_skill. The edit is rejected if the skill's head has moved past it.
pathstringNoOmit (or pass an empty string) to edit the SKILL.md body; pass a bundled file path (from the <skill_resources> list) to edit that file instead. Only text (utf8) files are editable — binary assets are not.
editsobject[]Nostr_replace edits applied in order to the target; the whole edit is atomic (any failure leaves the skill unchanged). This is the way to change a large SKILL.md without resending it all. Pass either edits or replacementContent, never both.
edits[].old_strstringYesExact text to replace; must occur exactly once in the target (add surrounding context to disambiguate).
edits[].new_strstringYesReplacement text (may be empty to delete).
replacementContentstringNoThe complete new content of the target, replacing it outright with no old_str matching — use it for a small file or a full rewrite. Prefer edits for the SKILL.md body so you don't resend the whole thing. Pass either edits or replacementContent, never both.

Files

These tools are served only when the code runtime is enabled — set ARCHESTRA_CODE_RUNTIME_DAGGER_RUNNER_HOST, or ARCHESTRA_CODE_RUNTIME_ENABLED=true together with an orchestrator kubeconfig. Without it they do not appear in tools/list. They operate on the conversation's persistent files, not inside the sandbox container.

ToolDescriptionRequired RBAC Permission
search_filesList or search the conversation's persistent files.agent:read
read_fileRead a persistent file directly, without copying it into the sandbox.agent:read
save_fileWrite bytes you are providing inline in this call — text or base64 included in the arguments — to the conversation's persistent files.agent:read
edit_fileEdit an existing persistent file by replacing a snippet, keeping its id and filename.agent:read
delete_filePermanently delete a persistent file, identified by id (from search_files / save_file) or by filename.agent:read
copy_fileExchange a file between this chat and the app the user has open: copy a chat/project file or a chat attachment INTO the open app's file store (so the app can load it), or copy a file OUT of the app...agent:read

search_files

Required RBAC permission: agent:read

Input
ParameterTypeRequiredDescription
querystringNoCase-insensitive substring matched against filenames only. Omit it (or pass empty) to list the files (the first 200).
scope"chat" | "app"No"chat" (default) = this chat's files; "app" = the files of the app the user has open, which is how you find what the app has produced before copying one out with copy_file.
project_idstringNoUse this project's files instead of the current chat's — how you reach project files when working outside a chat (get_project returns the id). Only projects you own or that are shared with you can be used. Cannot be used from a chat that already belongs to a different project, nor combined with scope: "app".
Output
FieldTypeRequiredDescription
filesobject[]Yes
files[].idstring | nullYesRow id (UUID), or null for a hand-placed file with no row.
files[].refstringYesStable handle for this file — pass it to read_file / upload_file / edit_file / delete_file. Works for hand-placed files too (where id is null).
files[].filenamestringYes
files[].mimeTypestringYes
files[].sizeBytesnumberYes
files[].createdAtstringYes

read_file

Required RBAC permission: agent:read

Input
ParameterTypeRequiredDescription
idstringNoId or ref of the file to read — the id or ref from search_files, or a fileId from save_file.
filenamestringNoFilename to read instead of id; rejected as ambiguous if more than one file shares the name.
offsetintegerNo1-based line number to start reading from. Defaults to 1.
limitintegerNoMaximum number of lines to read. Defaults to 2000.
project_idstringNoUse this project's files instead of the current chat's — how you reach project files when working outside a chat (get_project returns the id). Only projects you own or that are shared with you can be used. Cannot be used from a chat that already belongs to a different project, nor combined with scope: "app".
Output
FieldTypeRequiredDescription
kind"text" | "image"Yestext = numbered lines in the text content; image = the file is returned as an inline image block.
fileIdstring | nullYesThe file's id, or null for a hand-placed file with no row.
filenamestringYes
mimeTypestringYes
sizeBytesnumberYes
totalLinesnumberNo
startLinenumberNo
returnedLinesnumberNo
truncatedbooleanNoTrue when more lines follow the returned window (raise offset to continue).
contentstringNoThe returned window's text, WITHOUT the line numbers — the file's own bytes. Present for text reads so a structured consumer (an app via archestra.tools.call, which unwraps to structuredContent and never sees the text block) gets usable content instead of only metadata. The numbered rendering stays in the text output, where line numbers are what makes edit_file addressable.

save_file

Required RBAC permission: agent:read

Input
ParameterTypeRequiredDescription
filenamestringYesPlain filename including extension (e.g. "joke.md"). No paths.
contentstringNoUTF-8 text content of the file.
contentBase64stringNoBase64-encoded binary content.
mimeTypestringNoOptional MIME type. Sniffed from the bytes when omitted.
overwritebooleanNoReplace an existing file of the same name in place, keeping its id. Default false errors if the name is already taken.
project_idstringNoUse this project's files instead of the current chat's — how you reach project files when working outside a chat (get_project returns the id). Only projects you own or that are shared with you can be used. Cannot be used from a chat that already belongs to a different project, nor combined with scope: "app".
Output
FieldTypeRequiredDescription
fileIdstringYes
filenamestringYes
projectNamestring | nullYesOwning project when saved into a project; null otherwise.
mimeTypestringYes
sizeBytesnumberYes
overwrittenbooleanYesTrue when an existing same-named file was replaced in place.

edit_file

Required RBAC permission: agent:read

Input
ParameterTypeRequiredDescription
idstringNoId of the file to edit (from search_files / save_file).
filenamestringNoFilename to edit instead of id; rejected as ambiguous if more than one file shares the name.
old_stringstringYesThe exact text to replace; must match the file's current content (read it first with read_file). Include enough surrounding context to be unique unless replace_all is set.
new_stringstringYesThe text to insert in place of old_string.
replace_allbooleanNoReplace every occurrence of old_string. Default false replaces a single occurrence and errors if old_string is not unique.
project_idstringNoUse this project's files instead of the current chat's — how you reach project files when working outside a chat (get_project returns the id). Only projects you own or that are shared with you can be used. Cannot be used from a chat that already belongs to a different project, nor combined with scope: "app".
Output
FieldTypeRequiredDescription
fileIdstringYes
filenamestringYes
mimeTypestringYes
sizeBytesnumberYes
replacementsnumberYesHow many occurrences of old_string were replaced.

delete_file

Required RBAC permission: agent:read

Input
ParameterTypeRequiredDescription
idstringNoId of the file to delete (from search_files / save_file).
filenamestringNoFilename to delete instead of id; rejected as ambiguous if more than one file shares the name.
project_idstringNoUse this project's files instead of the current chat's — how you reach project files when working outside a chat (get_project returns the id). Only projects you own or that are shared with you can be used. Cannot be used from a chat that already belongs to a different project, nor combined with scope: "app".
Output
FieldTypeRequiredDescription
fileIdstringYes
filenamestringYes
deletedtrueYes

copy_file

Required RBAC permission: agent:read

Input
ParameterTypeRequiredDescription
fromobjectYesWhere the bytes come from: {"type":"chat_file","id"|"filename"} | {"type":"chat_attachment","attachmentId"|"filename"} | {"type":"app_file","id"|"filename"}.
from.type"chat_file" | "chat_attachment" | "app_file"Yes
from.idstringNoWhen type="chat_file": File id from search_files. When type="app_file": File id in the app's store.
from.filenamestringNoWhen type="chat_file": Filename instead of id; ambiguous names rejected. When type="chat_attachment": Original filename of an attachment in this conversation (when you have no id). If the same name was attached more than once, the newest one wins. When type="app_file": Filename instead of id.
from.attachmentIdstringNoId of an attachment uploaded to THIS conversation.
toobjectYesWhere the copy lands.
to.scope"chat" | "app"Yes"app" = the open app's per-viewer store; "chat" = this chat's files (the project's files when this chat belongs to a project).
to.filenamestringNoDestination filename; defaults to the source's name. Plain filename, no paths.
to.overwritebooleanNoReplace an existing same-named destination file in place. Default false: a duplicate name is an error.
Output
FieldTypeRequiredDescription
fileIdstringYesId of the copy at the destination.
filenamestringYes
mimeTypestringYes
sizeBytesnumberYes
destination"conversation" | "project" | "app"YesThe scope the copy landed in.
overwrittenbooleanYes

Code Sandbox

These tools are served only when the code runtime is enabled — set ARCHESTRA_CODE_RUNTIME_DAGGER_RUNNER_HOST, or ARCHESTRA_CODE_RUNTIME_ENABLED=true together with an orchestrator kubeconfig. Without it they do not appear in tools/list. The Code Sandbox page covers what the runtime is and how an agent uses it.

ToolDescriptionRequired RBAC Permission
run_commandExecute a shell command in the conversation's sandbox (Debian, working dir /home/sandbox).agent:read
download_fileCopy a file that already exists at a path in the conversation's sandbox into the conversation's persistent files.agent:read
upload_filePlace a file into the conversation's sandbox at a path, from a chat attachment, inline base64, inline text, or one of your persistent files.agent:read

run_command

Required RBAC permission: agent:read

Input
ParameterTypeRequiredDescription
commandstringYesShell command to execute (bash). Runs in the sandbox's working directory (or cwd when provided). Returns text output only — use download_file for generated files.
cwdstringNoOptional absolute path inside the container. Defaults to the sandbox's working directory (/home/sandbox).
timeoutSecondsintegerNoOptional wall-clock limit in seconds, capped at the deployment maximum.
targetobjectNoWhich sandbox to use. Omit (or leave empty) for the conversation's default sandbox (created on first use). Pass { "fresh": true } for a new isolated sandbox, or { "id": "<uuid>" } to target a specific one.
target.freshbooleanNoSet true for a brand-new isolated sandbox; its id is returned.
target.idstringNoAn existing sandbox id (UUID) returned by an earlier call.
Output
FieldTypeRequiredDescription
commandIdstringYes
sandboxIdstringYes
commandstringYes
cwdstring | nullYes
stdoutstringYes
stderrstringYes
exitCodenumberYes
durationMsnumberYes
timedOutbooleanYes
truncatedbooleanYes
binaryStrippedbooleanYesTrue when NUL bytes were stripped from stdout/stderr before storage.
stagingNoticesstring[]YesNotices about chat attachments that could not be auto-staged (e.g. too large). Empty when all attachments are available in the sandbox.

download_file

Required RBAC permission: agent:read

Input
ParameterTypeRequiredDescription
pathstringYesPath to the file inside the container — absolute, or relative to the sandbox's working directory.
mimeTypestringNoOptional MIME type recorded with the file. Sniffed from the bytes when omitted.
overwritebooleanNoReplace an existing same-named persistent file in place, keeping its id. Default false errors if the name is already taken.
targetobjectNoWhich sandbox to use. Omit (or leave empty) for the conversation's default sandbox (created on first use). Pass { "fresh": true } for a new isolated sandbox, or { "id": "<uuid>" } to target a specific one.
target.freshbooleanNoSet true for a brand-new isolated sandbox; its id is returned.
target.idstringNoAn existing sandbox id (UUID) returned by an earlier call.
Output
FieldTypeRequiredDescription
fileIdstringYes
sandboxIdstringYes
pathstringYes
mimeTypestringYes
sizeBytesnumberYes
stagingNoticesstring[]YesNotices about chat attachments that could not be auto-staged (e.g. too large). Empty when all attachments are available in the sandbox.
overwrittenbooleanYesTrue when an existing same-named file was replaced in place.

upload_file

Required RBAC permission: agent:read

Input
ParameterTypeRequiredDescription
pathstringYesDestination path inside the container — absolute under /skills or /home/sandbox, or relative to the sandbox's working directory.
sourceobjectYesWhere the file bytes come from. One of four shapes, each tagged by a type: a chat attachment ({"type":"chat_attachment","attachmentId"|"filename":...}), inline base64 ({"type":"base64","dataBase64":...}), inline text ({"type":"text","text":"print(1)"}), or a file from the user's persistent files ({"type":"my_file","filename":...}, found via search_files). Use this to place input bytes; to create a file the sandbox will then run or read, write it with run_command instead.
source.type"chat_attachment" | "base64" | "text" | "my_file"Yes
source.attachmentIdstringNoId of an attachment in the current conversation. The bytes are copied directly and never enter your context.
source.filenamestringNoWhen type="chat_attachment": Original filename of an attachment in this conversation (when you have no id). If the same name was attached more than once, the newest one wins. When type="my_file": Exact filename of a persistent file (when you have no id).
source.dataBase64stringWhen type="base64"Base64-encoded file bytes.
source.mimeTypestringNo
source.originalNamestringNo
source.textstringWhen type="text"UTF-8 text content of the file.
source.idstringNoId or ref of a persistent file, as returned by search_files (id for stored files, ref for hand-placed ones).
targetobjectNoWhich sandbox to use. Omit (or leave empty) for the conversation's default sandbox (created on first use). Pass { "fresh": true } for a new isolated sandbox, or { "id": "<uuid>" } to target a specific one.
target.freshbooleanNoSet true for a brand-new isolated sandbox; its id is returned.
target.idstringNoAn existing sandbox id (UUID) returned by an earlier call.
Output
FieldTypeRequiredDescription
uploadIdstringYes
sandboxIdstringYes
pathstringYes
mimeTypestringYes
sizeBytesnumberYes

Apps

ToolDescriptionRequired RBAC Permission
scaffold_appCreate a new interactive app (dashboard, form, tracker, game, or any custom UI) seeded from the default starter template.app:create
refine_appClarify what an existing app should be and record it as a persisted product spec, between scaffold_app and edit_app.update on the app (granted per item)
list_appsList apps visible to the caller, optionally filtered by name or labels — use it to find an app's id.app:read
list_app_versionsList the immutable versions of an app, newest first, without returning their HTML.app:read
render_appRender an existing app by id, if the caller may view it.app:read
read_appReturn an app's stored HTML (pre-injection — exactly what was saved, without the platform SDK or base stylesheet) plus its version, byte size, name, and scope.app:read
restore_app_versionRestore a historical app version directly on the server as a new head version.update on the app (granted per item)
edit_appThe single path for any change to an app's HTML: pass edits for targeted str_replace changes, imageReplacements to replace embedded images from chat attachments without sending base64 through the m...update on the app (granted per item)
set_app_toolsReplace an existing app's assigned upstream tools with exactly the set you pass (the full desired list; [] clears all).update on the app (granted per item)
set_app_labelsReplace an app's labels with exactly the set you pass ([] clears them).update on the app (granted per item)
set_app_lockLock or unlock an app.update on the app (granted per item)
validate_appThe pre-publish gate for an app's head version: static structural checks (findings, each carrying its own specific message) plus the most recent live-render diagnostics (live), with ok true w...app:read
publish_appShare an app by granting read and use access to specific teams (scope: team, teams: names or IDs) or the whole organization (scope: org).manage-permissions on the app (granted per item)
preview_app_toolRun one of an app's assigned MCP tools server-side, exactly as the rendered app would (as you, the viewing user, with your MCP credentials), and return its real output.update on the app (granted per item)
get_app_diagnosticsCheck how the app's current version rendered for you.app:read
delete_appSoft-delete an app the caller owns or administers, and remove its MCP backing so it is no longer served.delete on the app (granted per item)
app_data_getRead a value from the calling app's data store (per-user or shared partition).app:read
app_data_setWrite a value to the calling app's data store (per-user or shared partition).update on the app (granted per item)
app_data_listList all entries in one partition of the calling app's data store.app:read
app_data_deleteDelete a key from the calling app's data store (per-user or shared partition).update on the app (granted per item)
llm_completeRun a single LLM completion for the calling app (backs archestra.llm.complete).app:read

scaffold_app

Required RBAC permission: app:create

Input
ParameterTypeRequiredDescription
initialGrantsobject[]No
initialGrants[].subjectobjectYes
initialGrants[].subject.type"user" | "team" | "serviceAccount" | "role" | "organization"Yes
initialGrants[].subject.idstring | "*"Yes
initialGrants[].actionsstring[]Yes
namestringYesApp name.
descriptionstringNoOptional description.
uiPermissionsobjectNoOptional iframe permissions (camera/microphone/geolocation/clipboardWrite).
uiPermissions.cameraobjectNo
uiPermissions.microphoneobjectNo
uiPermissions.geolocationobjectNo
uiPermissions.clipboardWriteobjectNo
iconstringNoOptional display icon for the app, as a single emoji character (e.g. "📊") chosen to suit what the app does. Omitted leaves the app with the generic app glyph.
labelsobject[]NoOptional key-value labels for organization and categorization.
labels[].keystringYes
labels[].valuestringYes
toolsstring[]NoUpstream MCP tool names to assign to the new app (e.g. from search_tools), callable from its HTML via archestra.tools.call with the viewing user's credentials. Omitted leaves the app with no assigned tools.
project_idstringNoLink the new app into this project (from list_projects) so it is listed with the project's files. You need access to the project. Omitted creates a standalone app.
Output
FieldTypeRequiredDescription
idstringYes
namestringYes
descriptionstring | nullYes
scope"personal" | "team" | "org"Yes
latestVersionnumberYes
labelsobject[]YesKey-value labels for organization/categorization.
labels[].keystringYesThe label key.
labels[].valuestringYesThe label value.
warningsstring[]NoSoft save-time validation warnings about the html (the save succeeded); fix them via edit_app.
toolsstring[]NoThe app's assigned tool names after this call (present when the tools param was given).
status"ok" | "partial"NoAbsent or "ok" on full success. "partial" means the app was created (see id) but assigning its tools failed — the app exists; assign them with set_app_tools rather than re-scaffolding.

refine_app

Required RBAC permission: update on the app (granted per item)

Input
ParameterTypeRequiredDescription
appIdstringYesThe app id to refine.
questionsobject[]NoUp to 3 clarifying questions to ask the user before consolidating the spec.
questions[].idstringYesStable key the answer is returned under.
questions[].promptstringYesThe question shown to the user.
questions[].optionsstring[]NoWhen present, the question is single-select over these plain-string option labels, e.g. ["Light", "Dark"] — never {label, value} objects; otherwise it is free-text.
specobjectNoThe consolidated product requirements to persist on the app (features/data/ui/tools — no implementation stack).
spec.summarystringYesOne-line summary of what the app is for.
spec.featuresstring[]YesConcrete capabilities the app should provide.
spec.datastring | nullNoWhat the app reads/persists via the App Data Store — a free-form prose string, not a structured object.
spec.uistring | nullNoUI / style direction as a free-form prose string, not a structured object.
spec.toolsstring[]YesFull names of the MCP tools the app calls through window.archestra.
Output
FieldTypeRequiredDescription
idstringYes
specobjectYesThe persisted spec when one was given, else the base spec seeded for the model.
spec.summarystringYesOne-line summary of what the app is for.
spec.featuresstring[]YesConcrete capabilities the app should provide.
spec.datastring | nullNoWhat the app reads/persists via the App Data Store — a free-form prose string, not a structured object.
spec.uistring | nullNoUI / style direction as a free-form prose string, not a structured object.
spec.toolsstring[]YesFull names of the MCP tools the app calls through window.archestra.
capabilityobjectYes
capability.toolsobject[]Yes
capability.tools[].namestringYes
capability.tools[].descriptionstringYes
capability.sdkSummarystringYes
answersobjectNoThe user's answers to the clarifying questions, if any.
persistedbooleanYesWhether a spec was persisted on the app head by this call.

list_apps

Required RBAC permission: app:read

Input
ParameterTypeRequiredDescription
namestringNoFilter by name. Each whitespace-separated word must appear in the name or description, in any order — so a remembered name matches even when its word order or punctuation differs from how the app was saved.
labelsobject[]NoFilter by labels. AND across keys, OR within the values given for the same key.
labels[].keystringYes
labels[].valuestringYes
limitintegerNo
Output
FieldTypeRequiredDescription
appsobject[]Yes
apps[].idstringYes
apps[].namestringYes
apps[].descriptionstring | nullYes
apps[].scope"personal" | "team" | "org"Yes
apps[].latestVersionnumberYes
apps[].labelsobject[]YesKey-value labels for organization/categorization.
apps[].labels[].keystringYesThe label key.
apps[].labels[].valuestringYesThe label value.
apps[].warningsstring[]NoSoft save-time validation warnings about the html (the save succeeded); fix them via edit_app.

list_app_versions

Required RBAC permission: app:read

Input
ParameterTypeRequiredDescription
appIdstringYesThe app id.
Output
FieldTypeRequiredDescription
appIdstringYes
latestVersionnumberYes
versionsobject[]Yes
versions[].versionnumberYes
versions[].createdAtstringYes
versions[].currentbooleanYes

render_app

Required RBAC permission: app:read

Input
ParameterTypeRequiredDescription
appIdstringYesThe app id.
Output
FieldTypeRequiredDescription
idstringYes
namestringYes
descriptionstring | nullYes
scope"personal" | "team" | "org"Yes
latestVersionnumberYes
labelsobject[]YesKey-value labels for organization/categorization.
labels[].keystringYesThe label key.
labels[].valuestringYesThe label value.
warningsstring[]NoSoft save-time validation warnings about the html (the save succeeded); fix them via edit_app.

read_app

Required RBAC permission: app:read

Input
ParameterTypeRequiredDescription
appIdstringYesThe app id.
versionintegerNoSpecific version to read; defaults to the current head.
offsetintegerNoStart of the read window as a 0-based character offset (a JavaScript string index / UTF-16 code unit) into the stored HTML — character-based, not line-based, since minified HTML can be one enormous line. Defaults to 0. An offset past the end returns an empty window, not an error. A window never splits a character in half: its edges shift by one unit when they would.
limitintegerNoMaximum number of characters to return, starting at offset. Omitted reads to the end of the document; 0 returns no content, just the size metadata.
Output
FieldTypeRequiredDescription
idstringYes
namestringYes
scope"personal" | "team" | "org"Yes
versionnumberYes
byteSizenumberYesUTF-8 byte size of the full stored HTML (never the window's).
totalCharsnumberYesTotal character length of the full stored HTML.
offsetnumberYesEffective 0-based character offset of the returned window (0 for a full read; clamped to the end when past it).
hasMorebooleanYesTrue when the document continues past the returned window.
htmlstringYesThe stored HTML, pre-injection (no SDK/base CSS) — the requested character window when offset/limit was passed.

restore_app_version

Required RBAC permission: update on the app (granted per item)

Input
ParameterTypeRequiredDescription
appIdstringYesThe app id.
versionintegerYesThe historical version to restore.
baseVersionintegerYesThe current head version. This prevents overwriting a newer edit that landed after the rollback was requested.
Output
FieldTypeRequiredDescription
idstringYes
namestringYes
descriptionstring | nullYes
scope"personal" | "team" | "org"Yes
latestVersionnumberYes
labelsobject[]YesKey-value labels for organization/categorization.
labels[].keystringYesThe label key.
labels[].valuestringYesThe label value.
warningsstring[]NoSoft save-time validation warnings about the html (the save succeeded); fix them via edit_app.

edit_app

Required RBAC permission: update on the app (granted per item)

Input
ParameterTypeRequiredDescription
appIdstringYesThe app id.
baseVersionintegerYesThe version this edit is based on — the one named by read_app or the latest scaffold_app/edit_app result. Always report the version you actually built the edit from. When the head has moved past it (another conversation edited the app), your edit is treated as a delta from that base and merged with the newer changes; if the regions overlap, the call fails with the head's conflicting content to incorporate.
editsobject[]Nostr_replace edits applied in order to the current HTML; the whole edit is atomic (any failure leaves the app unchanged). Pass exactly one edit mode.
edits[].old_strstringYesExact text to replace; must occur exactly once in the current HTML (add surrounding context to disambiguate).
edits[].new_strstringYesReplacement text (may be empty to delete).
replacementHtmlstringNoThe complete new document, replacing the current HTML outright with no old_str matching — use this for a full rewrite instead of reproducing the whole document as an edit. Pass exactly one edit mode.
replacementHtmlSourceobjectNoLike replacementHtml, but the document is read server-side from a file you already saved instead of being written out here — use this when the HTML already exists as a file (assembled in the sandbox, or attached to the chat) so its bytes never have to be reproduced as tool arguments. The file must be UTF-8 text and is subject to the same size limit as any other document. Reads whatever the file holds at call time. Pass exactly one edit mode.
replacementHtmlSource.fileIdstringYesId of a saved file whose bytes become the document, as returned by download_file, save_file, or search_files.
imageReplacementsobject[]NoReplace one or more image URLs with the most recently attached image. Pass short surrounding anchors only: the server reads the newest attachment bytes, builds the data URL, and replaces everything between the anchors. Never put attachment ids, filenames, paths, or old/new base64 in edits/tool arguments. The batch is atomic. Pass exactly one edit mode.
imageReplacements[].before_strstringYesExact short HTML ending with the opening quote immediately before the existing image URL or data URL (for example <img src="). It must occur exactly once; include nearby id/class context when needed to disambiguate.
imageReplacements[].after_strstringYesExact short HTML starting with the matching closing quote immediately after the existing image URL or data URL (for example " alt="Issue tracker"). The text between before_str and after_str is replaced server-side.
imageReplacements[].sourceobjectYesThe most recently attached image in this conversation. Its bytes are read and encoded server-side; never read or base64-encode the attachment yourself.
imageReplacements[].source.type"chat_attachment"Yes
Output
FieldTypeRequiredDescription
idstringYes
namestringYes
descriptionstring | nullYes
scope"personal" | "team" | "org"Yes
latestVersionnumberYes
labelsobject[]YesKey-value labels for organization/categorization.
labels[].keystringYesThe label key.
labels[].valuestringYesThe label value.
warningsstring[]NoSoft save-time validation warnings about the html (the save succeeded); fix them via edit_app.

set_app_tools

Required RBAC permission: update on the app (granted per item)

Input
ParameterTypeRequiredDescription
appIdstringYesThe app id whose tools to set.
toolsstring[]YesUpstream MCP tool names (e.g. from search_tools) to assign to the app, replacing its current set exactly — pass the full desired list, or [] to clear all.
Output
FieldTypeRequiredDescription
idstringYes
toolsstring[]YesThe app's assigned tool names after this call.

set_app_labels

Required RBAC permission: update on the app (granted per item)

Input
ParameterTypeRequiredDescription
appIdstringYesThe app id whose labels to set.
labelsobject[]YesKey-value labels to assign to the app, replacing its current set exactly — pass the full desired list, or [] to clear all. One value per key; a repeated key keeps the last one.
labels[].keystringYes
labels[].valuestringYes
Output
FieldTypeRequiredDescription
idstringYes
labelsobject[]YesThe app's labels after this call.
labels[].keystringYesThe label key.
labels[].valuestringYesThe label value.

set_app_lock

Required RBAC permission: update on the app (granted per item)

Input
ParameterTypeRequiredDescription
appIdstringYesThe app id.
lockedbooleanYestrue locks the app against all modification; false unlocks it (only on the user's direct request).
Output
FieldTypeRequiredDescription
idstringYes
lockedbooleanYes

validate_app

Required RBAC permission: app:read

Input
ParameterTypeRequiredDescription
appIdstringYesThe app id to validate.
Output
FieldTypeRequiredDescription
idstringYes
versionnumberYesThe head version that was validated.
okbooleanYesTrue when there are no error-severity findings.
findingsobject[]Yes
findings[].severity"error" | "warning"Yes
findings[].messagestringYes
liveobjectYesDiagnostics from the most recent live render of the head version (untrusted iframe output). status no_render_observed means no render of this version has happened yet — live diagnostics are captured only when the app renders for a viewer, so this is the normal state right after authoring and a clean static pass (ok: true) is enough to proceed.
live.status"no_render_observed" | "clean" | "errors"Yes
live.versionnumberYes
live.entriesobject[]Yes
live.entries[].typestringYes
live.entries[].messagestringYes
live.renderedAtstring | nullYes

publish_app

Required RBAC permission: manage-permissions on the app (granted per item)

Input
ParameterTypeRequiredDescription
appIdstringYesThe app id to publish.
scope"team" | "org"YesPublish to specific teams or to the whole organization. Promotes the app out of personal scope.
teamsstring[]NoTarget teams, each a team name or team id — required when scope is team. Pass the team name the user gave (e.g. ["Platform"]); no need to look up ids first.
Output
FieldTypeRequiredDescription
idstringYes
scope"personal" | "team" | "org"Yes
runUrlstringYesStandalone page for the published app.

preview_app_tool

Required RBAC permission: update on the app (granted per item)

Input
ParameterTypeRequiredDescription
appIdstringYesThe app id whose assigned tool to run.
toolNamestringYesName of an MCP tool assigned to the app (exactly as archestra.tools.call would receive it).
argsobjectNoArguments to pass to the tool (defaults to {}).
Output
FieldTypeRequiredDescription
toolNamestringYes
isErrorbooleanYes
truncatedbooleanYes
outputstringYesThe JSON-serialized value archestra.tools.call resolves with for this result, framed as untrusted data (media dataUrls are elided).

get_app_diagnostics

Required RBAC permission: app:read

Input
ParameterTypeRequiredDescription
appIdstringYesThe app id.
Output
FieldTypeRequiredDescription
status"no_render_observed" | "clean" | "errors"Yes
versionnumber | nullYesThe rendered version, or the current head when none observed.
entriesobject[]Yes
entries[].typestringYes
entries[].messagestringYes
renderedAtstring | nullYes
screenshotbooleanYesWhether a screenshot of the render is attached as an image to this result.

delete_app

Required RBAC permission: delete on the app (granted per item)

Input
ParameterTypeRequiredDescription
appIdstringYesThe app id.

app_data_get

Required RBAC permission: app:read

Input
ParameterTypeRequiredDescription
keystringYesThe data store key.
scope"user" | "app"NoStorage partition: "user" (default) is private to the viewing user, "app" is shared by everyone using the app.
Output
FieldTypeRequiredDescription
valueanyYes
revisioninteger | nullYes
ownerstring | nullYesUser id owning a shared key, or null if collaborative.

app_data_set

Required RBAC permission: update on the app (granted per item)

Input
ParameterTypeRequiredDescription
keystringYesThe data store key.
valueanyYesAny JSON-serializable value except null (use app_data_delete to clear a key). Pass objects/arrays directly — get returns exactly what was stored, no JSON.stringify needed.
scope"user" | "app"NoStorage partition: "user" (default) is private to the viewing user, "app" is shared by everyone using the app.
expectedRevisionintegerNoOptimistic concurrency guard. Omit for last-writer-wins. 0 = create only if the key is absent. A positive value = overwrite only if the key is still at that revision (from a prior get/set); otherwise the write is rejected as a conflict.
claimOwnerbooleanNoShared-scope only: when creating a NEW key, claim it so only you (or an app admin/author) may later overwrite or delete it. Has no effect on the "user" scope or on an existing key.
Output
FieldTypeRequiredDescription
keystringYes
revisionintegerYes
ownerstring | nullYesUser id owning a shared key, or null if collaborative.

app_data_list

Required RBAC permission: app:read

Input
ParameterTypeRequiredDescription
scope"user" | "app"NoStorage partition: "user" (default) is private to the viewing user, "app" is shared by everyone using the app.
Output
FieldTypeRequiredDescription
entriesobject[]Yes
entries[].keystringYes
entries[].valueanyYes
entries[].revisionintegerYes
entries[].ownerstring | nullYesUser id owning a shared key, or null if collaborative.

app_data_delete

Required RBAC permission: update on the app (granted per item)

Input
ParameterTypeRequiredDescription
keystringYesThe data store key.
scope"user" | "app"NoStorage partition: "user" (default) is private to the viewing user, "app" is shared by everyone using the app.

llm_complete

Required RBAC permission: app:read

Input
ParameterTypeRequiredDescription
promptstringYesThe prompt to complete.
systemstringNoOptional system instruction that frames the completion.
jsonModebooleanNoWhen true, steer the model to return a single valid JSON value (the caller still parses the returned string).
Output
FieldTypeRequiredDescription
textstringYes

Projects

ToolDescriptionRequired RBAC Permission
create_project_from_conversationTurn the current chat into a project.project:create
list_projectsList the projects the caller can reach — the ones they own plus those shared with them.project:read †
get_projectRead one project's context in a single call: its metadata, its instructions (the instructions.md that steers every chat in the project), the files it owns, and the apps linked into it that you ca...project:read †
link_app_to_projectLink an existing app into a project so it is listed with the project's files and chats.project:read
unlink_app_from_projectRemove an app's link from a project.project:read
create_schedule_triggerCreate a scheduled agent task in a project you can access.scheduledTask:create
update_schedule_triggerEdit a scheduled task.scheduledTask:update †
delete_schedule_triggerDelete a scheduled task and its run history.scheduledTask:delete †
list_schedule_triggersList the scheduled agent triggers the caller can see: which agent each one runs, its cron expression and timezone, whether it is enabled, and when it last fired.scheduledTask:read
get_schedule_triggerRead one scheduled agent trigger, including the message template sent to the agent on every run.scheduledTask:read †
list_schedule_trigger_runsList a scheduled task's run history, newest first: whether each run was due or manual, how it ended, when it started and completed, its failure text, and the chat conversation holding its transcript.scheduledTask:read †
get_schedule_trigger_runRead one run of a scheduled task, including its full error text.scheduledTask:read †
enable_schedule_triggerEnable a scheduled task so it is picked up again when due.scheduledTask:update †
disable_schedule_triggerDisable a scheduled task so it stops firing, leaving its configuration and run history intact.scheduledTask:update †
run_schedule_trigger_nowStart a scheduled task immediately, outside its cron schedule.scheduledTask:create †

† This tool enforces an additional access requirement beyond its RBAC permission — see its details below.

create_project_from_conversation

Required RBAC permission: project:create

Input
ParameterTypeRequiredDescription
namestringNoProject name. Defaults to the chat's title when omitted.
descriptionstringNoOptional project description.
labelsobject[]NoOptional key/value labels for the project.
labels[].keystringYes
labels[].valuestringYes
labels[].keyIdstringNo
labels[].valueIdstringNo
Output
FieldTypeRequiredDescription
successtrueYesWhether the project was created.
project_idstringYesThe new project's id.
project_namestringYesThe new project's name.
project_slugstringYesThe new project's slug.
files_transferredintegerYesHow many of the chat's files were moved into the project.

list_projects

Required RBAC permission: project:read

Additional access requirement: Returns only projects the caller owns or that are shared with them. Oversight of every project (a * grant) does not extend to this tool.

Input
ParameterTypeRequiredDescription
querystringNoCase-insensitive substring matched against the project name and description. Omit to list everything the caller can reach.
Output
FieldTypeRequiredDescription
projectsobject[]YesProjects the caller can reach.
projects[].idstringYesThe project's id — pass it to get_project.
projects[].namestringYesThe project's name.
projects[].descriptionstring | nullYesThe project's description.
projects[].visibility"organization" | "team" | "user" | nullYesWho the project is shared with; null = owner-only.
projects[].viewer_role"owner" | "shared" | "admin"YesThe caller's relationship to the project.
projects[].owner_namestring | nullYesDisplay name of the owner.
projects[].labelsobject[]YesKey/value labels assigned to the project.
projects[].labels[].keystringYes
projects[].labels[].valuestringYes
projects[].labels[].keyIdstringNo
projects[].labels[].valueIdstringNo
projects[].conversation_countintegerYesHow many chats live in the project.
projects[].created_atstringYesISO 8601 creation timestamp.

get_project

Required RBAC permission: project:read

Additional access requirement: Readable only for projects the caller owns or that are shared with them. Oversight of every project (a * grant) does not extend to this tool.

Input
ParameterTypeRequiredDescription
project_idstringYesId of the project to read (from list_projects).
Output
FieldTypeRequiredDescription
idstringYesThe project's id — pass it to get_project.
namestringYesThe project's name.
descriptionstring | nullYesThe project's description.
visibility"organization" | "team" | "user" | nullYesWho the project is shared with; null = owner-only.
viewer_role"owner" | "shared" | "admin"YesThe caller's relationship to the project.
owner_namestring | nullYesDisplay name of the owner.
labelsobject[]YesKey/value labels assigned to the project.
labels[].keystringYes
labels[].valuestringYes
labels[].keyIdstringNo
labels[].valueIdstringNo
conversation_countintegerYesHow many chats live in the project.
created_atstringYesISO 8601 creation timestamp.
instructionsstringYesThe project's instructions markdown; empty when never saved. Truncated when instructions_truncated is true.
instructions_truncatedbooleanYesWhether instructions was cut short at the inline limit.
filesobject[]YesFiles the project owns. Read one with read_file, passing the same project_id and this ref.
files[].idstringYesThe file's id.
files[].refstringYesStable reference to pass to read_file.
files[].filenamestringYesThe file's name.
files[].mime_typestringYesThe file's MIME type.
files[].size_bytesintegerYesSize in bytes.
appsobject[]YesApps linked into the project that you can open. Read or edit one with the app tools, passing this id.
apps[].idstringYesThe app's id.
apps[].namestringYesThe app's name.
apps[].descriptionstring | nullYesThe app's description.

Required RBAC permission: project:read

Input
ParameterTypeRequiredDescription
project_idstringYesId of the project (from list_projects).
app_idstringYesId of the app (from list_apps).
Output
FieldTypeRequiredDescription
project_idstringYesThe project's id.
app_idstringYesThe app's id.
linkedbooleanYesWhether the app is now linked.

Required RBAC permission: project:read

Input
ParameterTypeRequiredDescription
project_idstringYesId of the project (from list_projects).
app_idstringYesId of the app (from list_apps).
Output
FieldTypeRequiredDescription
project_idstringYesThe project's id.
app_idstringYesThe app's id.
linkedbooleanYesWhether the app is now linked.

create_schedule_trigger

Required RBAC permission: scheduledTask:create

Input
ParameterTypeRequiredDescription
namestringYesName of the scheduled task.
project_idstringYesProject containing the scheduled task.
agent_idstringNoAgent to run. Defaults to the project's agent, then the organization default.
cron_expressionstringYesCron expression, for example 0 9 * * 1-5.
timezonestringYesIANA timezone, for example America/Toronto.
message_templatestringYesPrompt sent to the agent on each run.
enabledbooleanNoWhether the schedule is enabled. Defaults to true on creation.
Output
FieldTypeRequiredDescription
idstringYesThe trigger's id — pass it to get_schedule_trigger.
namestringYesThe trigger's name.
agent_idstringYesId of the agent the schedule runs.
agent_namestring | nullYesName of that agent.
project_idstring | nullYesProject the schedule belongs to, when it is project-scoped.
cron_expressionstringYes5-part cron expression driving the schedule.
timezonestringYesIANA timezone the cron expression is read in.
enabledbooleanYesWhether the schedule is currently picked up when due.
last_executed_atstring | nullYesISO 8601 timestamp of the last time the schedule fired, or null if it never has. Compare with run history when checking schedule activity.
actor_user_idstringYesThe user the scheduled run executes as.
actor_namestring | nullYesDisplay name of that user.
created_atstringYesISO 8601 creation timestamp.
message_templatestringYesThe prompt sent to the agent on every run.

update_schedule_trigger

Required RBAC permission: scheduledTask:update

Additional access requirement: Requires a user token. Only the schedule actor or a scheduled-task administrator can change or run it. Project membership alone permits reading.

Input
ParameterTypeRequiredDescription
namestringNoName of the scheduled task.
project_idstringNoProject containing the scheduled task.
agent_idstringNoAgent to run. Defaults to the project's agent, then the organization default.
cron_expressionstringNoCron expression, for example 0 9 * * 1-5.
timezonestringNoIANA timezone, for example America/Toronto.
message_templatestringNoPrompt sent to the agent on each run.
enabledbooleanNoWhether the schedule is enabled. Defaults to true on creation.
schedule_trigger_idstringYes
Output
FieldTypeRequiredDescription
idstringYesThe trigger's id — pass it to get_schedule_trigger.
namestringYesThe trigger's name.
agent_idstringYesId of the agent the schedule runs.
agent_namestring | nullYesName of that agent.
project_idstring | nullYesProject the schedule belongs to, when it is project-scoped.
cron_expressionstringYes5-part cron expression driving the schedule.
timezonestringYesIANA timezone the cron expression is read in.
enabledbooleanYesWhether the schedule is currently picked up when due.
last_executed_atstring | nullYesISO 8601 timestamp of the last time the schedule fired, or null if it never has. Compare with run history when checking schedule activity.
actor_user_idstringYesThe user the scheduled run executes as.
actor_namestring | nullYesDisplay name of that user.
created_atstringYesISO 8601 creation timestamp.
message_templatestringYesThe prompt sent to the agent on every run.

delete_schedule_trigger

Required RBAC permission: scheduledTask:delete

Additional access requirement: Requires a user token. Only the schedule actor or a scheduled-task administrator can change or run it. Project membership alone permits reading.

Input
ParameterTypeRequiredDescription
schedule_trigger_idstringYes
Output
FieldTypeRequiredDescription
successbooleanYes

list_schedule_triggers

Required RBAC permission: scheduledTask:read

Input
ParameterTypeRequiredDescription
project_idstringNoOnly schedules of this project. Shows every member's schedules for it, so long as the caller can access the project.
enabledbooleanNoOnly enabled (true) or only disabled (false) schedules.
agent_idstringNoOnly schedules that run this agent.
include_all_usersbooleanNoInclude other members' schedules. Ignored unless the caller holds organization-wide scheduled-task access.
limitintegerNoHow many rows to return, newest first (1-100, default 25).
cursorstringNoPass pagination.nextCursor from the previous response to read the next page. Keep the same filters; omit for the newest page.
Output
FieldTypeRequiredDescription
paginationobjectYes
pagination.limitintegerYes
pagination.nextCursorstring | nullYes
pagination.hasNextbooleanYes
schedule_triggersobject[]YesMatching schedules, newest first.
schedule_triggers[].idstringYesThe trigger's id — pass it to get_schedule_trigger.
schedule_triggers[].namestringYesThe trigger's name.
schedule_triggers[].agent_idstringYesId of the agent the schedule runs.
schedule_triggers[].agent_namestring | nullYesName of that agent.
schedule_triggers[].project_idstring | nullYesProject the schedule belongs to, when it is project-scoped.
schedule_triggers[].cron_expressionstringYes5-part cron expression driving the schedule.
schedule_triggers[].timezonestringYesIANA timezone the cron expression is read in.
schedule_triggers[].enabledbooleanYesWhether the schedule is currently picked up when due.
schedule_triggers[].last_executed_atstring | nullYesISO 8601 timestamp of the last time the schedule fired, or null if it never has. Compare with run history when checking schedule activity.
schedule_triggers[].actor_user_idstringYesThe user the scheduled run executes as.
schedule_triggers[].actor_namestring | nullYesDisplay name of that user.
schedule_triggers[].created_atstringYesISO 8601 creation timestamp.

get_schedule_trigger

Required RBAC permission: scheduledTask:read

Additional access requirement: Requires a user token. The caller must be the schedule actor, a project member, or a scheduled-task administrator.

Input
ParameterTypeRequiredDescription
schedule_trigger_idstringYesId of the schedule to read.
Output
FieldTypeRequiredDescription
idstringYesThe trigger's id — pass it to get_schedule_trigger.
namestringYesThe trigger's name.
agent_idstringYesId of the agent the schedule runs.
agent_namestring | nullYesName of that agent.
project_idstring | nullYesProject the schedule belongs to, when it is project-scoped.
cron_expressionstringYes5-part cron expression driving the schedule.
timezonestringYesIANA timezone the cron expression is read in.
enabledbooleanYesWhether the schedule is currently picked up when due.
last_executed_atstring | nullYesISO 8601 timestamp of the last time the schedule fired, or null if it never has. Compare with run history when checking schedule activity.
actor_user_idstringYesThe user the scheduled run executes as.
actor_namestring | nullYesDisplay name of that user.
created_atstringYesISO 8601 creation timestamp.
message_templatestringYesThe prompt sent to the agent on every run.

list_schedule_trigger_runs

Required RBAC permission: scheduledTask:read

Additional access requirement: Requires a user token. The caller must be the schedule actor, a project member, or a scheduled-task administrator.

Input
ParameterTypeRequiredDescription
schedule_trigger_idstringYesId of the schedule whose runs to list.
status"running" | "success" | "failed" | "cancelled"NoOnly runs in this state.
limitintegerNoHow many rows to return, newest first (1-100, default 25).
cursorstringNoPass pagination.nextCursor from the previous response to read the next page. Keep the same filters; omit for the newest page.
Output
FieldTypeRequiredDescription
paginationobjectYes
pagination.limitintegerYes
pagination.nextCursorstring | nullYes
pagination.hasNextbooleanYes
runsobject[]YesMatching runs, newest first.
runs[].idstringYesThe run's id — pass it to get_schedule_trigger_run.
runs[].trigger_idstringYesId of the schedule this run belongs to.
runs[].run_kind"due" | "manual"Yesdue = fired by the schedule; manual = started by a person.
runs[].status"running" | "success" | "failed" | "cancelled"YesCurrent state of the run.
runs[].started_atstring | nullYesISO 8601 timestamp the run started.
runs[].completed_atstring | nullYesISO 8601 timestamp the run settled; null while still running.
runs[].errorstring | nullYesFailure text when the run failed or was skipped — for example a run skipped because the previous one was still in progress.
runs[].chat_conversation_idstring | nullYesChat conversation holding the run's transcript, when linked.
runs[].runtime_task_idstring | nullYesAgent Runtime task id, when the run executed on the runtime.
runs[].created_atstringYesISO 8601 creation timestamp.

get_schedule_trigger_run

Required RBAC permission: scheduledTask:read

Additional access requirement: Requires a user token. The caller must be the schedule actor, a project member, or a scheduled-task administrator.

Input
ParameterTypeRequiredDescription
schedule_trigger_idstringYesId of the schedule the run belongs to.
run_idstringYesId of the run to read.
Output
FieldTypeRequiredDescription
idstringYesThe run's id — pass it to get_schedule_trigger_run.
trigger_idstringYesId of the schedule this run belongs to.
run_kind"due" | "manual"Yesdue = fired by the schedule; manual = started by a person.
status"running" | "success" | "failed" | "cancelled"YesCurrent state of the run.
started_atstring | nullYesISO 8601 timestamp the run started.
completed_atstring | nullYesISO 8601 timestamp the run settled; null while still running.
errorstring | nullYesFailure text when the run failed or was skipped — for example a run skipped because the previous one was still in progress.
chat_conversation_idstring | nullYesChat conversation holding the run's transcript, when linked.
runtime_task_idstring | nullYesAgent Runtime task id, when the run executed on the runtime.
created_atstringYesISO 8601 creation timestamp.

enable_schedule_trigger

Required RBAC permission: scheduledTask:update

Additional access requirement: Requires a user token. Only the schedule actor or a scheduled-task administrator can change or run it. Project membership alone permits reading.

Input
ParameterTypeRequiredDescription
schedule_trigger_idstringYesId of the schedule to enable.
Output
FieldTypeRequiredDescription
idstringYesThe trigger's id — pass it to get_schedule_trigger.
namestringYesThe trigger's name.
agent_idstringYesId of the agent the schedule runs.
agent_namestring | nullYesName of that agent.
project_idstring | nullYesProject the schedule belongs to, when it is project-scoped.
cron_expressionstringYes5-part cron expression driving the schedule.
timezonestringYesIANA timezone the cron expression is read in.
enabledbooleanYesWhether the schedule is currently picked up when due.
last_executed_atstring | nullYesISO 8601 timestamp of the last time the schedule fired, or null if it never has. Compare with run history when checking schedule activity.
actor_user_idstringYesThe user the scheduled run executes as.
actor_namestring | nullYesDisplay name of that user.
created_atstringYesISO 8601 creation timestamp.

disable_schedule_trigger

Required RBAC permission: scheduledTask:update

Additional access requirement: Requires a user token. Only the schedule actor or a scheduled-task administrator can change or run it. Project membership alone permits reading.

Input
ParameterTypeRequiredDescription
schedule_trigger_idstringYesId of the schedule to disable.
Output
FieldTypeRequiredDescription
idstringYesThe trigger's id — pass it to get_schedule_trigger.
namestringYesThe trigger's name.
agent_idstringYesId of the agent the schedule runs.
agent_namestring | nullYesName of that agent.
project_idstring | nullYesProject the schedule belongs to, when it is project-scoped.
cron_expressionstringYes5-part cron expression driving the schedule.
timezonestringYesIANA timezone the cron expression is read in.
enabledbooleanYesWhether the schedule is currently picked up when due.
last_executed_atstring | nullYesISO 8601 timestamp of the last time the schedule fired, or null if it never has. Compare with run history when checking schedule activity.
actor_user_idstringYesThe user the scheduled run executes as.
actor_namestring | nullYesDisplay name of that user.
created_atstringYesISO 8601 creation timestamp.

run_schedule_trigger_now

Required RBAC permission: scheduledTask:create

Additional access requirement: Requires a user token. Only the schedule actor or a scheduled-task administrator can change or run it. Project membership alone permits reading.

Input
ParameterTypeRequiredDescription
schedule_trigger_idstringYesId of the schedule to run.
Output
FieldTypeRequiredDescription
idstringYesThe run's id — pass it to get_schedule_trigger_run.
trigger_idstringYesId of the schedule this run belongs to.
run_kind"due" | "manual"Yesdue = fired by the schedule; manual = started by a person.
status"running" | "success" | "failed" | "cancelled"YesCurrent state of the run.
started_atstring | nullYesISO 8601 timestamp the run started.
completed_atstring | nullYesISO 8601 timestamp the run settled; null while still running.
errorstring | nullYesFailure text when the run failed or was skipped — for example a run skipped because the previous one was still in progress.
chat_conversation_idstring | nullYesChat conversation holding the run's transcript, when linked.
runtime_task_idstring | nullYesAgent Runtime task id, when the run executed on the runtime.
created_atstringYesISO 8601 creation timestamp.

Agent Runtime

ToolDescriptionRequired RBAC Permission
delete_workspacePermanently delete a retained runtime workspace and all of its files.agent:read
read_workspace_fileRead a file from your Agent Runtime's retained workspace using a run ID.agent:read
transfer_workspace_fileCopy a file between this machine and an Agent Runtime workspace without reading it.agent:read
write_workspace_fileCreate a file in your Agent Runtime's retained workspace using a run ID.agent:read
start_runCreate a NEW run only for work that has no prior runtime session.agent:read
get_runRead a run's state and the output it has produced so far.agent:read
list_runsList your runs on one agent, newest activity first.agent:read
list_agent_runsList recent runs across one or more accessible Agents for a read-only operations dashboard.agent:read
steer_runInterject one message into a live run's container session — a course correction without stopping the work.agent:read
cancel_runStop an active run.agent:read
post_run_fileUpload a file into the messaging-channel thread a run reports to — a demo recording, for example — so it renders natively there (Slack plays video uploads inline).agent:read
transfer_credentialGive an Agent Runtime Agent a credential, so a handed-over task can use the CLI authentication the local session was using.credential:create

delete_workspace

Required RBAC permission: agent:read

Input
ParameterTypeRequiredDescription
task_idstringYes
confirm_deletetrueYes

read_workspace_file

Required RBAC permission: agent:read

Input
ParameterTypeRequiredDescription
task_idstringYes
pathstringYes
encoding"utf8" | "base64"No

transfer_workspace_file

Required RBAC permission: agent:read

Input
ParameterTypeRequiredDescription
task_idstringYesFrom start_run or list_runs.
direction"download" | "upload"Yesdownload reads from the workspace; upload writes to it.
pathstringYesWorkspace-relative path, for example reports/summary.md.
local_pathstringYesAbsolute path on this machine, used to build the command.
sizeintegerNoUpload only: the local file's size in bytes.
sha256stringNoUpload only: the local file's sha256, as hex.

write_workspace_file

Required RBAC permission: agent:read

Input
ParameterTypeRequiredDescription
task_idstringYes
pathstringYes
contentstringYes
encoding"utf8" | "base64"No
overwritebooleanNo

start_run

Required RBAC permission: agent:read

Input
ParameterTypeRequiredDescription
agent_idstringYesThe agent to do the work.
messagestringYesWhat the agent should do, including handoff context and acceptance criteria.
attachmentsobject[]NoInput files staged before the first turn. For repository work, include a patch for uncommitted changes and identify the base commit in message. Never include credentials.
attachments[].namestringYes
attachments[].contentTypestringYes
attachments[].contentBase64stringYes
Output
FieldTypeRequiredDescription
runobjectYes
run.task_idstringYesPass to get_run / steer_run / cancel_run.
run.statestringYessubmitted | working | input-required | completed | canceled | failed
run.agent_idstring | nullYesThe agent doing the work.
run.status_reasonstring | nullYesWhy the run is in its state, when there is something to say.
run.created_atstringYesISO 8601.
run.state_changed_atstringYesISO 8601 of the last transition.
session_idstring | nullYesStable runtime session handle. Keep this ID for every follow-up, including from another client.
run_urlstring | nullYesOpen the runtime and its workspace in the browser; null for foreground work.
runtime"dedicated" | "foreground"YesWhere the delegated run executes.

get_run

Required RBAC permission: agent:read

Input
ParameterTypeRequiredDescription
task_idstringYesFrom start_run or list_runs.
Output
FieldTypeRequiredDescription
runobjectYes
run.task_idstringYesPass to get_run / steer_run / cancel_run.
run.statestringYessubmitted | working | input-required | completed | canceled | failed
run.agent_idstring | nullYesThe agent doing the work.
run.status_reasonstring | nullYesWhy the run is in its state, when there is something to say.
run.created_atstringYesISO 8601.
run.state_changed_atstringYesISO 8601 of the last transition.
session_idstring | nullYesStable runtime session handle; use as task_id for steering and later handoffs.
run_urlstring | nullYes
requestsobject[]YesThe original task request and, when different, the current turn's request. Use this context to interpret short follow-ups from another client.
requests[].task_idstringYes
requests[].textstringYes
requests[].truncatedbooleanYes
outputstringYesThe run's response artifact so far (tail, capped).
output_truncatedbooleanYes
workspaceobject | nullYesThe owner's retained workspace, independent of the run's terminal state.
workspace.state"active" | "idle" | "suspending" | "suspended" | "resuming" | "deleting" | "deleted"Yes
workspace.retained_untilstringYes
workspace.can_continuebooleanYesWhether steer_run can accept a follow-up in this workspace, including while work is running.
workspace.continuation_errorstring | nullYesWhy this workspace cannot accept steering, or null when available.
workspace.connectionobject | nullYes
workspace.connection.hostnamestringYes
workspace.connection.shellCommandstringYes
sessionobject | nullYesThe live container session, when the run uses Agent Runtime.
session.attachablebooleanYesWhether a live container is carrying the run right now.
session.started_atstring | nullYes

list_runs

Required RBAC permission: agent:read

Input
ParameterTypeRequiredDescription
agent_idstringYesThe agent whose runs to list.
state"submitted" | "working" | "input-required" | "completed" | "canceled" | "failed"NoOnly runs in this state.
Output
FieldTypeRequiredDescription
runsobject[]Yes
runs[].task_idstringYesPass to get_run / steer_run / cancel_run.
runs[].statestringYessubmitted | working | input-required | completed | canceled | failed
runs[].agent_idstring | nullYesThe agent doing the work.
runs[].status_reasonstring | nullYesWhy the run is in its state, when there is something to say.
runs[].created_atstringYesISO 8601.
runs[].state_changed_atstringYesISO 8601 of the last transition.
totalintegerYes

list_agent_runs

Required RBAC permission: agent:read

Input
ParameterTypeRequiredDescription
agent_idsstring[]Yes
current_thread_onlybooleanNoOnly runs originating in the current messaging thread. Requires messaging context; never falls back to an unfiltered list.
limitintegerNo
Output
FieldTypeRequiredDescription
runsobject[]Yes
runs[].task_idstringYes
runs[].titlestringYes
runs[].promptstringYes
runs[].statestringYes
runs[].status_reasonstring | nullYes
runs[].started_atstringYes
runs[].ended_atstring | nullYes
runs[].state_changed_atstring | nullYes
runs[].hard_deadline_atstringYesWhen the runtime will be forcefully stopped.
runs[].last_model_activity_atstring | nullYesMost recent model request attributed to this run.
runs[].attention_state"input_required" | "auth_required" | nullYesNative runtime signal that the live process needs user attention.
runs[].agentobjectYes
runs[].agent.idstringYes
runs[].agent.namestringYes
runs[].agent.iconstring | nullYes
runs[].requesterobjectYes
runs[].requester.kindstringYes
runs[].requester.idstringYes
runs[].requester.namestring | nullYes
runs[].run_urlstringYes
runs[].threadobject | nullYes
runs[].thread.providerstringYes
runs[].thread.channel_idstringYes
runs[].thread.channel_namestring | nullYes
runs[].thread.thread_idstringYes
runs[].thread.urlstring | nullYes
summaryobjectYes
summary.totalintegerYes
summary.activeintegerYes
summary.by_stateobjectYes

steer_run

Required RBAC permission: agent:read

Input
ParameterTypeRequiredDescription
task_idstringYes
messagestringYes

cancel_run

Required RBAC permission: agent:read

Input
ParameterTypeRequiredDescription
task_idstringYes

post_run_file

Required RBAC permission: agent:read

Input
ParameterTypeRequiredDescription
task_idstringYes
filenamestringYes
content_base64stringYes
commentstringNo

transfer_credential

Required RBAC permission: credential:create

Input
ParameterTypeRequiredDescription
agent_idstringYesThe Agent to give the credential to.
environmentobject[]YesExactly one credential to transfer. Never include more than the task needs.
environment[].keystringYesEnvironment variable name, e.g. AWS_SECRET_ACCESS_KEY.
environment[].type"secret"YesAlways 'secret'. Marks the value for redaction in logs.
environment[].valuestringNoThe credential value to transfer. OMIT IT to declare the credential without a value and get back a link the person opens to paste it themselves — the value then never enters your context. Send a value only when the person asked you to move one you already hold.
labelstringNoHuman-readable name shown in the Agent's credential list. Defaults to the key.
Output
FieldTypeRequiredDescription
keystringYesThe environment variable the value is stored under.
scope"personal"YesWho the value applies to. Always personal to the calling user.
declarationCreatedbooleanYesWhether this call declared the credential on the Agent.
valueStoredbooleanYesWhether a value is now stored. False means the credential is declared and still empty.
urlstring | nullYesWhere the person pastes the value. Null when this call already stored one.
availabilitystringYesWhen a run can read the value, in plain words.

Agents

ToolDescriptionRequired RBAC Permission
create_agentCreate a new agent with the specified name, optional description, labels, prompts, icon emoji, explicit tool assignments, and sub-agent delegations.agent:create
get_agentGet a specific agent by ID or name.agent:read
list_agentsList agents with optional filtering by name or provider key.agent:read
edit_agentEdit an existing agent.update on the agent (granted per item)
list_hooksList an agent's lifecycle hooks.agent:read
create_hookCreate a lifecycle hook on an agent.update on the agent (granted per item)
update_hookUpdate an existing lifecycle hook: its event, file name, script content, Python requirements, or enabled state.update on the agent (granted per item)
delete_hookDelete a lifecycle hook by ID.update on the agent (granted per item)

create_agent

Required RBAC permission: agent:create

Input
ParameterTypeRequiredDescription
initialGrantsobject[]No
initialGrants[].subjectobjectYes
initialGrants[].subject.type"user" | "team" | "serviceAccount" | "role" | "organization"Yes
initialGrants[].subject.idstring | "*"Yes
initialGrants[].actionsstring[]Yes
namestringYesName for the new resource.
labelsobject[]NoOptional key-value labels for organization and categorization.
labels[].keystringYes
labels[].valuestringYes
toolExposureMode"full" | "search_and_run_only"NoHow tools should be loaded for MCP clients and models. Use 'search_and_run_only' to keep the initial tool list small while letting search_tools find assigned tools and run_tool execute them. Assigned skill discovery/loading tools (list_skills, load_skill), sandbox runtime tools (run_command, download_file, upload_file) — when the code runtime is enabled and assigned — and persistent-files tools (search_files, read_file, save_file, edit_file, delete_file) — when the Projects feature is enabled and assigned — stay directly available in both modes. App tools (scaffold_app, edit_app, read_app, render_app, list_apps, and the rest of the app surface) are reached through search_tools/run_tool in 'search_and_run_only' mode.
accessAllToolsbooleanNoAllow dynamic tool access: search_tools/run_tool may discover and run any tool the calling user can access (MCP catalog tools and knowledge sources) without assigning it to the agent. Enabling this forces toolExposureMode to 'search_and_run_only', since dynamic access only works through the search/run dispatch surface. Defaults to false. Also gated by the organization's security settings.
accessAllSubagentsbooleanNoAllow dynamic subagent delegation: the agent may delegate to any internal agent the calling user can access, beyond explicitly-configured delegation targets (minus subagent exclusions). Defaults to false.
descriptionstring | nullNoOptional human-readable description of the agent.
iconstring | nullNoOptional emoji icon for the agent.
knowledgeBaseIdsstring[]NoKnowledge base IDs to assign to the agent. Use get_knowledge_bases first when you need to look up IDs by name.
connectorIdsstring[]NoKnowledge connector IDs to assign directly to the agent. Use get_knowledge_connectors first when you need to look up IDs by name.
subAgentIdsstring[]NoAgent IDs to delegate to from this newly created agent.
suggestedPromptsobject[]NoOptional suggested prompts that appear in the chat UI.
suggestedPrompts[].summaryTitlestringYesShort title shown to users for this suggested prompt.
suggestedPrompts[].promptstringYesSuggested prompt text users can click to start a conversation.
systemPromptstring | nullNoThe system prompt that defines the agent's behavior.
toolAssignmentsobject[]NoExplicit tool assignments to create immediately after the agent is created.
toolAssignments[].toolIdstringYesThe ID of the tool to assign to the agent.
toolAssignments[].resolveAtCallTimebooleanNoWhen true, resolve credentials and execution target at tool call time. Prefer this for builder flows.
toolAssignments[].credentialResolutionMode"static" | "dynamic" | "enterprise_managed"No
toolAssignments[].mcpServerIdstring | nullNoOptional MCP server installation to pin the tool to when using static credential resolution.

get_agent

Required RBAC permission: agent:read

Input
ParameterTypeRequiredDescription
idstringNoThe ID of the agent to fetch. Prefer the ID when you already have it.
namestringNoThe exact name of the agent to fetch when you do not already have the ID.
Output
FieldTypeRequiredDescription
idstringYesThe resource ID.
namestringYesThe resource name.
descriptionstring | nullYesThe resource description, if any.
iconstring | nullYesThe emoji icon, if configured.
scope"personal" | "team" | "org"YesThe visibility scope.
toolExposureMode"full" | "search_and_run_only"YesHow tools are loaded for MCP clients and models.
accessAllToolsbooleanYesWhether search_tools/run_tool may dynamically access every tool the calling user can access.
accessAllSubagentsbooleanYesWhether the agent may delegate to every internal agent the calling user can access.
agentType"agent" | "llm_proxy" | "mcp_gateway" | "profile"YesThe resource type.
systemPromptstring | nullNo
teamsobject[]YesThe teams attached to it.
teams[].idstringYesThe team ID.
teams[].namestringYesThe team name.
labelsobject[]YesAssigned labels.
labels[].keystringYesThe label key.
labels[].valuestringYesThe label value.
toolsobject[]YesAssigned tools.
tools[].idstringYesThe assigned tool ID.
tools[].namestringYesThe tool name.
tools[].descriptionstring | nullYesThe tool description, if any.
tools[].catalogIdstring | nullYesThe MCP catalog ID the tool comes from, if any.
knowledgeBaseIdsstring[]YesAssigned knowledge base IDs.
connectorIdsstring[]YesAssigned knowledge connector IDs.
suggestedPromptsobject[]YesConfigured suggested prompts.
suggestedPrompts[].summaryTitlestringYesThe short title shown in the chat UI.
suggestedPrompts[].promptstringYesThe suggested prompt text.
skillsEnabledbooleanNoPresent for an internal agent when the current user has skill:read; whether load_skill is executable for it.
skillsNoticestringNoTrust boundary for the catalog-supplied skill names and descriptions in skills.
skillsobject[]NoPresent for an internal agent when the current user has skill:read; caller-relative skills it can activate.
skills[].referenceobjectYesStable source identity: native uses skillId, external_mcp uses mcpServerId and uri, and plugin uses pluginId and skillPath.
skills[].reference.source"native" | "external_mcp" | "plugin"Yes"native": A skill-library skill. "external_mcp": A skill from an MCP server. "plugin": A skill bundled in a plugin.
skills[].reference.skillIdstringWhen source="native"The skill-library skill ID.
skills[].reference.mcpServerIdstringWhen source="external_mcp"The MCP server installation ID.
skills[].reference.uristringWhen source="external_mcp"The skill resource URI.
skills[].reference.pluginIdstringWhen source="plugin"The plugin ID.
skills[].reference.skillPathstringWhen source="plugin"The skill root inside the plugin.
skills[].namestringYesThe declared, human-facing skill name.
skills[].activationNamestringYesThe exact name to pass to load_skill.
skills[].descriptionstringYesThe skill description.
skills[].scope"personal" | "team" | "org"YesThe visibility scope through which the skill is shared.
skills[].providerNamestring | nullYesPlugin or MCP server name; null for a skill-library entry.

list_agents

Required RBAC permission: agent:read

Input
ParameterTypeRequiredDescription
providerApiKeyIdstring | "organization-default"NoFilter by a configured provider key, or organization-default for agents with no pinned key or model.
limitintegerNoMaximum number of agents to return.
namestringNoOptional agent name filter. Use this when the user names an agent but you still need to look up the ID.
Output
FieldTypeRequiredDescription
totalnumberYesThe total number of matching agents.
agentsobject[]Yes
agents[].idstringYesThe agent ID.
agents[].namestringYesThe agent name.
agents[].scope"personal" | "team" | "org"YesThe agent scope.
agents[].executionMode"runtime" | "foreground"YesRuntime agents retain a workspace and support steering; foreground agents do not.
agents[].descriptionstring | nullYesThe agent description, if any.
agents[].resolvedLlmProviderKeyNamestring | nullYesThe configured provider-key name, or null when unconfigured.
agents[].resolvedLlmModelNamestring | nullYesThe configured model name, or null when unconfigured.
agents[].teamsobject[]YesTeams attached to it.
agents[].teams[].idstringYesThe team ID.
agents[].teams[].namestringYesThe team name.
agents[].labelsobject[]YesAssigned labels.
agents[].labels[].keystringYesThe label key.
agents[].labels[].valuestringYesThe label value.
agents[].toolsobject[]Yes
agents[].tools[].namestringYesThe tool name.
agents[].tools[].descriptionstring | nullYesThe tool description, if any.
agents[].knowledgeSourcesobject[]YesAssigned knowledge bases and connectors.
agents[].knowledgeSources[].namestringYesThe knowledge source name.
agents[].knowledgeSources[].descriptionstring | nullYesThe knowledge source description, if any.
agents[].knowledgeSources[].type"knowledge_base" | "knowledge_connector"YesWhether this source is a knowledge base or connector.

edit_agent

Required RBAC permission: update on the agent (granted per item)

Input
ParameterTypeRequiredDescription
idstringYesThe ID of the agent to edit. Use get_agent or list_agents to look it up by name.
subAgentIdsstring[]NoAgent IDs to add as delegation targets.
toolAssignmentsobject[]NoExplicit tool assignments to add or update on the agent.
toolAssignments[].toolIdstringYesThe ID of the tool to assign to the agent.
toolAssignments[].resolveAtCallTimebooleanNoWhen true, resolve credentials and execution target at tool call time. Prefer this for builder flows.
toolAssignments[].credentialResolutionMode"static" | "dynamic" | "enterprise_managed"No
toolAssignments[].mcpServerIdstring | nullNoOptional MCP server installation to pin the tool to when using static credential resolution.
descriptionstring | nullNoNew description for the agent.
iconstring | nullNoNew emoji icon for the agent.
knowledgeBaseIdsstring[]NoReplace the agent's assigned knowledge bases with this set.
labelsobject[]NoReplace the agent's labels with this set.
labels[].keystringYes
labels[].valuestringYes
namestringNoNew name for the agent.
connectorIdsstring[]NoReplace the agent's directly assigned knowledge connectors with this set.
toolExposureMode"full" | "search_and_run_only"NoHow tools should be loaded for MCP clients and models.
accessAllToolsbooleanNoAllow dynamic tool access: search_tools/run_tool may discover and run any tool the calling user can access without assigning it to the agent. Enabling this forces toolExposureMode to 'search_and_run_only'.
accessAllSubagentsbooleanNoAllow dynamic subagent delegation: the agent may delegate to any internal agent the calling user can access, beyond explicitly-configured delegation targets (minus subagent exclusions).
suggestedPromptsobject[]NoReplace the agent's suggested prompts.
suggestedPrompts[].summaryTitlestringYesShort title shown to users for this suggested prompt.
suggestedPrompts[].promptstringYesSuggested prompt text users can click to start a conversation.
systemPromptstring | nullNoNew system prompt for the agent.

list_hooks

Required RBAC permission: agent:read

Availability: Served only when the code runtime is enabled (the same prerequisite as the Code Sandbox tools), because a hook executes in the conversation sandbox.

Input
ParameterTypeRequiredDescription
agent_idstringYesThe ID of the agent whose hooks to list.
Output
FieldTypeRequiredDescription
hooksobject[]Yes
hooks[].idstringYesThe hook ID.
hooks[].agentIdstringYesThe agent the hook belongs to.
hooks[].event"session_start" | "pre_tool_use" | "post_tool_use"YesThe lifecycle event the hook fires on.
hooks[].fileNamestringYesThe script file name (.py or .sh); also the execution-order key within an event.
hooks[].contentstringYesThe script content.
hooks[].requirementsstring[]YesPython dependencies installed before a .py hook runs.
hooks[].enabledbooleanYesWhether the hook currently fires.
hooks[].createdAtstringYesISO timestamp when the hook was created.
hooks[].updatedAtstringYesISO timestamp when the hook was last updated.

create_hook

Required RBAC permission: update on the agent (granted per item)

Availability: Served only when the code runtime is enabled (the same prerequisite as the Code Sandbox tools), because a hook executes in the conversation sandbox.

Input
ParameterTypeRequiredDescription
agent_idstringYesThe ID of the agent to add the hook to.
event"session_start" | "pre_tool_use" | "post_tool_use"YesThe lifecycle event the hook fires on: session_start, pre_tool_use, or post_tool_use.
file_namestringYesPlain script file name ending in .py or .sh, e.g. check.py. Unique per (agent, event); hooks on the same event run in file-name order.
contentstringYesThe script content. It receives the JSON payload on stdin.
requirementsstring[]NoOptional Python dependencies (pip requirement strings) installed before a .py hook runs.
enabledbooleanNoWhether the hook fires. Defaults to true.
Output
FieldTypeRequiredDescription
hookobjectYes
hook.idstringYesThe hook ID.
hook.agentIdstringYesThe agent the hook belongs to.
hook.event"session_start" | "pre_tool_use" | "post_tool_use"YesThe lifecycle event the hook fires on.
hook.fileNamestringYesThe script file name (.py or .sh); also the execution-order key within an event.
hook.contentstringYesThe script content.
hook.requirementsstring[]YesPython dependencies installed before a .py hook runs.
hook.enabledbooleanYesWhether the hook currently fires.
hook.createdAtstringYesISO timestamp when the hook was created.
hook.updatedAtstringYesISO timestamp when the hook was last updated.

update_hook

Required RBAC permission: update on the agent (granted per item)

Availability: Served only when the code runtime is enabled (the same prerequisite as the Code Sandbox tools), because a hook executes in the conversation sandbox.

Input
ParameterTypeRequiredDescription
idstringYesThe ID of the hook to update.
event"session_start" | "pre_tool_use" | "post_tool_use"NoOptional new lifecycle event.
file_namestringNoOptional new script file name ending in .py or .sh.
contentstringNoOptional new script content.
requirementsstring[]NoOptional replacement list of Python dependencies.
enabledbooleanNoOptionally enable or disable the hook.
Output
FieldTypeRequiredDescription
hookobjectYes
hook.idstringYesThe hook ID.
hook.agentIdstringYesThe agent the hook belongs to.
hook.event"session_start" | "pre_tool_use" | "post_tool_use"YesThe lifecycle event the hook fires on.
hook.fileNamestringYesThe script file name (.py or .sh); also the execution-order key within an event.
hook.contentstringYesThe script content.
hook.requirementsstring[]YesPython dependencies installed before a .py hook runs.
hook.enabledbooleanYesWhether the hook currently fires.
hook.createdAtstringYesISO timestamp when the hook was created.
hook.updatedAtstringYesISO timestamp when the hook was last updated.

delete_hook

Required RBAC permission: update on the agent (granted per item)

Availability: Served only when the code runtime is enabled (the same prerequisite as the Code Sandbox tools), because a hook executes in the conversation sandbox.

Input
ParameterTypeRequiredDescription
idstringYesThe ID of the hook to delete.
Output
FieldTypeRequiredDescription
successtrueYes
idstringYes

Knowledge Management

ToolDescriptionRequired RBAC Permission
query_knowledge_sourcesSearch the organization's indexed knowledge — documents, files, images, photos, and records synced from its connected sources.knowledgeSource:query
create_knowledge_baseCreate a new knowledge base for organizing knowledge connectors.knowledgeSource:create
get_knowledge_basesList all knowledge bases in the organization.knowledgeSource:read
get_knowledge_baseGet details of a specific knowledge base by ID.knowledgeSource:read
update_knowledge_baseUpdate an existing knowledge base.knowledgeSource:update
delete_knowledge_baseDelete a knowledge base by ID.knowledgeSource:delete
create_knowledge_connectorCreate a new knowledge connector for ingesting data from external sources.knowledgeSource:create
get_knowledge_connectorsList all knowledge connectors in the organization.knowledgeSource:read
get_knowledge_connectorGet details of a specific knowledge connector by ID.knowledgeSource:read
update_knowledge_connectorUpdate an existing knowledge connector.knowledgeSource:update
delete_knowledge_connectorDelete a knowledge connector by ID.knowledgeSource:delete
assign_knowledge_connector_to_knowledge_baseAssign a knowledge connector to a knowledge base.knowledgeSource:update
unassign_knowledge_connector_from_knowledge_baseRemove a knowledge connector from a knowledge base.knowledgeSource:update
assign_knowledge_base_to_agentAssign a knowledge base to an agent.knowledgeSource:update
unassign_knowledge_base_from_agentRemove a knowledge base from an agent.knowledgeSource:update
assign_knowledge_connector_to_agentDirectly assign a knowledge connector to an agent (bypassing knowledge base).knowledgeSource:update
unassign_knowledge_connector_from_agentRemove a directly-assigned knowledge connector from an agent.knowledgeSource:update

query_knowledge_sources

Required RBAC permission: knowledgeSource:query

Input
ParameterTypeRequiredDescription
querystringYesThe user's original query, passed verbatim without rephrasing or expansion.
documentFilterobjectNoOptional. Narrows the search to a subset of the indexed documents by their source metadata — for example {"spaceKey": "DEV"} or {"labels": ["release-2.0"]}. Keys are ANDed; a list of values for one key is ORed. Matches both single values and list-valued metadata. Only use this when the user's request explicitly names a subset to search; do NOT infer one from the topic of the question, and do NOT guess key or value names. If a filter matches nothing, the response lists the values that actually exist so the call can be retried with a real one.
Output
FieldTypeRequiredDescription
resultsany[]YesRetrieved knowledge results.
totalChunksnumberYesThe number of result chunks returned.
citationInstructionstringNoHow to cite these results: back each claim with a verbatim quote tagged with the source chunk's ref.
filterDiagnosticstringNoPresent only when documentFilter matched no documents. Names the values that do exist for the keys that were filtered on, so the search can be retried.

create_knowledge_base

Required RBAC permission: knowledgeSource:create

Input
ParameterTypeRequiredDescription
initialGrantsobject[]No
initialGrants[].subjectobjectYes
initialGrants[].subject.type"user" | "team" | "serviceAccount" | "role" | "organization"Yes
initialGrants[].subject.idstring | "*"Yes
initialGrants[].actionsstring[]Yes
namestringYesName of the knowledge base.
descriptionstring | nullNoDescription of the knowledge base.
Output
FieldTypeRequiredDescription
knowledgeBaseobjectYesThe requested knowledge base.
knowledgeBase.idstringYesThe knowledge base ID.
knowledgeBase.organizationIdstringYesThe organization ID.
knowledgeBase.namestringYesThe knowledge base name.
knowledgeBase.descriptionstring | nullYesThe knowledge base description, if any.
knowledgeBase.statusstringYesThe knowledge base status.

get_knowledge_bases

Required RBAC permission: knowledgeSource:read

This tool takes no arguments.

Output
FieldTypeRequiredDescription
knowledgeBasesobject[]YesKnowledge bases in the organization.
knowledgeBases[].idstringYesThe knowledge base ID.
knowledgeBases[].organizationIdstringYesThe organization ID.
knowledgeBases[].namestringYesThe knowledge base name.
knowledgeBases[].descriptionstring | nullYesThe knowledge base description, if any.
knowledgeBases[].statusstringYesThe knowledge base status.

get_knowledge_base

Required RBAC permission: knowledgeSource:read

Input
ParameterTypeRequiredDescription
idstringYesKnowledge base ID.
Output
FieldTypeRequiredDescription
knowledgeBaseobjectYesThe requested knowledge base.
knowledgeBase.idstringYesThe knowledge base ID.
knowledgeBase.organizationIdstringYesThe organization ID.
knowledgeBase.namestringYesThe knowledge base name.
knowledgeBase.descriptionstring | nullYesThe knowledge base description, if any.
knowledgeBase.statusstringYesThe knowledge base status.

update_knowledge_base

Required RBAC permission: knowledgeSource:update

Input
ParameterTypeRequiredDescription
idstringYesKnowledge base ID.
namestringNoNew knowledge base name.
descriptionstring | nullNoNew knowledge base description.
Output
FieldTypeRequiredDescription
knowledgeBaseobjectYesThe requested knowledge base.
knowledgeBase.idstringYesThe knowledge base ID.
knowledgeBase.organizationIdstringYesThe organization ID.
knowledgeBase.namestringYesThe knowledge base name.
knowledgeBase.descriptionstring | nullYesThe knowledge base description, if any.
knowledgeBase.statusstringYesThe knowledge base status.

delete_knowledge_base

Required RBAC permission: knowledgeSource:delete

Input
ParameterTypeRequiredDescription
idstringYesKnowledge base ID.

create_knowledge_connector

Required RBAC permission: knowledgeSource:create

Input
ParameterTypeRequiredDescription
initialGrantsobject[]No
initialGrants[].subjectobjectYes
initialGrants[].subject.type"user" | "team" | "serviceAccount" | "role" | "organization"Yes
initialGrants[].subject.idstring | "*"Yes
initialGrants[].actionsstring[]Yes
namestringYesName of the knowledge connector.
connector_typestringYesType of the knowledge connector (for example jira, confluence, or google_drive).
configobjectYesProvider-specific configuration object.
descriptionstring | nullNoDescription of the knowledge connector.
sync_permissions_from_sourcebooleanNoMirror each document's access control from the source, so a query only returns what the caller could open there. Requires an enterprise license and a connector type that supports it.
Output
FieldTypeRequiredDescription
knowledgeConnectorobjectYesThe requested knowledge connector.
knowledgeConnector.idstringYesThe knowledge connector ID.
knowledgeConnector.organizationIdstringYesThe organization ID.
knowledgeConnector.knowledgeBaseIdstring | nullNo
knowledgeConnector.namestringYesThe connector name.
knowledgeConnector.connectorTypestringYesThe connector type.
knowledgeConnector.descriptionstring | nullYesThe connector description, if any.
knowledgeConnector.enabledbooleanNo
knowledgeConnector.configanyYesThe provider-specific connector configuration.

get_knowledge_connectors

Required RBAC permission: knowledgeSource:read

This tool takes no arguments.

Output
FieldTypeRequiredDescription
knowledgeConnectorsobject[]YesKnowledge connectors in the organization.
knowledgeConnectors[].idstringYesThe knowledge connector ID.
knowledgeConnectors[].organizationIdstringYesThe organization ID.
knowledgeConnectors[].knowledgeBaseIdstring | nullNo
knowledgeConnectors[].namestringYesThe connector name.
knowledgeConnectors[].connectorTypestringYesThe connector type.
knowledgeConnectors[].descriptionstring | nullYesThe connector description, if any.
knowledgeConnectors[].enabledbooleanNo
knowledgeConnectors[].configanyYesThe provider-specific connector configuration.

get_knowledge_connector

Required RBAC permission: knowledgeSource:read

Input
ParameterTypeRequiredDescription
idstringYesKnowledge connector ID.
Output
FieldTypeRequiredDescription
knowledgeConnectorobjectYesThe requested knowledge connector.
knowledgeConnector.idstringYesThe knowledge connector ID.
knowledgeConnector.organizationIdstringYesThe organization ID.
knowledgeConnector.knowledgeBaseIdstring | nullNo
knowledgeConnector.namestringYesThe connector name.
knowledgeConnector.connectorTypestringYesThe connector type.
knowledgeConnector.descriptionstring | nullYesThe connector description, if any.
knowledgeConnector.enabledbooleanNo
knowledgeConnector.configanyYesThe provider-specific connector configuration.

update_knowledge_connector

Required RBAC permission: knowledgeSource:update

Input
ParameterTypeRequiredDescription
idstringYesKnowledge connector ID.
namestringNoNew connector name.
descriptionstring | nullNoNew connector description.
enabledbooleanNoWhether the connector is enabled.
visibility"org-wide" | "team-scoped" | "auto-sync-permissions"NoUpdated visibility for the connector.
team_idsstring[]NoUpdated team IDs for a team-scoped connector.
configobjectNoUpdated connector configuration (provider-specific settings).
Output
FieldTypeRequiredDescription
knowledgeConnectorobjectYesThe requested knowledge connector.
knowledgeConnector.idstringYesThe knowledge connector ID.
knowledgeConnector.organizationIdstringYesThe organization ID.
knowledgeConnector.knowledgeBaseIdstring | nullNo
knowledgeConnector.namestringYesThe connector name.
knowledgeConnector.connectorTypestringYesThe connector type.
knowledgeConnector.descriptionstring | nullYesThe connector description, if any.
knowledgeConnector.enabledbooleanNo
knowledgeConnector.configanyYesThe provider-specific connector configuration.

delete_knowledge_connector

Required RBAC permission: knowledgeSource:delete

Input
ParameterTypeRequiredDescription
idstringYesKnowledge connector ID.

assign_knowledge_connector_to_knowledge_base

Required RBAC permission: knowledgeSource:update

Input
ParameterTypeRequiredDescription
connector_idstringYesKnowledge connector ID.
knowledge_base_idstringYesKnowledge base ID.

unassign_knowledge_connector_from_knowledge_base

Required RBAC permission: knowledgeSource:update

Input
ParameterTypeRequiredDescription
connector_idstringYesKnowledge connector ID.
knowledge_base_idstringYesKnowledge base ID.

assign_knowledge_base_to_agent

Required RBAC permission: knowledgeSource:update

Input
ParameterTypeRequiredDescription
knowledge_base_idstringYesKnowledge base ID.
agent_idstringYesAgent ID.

unassign_knowledge_base_from_agent

Required RBAC permission: knowledgeSource:update

Input
ParameterTypeRequiredDescription
knowledge_base_idstringYesKnowledge base ID.
agent_idstringYesAgent ID.

assign_knowledge_connector_to_agent

Required RBAC permission: knowledgeSource:update

Input
ParameterTypeRequiredDescription
connector_idstringYesKnowledge connector ID.
agent_idstringYesAgent ID.

unassign_knowledge_connector_from_agent

Required RBAC permission: knowledgeSource:update

Input
ParameterTypeRequiredDescription
connector_idstringYesKnowledge connector ID.
agent_idstringYesAgent ID.

MCP Servers

ToolDescriptionRequired RBAC Permission
search_private_mcp_registrySearch the private MCP registry for available MCP servers.mcpRegistry:read
get_mcp_serversList all MCP servers from the catalog.mcpRegistry:read
get_mcp_server_toolsGet all tools available for a specific MCP server by its catalog ID (from get_mcp_servers).mcpRegistry:read
edit_mcp_descriptionEdit an MCP server's display information and metadata.update on the MCP registry entry (granted per item)
edit_mcp_configEdit an MCP server's technical configuration.update on the MCP registry entry (granted per item)
create_mcp_serverCreate a new MCP server in the private registry.mcpRegistry:create
deploy_mcp_serverDeploy (install) an MCP server from the catalog.update on the MCP registry entry (granted per item)
list_mcp_server_deploymentsList deployed (installed) MCP server instances the current user can read.mcpRegistry:read
get_mcp_server_logsGet recent container logs from a deployed local (K8s) MCP server.mcpRegistry:read
reload_mcp_server_toolsRe-discover a deployed MCP server's tools from the live server and refresh Archestra's tool catalog for it — picks up added, removed, and changed tools (names, descriptions, and input schemas) with...mcpServerInstallation:create

search_private_mcp_registry

Required RBAC permission: mcpRegistry:read

Input
ParameterTypeRequiredDescription
querystringNoOptional search query to filter MCP servers by name or description.
Output
FieldTypeRequiredDescription
itemsobject[]YesCatalog items matching the search.
items[].idstringYesThe catalog item ID.
items[].namestringYesThe MCP server name.
items[].versionstring | nullYesThe version, if provided.
items[].descriptionstring | nullYesThe server description, if any.
items[].serverType"local" | "remote" | "builtin" | "app"YesServer type: local, remote, builtin, or app (user-generated App).
items[].serverUrlstring | nullYesThe remote server URL, if applicable.
items[].repositorystring | nullYesThe repository URL, if available.

get_mcp_servers

Required RBAC permission: mcpRegistry:read

This tool takes no arguments.

Output
FieldTypeRequiredDescription
itemsobject[]YesAvailable MCP servers.
items[].idstringYesThe catalog item ID.
items[].namestringYesThe MCP server name.
items[].iconstring | nullYesThe emoji icon, if any.
items[].descriptionstring | nullYesThe server description, if any.
items[].scope"personal" | "team" | "org"NoThe visibility scope of the server.
items[].teamsobject[]YesTeams attached to a team-scoped server.
items[].teams[].idstringYesThe team ID.
items[].teams[].namestringYesThe team name.

get_mcp_server_tools

Required RBAC permission: mcpRegistry:read

Input
ParameterTypeRequiredDescription
mcpServerIdstringYesThe catalog ID of the MCP server.
Output
FieldTypeRequiredDescription
toolsobject[]YesTools exposed by the selected MCP server.
tools[].idstringYesThe tool ID.
tools[].namestringYesThe tool name.
tools[].descriptionstring | nullNoThe tool description, if any.
tools[].catalogIdstring | nullNoThe MCP catalog ID this tool belongs to.

edit_mcp_description

Required RBAC permission: update on the MCP registry entry (granted per item)

Input
ParameterTypeRequiredDescription
idstringYesThe catalog ID of the MCP server to edit. Use get_mcp_servers to look it up by name.
namestringNoDisplay name for the MCP server.
descriptionstring | nullNoDescription of the MCP server.
iconstring | nullNoEmoji icon for the MCP server.
docsUrlstring | nullNoDocumentation URL.
repositorystring | nullNoSource code repository URL.
versionstring | nullNoVersion string.
instructionsstring | nullNoSetup or usage instructions.
labelsobject[]NoKey-value labels for organization/categorization.
labels[].keystringYesLabel key.
labels[].valuestringYesLabel value.

edit_mcp_config

Required RBAC permission: update on the MCP registry entry (granted per item)

Input
ParameterTypeRequiredDescription
idstringYesThe catalog ID of the MCP server to edit. Use get_mcp_servers to look it up by name.
serverType"local" | "remote" | "builtin"NoServer type: local, remote, or builtin.
serverUrlstring | nullNo[Remote] The URL of the remote MCP server.
requiresAuthbooleanNo[Remote] Whether the server requires authentication.
authDescriptionstring | nullNo[Remote] How to set up authentication.
authFieldsobject[]No[Remote] Authentication field definitions.
authFields[].namestringYesAuth field name.
authFields[].labelstringYesHuman-readable auth field label.
authFields[].type"header" | "query" | "cookie"YesWhere to send this auth field.
authFields[].secretbooleanYesWhether this field contains secret data.
oauthConfigobjectNo[Remote] OAuth configuration for the server.
commandstringNo[Local] Command to run (for example npx, uvx, or node).
argumentsstring[]No[Local] Command-line arguments.
environmentobject[]No[Local] Environment variables for the server process.
environment[].keystringYesEnvironment variable name.
environment[].type"plain_text" | "secret" | "boolean" | "number"YesEnvironment variable value type.
environment[].valuestringNoLiteral environment variable value.
environment[].promptOnInstallationbooleanYesWhether to prompt for this value during installation.
environment[].requiredbooleanNoWhether the value is required.
environment[].descriptionstringNoDescription shown to users.
environment[].defaultanyNoDefault value.
environment[].mountedbooleanNoFor secret values, mount as a file instead of an env var.
envFromobject[]No[Local] Import env vars from Kubernetes Secrets or ConfigMaps.
envFrom[].type"secret" | "configMap"YesImport source type.
envFrom[].namestringYesSecret or ConfigMap name.
envFrom[].prefixstringNoOptional environment variable prefix.
dockerImagestringNo[Local] Custom Docker image.
serviceAccountstringNo[Local] Kubernetes ServiceAccount name.
transportType"stdio" | "streamable-http"No[Local] Transport type.
httpPortnumberNo[Local] HTTP port for streamable-http transport.
httpPathstringNo[Local] HTTP path for streamable-http transport.
nodePortnumberNo[Local] Kubernetes NodePort for local development.
imagePullSecretsobject[]No[Local] Image pull secrets for private registries.
imagePullSecrets[].source"existing"YesImage pull secret source.
imagePullSecrets[].namestringYesExisting Kubernetes secret name.
deploymentSpecYamlstringNo[Local] Custom Kubernetes deployment YAML override.
installationCommandstringNo[Local] Command to install the MCP server package.
userConfigobjectNoUser-configurable fields shown during installation.

create_mcp_server

Required RBAC permission: mcpRegistry:create

Input
ParameterTypeRequiredDescription
namestringYesDisplay name for the MCP server.
descriptionstring | nullNoDescription of the MCP server.
iconstring | nullNoEmoji icon for the MCP server.
docsUrlstring | nullNoDocumentation URL.
repositorystring | nullNoSource code repository URL.
versionstring | nullNoVersion string.
instructionsstring | nullNoSetup or usage instructions.
labelsobject[]NoKey-value labels for organization/categorization.
labels[].keystringYesLabel key.
labels[].valuestringYesLabel value.
environmentIdstring | nullNoID of the environment this server belongs to. Pass null for the default environment. Omit it to use your own environment, or the organization's landing environment for new MCP servers when you have none.
initialGrantsobject[]No
initialGrants[].subjectobjectYes
initialGrants[].subject.type"user" | "team" | "serviceAccount" | "role" | "organization"Yes
initialGrants[].subject.idstring | "*"Yes
initialGrants[].actionsstring[]Yes
serverType"local" | "remote" | "builtin"NoServer type: local, remote, or builtin.
serverUrlstring | nullNo[Remote] The URL of the remote MCP server.
requiresAuthbooleanNo[Remote] Whether the server requires authentication.
authDescriptionstring | nullNo[Remote] How to set up authentication.
authFieldsobject[]No[Remote] Authentication field definitions.
authFields[].namestringYesAuth field name.
authFields[].labelstringYesHuman-readable auth field label.
authFields[].type"header" | "query" | "cookie"YesWhere to send this auth field.
authFields[].secretbooleanYesWhether this field contains secret data.
oauthConfigobjectNo[Remote] OAuth configuration for the server.
commandstringNo[Local] Command to run (for example npx, uvx, or node).
argumentsstring[]No[Local] Command-line arguments.
environmentobject[]No[Local] Environment variables for the server process.
environment[].keystringYesEnvironment variable name.
environment[].type"plain_text" | "secret" | "boolean" | "number"YesEnvironment variable value type.
environment[].valuestringNoLiteral environment variable value.
environment[].promptOnInstallationbooleanYesWhether to prompt for this value during installation.
environment[].requiredbooleanNoWhether the value is required.
environment[].descriptionstringNoDescription shown to users.
environment[].defaultanyNoDefault value.
environment[].mountedbooleanNoFor secret values, mount as a file instead of an env var.
envFromobject[]No[Local] Import env vars from Kubernetes Secrets or ConfigMaps.
envFrom[].type"secret" | "configMap"YesImport source type.
envFrom[].namestringYesSecret or ConfigMap name.
envFrom[].prefixstringNoOptional environment variable prefix.
dockerImagestringNo[Local] Custom Docker image.
serviceAccountstringNo[Local] Kubernetes ServiceAccount name.
transportType"stdio" | "streamable-http"No[Local] Transport type.
httpPortnumberNo[Local] HTTP port for streamable-http transport.
httpPathstringNo[Local] HTTP path for streamable-http transport.
nodePortnumberNo[Local] Kubernetes NodePort for local development.
imagePullSecretsobject[]No[Local] Image pull secrets for private registries.
imagePullSecrets[].source"existing"YesImage pull secret source.
imagePullSecrets[].namestringYesExisting Kubernetes secret name.
deploymentSpecYamlstringNo[Local] Custom Kubernetes deployment YAML override.
installationCommandstringNo[Local] Command to install the MCP server package.
userConfigobjectNoUser-configurable fields shown during installation.

deploy_mcp_server

Required RBAC permission: update on the MCP registry entry (granted per item)

Input
ParameterTypeRequiredDescription
catalogIdstringYesThe catalog ID of the MCP server to deploy.
scope"personal" | "team" | "org"NoVisibility scope for the deployment: 'personal' (default), 'team' (requires teamId), or 'org' (admins only, visible to all org members).
teamIdstringNoOptional team ID for a team-scoped deployment (required when scope='team').
agentIdsstring[]NoOptional agent IDs to assign the server's tools to after deployment.

list_mcp_server_deployments

Required RBAC permission: mcpRegistry:read

This tool takes no arguments.

get_mcp_server_logs

Required RBAC permission: mcpRegistry:read

Input
ParameterTypeRequiredDescription
serverIdstringYesThe deployment ID of the MCP server.
linesintegerNoNumber of log lines to retrieve.

reload_mcp_server_tools

Required RBAC permission: mcpServerInstallation:create

Input
ParameterTypeRequiredDescription
serverIdstringYesThe deployment ID of the MCP server whose tools should be refreshed. Use list_mcp_server_deployments to find it.

MCP Gateways

ToolDescriptionRequired RBAC Permission
create_mcp_gatewayCreate a new MCP gateway with the specified name, optional labels, and optional assigned knowledge bases or knowledge connectors.mcpGateway:create
get_mcp_gatewayGet a specific MCP gateway by ID or name.mcpGateway:read
edit_mcp_gatewayEdit an existing MCP gateway.update on the MCP gateway (granted per item)

create_mcp_gateway

Required RBAC permission: mcpGateway:create

Input
ParameterTypeRequiredDescription
initialGrantsobject[]No
initialGrants[].subjectobjectYes
initialGrants[].subject.type"user" | "team" | "serviceAccount" | "role" | "organization"Yes
initialGrants[].subject.idstring | "*"Yes
initialGrants[].actionsstring[]Yes
namestringYesName for the new resource.
labelsobject[]NoOptional key-value labels for organization and categorization.
labels[].keystringYes
labels[].valuestringYes
toolExposureMode"full" | "search_and_run_only"NoHow tools should be loaded for MCP clients and models.
accessAllToolsbooleanNoAllow dynamic tool access: search_tools/run_tool may discover and run any tool the calling user can access (MCP catalog tools and knowledge sources) without assigning it to the agent. Enabling this forces toolExposureMode to 'search_and_run_only', since dynamic access only works through the search/run dispatch surface. Defaults to false. Also gated by the organization's security settings.
accessAllSubagentsbooleanNoAllow dynamic subagent delegation: the agent may delegate to any internal agent the calling user can access, beyond explicitly-configured delegation targets (minus subagent exclusions). Defaults to false.
knowledgeBaseIdsstring[]NoKnowledge base IDs to assign to the agent. Use get_knowledge_bases first when you need to look up IDs by name.
connectorIdsstring[]NoKnowledge connector IDs to assign directly to the agent. Use get_knowledge_connectors first when you need to look up IDs by name.

get_mcp_gateway

Required RBAC permission: mcpGateway:read

Input
ParameterTypeRequiredDescription
idstringNoThe ID of the MCP gateway to fetch. Prefer the ID when you already have it.
namestringNoThe exact name of the MCP gateway to fetch when you do not already have the ID.
Output
FieldTypeRequiredDescription
idstringYesThe resource ID.
namestringYesThe resource name.
descriptionstring | nullYesThe resource description, if any.
iconstring | nullYesThe emoji icon, if configured.
scope"personal" | "team" | "org"YesThe visibility scope.
toolExposureMode"full" | "search_and_run_only"YesHow tools are loaded for MCP clients and models.
accessAllToolsbooleanYesWhether search_tools/run_tool may dynamically access every tool the calling user can access.
accessAllSubagentsbooleanYesWhether the agent may delegate to every internal agent the calling user can access.
agentType"agent" | "llm_proxy" | "mcp_gateway" | "profile"YesThe resource type.
systemPromptstring | nullNo
teamsobject[]YesThe teams attached to it.
teams[].idstringYesThe team ID.
teams[].namestringYesThe team name.
labelsobject[]YesAssigned labels.
labels[].keystringYesThe label key.
labels[].valuestringYesThe label value.
toolsobject[]YesAssigned tools.
tools[].idstringYesThe assigned tool ID.
tools[].namestringYesThe tool name.
tools[].descriptionstring | nullYesThe tool description, if any.
tools[].catalogIdstring | nullYesThe MCP catalog ID the tool comes from, if any.
knowledgeBaseIdsstring[]YesAssigned knowledge base IDs.
connectorIdsstring[]YesAssigned knowledge connector IDs.
suggestedPromptsobject[]YesConfigured suggested prompts.
suggestedPrompts[].summaryTitlestringYesThe short title shown in the chat UI.
suggestedPrompts[].promptstringYesThe suggested prompt text.

edit_mcp_gateway

Required RBAC permission: update on the MCP gateway (granted per item)

Input
ParameterTypeRequiredDescription
idstringYesThe ID of the MCP gateway to edit. Use get_mcp_gateway to look it up by name first if needed.
descriptionstring | nullNoNew description for the MCP gateway.
iconstring | nullNoNew emoji icon for the MCP gateway.
labelsobject[]NoReplace the MCP gateway's labels with this set.
labels[].keystringYes
labels[].valuestringYes
namestringNoNew name for the MCP gateway.
toolExposureMode"full" | "search_and_run_only"NoHow tools should be loaded for MCP clients and models.
knowledgeBaseIdsstring[]NoReplace the MCP gateway's assigned knowledge bases with this set.
connectorIdsstring[]NoReplace the MCP gateway's directly assigned knowledge connectors with this set.

Tool Assignment

ToolDescriptionRequired RBAC Permission
bulk_assign_tools_to_agentsAssign multiple tools to multiple agents in bulk with validation and error handlingupdate on the agent (granted per item)
bulk_remove_tools_from_agentsRemove multiple tools from multiple agents in bulk.update on the agent (granted per item)
bulk_assign_tools_to_mcp_gatewaysAssign multiple tools to multiple MCP gateways in bulk with validation and error handlingupdate on the MCP gateway (granted per item)

bulk_assign_tools_to_agents

Required RBAC permission: update on the agent (granted per item)

Input
ParameterTypeRequiredDescription
assignmentsobject[]YesAssignments to create or update for agents.
assignments[].toolIdstringYesThe ID of the tool to assign.
assignments[].resolveAtCallTimebooleanNoWhen true, resolve credentials and execution target at tool call time. Prefer this for builder flows.
assignments[].credentialResolutionMode"static" | "dynamic" | "enterprise_managed"No
assignments[].mcpServerIdstring | nullNoOptional MCP server installation to pin the tool to when using static credential resolution.
assignments[].agentIdstringYesThe agent ID to assign the tool to.
Output
FieldTypeRequiredDescription
succeededobject[]YesAssignments that succeeded.
succeeded[].agentIdstringYesThe target agent ID.
succeeded[].toolIdstringYesThe tool ID.
succeeded[].errorstringNoValidation or assignment error.
succeeded[].errorCode"not_found" | "validation_error" | "forbidden"NoStructured assignment error code.
succeeded[].errorTypestringNoStructured assignment error type.
failedobject[]YesAssignments that failed.
failed[].agentIdstringYesThe target agent ID.
failed[].toolIdstringYesThe tool ID.
failed[].errorstringNoValidation or assignment error.
failed[].errorCode"not_found" | "validation_error" | "forbidden"NoStructured assignment error code.
failed[].errorTypestringNoStructured assignment error type.
duplicatesobject[]YesAssignments skipped because they already existed.
duplicates[].agentIdstringYesThe target agent ID.
duplicates[].toolIdstringYesThe tool ID.
duplicates[].errorstringNoValidation or assignment error.
duplicates[].errorCode"not_found" | "validation_error" | "forbidden"NoStructured assignment error code.
duplicates[].errorTypestringNoStructured assignment error type.

bulk_remove_tools_from_agents

Required RBAC permission: update on the agent (granted per item)

Input
ParameterTypeRequiredDescription
removalsobject[]YesTool removals to apply to agents.
removals[].agentIdstringYesThe agent ID to remove the tool from.
removals[].toolIdstringYesThe ID of the tool to remove.
Output
FieldTypeRequiredDescription
succeededobject[]YesRemovals that took effect.
succeeded[].agentIdstringYesThe target agent ID.
succeeded[].toolIdstringYesThe tool ID.
succeeded[].errorstringNoPermission or removal error.
notAssignedobject[]YesRemovals skipped because the tool was not assigned to the agent (Custom mode).
notAssigned[].agentIdstringYesThe target agent ID.
notAssigned[].toolIdstringYesThe tool ID.
notAssigned[].errorstringNoPermission or removal error.
failedobject[]YesRemovals that failed (e.g. no permission, agent not found, or a tool that cannot be excluded).
failed[].agentIdstringYesThe target agent ID.
failed[].toolIdstringYesThe tool ID.
failed[].errorstringNoPermission or removal error.

bulk_assign_tools_to_mcp_gateways

Required RBAC permission: update on the MCP gateway (granted per item)

Input
ParameterTypeRequiredDescription
assignmentsobject[]YesAssignments to create or update for MCP gateways.
assignments[].toolIdstringYesThe ID of the tool to assign.
assignments[].resolveAtCallTimebooleanNoWhen true, resolve credentials and execution target at tool call time. Prefer this for builder flows.
assignments[].credentialResolutionMode"static" | "dynamic" | "enterprise_managed"No
assignments[].mcpServerIdstring | nullNoOptional MCP server installation to pin the tool to when using static credential resolution.
assignments[].mcpGatewayIdstringYesThe MCP gateway ID to assign the tool to.
Output
FieldTypeRequiredDescription
succeededobject[]YesAssignments that succeeded.
succeeded[].mcpGatewayIdstringYesThe target MCP gateway ID.
succeeded[].toolIdstringYesThe tool ID.
succeeded[].errorstringNoValidation or assignment error.
succeeded[].errorCode"not_found" | "validation_error" | "forbidden"NoStructured assignment error code.
succeeded[].errorTypestringNoStructured assignment error type.
failedobject[]YesAssignments that failed.
failed[].mcpGatewayIdstringYesThe target MCP gateway ID.
failed[].toolIdstringYesThe tool ID.
failed[].errorstringNoValidation or assignment error.
failed[].errorCode"not_found" | "validation_error" | "forbidden"NoStructured assignment error code.
failed[].errorTypestringNoStructured assignment error type.
duplicatesobject[]YesAssignments skipped because they already existed.
duplicates[].mcpGatewayIdstringYesThe target MCP gateway ID.
duplicates[].toolIdstringYesThe tool ID.
duplicates[].errorstringNoValidation or assignment error.
duplicates[].errorCode"not_found" | "validation_error" | "forbidden"NoStructured assignment error code.
duplicates[].errorTypestringNoStructured assignment error type.

Policies

ToolDescriptionRequired RBAC Permission
get_autonomy_policy_operatorsGet all supported policy operators with their human-readable labelstoolPolicy:read
get_tool_invocation_policiesGet all tool invocation policiestoolPolicy:read
create_tool_invocation_policyCreate a new tool invocation policytoolPolicy:create
get_tool_invocation_policyGet a specific tool invocation policy by IDtoolPolicy:read
update_tool_invocation_policyUpdate a tool invocation policytoolPolicy:update
delete_tool_invocation_policyDelete a tool invocation policy by IDtoolPolicy:delete
get_trusted_data_policiesGet all trusted data policiestoolPolicy:read
create_trusted_data_policyCreate a new trusted data policytoolPolicy:create
get_trusted_data_policyGet a specific trusted data policy by IDtoolPolicy:read
update_trusted_data_policyUpdate a trusted data policytoolPolicy:update
delete_trusted_data_policyDelete a trusted data policy by IDtoolPolicy:delete

get_autonomy_policy_operators

Required RBAC permission: toolPolicy:read

This tool takes no arguments.

Output
FieldTypeRequiredDescription
operatorsobject[]YesSupported autonomy policy operators.
operators[].value"equal" | "notEqual" | "contains" | "notContains" | "startsWith" | "endsWith" | "regex"YesThe operator enum value.
operators[].labelstringYesThe human-readable label.

get_tool_invocation_policies

Required RBAC permission: toolPolicy:read

This tool takes no arguments.

Output
FieldTypeRequiredDescription
policiesobject[]YesTool invocation policies.
policies[].idstringYesThe policy ID.
policies[].toolIdstringYesThe tool ID this policy targets.
policies[].conditionsobject[]YesConditions evaluated for the policy.
policies[].conditions[].keystringYesThe evaluated argument or context key.
policies[].conditions[].operator"equal" | "notEqual" | "contains" | "notContains" | "startsWith" | "endsWith" | "regex"YesThe comparison operator.
policies[].conditions[].valuestringYesThe comparison value.
policies[].action"allow_when_context_is_untrusted" | "block_when_context_is_untrusted" | "block_always" | "require_approval"YesThe policy action.
policies[].reasonstring | nullYesThe policy reason, if any.

create_tool_invocation_policy

Required RBAC permission: toolPolicy:create

Input
ParameterTypeRequiredDescription
toolIdstringYesThe ID of the tool (UUID from the tools table).
conditionsobject[]YesArray of conditions that must all match. Empty array means unconditional.
conditions[].keystringYesThe argument name or context path to evaluate (for example url or context.externalAgentId).
conditions[].operator"equal" | "notEqual" | "contains" | "notContains" | "startsWith" | "endsWith" | "regex"YesThe comparison operator.
conditions[].valuestringYesThe value to compare against.
action"allow_when_context_is_untrusted" | "block_when_context_is_untrusted" | "block_always" | "require_approval"YesThe action to take when the policy matches.
reasonstringNoHuman-readable explanation for why this policy exists.
Output
FieldTypeRequiredDescription
policyobjectYesThe requested tool invocation policy.
policy.idstringYesThe policy ID.
policy.toolIdstringYesThe tool ID this policy targets.
policy.conditionsobject[]YesConditions evaluated for the policy.
policy.conditions[].keystringYesThe evaluated argument or context key.
policy.conditions[].operator"equal" | "notEqual" | "contains" | "notContains" | "startsWith" | "endsWith" | "regex"YesThe comparison operator.
policy.conditions[].valuestringYesThe comparison value.
policy.action"allow_when_context_is_untrusted" | "block_when_context_is_untrusted" | "block_always" | "require_approval"YesThe policy action.
policy.reasonstring | nullYesThe policy reason, if any.

get_tool_invocation_policy

Required RBAC permission: toolPolicy:read

Input
ParameterTypeRequiredDescription
idstringYesThe ID of the tool invocation policy.
Output
FieldTypeRequiredDescription
policyobjectYesThe requested tool invocation policy.
policy.idstringYesThe policy ID.
policy.toolIdstringYesThe tool ID this policy targets.
policy.conditionsobject[]YesConditions evaluated for the policy.
policy.conditions[].keystringYesThe evaluated argument or context key.
policy.conditions[].operator"equal" | "notEqual" | "contains" | "notContains" | "startsWith" | "endsWith" | "regex"YesThe comparison operator.
policy.conditions[].valuestringYesThe comparison value.
policy.action"allow_when_context_is_untrusted" | "block_when_context_is_untrusted" | "block_always" | "require_approval"YesThe policy action.
policy.reasonstring | nullYesThe policy reason, if any.

update_tool_invocation_policy

Required RBAC permission: toolPolicy:update

Input
ParameterTypeRequiredDescription
idstringYesThe ID of the tool invocation policy to update.
toolIdstringNoThe ID of the tool (UUID from the tools table).
conditionsobject[]NoUpdated array of conditions that must all match. Empty array means unconditional.
conditions[].keystringYesThe argument name or context path to evaluate (for example url or context.externalAgentId).
conditions[].operator"equal" | "notEqual" | "contains" | "notContains" | "startsWith" | "endsWith" | "regex"YesThe comparison operator.
conditions[].valuestringYesThe value to compare against.
action"allow_when_context_is_untrusted" | "block_when_context_is_untrusted" | "block_always" | "require_approval"NoUpdated action to take when the policy matches.
reasonstring | nullNoUpdated human-readable explanation for why this policy exists.
Output
FieldTypeRequiredDescription
policyobjectYesThe requested tool invocation policy.
policy.idstringYesThe policy ID.
policy.toolIdstringYesThe tool ID this policy targets.
policy.conditionsobject[]YesConditions evaluated for the policy.
policy.conditions[].keystringYesThe evaluated argument or context key.
policy.conditions[].operator"equal" | "notEqual" | "contains" | "notContains" | "startsWith" | "endsWith" | "regex"YesThe comparison operator.
policy.conditions[].valuestringYesThe comparison value.
policy.action"allow_when_context_is_untrusted" | "block_when_context_is_untrusted" | "block_always" | "require_approval"YesThe policy action.
policy.reasonstring | nullYesThe policy reason, if any.

delete_tool_invocation_policy

Required RBAC permission: toolPolicy:delete

Input
ParameterTypeRequiredDescription
idstringYesThe ID of the tool invocation policy.
Output
FieldTypeRequiredDescription
successtrueYesWhether the delete succeeded.

get_trusted_data_policies

Required RBAC permission: toolPolicy:read

This tool takes no arguments.

Output
FieldTypeRequiredDescription
policiesobject[]YesTrusted data policies.
policies[].idstringYesThe policy ID.
policies[].toolIdstringYesThe tool ID this policy targets.
policies[].conditionsobject[]YesConditions evaluated for the policy.
policies[].conditions[].keystringYesThe evaluated result key or path.
policies[].conditions[].operator"equal" | "notEqual" | "contains" | "notContains" | "startsWith" | "endsWith" | "regex"YesThe comparison operator.
policies[].conditions[].valuestringYesThe comparison value.
policies[].action"block_always" | "mark_as_trusted" | "mark_as_untrusted" | "sanitize_with_dual_llm"YesThe policy action.
policies[].descriptionstring | nullYesThe policy description, if any.

create_trusted_data_policy

Required RBAC permission: toolPolicy:create

Input
ParameterTypeRequiredDescription
toolIdstringYesThe ID of the tool (UUID from the tools table).
conditionsobject[]YesArray of conditions that must all match. Empty array means unconditional.
conditions[].keystringYesThe attribute key or path in the tool result to evaluate (for example emails[*].from or source).
conditions[].operator"equal" | "notEqual" | "contains" | "notContains" | "startsWith" | "endsWith" | "regex"YesThe comparison operator.
conditions[].valuestringYesThe value to compare against.
action"block_always" | "mark_as_trusted" | "mark_as_untrusted" | "sanitize_with_dual_llm"YesThe action to take when the policy matches.
descriptionstringNoHuman-readable explanation for why this policy exists.
Output
FieldTypeRequiredDescription
policyobjectYesThe requested trusted data policy.
policy.idstringYesThe policy ID.
policy.toolIdstringYesThe tool ID this policy targets.
policy.conditionsobject[]YesConditions evaluated for the policy.
policy.conditions[].keystringYesThe evaluated result key or path.
policy.conditions[].operator"equal" | "notEqual" | "contains" | "notContains" | "startsWith" | "endsWith" | "regex"YesThe comparison operator.
policy.conditions[].valuestringYesThe comparison value.
policy.action"block_always" | "mark_as_trusted" | "mark_as_untrusted" | "sanitize_with_dual_llm"YesThe policy action.
policy.descriptionstring | nullYesThe policy description, if any.

get_trusted_data_policy

Required RBAC permission: toolPolicy:read

Input
ParameterTypeRequiredDescription
idstringYesThe ID of the trusted data policy.
Output
FieldTypeRequiredDescription
policyobjectYesThe requested trusted data policy.
policy.idstringYesThe policy ID.
policy.toolIdstringYesThe tool ID this policy targets.
policy.conditionsobject[]YesConditions evaluated for the policy.
policy.conditions[].keystringYesThe evaluated result key or path.
policy.conditions[].operator"equal" | "notEqual" | "contains" | "notContains" | "startsWith" | "endsWith" | "regex"YesThe comparison operator.
policy.conditions[].valuestringYesThe comparison value.
policy.action"block_always" | "mark_as_trusted" | "mark_as_untrusted" | "sanitize_with_dual_llm"YesThe policy action.
policy.descriptionstring | nullYesThe policy description, if any.

update_trusted_data_policy

Required RBAC permission: toolPolicy:update

Input
ParameterTypeRequiredDescription
idstringYesThe ID of the trusted data policy to update.
toolIdstringNoThe ID of the tool (UUID from the tools table).
conditionsobject[]NoUpdated array of conditions that must all match. Empty array means unconditional.
conditions[].keystringYesThe attribute key or path in the tool result to evaluate (for example emails[*].from or source).
conditions[].operator"equal" | "notEqual" | "contains" | "notContains" | "startsWith" | "endsWith" | "regex"YesThe comparison operator.
conditions[].valuestringYesThe value to compare against.
action"block_always" | "mark_as_trusted" | "mark_as_untrusted" | "sanitize_with_dual_llm"NoUpdated action to take when the policy matches.
descriptionstring | nullNoUpdated human-readable explanation for why this policy exists.
Output
FieldTypeRequiredDescription
policyobjectYesThe requested trusted data policy.
policy.idstringYesThe policy ID.
policy.toolIdstringYesThe tool ID this policy targets.
policy.conditionsobject[]YesConditions evaluated for the policy.
policy.conditions[].keystringYesThe evaluated result key or path.
policy.conditions[].operator"equal" | "notEqual" | "contains" | "notContains" | "startsWith" | "endsWith" | "regex"YesThe comparison operator.
policy.conditions[].valuestringYesThe comparison value.
policy.action"block_always" | "mark_as_trusted" | "mark_as_untrusted" | "sanitize_with_dual_llm"YesThe policy action.
policy.descriptionstring | nullYesThe policy description, if any.

delete_trusted_data_policy

Required RBAC permission: toolPolicy:delete

Input
ParameterTypeRequiredDescription
idstringYesThe ID of the trusted data policy.
Output
FieldTypeRequiredDescription
successtrueYesWhether the delete succeeded.

Guardrails

ToolDescriptionRequired RBAC Permission
list_peer_messagesList held messages as JSON: {"messages":[{"message_id":"id","expires_at":"ISO-8601"}]}.None (no additional RBAC permission required)
read_peer_messageReturn a held message as text, or refusal feedback with remedy offers.None (no additional RBAC permission required)
get_openappa_yellRead a saved OpenAPPA report from the current organization, including its originating user or service account.openappaDiagnostics:read
list_openappa_consultsList the external consults OpenAPPA recorded for one session, newest first: every annotator, context provider, authority, sanitizer and audience source it asked, with the outcome, the HTTP status, ...openappaDiagnostics:read
create_guardrails_repositoryCopy the OpenAPPA configuration template into a private GitHub repository, seed it with the current policy and battery declarations, and start GitHub sync.organizationSettings:update
yellSave confusing OpenAPPA blocks or remedies and their diagnostic archive for review in the Guardrails Yells tab.None (no additional RBAC permission required)
get_guardrails_policyRead organization.appa.toml and its revision before changing guardrails.openappaPolicy:read
inspect_guardrails_serverInspect one caller-readable MCP catalog's stored tool names, descriptions, input schemas and current policy coverage.openappaPolicy:read
list_guardrails_battery_fitsList the batteries that fit the MCP servers you can see and are not declared yet, or only those fitting one server when mcpServerId is a catalog ID.openappaPolicy:read
validate_guardrails_policyValidate proposed organization.appa.toml without applying changes.openappaPolicy:read
preview_guardrails_policy_changeValidate a proposed change to organization.appa.toml and return its unified diff and changed line counts.openappaPolicy:read
update_guardrails_policyPublish a change to organization.appa.toml.openappaPolicy:update
get_guardrails_policy_change_statusCheck the review state of an OpenAPPA policy pull request and whether GitHub sync has processed the merged policy.openappaPolicy:read
get_remedy_plansRead why the organization's guardrails policy blocked a tool call, and which remedy plans the policy offers.None (no additional RBAC permission required)
execute_remedy_planApply a remedy plan that the organization's guardrails policy offers for a blocked call.None (no additional RBAC permission required)
list_runtime_credentialsList reusable credential definitions visible to the caller, including whether a personal or organization connection is configured.credential:read
get_runtime_credentialRead one reusable credential definition and its usage.credential:read
create_runtime_credentialCreate credential metadata.credential:create
update_runtime_credentialUpdate metadata for an existing credential.credential:update
delete_runtime_credentialDelete an unused credential and its connection.credential:delete
request_runtime_credential_setupAsk the person to create and connect a GitHub App through the native chat dialog.credential:create

list_peer_messages

Required RBAC permission: None (no additional RBAC permission required)

This tool takes no arguments.

read_peer_message

Required RBAC permission: None (no additional RBAC permission required)

Input
ParameterTypeRequiredDescription
message_idstringYes

get_openappa_yell

Required RBAC permission: openappaDiagnostics:read

Input
ParameterTypeRequiredDescription
idstringYes

list_openappa_consults

Required RBAC permission: openappaDiagnostics:read

Input
ParameterTypeRequiredDescription
sessionIdstringYesThe session to read, such as the sessionId of a yell.
outcome"answered" | "unregistered" | "unreachable" | "dismissed" | "non_success" | "timeout" | "transport" | "malformed" | "oversized" | "unsupported_version" | "module_error" | "module_panicked"NoOnly consults with this outcome, such as non_success.
externalNamestringNoOnly consults of this external, such as github.repository-visibility.
role"authority" | "sanitizer" | "annotator" | "audience_source" | "input" | "context_provider"NoOnly consults of externals in this role, such as annotator.

create_guardrails_repository

Required RBAC permission: organizationSettings:update

Input
ParameterTypeRequiredDescription
ownerstringYes
namestringYes
githubAppConfigIdstringYes
interval"15m" | "1h" | "1d"No

yell

Required RBAC permission: None (no additional RBAC permission required)

Input
ParameterTypeRequiredDescription
messagestringYes
with_trajectorybooleanYes

get_guardrails_policy

Required RBAC permission: openappaPolicy:read

This tool takes no arguments.

inspect_guardrails_server

Required RBAC permission: openappaPolicy:read

Input
ParameterTypeRequiredDescription
mcpServerIdstringYesThe exact MCP catalog ID to inspect.

list_guardrails_battery_fits

Required RBAC permission: openappaPolicy:read

Input
ParameterTypeRequiredDescription
mcpServerIdstring | nullYesThe catalog ID of one MCP server, or null for every server you can see.

validate_guardrails_policy

Required RBAC permission: openappaPolicy:read

Input
ParameterTypeRequiredDescription
contentstringYes

preview_guardrails_policy_change

Required RBAC permission: openappaPolicy:read

Input
ParameterTypeRequiredDescription
contentstring | nullNoThe complete policy text. Use it only for a first policy or a full rewrite. Leave it empty when you send edits.
editsobject[] | nullNoExact-text replacements applied in order to the current policy, each to the result of the one before. Use them to change an existing policy. To insert rules, replace an anchor line with the new rules followed by that same anchor line.
expectedRevisionintegerYesThe revision get_guardrails_policy returned.

update_guardrails_policy

Required RBAC permission: openappaPolicy:update

Input
ParameterTypeRequiredDescription
contentstring | nullNoThe complete policy text. Use it only for a first policy or a full rewrite. Leave it empty when you send edits.
editsobject[] | nullNoExact-text replacements applied in order to the current policy, each to the result of the one before. Use them to change an existing policy. To insert rules, replace an anchor line with the new rules followed by that same anchor line.
expectedRevisionintegerYesThe revision get_guardrails_policy returned.
titlestringNo
summarystringNo

get_guardrails_policy_change_status

Required RBAC permission: openappaPolicy:read

Input
ParameterTypeRequiredDescription
numberintegerYes

get_remedy_plans

Required RBAC permission: None (no additional RBAC permission required)

Input
ParameterTypeRequiredDescription
toolstringYes
argumentsstring | objectYes
rulingstringYes
noticeobjectYes
notice.v1Yes
notice.call_idstringYes
notice.namespacestringNo
notice.customtrueNo

execute_remedy_plan

Required RBAC permission: None (no additional RBAC permission required)

Input
ParameterTypeRequiredDescription
offer_idstringYes
planstringNo
labelobjectNo
label.truststringNo
label.audiencestring[]No
return_schemaobjectNo

list_runtime_credentials

Required RBAC permission: credential:read

This tool takes no arguments.

get_runtime_credential

Required RBAC permission: credential:read

Input
ParameterTypeRequiredDescription
keystringYes

create_runtime_credential

Required RBAC permission: credential:create

Input
ParameterTypeRequiredDescription
keystringYes
namestringYes
kind"secret" | "github_app" | "github_app_user"No
githubUrlstring | nullNo
appIdstring | nullNo
installationIdstring | nullNo
githubClientIdstring | nullNo
githubAppCredentialKeystring | nullNo
descriptionstringNo
iconstring | nullNo
allowPersonalbooleanNo
allowOrganizationbooleanNo

update_runtime_credential

Required RBAC permission: credential:update

Input
ParameterTypeRequiredDescription
keystringYes
changesobjectYes
changes.namestringNo
changes.githubUrlstring | nullNo
changes.appIdstring | nullNo
changes.installationIdstring | nullNo
changes.githubClientIdstring | nullNo
changes.githubAppCredentialKeystring | nullNo
changes.descriptionstringNo
changes.iconstring | nullNo

delete_runtime_credential

Required RBAC permission: credential:delete

Input
ParameterTypeRequiredDescription
keystringYes

request_runtime_credential_setup

Required RBAC permission: credential:create

Input
ParameterTypeRequiredDescription
kind"github_app"Yes

Limits

ToolDescriptionRequired RBAC Permission
create_limitCreate a new cost or usage limit for an organization, team, agent, user, virtual key, environment, or MCP gateway.llmLimit:create
get_limitsRetrieve all limits, optionally filtered by entity type and/or entity ID.llmLimit:read
update_limitUpdate mutable fields on an existing limit.llmLimit:update
delete_limitDelete an existing limit by ID.llmLimit:delete
get_agent_token_usageGet the total token usage (input and output) for a specific agent.llmLimit:read
get_llm_proxy_token_usageGet the total token usage (input and output) for the LLM Proxy.llmLimit:read

create_limit

Required RBAC permission: llmLimit:create

Input
ParameterTypeRequiredDescription
entity_type"organization" | "team" | "agent" | "user" | "virtual_key" | "environment"YesThe type of entity to apply the limit to.
entity_idstringYesThe ID of the entity (organization, team, agent, user, virtual_key, or environment).
limit_type"token_cost" | "mcp_server_calls" | "tool_calls"YesThe type of limit to apply.
limit_valuenumberYesThe limit value (tokens or count depending on limit type).
modelstring[] | nullNoArray of model names. Omit for all models.
cleanup_interval"1h" | "12h" | "24h" | "1w" | "1m" | "calendar_day" | "calendar_week_sunday" | "calendar_week_monday" | "calendar_month"NoOptional cleanup interval for this limit. Omit to use the calendar-month default.
mcp_server_namestringNoMCP server name. Required for mcp_server_calls and tool_calls limits.
tool_namestringNoTool name. Required for tool_calls limits.
Output
FieldTypeRequiredDescription
limitobjectYes
limit.idstringYesThe limit ID.
limit.entityType"organization" | "team" | "agent" | "user" | "virtual_key" | "environment"YesThe limited entity type.
limit.entityIdstringYesThe limited entity ID.
limit.limitType"token_cost" | "mcp_server_calls" | "tool_calls"YesThe kind of limit.
limit.limitValuenumberYesThe configured limit value.
limit.cleanupInterval"1h" | "12h" | "24h" | "1w" | "1m" | "calendar_day" | "calendar_week_sunday" | "calendar_week_monday" | "calendar_month"YesHow often this limit resets.
limit.modelstring[] | nullNoModels targeted by a token_cost limit. Null or empty array means all models.
limit.mcpServerNamestring | nullNoMCP server name for MCP-specific limits, if any.
limit.toolNamestring | nullNoTool name for tool-specific limits, if any.

get_limits

Required RBAC permission: llmLimit:read

Input
ParameterTypeRequiredDescription
entity_type"organization" | "team" | "agent" | "user" | "virtual_key" | "environment"NoOptional filter by entity type.
entity_idstringNoOptional filter by entity ID.
Output
FieldTypeRequiredDescription
limitsobject[]Yes
limits[].idstringYesThe limit ID.
limits[].entityType"organization" | "team" | "agent" | "user" | "virtual_key" | "environment"YesThe limited entity type.
limits[].entityIdstringYesThe limited entity ID.
limits[].limitType"token_cost" | "mcp_server_calls" | "tool_calls"YesThe kind of limit.
limits[].limitValuenumberYesThe configured limit value.
limits[].cleanupInterval"1h" | "12h" | "24h" | "1w" | "1m" | "calendar_day" | "calendar_week_sunday" | "calendar_week_monday" | "calendar_month"YesHow often this limit resets.
limits[].modelstring[] | nullNoModels targeted by a token_cost limit. Null or empty array means all models.
limits[].mcpServerNamestring | nullNoMCP server name for MCP-specific limits, if any.
limits[].toolNamestring | nullNoTool name for tool-specific limits, if any.

update_limit

Required RBAC permission: llmLimit:update

Input
ParameterTypeRequiredDescription
idstringYesThe ID of the limit to update.
limit_valuenumberNoOptional new limit value.
cleanup_interval"1h" | "12h" | "24h" | "1w" | "1m" | "calendar_day" | "calendar_week_sunday" | "calendar_week_monday" | "calendar_month"NoOptional new cleanup interval for this limit.
Output
FieldTypeRequiredDescription
limitobjectYes
limit.idstringYesThe limit ID.
limit.entityType"organization" | "team" | "agent" | "user" | "virtual_key" | "environment"YesThe limited entity type.
limit.entityIdstringYesThe limited entity ID.
limit.limitType"token_cost" | "mcp_server_calls" | "tool_calls"YesThe kind of limit.
limit.limitValuenumberYesThe configured limit value.
limit.cleanupInterval"1h" | "12h" | "24h" | "1w" | "1m" | "calendar_day" | "calendar_week_sunday" | "calendar_week_monday" | "calendar_month"YesHow often this limit resets.
limit.modelstring[] | nullNoModels targeted by a token_cost limit. Null or empty array means all models.
limit.mcpServerNamestring | nullNoMCP server name for MCP-specific limits, if any.
limit.toolNamestring | nullNoTool name for tool-specific limits, if any.

delete_limit

Required RBAC permission: llmLimit:delete

Input
ParameterTypeRequiredDescription
idstringYesThe ID of the limit to delete.
Output
FieldTypeRequiredDescription
successtrueYes
idstringYes

get_agent_token_usage

Required RBAC permission: llmLimit:read

Input
ParameterTypeRequiredDescription
idstringNoOptional agent ID. Defaults to the current agent.
Output
FieldTypeRequiredDescription
idstringYes
totalInputTokensnumberYes
totalOutputTokensnumberYes
totalTokensnumberYes

get_llm_proxy_token_usage

Required RBAC permission: llmLimit:read

This tool takes no arguments.

Output
FieldTypeRequiredDescription
idstringYes
totalInputTokensnumberYes
totalOutputTokensnumberYes
totalTokensnumberYes

Teams

ToolDescriptionRequired RBAC Permission
create_teamCreate a new team in the organization, optionally nested under a parent team and with key-value labels.team:create
get_teamRetrieve a single team by its ID or name, including its current member count.team:read †
list_teamsList all teams in the organization, optionally filtered by a name substring.team:read †
edit_teamUpdate a team's name, description, parent, and/or labels.team:update
delete_teamDelete a team by ID.team:delete
list_team_membersList all members of a team along with their roles.team:read †
add_team_memberAdd an organization user to a team by user ID or email, optionally as an admin.team:read †
update_team_member_roleChange a team member's role between admin and member.team:read †
remove_team_memberRemove a member from a team.team:read †
list_team_external_groupsList the external identity provider groups mapped to a team for SSO team sync.team:read
add_team_external_groupMap an external identity provider group to a team for SSO team sync: users whose SSO group memberships match are automatically added to or removed from the team on login.team:read
remove_team_external_groupRemove an external group mapping from a team's SSO team sync, by mapping ID or by group identifier.team:read

† This tool enforces an additional access requirement beyond its RBAC permission — see its details below.

create_team

Required RBAC permission: team:create

Input
ParameterTypeRequiredDescription
namestringYesThe name of the team.
descriptionstringNoOptional human-readable description of the team.
rolesstring[]NoOrganization role identifiers to assign to the team. Members of this team and its descendants inherit their permissions.
parent_idstring | nullNoOptional parent team ID. Omit or pass null for a root team.
labelsobject[]NoOptional key-value labels to assign to the team for organization and categorization (e.g. cost-center, environment).
labels[].keystringYes
labels[].valuestringYes
Output
FieldTypeRequiredDescription
teamobjectYes
team.idstringYesThe team ID.
team.namestringYesThe team name.
team.descriptionstring | nullYesThe team description, if any.
team.rolesstring[]YesOrganization role identifiers assigned to the team and inherited by members of this team and its descendants.
team.parentIdstring | nullYesThe parent team ID, or null when this is a root team.
team.organizationIdstringYesThe organization the team belongs to.
team.createdBystring | nullYesThe ID of the user who created the team.
team.memberCountnumberYesThe number of members currently in the team.
team.labelsobject[]YesKey-value labels assigned to the team.
team.labels[].keystringYesThe label key.
team.labels[].valuestringYesThe label value.
team.createdAtstringYesISO timestamp when the team was created.
team.updatedAtstringYesISO timestamp when the team was last updated.

get_team

Required RBAC permission: team:read

Additional access requirement: Callers without organization-level team management (team:create) can only read teams they are a member of.

Input
ParameterTypeRequiredDescription
idstringNoThe ID of the team to fetch.
namestringNoThe name of the team to fetch (within the organization).
Output
FieldTypeRequiredDescription
teamobjectYes
team.idstringYesThe team ID.
team.namestringYesThe team name.
team.descriptionstring | nullYesThe team description, if any.
team.rolesstring[]YesOrganization role identifiers assigned to the team and inherited by members of this team and its descendants.
team.parentIdstring | nullYesThe parent team ID, or null when this is a root team.
team.organizationIdstringYesThe organization the team belongs to.
team.createdBystring | nullYesThe ID of the user who created the team.
team.memberCountnumberYesThe number of members currently in the team.
team.labelsobject[]YesKey-value labels assigned to the team.
team.labels[].keystringYesThe label key.
team.labels[].valuestringYesThe label value.
team.createdAtstringYesISO timestamp when the team was created.
team.updatedAtstringYesISO timestamp when the team was last updated.

list_teams

Required RBAC permission: team:read

Additional access requirement: Callers without organization-level team management (team:create) only see teams they are a member of.

Input
ParameterTypeRequiredDescription
namestringNoOptional case-insensitive name substring to filter by.
Output
FieldTypeRequiredDescription
teamsobject[]Yes
teams[].idstringYesThe team ID.
teams[].namestringYesThe team name.
teams[].descriptionstring | nullYesThe team description, if any.
teams[].rolesstring[]YesOrganization role identifiers assigned to the team and inherited by members of this team and its descendants.
teams[].parentIdstring | nullYesThe parent team ID, or null when this is a root team.
teams[].organizationIdstringYesThe organization the team belongs to.
teams[].createdBystring | nullYesThe ID of the user who created the team.
teams[].memberCountnumberYesThe number of members currently in the team.
teams[].labelsobject[]YesKey-value labels assigned to the team.
teams[].labels[].keystringYesThe label key.
teams[].labels[].valuestringYesThe label value.
teams[].createdAtstringYesISO timestamp when the team was created.
teams[].updatedAtstringYesISO timestamp when the team was last updated.

edit_team

Required RBAC permission: team:update

Input
ParameterTypeRequiredDescription
idstringYesThe ID of the team to update.
namestringNoOptional new team name.
descriptionstring | nullNoOptional new team description. Pass null to clear an existing description.
rolesstring[]NoReplace the team’s organization role identifiers. Members of this team and its descendants inherit their permissions. Pass [] to clear; omit to leave unchanged.
parent_idstring | nullNoMove the team under this parent. Pass null to move it to the root; omit to leave the hierarchy unchanged.
labelsobject[]NoReplace the team's labels with this set. Pass an empty array to remove all labels. Omit to leave labels unchanged.
labels[].keystringYes
labels[].valuestringYes
Output
FieldTypeRequiredDescription
teamobjectYes
team.idstringYesThe team ID.
team.namestringYesThe team name.
team.descriptionstring | nullYesThe team description, if any.
team.rolesstring[]YesOrganization role identifiers assigned to the team and inherited by members of this team and its descendants.
team.parentIdstring | nullYesThe parent team ID, or null when this is a root team.
team.organizationIdstringYesThe organization the team belongs to.
team.createdBystring | nullYesThe ID of the user who created the team.
team.memberCountnumberYesThe number of members currently in the team.
team.labelsobject[]YesKey-value labels assigned to the team.
team.labels[].keystringYesThe label key.
team.labels[].valuestringYesThe label value.
team.createdAtstringYesISO timestamp when the team was created.
team.updatedAtstringYesISO timestamp when the team was last updated.

delete_team

Required RBAC permission: team:delete

Input
ParameterTypeRequiredDescription
idstringYesThe ID of the team to delete.
Output
FieldTypeRequiredDescription
successtrueYes
idstringYes

list_team_members

Required RBAC permission: team:read

Additional access requirement: Callers without organization-level team management (team:create) can only read members of teams they are a member of.

Input
ParameterTypeRequiredDescription
team_idstringYesThe ID of the team whose members to list.
Output
FieldTypeRequiredDescription
membersobject[]Yes
members[].idstringYesThe team membership row ID.
members[].teamIdstringYesThe team the membership belongs to.
members[].userIdstringYesThe ID of the member user.
members[].role"admin" | "member"YesThe member's role within the team (admin or member).
members[].syncedFromSsobooleanYesWhether this membership is managed by SSO group sync.
members[].namestring | nullNoThe member's display name, when available.
members[].emailstringNoThe member's email, when available.
members[].createdAtstringYesISO timestamp when the membership was created.

add_team_member

Required RBAC permission: team:read

Additional access requirement: Beyond team:read, the caller must be an organization-level team manager (a role granting team:create) or an admin of the target team.

Input
ParameterTypeRequiredDescription
team_idstringYesThe ID of the team to add the member to.
userstringYesThe user to add, identified by their user ID or email address. The user must already belong to the organization.
role"admin" | "member"NoThe role to assign within the team. Defaults to 'member'.
Output
FieldTypeRequiredDescription
memberobjectYes
member.idstringYesThe team membership row ID.
member.teamIdstringYesThe team the membership belongs to.
member.userIdstringYesThe ID of the member user.
member.role"admin" | "member"YesThe member's role within the team (admin or member).
member.syncedFromSsobooleanYesWhether this membership is managed by SSO group sync.
member.namestring | nullNoThe member's display name, when available.
member.emailstringNoThe member's email, when available.
member.createdAtstringYesISO timestamp when the membership was created.

update_team_member_role

Required RBAC permission: team:read

Additional access requirement: Beyond team:read, the caller must be an organization-level team manager (a role granting team:create) or an admin of the target team.

Input
ParameterTypeRequiredDescription
team_idstringYesThe ID of the team.
user_idstringYesThe ID of the member user to update.
role"admin" | "member"YesThe new role for the member (admin or member).
Output
FieldTypeRequiredDescription
memberobjectYes
member.idstringYesThe team membership row ID.
member.teamIdstringYesThe team the membership belongs to.
member.userIdstringYesThe ID of the member user.
member.role"admin" | "member"YesThe member's role within the team (admin or member).
member.syncedFromSsobooleanYesWhether this membership is managed by SSO group sync.
member.namestring | nullNoThe member's display name, when available.
member.emailstringNoThe member's email, when available.
member.createdAtstringYesISO timestamp when the membership was created.

remove_team_member

Required RBAC permission: team:read

Additional access requirement: Beyond team:read, the caller must be an organization-level team manager (a role granting team:create) or an admin of the target team.

Input
ParameterTypeRequiredDescription
team_idstringYesThe ID of the team.
user_idstringYesThe ID of the member user to remove from the team.
Output
FieldTypeRequiredDescription
successtrueYes
teamIdstringYes
userIdstringYes

list_team_external_groups

Required RBAC permission: team:read

Input
ParameterTypeRequiredDescription
team_idstringYesThe ID of the team whose external group mappings to list.
Output
FieldTypeRequiredDescription
externalGroupsobject[]Yes
externalGroups[].idstringYesThe external group mapping ID.
externalGroups[].teamIdstringYesThe team the mapping belongs to.
externalGroups[].groupIdentifierstringYesThe external identity provider group identifier.
externalGroups[].createdAtstringYesISO timestamp when the mapping was created.

add_team_external_group

Required RBAC permission: team:read

Input
ParameterTypeRequiredDescription
team_idstringYesThe ID of the team to map the external group to.
group_identifierstringYesThe external identity provider group identifier. Format varies by provider: LDAP Distinguished Name (e.g. cn=admins,ou=groups,dc=example,dc=com), OAuth/OIDC group name from the groups claim, SAML group attribute value, or Azure AD group object ID (GUID). Matched case-insensitively.
Output
FieldTypeRequiredDescription
externalGroupobjectYes
externalGroup.idstringYesThe external group mapping ID.
externalGroup.teamIdstringYesThe team the mapping belongs to.
externalGroup.groupIdentifierstringYesThe external identity provider group identifier.
externalGroup.createdAtstringYesISO timestamp when the mapping was created.

remove_team_external_group

Required RBAC permission: team:read

Input
ParameterTypeRequiredDescription
team_idstringYesThe ID of the team.
group_idstringNoThe ID of the external group mapping to remove.
group_identifierstringNoThe external group identifier to remove, as an alternative to group_id. Matched case-insensitively.
Output
FieldTypeRequiredDescription
successtrueYes
teamIdstringYes

Plugins

ToolDescriptionRequired RBAC Permission
list_pluginsList the plugins available to you in this organization — one line per plugin with its id, client, platforms, visibility, and file count.plugin:read
get_pluginRead one plugin, including every file's exact bytes and the plugin's current contentHash.plugin:read
create_pluginCreate a plugin from an explicit file set.plugin:create
update_pluginUpdate a plugin's metadata, visibility, or entire file set.plugin:update
edit_pluginMake a targeted edit to one file of a plugin without resending the whole file set.plugin:update
delete_pluginDelete a plugin.plugin:delete

list_plugins

Required RBAC permission: plugin:read

This tool takes no arguments.

get_plugin

Required RBAC permission: plugin:read

Input
ParameterTypeRequiredDescription
idstringYesThe plugin id, as listed by list_plugins.

create_plugin

Required RBAC permission: plugin:create

Input
ParameterTypeRequiredDescription
initialGrantsobject[]No
initialGrants[].subjectobjectYes
initialGrants[].subject.type"user" | "team" | "serviceAccount" | "role" | "organization"Yes
initialGrants[].subject.idstring | "*"Yes
initialGrants[].actionsstring[]Yes
displayNamestringYesHuman-readable plugin name.
descriptionstringNoWhat the plugin does.
clientType"claude-code" | "copilot-cli" | "codex" | "cursor"YesThe coding client the payload targets: claude-code, codex, copilot-cli, or cursor.
supportedPlatformsstring[]NoOperating systems the payload supports.
filesobject[]YesThe plugin's files as { path, content, encoding?, mode? }. Hook configuration bytes are stored verbatim — review them as code, they execute on developer machines.
files[].pathstringYes
files[].contentstringYes
files[].encoding"utf8" | "base64"No
files[].mode"100644" | "100755"No

update_plugin

Required RBAC permission: plugin:update

Input
ParameterTypeRequiredDescription
idstringYesThe plugin id, as listed by list_plugins.
displayNamestringNoHuman-readable plugin name.
descriptionstringNoWhat the plugin does.
enabledbooleanNoDisabled plugins are left out of future setup commands; already-installed copies are unaffected.
supportedPlatformsstring[]NoOperating systems the payload supports.
baseContentHashstringNoRequired when files is provided. Use the current contentHash from get_plugin; the replacement is rejected if newer bytes landed first.
filesobject[]NoWHEN PROVIDED, REPLACES THE PLUGIN'S ENTIRE file set. Omit it to edit only metadata/visibility. Manual plugins only — GitHub-sourced files are read-only. For a small change to one file, prefer edit_plugin over resending every file.
files[].pathstringYes
files[].contentstringYes
files[].encoding"utf8" | "base64"No
files[].mode"100644" | "100755"No

edit_plugin

Required RBAC permission: plugin:update

Input
ParameterTypeRequiredDescription
idstringYesThe plugin id, as listed by list_plugins.
baseContentHashstringYesThe plugin's current contentHash, as returned by get_plugin. The edit is rejected when the plugin's bytes have moved past it.
pathstringYesThe plugin file to edit, from the file list returned by get_plugin. Only text (utf8) files are editable — binary files are not.
editsobject[]Nostr_replace edits applied in order to the target file; the whole edit is atomic (any failure leaves the plugin unchanged). Pass either edits or replacementContent, never both.
edits[].old_strstringYesExact text to replace; must occur exactly once in the target (add surrounding context to disambiguate).
edits[].new_strstringYesReplacement text (may be empty to delete).
replacementContentstringNoThe complete new content of the target file, replacing it outright with no old_str matching. Pass either edits or replacementContent, never both.

delete_plugin

Required RBAC permission: plugin:delete

Input
ParameterTypeRequiredDescription
idstringYesThe plugin id, as listed by list_plugins.