Skip to content

Resources & Tools ​

Resources ​

A resource is an MCP server the platform can call — an API surface with a base URL and an optional path (typically /mcp).

Registering a resource (Resources → Create Resource, or POST /api/resources, permission create-resource) does more than store a URL:

  • Agentfleet registers the resource with the identity provider as an API resource and binds its audience. Every token issued for this resource is audience-restricted to it — a token minted for one resource cannot be replayed against another.
  • The platform's client is granted access so it can discover the resource's tools.

Resource settings ​

SettingEndpointEffect
Name, description, base URL, pathPUT /api/resourcesWhere the MCP server lives.
DPoP requirementPUT /api/resources/dpop-requirement { resourceId, requiresDpop }The resource only accepts DPoP-bound tokens. Every exchange for it asks for a token bound to the step's ephemeral key, a plain bearer token in reply is refused, and every call carries a fresh proof. Off by default. API only.
Sensitivity labelsPUT /api/resources/sensitivity-labels { resourceId, labels }Labels such as pii describing what the resource's tools return. A model may only be offered those tools if its allowlist covers every label. See Usage & Data Governance.

All of these need update-resource.

Lifecycle ​

Resources are Active, Inactive, or Deleted. Tools can only be imported from an active resource, and steps can only run against active resources.

Tools ​

A tool is a callable operation on a resource — its name, description, JSON parameter schema, and OAuth scope. Tools are usually imported from the MCP server's own advertisement, and can also be registered one by one (POST /api/tools). Tools are Active, Inactive or Deleted, like resources.

Importing ​

Use Import Tools on a resource (POST /api/resources/{id}/import-tools, permission import-mcp-tools). Discovery is idempotent:

  • New tools are registered.
  • Already-registered tools (matched by name) have their description, schema and scope refreshed.

Re-import whenever the upstream server changes its tool surface.

Per-caller tool filtering

Discovery calls tools/list as Agentfleet's own client (a client-credentials token audienced for the resource), not as you. MCP servers that filter listings per caller therefore show the tools that client may see. A missing tool after import usually means the platform client lacks access to it on that server, not that the tool doesn't exist: grant the access on the MCP server side, or register the tool individually.

A resource that requires DPoP cannot be imported from (discovery presents a bearer token, which such a resource refuses); register its tools individually instead.

Scopes drive least privilege ​

The tool's scope is not documentation — it is enforced. When a step runs, it exchanges a token per resource, on first use, asking for exactly the scopes of the step's own tools on that resource. The identity provider intersects the request with what the user and the agent are each allowed, so a step can never widen its own access. If a tool imports without a scope (or with a wrong one), correct it on the tool before using it in a step.

Tools on steps, and confirmation ​

A step has an ordered tool allowlist (Add tool on the step page, or POST/PUT /api/steps/tools). Each tool on it has a confirmation mode:

ModeWhen the model calls the tool
Auto (default)The call runs at once. Right for read-only tools.
RequiresConfirmationThe run pauses with the proposed call until a person approves it (optionally editing the arguments) or rejects it. A rejected call never runs.

The mode belongs to the tool's place on a step, not to the tool, so the same tool can be automatic in one step and need confirmation in another. A deterministic step's tools cannot require confirmation. In an assistant profile, each tool requires confirmation by default. See Tool calls that need confirmation.

Built-in tools ​

Besides the tools on its allowlist, a model may be offered platform built-ins. They call no resource and need no delegated token.

Built-inOfferedWhat it does
read_resultEvery model step and chat turnReads a slice of a large tool result by its reference handle.
search_resultEvery model step and chat turnRanks a large result's chunks against a query (semantically, when an embedding model is configured).
summarize_resultEvery model step and chat turnSummarizes a large result with a model.
read_contextEvery model step and chat turnReads a context value too large to show in full in the prompt.
load_skillWhen on-demand skills are attachedReads one of the attached skills.
request_clarificationSteps that allow clarificationPauses the run to ask a person a question.
read_runChat turnsReads one of the user's runs.

An Orchestrator agent's workflow tools are offered alongside these. See Large results for how result references work.

Agentfleet — agent workflow orchestration.