Skip to main content

Tool sets

tool_sets is the required manifest field that lists a Quick App's Toolsets. Each entry's type selects what it connects to. This reference lists the fields of every Toolset type and every authorization type. It is for app developers who write Quick App manifests. It assumes you know tools. The fields of the tools inside a Toolset are in Tools.

Common fields​

Every type except predefined takes these:

FieldDefaultDescription
type—Required. The Toolset type
name—The Toolset name, a string or a locale map. Required, except on dial-mcp, where it defaults to untitled-mcp-toolset. REST API and MCP tool names start with it.
description—A description, a string or a locale map
enabledtrueWhether the Toolset is used
deferredtrueWith tool discovery on, leaves the Toolset out of the first LLM request

MCP-based types and dial-app also take attachment and fallback_configuration, which apply to all their tools. See Attachments and Fallback configuration.

rest-api​

Calls HTTP endpoints. The authorization applies to every tool in the Toolset.

FieldRequiredDescription
toolsYesrestapi-tool and predefined-tool entries
authorizationNoOne of basic, bearer, client_id_secret, api_key, or forward_auth_token
response_as_attachmentNoThe default response as attachment settings of its tools
{
"type": "rest-api",
"name": "crm",
"authorization": { "type": "bearer", "token": "<CRM_TOKEN>" },
"tools": [ ... ]
}

dial-deployment​

Wraps DIAL models and applications as tools.

FieldRequiredDescription
toolsYesdeployment-tool, dial-deployment-simple, and predefined-tool entries
{
"type": "dial-deployment",
"name": "helpers",
"tools": [
{ "type": "dial-deployment-simple", "deployment_id": "<APP_ID>" },
{ "type": "predefined-tool", "template_name": "dial_rag" }
]
}

dial-app​

Points at one DIAL application or deployment, and picks how to call it when the app starts.

FieldRequiredDefaultDescription
deployment_idYes—The DIAL application or deployment ID
transportNoautoauto: MCP when the deployment advertises features.mcp, otherwise chat completion. mcp forces MCP, and fails when it isn't advertised. chat-completion forces chat completion.
allowed_toolsNo—MCP only: the tools that reach the model
hidden_from_modelNo—MCP only: tools that only hooks call
conversation_modeNo—Chat completion only: resumable conversations
  • Over MCP, every tool the deployment publishes becomes a tool, named after the Toolset.
  • Over chat completion, the deployment becomes one tool that takes a query, like dial-deployment-simple.
  • Fields that don't apply to the chosen transport are ignored with a warning.

mcp​

Connects to an MCP server by URL.

FieldRequiredDescription
mcp_server_infoYesurl, protocol (streamable_http or sse), and an optional authorization: bearer, api_key (header only), client_id_secret, or basic
allowed_toolsNoThe server's tools that reach the model; all of them when unset
hidden_from_modelNoTools that only hooks call. Each must also be in allowed_tools when that is set.
resourcesNoSee MCP resources
{
"type": "mcp",
"name": "search",
"mcp_server_info": {
"url": "https://mcp.example.com/search",
"protocol": "streamable_http",
"authorization": { "type": "bearer", "token": "<TOKEN>" }
},
"allowed_tools": ["web_search", "fetch_page"]
}

dial-mcp​

Uses an MCP Toolset registered in DIAL. Its URL and credentials are managed in DIAL, not in the manifest.

FieldRequiredDefaultDescription
deployment_idYes—The Toolset's ID in DIAL. dial_id is a deprecated alias.
transportNoHTTPHTTP or SSE
allowed_toolsNo—The tools that reach the model
hidden_from_modelNo—Tools that only hooks call
resourcesNo—See MCP resources
{ "type": "dial-mcp", "name": "jira", "deployment_id": "<TOOLSET_ID>", "allowed_tools": ["search_issues"] }

MCP resources​

resources, on mcp and dial-mcp, exposes the server's MCP resources to the model.

FieldDefaultDescription
enabledfalseWhether resources are exposed
itemsAll resources, read on demandA list of { "uri": "...", "eager": false }. eager: true loads the resource before the first LLM call.
{
"resources": {
"enabled": true,
"items": [{ "uri": "urn://docs/intro", "eager": true }, { "uri": "urn://docs/api-reference" }]
}
}

internal​

Holds tools built into the backend.

FieldRequiredDescription
toolsYesinternal-tool and predefined-tool entries

The Python interpreter is the predefined tool py_interpreter. The predefined Toolset of the same name holds it:

{ "type": "predefined", "template_name": "py_interpreter" }

predefined​

Uses a Toolset template shipped with the backend, such as chathub or py_interpreter.

FieldRequiredDescription
template_nameYesThe template name
overrideNoA JSON Merge Patch applied to the template. It can't change type.

Authorization​

basic​

FieldRequired
usernameYes
passwordYes

bearer​

FieldRequiredDescription
tokenYesSent as Authorization: Bearer <token>

client_id_secret​

OAuth 2.0 client credentials.

FieldRequired
client_idYes
client_secretYes
token_urlYes
scopeNo
audNo

api_key​

FieldRequiredDescription
keyYesThe key
nameYesThe header or parameter name
locationREST onlyheader, query, or body. MCP servers always get the key in a header, and take no location.

forward_auth_token​

REST API only, with no other fields. Sends the bearer token of the incoming request as Authorization: Bearer. The call fails when the request has no bearer token.

To keep an MCP server's credentials out of manifests, register it as a Toolset in DIAL and use dial-mcp.

Further reading​