A task attaches tools and MCP servers exactly as an agent does: tools and mcps, each entry by id or defined inline. During a run the model can call those, the generated submit_result tool, and any provider tools enabled under llm.builtin_tools. Building a tool is covered in tools; this page covers what differs for a task.

Attaching tools

  • Only published tools attach. An unpublished tool is refused when the task is saved. See testing and publishing.
  • No tool containing a handoff operation. A task returns to whoever entered it, so it cannot hand the conversation on; such a tool is refused at publish.
  • Inline tools become real tools. A {"tool": {…}} entry is created as a stored tool, published as version 1, and replaced by its {"tool_id": "…"} in the saved config. A name already used in the workspace is a 409. Inline FAQs under faqs follow the same rule.

Publishing pins tool versions

Publishing a task freezes each attached tool at the version published at that moment. Republishing the tool does not change the task until the task is published again. The draft does not pin (tool_version is null), and a task_version: "draft" run pins at request time. See versions. If a pinned tool version is later deleted, runs fail with error.type: "configuration" naming it; deleting the tool is not refused.

Attaching MCP servers

mcps names an integration holding the server’s credential, or defines a custom server inline (created as an integration, like an inline tool). Only an MCP-capable integration can be attached. One that is not active (disabled, or needing reconnection) saves with a warning and its tools are left out of runs until it is fixed. Approval and namespacing are shared with agents and documented in MCP servers:
  • allowed_tools lives on the integration, null meaning every tool. It is read live, not frozen by a publish, so narrowing it affects every task and agent on the next round.
  • The model sees namespaced names. tools_namespace: "crm" turns search into crm_search; write prompts against the exposed name. Two attached servers sharing a namespace are refused at save.
Every approved tool is described to the model on every round, so a large server costs tokens and can hurt tool choice. Narrow allowed_tools to what the task needs.

Cost and the trace

Talqing does not charge per tool call. A call costs whatever it spends on your side (your endpoint, your MCP provider’s credits) plus the model tokens to read its result, which are included in the run’s provider_cost. Each call is one kind: "tool" entry in the run’s trace, with the name as the model called it, arguments, result and duration.
A metered provider is charged per run. An email batch runs the task once per row, so a 5,000-row list spends that provider’s credits 5,000 times. Check one run’s cost before pointing a batch at it.

Next

Running and runs

Run a task and read what its tools did.

MCP servers

Approval, namespacing and the tools an integration exposes.