Skip to main content
Glama

caddy_upstreams

Read-onlyIdempotent

Retrieve Caddy's reverse_proxy upstreams array verbatim, including dynamic backends and duplicates, to inspect current proxy targets. Entries may persist after config changes.

Instructions

Caddy's /reverse_proxy/upstreams array (address, num_requests, fails), returned verbatim. On Caddy 2.11.2+ it is not the configured upstream list. Dynamic-upstream backends stay listed about 1 h (up to ~65 min) after the dynamic source last returned them, even after a config change removes them, so an address may appear that no current config references. A backend with requests in flight can appear twice when its resolved address differs from the entry's text (dynamic upstreams, tcp/ or unix// dials, placeholder dials). That extra copy always shows fails 0 and repeats num_requests, so do not sum num_requests across entries.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv2.2.0

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint, idempotentHint), the description discloses several non-obvious behaviors: the data is returned verbatim, it may not reflect the current config on certain versions, dynamic entries persist for a while, and duplicates can appear with specific characteristics. This is exactly the kind of behavioral context that prevents an agent from drawing wrong conclusions, and it does not contradict any annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose and then expands into necessary caveats. It is longer than average, but every sentence adds unique operational value (version-specific behavior, persistence, duplication, summation warning). It is not wordy, though it could be tightened with bullet points for the caveats.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no parameters, the description carries the full burden of explaining what to expect from the tool. It covers the array shape, the fields per entry, the version caveat, the persistence timing, the duplicate-entry scenario, and the summing pitfall. This is sufficient for an agent to invoke the tool and interpret the result without being misled.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters and the schema has no properties, so there is nothing for the description to explain. Baseline for 0 params is 4. The description makes no parameter claims and correctly focuses on output behavior instead.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a precise statement of what the tool returns: Caddy's /reverse_proxy/upstreams array with the exact fields (address, num_requests, fails), returned verbatim. It also distinguishes this tool from configuration retrieval by noting that on Caddy 2.11.2+ it is not the configured upstream list, and the reader can infer it is meant for inspecting runtime upstream state.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context—it tells you when the data is misleading (after config changes, with dynamic upstreams) and warns against summing num_requests. However, it never explicitly says 'use this when you need runtime upstream statistics' or contrasts it with sibling tools like caddy_config_get. The caveats are useful but the when/why is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.