Skip to content
ALTAIRA LABS
DocsBlog

Test a tool before wiring it to an agent

Before wiring a new handler into an AgentRuntime, you can exercise it directly from the dashboard’s Test this tool panel (backed by the operator’s tool-test API). It calls the tool through the real runtime adapters — HTTP, gRPC, MCP, and OpenAPI — and returns the result, so it’s a faithful way to check a backend without deploying an agent first.

Field Description
success Whether the tool call succeeded
result The tool’s JSON response, on success
error The error message, on failure
durationMs Execution time in milliseconds
handlerType The handler type that was used (http, grpc, mcp, openapi)
warning A non-fatal caveat about the test — set when auth could not be replicated (see below)
validation JSON-Schema checks of the request against inputSchema and the response against outputSchema, when those schemas are set

The tool-test path resolves bearer/basic secret-backed credentials the same way the runtime does and attaches them to the test request — for all handler types (http, openapi, grpc, and mcp).

An http handler’s headersFromSecret entries are resolved too, so the test request carries the same secret headers a running agent would send. A Secret or key that cannot be read fails the test rather than sending the request without the header — the running agent fails its reconcile on the same input.

Some auth cannot be replicated by the test, and when that happens the response’s warning field explains why — the call still goes out, but without that credential, so treat the result with caution (a failure may just be the backend correctly rejecting an unauthenticated call):

  • serviceAccount / workloadIdentity — a running agent gets these from a projected ServiceAccount token or the pod’s ambient cloud identity, neither of which the operator’s tool-test process has.
  • Auth on a stdio MCP transport — a subprocess has no header channel, so no credential can be sent (the running agent rejects this configuration).

Confirm auth separately for those cases — for example by checking the runtime logs once the tool is wired to a running agent.

A handler’s retryPolicy is applied, with the same defaults and backoff a running agent uses, so a target that fails transiently is ridden out here too. A policy the operator would reject at reconcile (an unparseable backoffMultiplier, a maxBackoff below initialBackoff) fails the test rather than quietly running without retries.

Note that a retried test takes as long as the backoff implies — a handler with maxAttempts: 5 against a dead endpoint spends its full budget before reporting failure.

The call originates from the operator pod, not from an agent pod. It can only reach whatever the operator pod’s network can reach — a backend that’s only reachable from the agent’s namespace or node pool may fail the test even though it will work fine once wired to a real AgentRuntime.