Tools
Configure the Action Agent httpRequest builtin and named HTTP tools, including parameters, authentication, SSRF checks, and tool-call output.
Tools
The Tools panel in Action Agent Studio enables the registered builtin httpRequest and named HTTP tools. Attached Knowledge collections and MCP servers add their own tools to the same turn.
The model decides whether and when to call an available tool. Attaching a tool does not force a call, and the selected model must support function calling.
Registered builtin
httpRequest is the only currently registered Agent builtin tool. Email, Slack, and SMS are not Agent builtins:
- Email, Slack, Discord, and Teams delivery belongs to triggers.
- Use an outbound MCP server or a named HTTP tool for other communication APIs.
The builtin does not require an organization credential. Its model-visible input is:
| Field | Type | Behavior |
|---|---|---|
url | string, required | Full HTTP or HTTPS URL |
method | enum, optional | DELETE, GET, HEAD, OPTIONS, PATCH, POST, or PUT; defaults to GET |
headers | string map, optional | Headers supplied by the model for this call |
body | string, optional | Request body supplied by the model |
timeout | number, optional | 1-300 seconds; defaults to 30 seconds |
Unlike a named tool, httpRequest lets the model choose the complete URL and headers on every call. Do not attach it when the model must not be able to choose arbitrary public endpoints.
Named HTTP tools
A named HTTP tool fixes the method, base URL template, static headers, authentication, and parameter schema. The model sees only the tool name, description, and declared parameter schema. It does not receive the stored authentication payload as a model argument.
For example, a tool can expose getOrders({ orderId }) while the Action Agent Studio owner configures:
GET https://api.example.com/orders/{orderId}The runtime substitutes the encoded orderId into the path. The model cannot replace the method, host, authentication, or static headers for that named tool.
Parameters
Each declared parameter has:
| Setting | Allowed values |
|---|---|
Location (in) | path, query, body, or header |
| Type | string, number, or boolean |
| Required | Optional or required |
| Description | Optional model-facing explanation |
Runtime behavior by location:
path: replaces a matching{name}in the URL and URL-encodes the string form.query: adds a query parameter.body: retains the declared value's JSON type and sends a JSON object. Bodies are omitted forGETandHEAD.header: converts the value to a string and adds that header.
Required values are enforced by the tool schema and again before the request. A missing path placeholder returns a tool error instead of sending a partial URL.
Named HTTP tool names are sanitized to a maximum of 64 characters for the base name. If the base starts with a digit, ActionFlows adds an http_ prefix after truncating the base, so the final name can exceed 64 characters. Creation collision handling is best-effort: it checks existing non-deleted tools for the sanitized name and tries numeric suffixes such as _2 and _3. Each suffix candidate is sanitized and truncated, so long bases can collapse candidates and creation may fail to find a distinct name. There is no persisted database uniqueness constraint, and updates can leave duplicate names. At runtime, the enabled named-tool loader attempts to de-duplicate loaded keys by trying the base, a suffix containing the first eight characters of the tool ID, and numeric suffixes. Because candidates are sanitized and truncated to 64 characters, long bases can leave suffix resolution unable to return a distinct candidate. The resolver reserves MCP names when building named HTTP and builtin tools, rejects effective descriptor collisions before merge, and then merges maps in MCP, named HTTP, builtin, and Knowledge order. If any remaining duplicate final runtime name exists, it throws Agent tool name collision; it does not overwrite an earlier entry. Current MCP keys are normally prefixed with their attachment ID, so cross-kind collisions are uncommon.
Authentication and headers
The saved authentication modes are:
| Mode | Runtime header |
|---|---|
none | No authentication header |
bearer | Authorization: Bearer {token} |
apiKey | The configured header name and value |
basic | Authorization: Basic {base64(username:password)} |
Authentication payloads are encrypted for the organization and decrypted only in the server runtime. Static named-tool headers are stored in headersJson; the current implementation does not encrypt that JSON field. Do not place reusable secrets in static headers unless you accept this current limitation. Prefer the encrypted authentication modes.
Request header precedence is JSON content type, static headers, encrypted authentication, and then model-supplied header parameters. Authentication therefore overrides a static header with the same name, and a declared header parameter can override both.
Network and response boundaries
Builtin and named HTTP tools use the same server-side HTTP implementation:
- only
http:andhttps:URLs are accepted; - credentials embedded in the URL are rejected;
- DNS results are checked against loopback, private, link-local, carrier-grade NAT, multicast, reserved, and other blocked ranges;
- hostname resolution is pinned for the request to reduce DNS-rebinding risk;
- every redirect is revalidated, with at most five redirects;
- the default timeout is 30 seconds and the accepted range is 1-300 seconds; and
- the response body is capped at 5 MiB.
Action Agent Studio also checks a named tool's saved URL template when it is created or updated. Runtime checks remain authoritative because DNS and redirect targets can change after saving.
Which tools reach the model
The runtime builds the turn's tool set in this order:
- enabled tools from attached MCP connections;
- enabled, non-deleted named HTTP tools;
- registered builtin bindings such as
httpRequest; and search_knowledgeandread_documentwhen at least one Knowledge collection is attached.
The maps are merged in the order listed above. The resolver rejects effective descriptor collisions before merge and then throws Agent tool name collision if any remaining duplicate final runtime name exists; it does not overwrite earlier entries. MCP tools are exposed only when their names are in that attachment's enabledToolNames; an empty MCP selection means no tools. Named HTTP tools are loaded only when enabled is true. The current named-tool readiness check requires only a non-empty name and an HTTP(S) URL template. A description may be empty (the runtime supplies a fallback), and a parameter schema may be empty; those fields affect model guidance, not that readiness check.
A tool that returns an error becomes tool output for the model; it does not automatically fail the whole chat turn. The model can try another tool or explain the failure.
Tool-call output
Action Agent Studio's transcript renders tool parts with the tool name, lifecycle state, model input, tool output, and tool error when present. The durable Agent transcript stores those non-text parts along with the assistant text.
The public REST JSON result and public Action Agent SSE contract expose final assistant text, not the internal tool-call event stream. Channel triggers send only the final reply according to their reply policy. Tool inputs and outputs can still be visible in Action Agent Studio, so do not return credentials or unnecessary personal data from a tool.
ActionFlows does not make HTTP-tool inputs or outputs secret and does not authorize the remote API. Apply least privilege to every named or builtin tool.
Related
MCP
Attach outbound MCP servers to an Action Agent, configure transport and authentication, select tools, refresh catalogs, and diagnose partial connection failures.
Artifacts
Generated Action Agent files, their recognition and size limits, storage paths, failure behavior, and separation from uploads and Flow artifacts.