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:
| Field | Default | Description |
|---|---|---|
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 |
enabled | true | Whether the Toolset is used |
deferred | true | With 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.
| Field | Required | Description |
|---|---|---|
tools | Yes | restapi-tool and predefined-tool entries |
authorization | No | One of basic, bearer, client_id_secret, api_key, or forward_auth_token |
response_as_attachment | No | The 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.
| Field | Required | Description |
|---|---|---|
tools | Yes | deployment-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.
| Field | Required | Default | Description |
|---|---|---|---|
deployment_id | Yes | — | The DIAL application or deployment ID |
transport | No | auto | auto: 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_tools | No | — | MCP only: the tools that reach the model |
hidden_from_model | No | — | MCP only: tools that only hooks call |
conversation_mode | No | — | 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, likedial-deployment-simple. - Fields that don't apply to the chosen transport are ignored with a warning.
mcp
Connects to an MCP server by URL.
| Field | Required | Description |
|---|---|---|
mcp_server_info | Yes | url, protocol (streamable_http or sse), and an optional authorization: bearer, api_key (header only), client_id_secret, or basic |
allowed_tools | No | The server's tools that reach the model; all of them when unset |
hidden_from_model | No | Tools that only hooks call. Each must also be in allowed_tools when that is set. |
resources | No | See 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.
| Field | Required | Default | Description |
|---|---|---|---|
deployment_id | Yes | — | The Toolset's ID in DIAL. dial_id is a deprecated alias. |
transport | No | HTTP | HTTP or SSE |
allowed_tools | No | — | The tools that reach the model |
hidden_from_model | No | — | Tools that only hooks call |
resources | No | — | 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.
| Field | Default | Description |
|---|---|---|
enabled | false | Whether resources are exposed |
items | All resources, read on demand | A 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.
| Field | Required | Description |
|---|---|---|
tools | Yes | internal-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.
| Field | Required | Description |
|---|---|---|
template_name | Yes | The template name |
override | No | A JSON Merge Patch applied to the template. It can't change type. |
Authorization
basic
| Field | Required |
|---|---|
username | Yes |
password | Yes |
bearer
| Field | Required | Description |
|---|---|---|
token | Yes | Sent as Authorization: Bearer <token> |
client_id_secret
OAuth 2.0 client credentials.
| Field | Required |
|---|---|
client_id | Yes |
client_secret | Yes |
token_url | Yes |
scope | No |
aud | No |
api_key
| Field | Required | Description |
|---|---|---|
key | Yes | The key |
name | Yes | The header or parameter name |
location | REST only | header, 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
- Quick App manifest: Tools — the fields of each tool type
- Quick Apps capabilities: Tools — how tool calls run and fail
- Examples — Toolsets in complete manifests
- Hooks — run configured tools at fixed points of every request
- Expose a REST API as MCP tools — turn a REST API into MCP tools without writing a server
- DIAL Admin: Toolsets — register and configure MCP Toolsets in DIAL Admin