Skip to main content
Glama

Server Details

Meter, cap, and block AI agent spend before the provider is charged.

Ownership verified
Status
Healthy
Uptime
98.2% over 42 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
entradox/agent-ledger
GitHub Stars
0

TDQS

A4/5.0

Scored across 18 tools

Disambiguation4/5

Most tools have clearly distinct purposes: budget setting, spend tracking, checking, reporting, approvals, alerts, and secret management are separable. Minor overlap exists between ledger_check_spend (budget decision + estimate) and ledger_price (cost estimate), and between ledger_alerts and ledger_report, but descriptions clarify the boundary.

Naming Consistency4/5

15 of 18 tools follow a consistent snake_case ledger_<verb/action> pattern (ledger_track, ledger_set_budget, ledger_revoke_secret). The two skill tools deviate — read_skill and skills_list_tool use a different, mutually inconsistent convention (verb_noun vs noun_verb_tool).

Tool Count4/5

18 tools is on the heavier side but reasonable for a full spend-governance domain covering budgets, tracking, pricing, approvals, alerts, events, secrets, and proxy setup. Each tool maps to a distinct operation rather than padding.

Completeness4/5

Strong lifecycle coverage: onboarding (ledger_start), budget CRUD-ish (set/overwrite), spend tracking and checking, pricing, approval request/decide/list, alerts, reports, event long-poll, and secret revoke/rotate. Minor gaps like explicit budget/agent deletion are workable around via overwrite semantics.

Available Tools

18 tools
ledger_alertsAgent Budget AlertsA
Read-onlyIdempotent
Inspect

Alert history for an agent: budget warnings (80% threshold) and spending spikes.

Requires a credential: either the agent's own agent_secret or its workspace's workspace_key (same rule as GET /v1/alerts).

ParametersJSON Schema
NameRequiredDescriptionDefault
agent_idYesunique agent identifier
agent_secretNothe agent's own secret (either this or workspace_key)
workspace_keyNothe owning workspace's key (either this or agent_secret)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds genuine context beyond that: the authentication rule (the agent's own secret or the workspace key, matching GET /v1/alerts) and the nature of the alerts surfaced. It omits rate limits and pagination behavior, keeping it from a 5.

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?

Two tight sentences with the resource description front-loaded and the prerequisite second; nothing is padded. The credential sentence partially duplicates the schema, which is the only minor waste.

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

Completeness4/5

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

An output schema exists, so return values need no explanation, and authentication is covered. Coverage is good but not exhaustive — no note on result ordering, pagination, or volume limits for a history-listing tool.

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

Parameters3/5

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

Schema description coverage is 100%, so the either/or credential semantics are already documented in the schema and the description largely restates them. Baseline 3 is appropriate — the description adds little parameter meaning beyond the schema.

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

Purpose4/5

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

Names a specific resource (alert history for an agent) and enumerates what it returns (80% budget warnings, spending spikes), which is concrete and distinct. It does not explicitly contrast itself with siblings like ledger_report or ledger_track, so it stops short of a 5.

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?

Usage is implied — you call it to inspect an agent's alert history — and the credential prerequisite (agent_secret or workspace_key) is stated, which is real guidance. But there is no explicit when-to-use versus when-not guidance or named alternative among the siblings.

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

ledger_api_docsAgentLedger API DocsA
Read-onlyIdempotent
Inspect

Self-serve documentation for AgentLedger — quickstart, MCP tools, REST endpoints, budget caps, error codes, and idempotency usage, as markdown.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicNo"quickstart" | "mcp" | "rest" | "budget" | "errors" | "idempotency" | "metering" | "events" | "all" (default "" == "all"). Unknown topics fall back to the full docs.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered structurally. The description contributes the return format ('as markdown'), which is genuinely useful context beyond the annotations, but says nothing about size, pagination, or truncation of the fallback full-docs response.

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?

A single front-loaded sentence that leads with purpose and follows with the coverage list; no filler or redundant sentences. The inline enumeration is a little dense but earns its place by defining scope.

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

Completeness4/5

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

An output schema exists, so return-value structure need not be explained, and the annotation set covers the safety profile. For a low-complexity, no-required-param, read-only docs tool the description is essentially complete; only cross-tool routing guidance is missing.

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

Parameters3/5

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

Schema coverage is 100% and the single topic parameter is fully documented in the schema, including the default and the unknown-topic fallback. The description repeats the topic areas but adds no syntax or format detail beyond what the schema already provides, so the baseline 3 is appropriate.

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

Purpose4/5

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

The description names the tool's function (self-serve documentation) and enumerates the exact content areas it covers — quickstart, MCP tools, REST endpoints, budget caps, error codes, idempotency. An agent can immediately tell this is a documentation look-up tool. It does not, however, differentiate itself from doc-oriented siblings such as ledger_examples or read_skill, which likely also return prose/guidance.

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?

Usage is only implied: the topic list signals the situations in which the tool is relevant, but there is no explicit when-to-use/when-not-to-use statement and no routing against the doc-adjacent siblings (ledger_examples, read_skill). Minimum-viable guidance rather than directive guidance.

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

ledger_approval_decideApprove or Deny a Spend RequestA
DestructiveIdempotent
Inspect

Approve or deny a pending spend permit — workspace owner only.

The agent's own agent_secret can REQUEST an approval but can never decide one: a credential that can approve its own requests is not a control. decision must be 'approve' or 'deny'; only pending permits can be decided. An approved permit is consumed by the agent's next ledger_track within its amount — it is a one-shot exception, not a raised cap.

ParametersJSON Schema
NameRequiredDescriptionDefault
agent_idYesthe agent that requested the permit
decisionYes'approve' or 'deny'
approval_idYesthe apr_ id from ledger_request_approval / ledger_approvals
workspace_keyYesthe key of the workspace that owns the agent

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only flag non-read-only, idempotent and destructive; the description adds substantive context beyond them: the decision is a one-shot exception consumed by the next ledger_track rather than a raised cap, only pending permits are decidable, and the credential separation model. It does not contradict idempotentHint — re-deciding an already-decided permit is a no-op.

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

Conciseness5/5

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

Three short sentences, each carrying distinct content: the action and its scope, the authority separation, and the consumption semantics. The key constraint (owner-only) is front-loaded in the first line.

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?

Output schema exists, so return values need no explanation here. For a destructive, non-idempotent-looking mutation the description covers authorization, valid inputs, state requirements and post-decision consequences — everything an agent needs before invoking it.

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

Parameters3/5

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

Schema description coverage is 100%, so agent_id, approval_id, decision and workspace_key are already documented with their meanings. The description restates the 'approve'/'deny' enum for decision and adds the 'pending permits only' constraint, but contributes no format or sourcing detail beyond the schema. Baseline 3 is correct when the schema does the heavy lifting.

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?

States a specific verb pair and resource ("Approve or deny a pending spend permit") and immediately scopes it ("workspace owner only"). It also implicitly separates itself from the sibling ledger_request_approval by explaining that requesting and deciding are different authorities, so an agent can pick the right tool without opening schemas.

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

Usage Guidelines5/5

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

Explicitly names the precondition (only pending permits can be decided), the authorization requirement (workspace owner only), and the alternative path (agent_secret can REQUEST via ledger_request_approval but never decide). When/when-not and the alternative are all present.

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

ledger_approvalsList Spend ApprovalsA
Read-onlyIdempotent
Inspect

List spend-approval permits — yours, or your whole workspace's.

ParametersJSON Schema
NameRequiredDescriptionDefault
stateNooptional filter: pending | approved | denied | consumed | expired
agent_idNolist this agent's permits (needs agent_secret or workspace_key)
agent_secretNothe agent's own secret (agent view)
workspace_keyNothe owning workspace's key — lists ALL its agents' permits when given alone

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the scoping constraint (personal vs workspace-wide results), which is helpful context, but says nothing about pagination, result limits, or auth failure behavior.

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

Conciseness5/5

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

A single short sentence, front-loaded with the verb and resource and with zero filler. Nothing redundant or padded.

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

Completeness4/5

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

An output schema exists, so return values need not be described, and all four parameters (none required) are fully documented in the schema. The only mild gap is that the description does not hint at the no-argument default behavior or filtering by state, but the schema carries that adequately.

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

Parameters3/5

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

Schema description coverage is 100% and every parameter (state, agent_id, agent_secret, workspace_key) is documented in the schema itself. The description's scope wording loosely parallels the agent_id/workspace_key distinction but adds no syntax, defaults, or format detail beyond what the schema provides, so baseline 3 applies.

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

Purpose4/5

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

States a specific verb ('List') and resource ('spend-approval permits') plus scope ('yours, or your whole workspace's'), so an agent can distinguish it from ledger_approval_decide or ledger_check_spend. It stops short of naming which sibling to use for a different need, but the resource is unambiguous.

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 phrase 'yours, or your whole workspace's' implies the two access modes that map to agent_secret vs workspace_key, which is useful implied guidance. However, there is no explicit when-to-use, no exclusions, and no routing to alternatives such as ledger_check_spend when the agent wants a single permit's status rather than a list.

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

ledger_check_spendCheck Before SpendingA
Read-onlyIdempotent
Inspect

Ask BEFORE you spend: may this agent spend this much right now?

Returns allowed (true/false), a stable reason code (within_budget, over_monthly_cap, over_daily_cap, over_monthly_token_cap, over_daily_token_cap, no_budget_set, unpriced_model), a one-line message, the cost estimate, the price used (with its source and as_of date) and every budget window with cap, spent and remaining.

Same decision the /proxy/{provider} gate enforces. Read-only: nothing is recorded or reserved, so record the spend with ledger_track afterwards.

Give exactly one spend shape: amount_cents (any rail, e.g. an x402 purchase), OR model with tokens_in/tokens_out.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelNomodel id to price from tokens (instead of amount_cents)
agent_idYesthe agent that would spend
tokens_inNoexpected input tokens (with model)
tokens_outNoexpected output tokens, e.g. your max_tokens (with model)
agent_secretNothe agent's own secret (either this or workspace_key)
amount_centsNothe spend in cents, if you already know it
workspace_keyNothe owning workspace's key (either this or agent_secret)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, and the description reinforces this with 'Read-only: nothing is recorded or reserved.' It adds useful behavioral context beyond the annotations: it is equivalent to the /proxy/{provider} gate, returns stable reason codes, and does not reserve funds.

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

Conciseness5/5

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

The description is front-loaded with the core purpose and then compactly delivers return details, gate equivalence, side-effect transparency, and input constraints. Each sentence adds distinct value; the parenthetical enum list is dense but directly useful for interpreting the response.

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?

Given the output schema exists, the description does not need to fully restate return values; it still names the key response elements. It covers when to call, what inputs to provide, side effects, and the relationship to sibling tools, making it complete for correct selection and invocation.

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

Parameters5/5

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

Although schema coverage is 100%, the description adds crucial semantics the schema alone does not convey: amount_cents and model+tokens_in/tokens_out are mutually exclusive spend shapes. It also gives concrete examples ('any rail, e.g. an x402 purchase') and clarifies tokens_out means 'e.g. your max_tokens', which helps an agent map values correctly.

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 an explicit imperative, 'Ask BEFORE you spend: may this agent spend this much right now?', which states the exact action and resource. It also distinguishes itself from ledger_track by noting that spending must be recorded separately, and from the proxy gate by clarifying it makes the same decision.

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

Usage Guidelines5/5

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

The description gives clear when-to-use guidance ('Ask BEFORE you spend'), what the tool does not do ('nothing is recorded or reserved'), and names the follow-up alternative ('record the spend with ledger_track afterwards'). It also specifies the required input shape ('Give exactly one spend shape'), leaving little to inference.

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

ledger_examplesAgentLedger RecipesA
Read-onlyIdempotent
Inspect

Complete, runnable Python recipe for a common AgentLedger integration pattern.

ParametersJSON Schema
NameRequiredDescriptionDefault
patternYes"python_tracking" | "budget_enforcement" | "weekly_report" | "retry_safe_writes"

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds minimal behavioral context by stating the output is a 'complete, runnable Python recipe', implying code generation. However, it doesn't elaborate on return format or side effects beyond annotations, which is acceptable given the safe nature.

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

Conciseness5/5

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

A single, front-loaded sentence with zero filler. It immediately communicates the key value (complete, runnable recipe) and the resource (common integration pattern), leaving the parameter details to the schema.

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

Completeness4/5

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

The tool is simple (one parameter) and has an output schema, so the description doesn't need to explain return values. It sufficiently covers the core purpose, and the schema handles the pattern selection. It could slightly mention that the output is Python code, but 'recipe' already implies that, so completeness is high.

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

Parameters3/5

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

Schema description coverage is 100% – the pattern parameter is fully documented with its four allowed values. The description does not add any parameter-specific meaning beyond the schema, so the baseline 3 applies.

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 clearly states the tool provides 'Complete, runnable Python recipe' for a 'common AgentLedger integration pattern', specifying the verb and resource. It distinguishes itself from siblings like ledger_track or ledger_report by focusing on recipes/examples, which is a different purpose.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives. It doesn't mention that it should be used for learning/starting points, nor does it exclude cases like when to use ledger_api_docs instead. The description is purely functional without context for selection.

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

ledger_pricePrice a Call Before You Make ItA
Read-onlyIdempotent
Inspect

What will this call cost? Priced from the same table the caps use.

Exists because ledger_track requires the CALLER to supply amount_cents, so an agent whose spend is capped could under-report its own cost and stay under the cap. This returns the number the enforcement path would use, so an agent can report honestly (and plan before it spends).

Cost = (tokens_in * in_rate + tokens_out * out_rate) / 1_000_000. If the model has cache rates, the standard in-rate is used, which is the conservative direction for a spend cap.

Every price carries the source it came from and the date it was read, and verified: false means the number was NOT read off the provider's own pricing page. Treat an unverified price as an estimate, not a measurement.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelYesthe model id you are about to call (e.g. gpt-4o, claude-sonnet-4)
tokens_inNoexpected input tokens
tokens_outNoexpected output tokens, e.g. your max_tokens

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already indicate readOnlyHint and idempotentHint, but the description adds valuable behavior: the exact cost formula, the conservative treatment of cache rates, and the meaning of the 'verified' flag with the caution that unverified prices are estimates. This goes well beyond the annotations.

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 well-structured with a clear opening, rationale, formula, and caveat. Each paragraph serves a distinct purpose without redundancy. It is slightly longer than minimal but every sentence earns its place.

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?

Given an output schema exists, the description does not need to explain return structure. It covers the computation, the source/verification semantics, and the reason for existence, which is sufficient for an agent to call it correctly and interpret results.

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?

Schema coverage is 100% and each parameter is described in the schema. The description adds the cost formula showing how tokens_in and tokens_out are used, and clarifies that the model id is the one being called. This enriches the schema definitions with practical meaning.

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 'What will this call cost?' and states it is priced from the same table the caps use, giving a specific verb and resource. It also explains why it exists (ledger_track requires caller-supplied amount_cents) and distinguishes itself by returning the enforcement number. This clearly separates it from ledger_track and other siblings.

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

Usage Guidelines4/5

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

It explicitly explains the problem with ledger_track and states this tool returns the number for honest reporting and pre-spend planning, implying use before a call. It does not list explicit when-not-to-use scenarios or name alternatives, but the rationale makes usage context clear.

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

ledger_proxy_attachAttach the Budget-Enforcing ProxyA
Read-onlyIdempotent
Inspect

Point your provider traffic at the proxy so budget caps are enforced BEFORE the provider is contacted, instead of being reported afterwards.

This closes the gap where the brake was unreachable from MCP: an agent connected over MCP could record spend (ledger_track) but nothing could refuse a call. With this, the cap is enforced on every LLM call.

Returns the base_url to use, the two headers to send, and the exact change for the OpenAI and Anthropic SDKs. Your provider credential is NOT part of this: it stays in Authorization / x-api-key and is only forwarded, never stored.

ParametersJSON Schema
NameRequiredDescriptionDefault
agent_idYesthe agent whose budget the proxied calls are billed to
providerNowhich upstream to proxy: openai or anthropicopenai
agent_secretNothe agent's own secret (either this or workspace_key)
workspace_keyNothe owning workspace's key (either this or agent_secret)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, and the description adds meaningful behavioral context: enforcement happens BEFORE provider contact, provider credentials are forwarded but never stored, and the output contains base_url, headers, and SDK changes. No contradiction with annotations.

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

Conciseness5/5

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

The description is front-loaded with the core action and consequence, then provides rationale, return contents, and credential safety. Every sentence earns its place and there is no filler or repetition of schema details.

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?

For a tool with only 4 parameters, 100% schema coverage, full annotations, and an output schema, this description is complete. It tells the agent what the tool does, why it matters, what it returns, and the key security behavior, without needing to reproduce structured schema details.

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?

Schema coverage is 100%, so baseline is 3. The description adds extra value by clarifying that the provider credential is not part of the tool's operation and stays in Authorization / x-api-key, which helps interpret agent_secret and workspace_key semantics beyond the schema.

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 names a specific verb and resource: 'Point your provider traffic at the proxy so budget caps are enforced', and specifies exactly what the tool returns. It clearly distinguishes this from ledger_track, which only records spend after the fact.

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

Usage Guidelines4/5

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

The description explains the gap this tool fills versus ledger_track: MCP-connected agents could record spend but could not refuse calls, and this tool enforces caps on every LLM call. It does not explicitly state prerequisites or when-not-to-use cases, so it falls just short of a 5.

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

ledger_reportAgent Spend ReportA
Read-onlyIdempotent
Inspect

Spend report for an agent over a rolling window.

Returns total spend, breakdown by rail and by service, budget status (ok/warning/exceeded), detected anomalies, and entry count.

Requires a credential: either the agent's own agent_secret or its workspace's workspace_key (same rule as GET /v1/report).

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoreport window in days (default 30)
agent_idYesunique agent identifier
agent_secretNothe agent's own secret (either this or workspace_key)
workspace_keyNothe owning workspace's key (either this or agent_secret)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already establish read-only, idempotent, and non-destructive behavior, so the description carries a lighter burden. It adds valuable context by specifying the credential requirement (agent_secret or workspace_key, same rule as GET /v1/report) and summarizing the return contents, though it does not cover rate limits or pagination.

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

Conciseness5/5

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

The description is three sentences that are front-loaded with purpose, then returns, then credential requirement. Every sentence earns its place with no redundancy or filler.

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

Completeness4/5

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

Given the presence of an output schema, annotations, and full schema coverage, the description is complete enough: it explains the report's purpose, summarizes return values, and states the credential rule. It only lacks explicit usage guidance relative to sibling tools, which prevents a 5.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all four parameters. The description reinforces the credential rule but adds no syntax or format details beyond what the schema provides, making the baseline 3 appropriate.

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

Purpose4/5

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

The description states a clear verb ('spend report') and resource (agent spend over a rolling window), and it enumerates the key outputs such as total spend, breakdowns, budget status, and anomalies. However, it does not explicitly differentiate this tool from siblings like ledger_alerts or ledger_track, so it stops short of the top score.

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

Usage Guidelines2/5

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

The description gives no guidance on when to use this tool versus alternatives such as ledger_alerts, ledger_track, or ledger_set_budget. It only states what the tool returns and its credential requirement, leaving usage decisions to inference.

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

ledger_request_approvalRequest Spend ApprovalAInspect

Ask your workspace owner for a one-shot spend exception before a ledger_track that the cap would refuse.

Creates a pending permit for exactly amount_cents on the given service. The owner (a human, or a supervisor agent holding the workspace_key) approves or denies it with ledger_approval_decide. An APPROVED permit is consumed by the next ledger_track for this agent whose amount fits inside it — the budget cap itself does not change. Permits expire after 1 hour undecided. Poll with ledger_approvals to see the decision.

Claiming a brand-new agent_id requires workspace_key; otherwise pass the agent's agent_secret.

ParametersJSON Schema
NameRequiredDescriptionDefault
reasonNowhy, one line — shown to the approver
serviceYeswhat the money is for (e.g. "openai:gpt-5 batch eval")
agent_idYesthe agent asking for the exception
agent_secretNothe agent's own secret (either this or workspace_key)
amount_centsYesthe spend to be approved, in cents
workspace_keyNothe owning workspace's key (either this or agent_secret)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the annotations (which only say non-readOnly, non-idempotent, non-destructive), the description discloses the one-shot consumption rule, the 1-hour expiry, that the budget cap is unchanged, and the approval/authorization model (owner human or supervisor with workspace_key). This is exactly the behavioral context annotations cannot carry.

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?

Front-loaded with the core action, then the lifecycle, then auth. Nearly every sentence carries distinct load, though the auth sentence could sit earlier and the density is high for a single paragraph.

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?

For a non-idempotent mutating tool with a 6-param schema (100% documented) and an output schema present, the description covers everything needed: trigger, artifact semantics, expiry, consumption, decision path, and auth. Return values are correctly left to the output schema.

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?

Schema coverage is 100%, so baseline is 3; the description adds real meaning by clarifying that the permit is for 'exactly amount_cents' (no partial fit) and by disambiguating the two auth parameters: workspace_key is for claiming a brand-new agent_id, otherwise pass agent_secret. That resolves a choice the schema only lists as 'either this or workspace_key'.

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?

States a specific verb+resource ('Ask your workspace owner for a one-shot spend exception') and precisely scopes the artifact created: a pending permit for exactly amount_cents on a given service. It also names the triggering context (a ledger_track the cap would refuse), so it is unmistakable against siblings like ledger_track and ledger_set_budget.

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

Usage Guidelines5/5

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

Gives an explicit when ('before a ledger_track that the cap would refuse') and routes to the relevant siblings by role: ledger_approval_decide for the decision, ledger_approvals to poll. It also distinguishes the budget-raising alternative implicitly by noting the cap itself does not change.

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

ledger_revoke_secretRevoke Agent SecretA
Destructive
Inspect

Invalidate an agent_id's agent_secret WITHOUT deleting its spend history.

Use when a credential may have leaked, or to stop an agent writing. Subsequent writes to that agent fail with agent_secret_mismatch until you rotate a new secret in. The agent_id stays claimed, so no other workspace can claim it and inherit the ledger. Requires the workspace_key that owns agent_id.

Returns {"agent_id", "revoked": True, "_note"}, or {"error", "error_code"}.

ParametersJSON Schema
NameRequiredDescriptionDefault
agent_idYes
workspace_keyYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already flag destructive=true and idempotent=false, but the description adds substantial context beyond them: spend history is preserved, subsequent writes fail with agent_secret_mismatch, the agent_id remains claimed so no other workspace can inherit the ledger, and the owning workspace_key is required. This is exactly the kind of consequence detail an agent needs before a destructive call.

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

Conciseness5/5

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

Front-loaded with the core action and its key non-effect, then usage, then side effects, then return shape. Every sentence carries information; no filler.

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?

Covers purpose, trigger conditions, irreversible-ish consequences, auth requirement, and even names the return fields despite an output schema existing. Nothing an agent needs to call this destructive tool correctly is missing.

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?

Schema coverage is 0% for both parameters, so the description must compensate. It states that workspace_key must be the key that owns agent_id, establishing the ownership/authorization relationship between the two parameters, though it does not describe agent_id's format beyond identity.

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?

States a specific verb (invalidate/revoke), the exact resource (agent_id's agent_secret), and a delimiting scope clause ('WITHOUT deleting its spend history') that distinguishes it from sibling ledger_rotate_secret. An agent can tell this apart from rotation without opening either schema.

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

Usage Guidelines4/5

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

Gives two clear triggering conditions ('credential may have leaked', 'stop an agent writing') and implicitly routes to rotation via 'until you rotate a new secret in'. It does not explicitly name ledger_rotate_secret as the follow-up alternative, so it stops short of full when/when-not routing.

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

ledger_rotate_secretRotate Agent SecretA
Destructive
Inspect

Mint a NEW agent_secret for an agent_id your workspace already owns, invalidating the old one.

Use this to RECOVER an agent whose secret was lost: the previous credential stops working immediately. Requires the workspace_key that owns agent_id — an agent's own agent_secret cannot rotate itself, because a leaked agent credential must not be able to lock its real owner out. Unlike ledger_track this never claims a new agent_id: an unknown id returns agent_not_claimed.

The new secret is returned ONCE. Store it before you drop the response.

Returns {"agent_id", "agent_secret", "_note"}, or {"error", "error_code"}.

ParametersJSON Schema
NameRequiredDescriptionDefault
agent_idYes
workspace_keyYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

Annotations declare destructive=true and idempotent=false, and the description adds genuinely new behavioral facts: the old credential stops working immediately, ownership authorization is required, self-rotation is blocked, and the new secret is shown only ONCE and must be stored before the response is dropped. This is rich disclosure beyond the annotation set.

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?

Front-loaded with the core action and consequence, and each paragraph adds distinct value (usage, authorization constraint, return contract). It runs slightly long across four paragraphs, but no sentence is filler.

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?

For a destructive, non-idempotent credential-rotation tool, the description covers purpose, precondition, authorization, irreversibility, the one-time return, and the error contract. Even though an output schema exists, the explicit return shape removes any ambiguity about the one-shot secret.

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?

Schema description coverage is 0%, so the description must carry the semantics of both parameters. It explains that agent_id must already be owned by the workspace and that workspace_key must be the owning key, which is meaningful authorization context. It stops short of stating concrete formats or where to obtain workspace_key.

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 states a specific verb and resource ('Mint a NEW agent_secret for an agent_id') and immediately clarifies the consequence (invalidating the old one). It explicitly differentiates itself from the sibling ledger_track by noting it 'never claims a new agent_id', so an agent can distinguish the tools without opening schemas.

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

Usage Guidelines5/5

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

It names the exact scenario ('RECOVER an agent whose secret was lost'), states the precondition (workspace_key that owns agent_id), and gives an explicit exclusion ('an agent's own agent_secret cannot rotate itself' and the leaked-credential rationale). The failure mode for an unknown id is also documented.

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

ledger_set_budgetSet Agent BudgetA
DestructiveIdempotent
Inspect

Set spending caps for an agent. Warns at 80%, blocks spend when exceeded — enforced: a ledger_track call that would cross the cap is rejected.

Dollar caps (monthly_cents/daily_cents) and token caps (monthly_tokens/ daily_tokens) are independent dimensions: dollar caps only cover non-"tokens" rails, token caps only cover rail="tokens" bookkeeping rows (tokens_in/tokens_out). Set both if the agent uses both.

Monthly cap is required; the rest are optional (0 = no limit). Overwrites any existing budget for the agent — with one rule: raising or removing an existing cap requires the workspace_key. An agent_secret can tighten its own caps but never loosen them; to grow an allowance the agent asks its owner (see ledger_request_approval). Claiming a brand-new agent_id requires your workspace_key; that first call mints an agent_secret (returned once — save it); later calls for that agent_id must pass the agent_secret back (no workspace_key needed again).

ParametersJSON Schema
NameRequiredDescriptionDefault
agent_idYesunique agent identifier
daily_centsNodaily spending cap in cents (0 = no daily cap)
agent_secretNorequired for every call after the first for this agent_id
daily_tokensNodaily token-burn cap (0 = no cap)
monthly_centsYesmonthly spending cap in cents
workspace_keyNorequired when claiming a brand-new agent_id; not needed once the agent_id has been claimed
monthly_tokensNomonthly token-burn cap (0 = no cap)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint=false, idempotentHint=true, destructiveHint=true), the description discloses the warn-at-80%/block-on-exceed behavior, that enforcement manifests as a rejected ledger_track call, that existing budgets are overwritten, and precise auth semantics (workspace_key required to raise/remove a cap or claim a new agent_id; agent_secret can only tighten, never loosen). This is rich context that the structured fields do not carry.

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 purpose is front-loaded in the first sentence and the denser paragraphs are grouped by topic (cap dimensions, overwrite rule, credential lifecycle). It is longer than most definitions, but nearly every sentence carries operational information; only mild tightening would be possible.

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?

For a 7-parameter mutation tool with an output schema present, the description covers everything an agent needs: enforcement behavior, required vs optional params, overwrite semantics, and the full credential lifecycle including the one-time agent_secret return. Return values are appropriately left to the output schema.

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?

Schema coverage is 100%, so the baseline is 3, but the description adds genuine meaning: it explains that monthly_cents/daily_cents and monthly_tokens/daily_tokens are independent dimensions covering disjoint rails, that monthly cap is required while the rest default to 0, and which credential each parameter requires. This goes beyond the schema's per-parameter blurbs.

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 first sentence states a specific verb and resource ('Set spending caps for an agent') and immediately elaborates scope with the enforcement mechanism. It is clearly distinguishable from siblings like ledger_track (which it names as the enforcement point) and ledger_request_approval. An agent can identify what this does without opening the schema.

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

Usage Guidelines4/5

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

The description gives strong conditional guidance: dollar vs token caps are independent dimensions and 'Set both if the agent uses both,' monthly cap is required, and agents that need a larger allowance are routed to ledger_request_approval (its owner). It names an alternative with the condition that selects it, though it never states an explicit when-not-to-use case.

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

ledger_startStart a WorkspaceAInspect

Get a FREE AgentLedger workspace with no credential and no arguments — the MCP equivalent of opening POST /start in a browser.

Call this FIRST if you have no credentials yet. Every other tool here (ledger_track, ledger_set_budget, ledger_report, ledger_alerts) needs a workspace_key or an agent_secret, so a caller arriving with neither must start here or it has nowhere to go.

Takes NO arguments on purpose: the goal is zero friction. It returns a workspace_key (shown exactly once — it cannot be re-revealed, so store it before continuing) which you then send as workspace_key on your first ledger_track for a NEW agent_id. That first write returns the agent's own agent_secret, which authenticates every write after it.

The free tier includes every rail, enforced budget caps, alerts, reports and the MCP server, capped at 3 agents per workspace. Minting is rate-limited per caller IP, the same limit the human door uses.

Prefer to pay? POST /v1/billing/x402 with a wallet-signed payment needs no human and buys 24h of Pro (agent allowance per the live pass tier — see /pricing.md).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only declare the generic safety profile (readOnlyHint=false, idempotentHint=false), while the description adds substantial non-obvious behavior: the workspace_key is revealed exactly once and cannot be re-revealed, minting is rate-limited per caller IP, the free tier is capped at 3 agents, and the returned secret chain authenticates later writes. That is exactly the kind of operational context annotations cannot carry.

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?

Well front-loaded: the free-workspace purpose and the 'call this first' imperative lead, and the credential chain follows in logical order. The closing paragraph on the paid x402/Pro path is tangential to invoking this tool and is the one part that does not clearly earn its space.

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?

For a zero-argument, unauthenticated bootstrap tool with an output schema present, the description covers everything an agent needs: prerequisites (none), the credential lifecycle, tier limits, rate limiting, and which tool to call next. Nothing required to call it correctly is missing.

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 schema has zero parameters (baseline 4), and the description reinforces this deliberately ('Takes NO arguments on purpose: the goal is zero friction'), which is helpful rather than redundant. There is no parameter syntax left to document, though the description adds nothing about the shape of the returned credential beyond what the schema/output schema covers.

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?

States a concrete verb+resource ('Get a FREE AgentLedger workspace') and immediately scopes it as a zero-argument bootstrap operation analogous to POST /start. It also explicitly contrasts itself with the sibling tools (ledger_track, ledger_set_budget, ledger_report, ledger_alerts) that require credentials, so an agent can differentiate it without opening any schema.

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

Usage Guidelines5/5

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

Gives an explicit selection rule: 'Call this FIRST if you have no credentials yet,' and explains why the alternatives are unavailable in that state. It further describes the exact hand-off sequence (workspace_key → first ledger_track for a NEW agent_id → agent_secret), leaving nothing to inference.

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

ledger_trackTrack Agent SpendAInspect

Record a spend entry for an AI agent on any payment rail, with optional token counts.

Claiming a brand-new agent_id requires your workspace_key (get one via x402 at POST /v1/billing/x402 — no human, no login — or at /start). That first call mints an agent_secret and returns it in the response — save it, every later call for that same agent_id must pass it back (no workspace_key needed again) or the write is rejected. Amounts are capped at $100,000/entry and must be >= 0. If a budget is set for this agent, an entry that would cross the monthly/daily cap is blocked, not just logged. Caps here bind the AMOUNT YOU REPORT — a caller that lies to amount_cents lies to the cap. The only enforcement against real spend is routing the provider call through the /proxy/{provider} rail, which prices from the provider's own usage block. Include tokens_in/tokens_out + model on every LLM call so token burn shows up in the /v1/tokens report.

ParametersJSON Schema
NameRequiredDescriptionDefault
railYespayment rail used — one of "mpp", "x402", "api_key", "manual"
modelNomodel name (e.g. "gpt-4o") — token burn is reported per model
serviceYeswhat was purchased (e.g. "search_query", "data_export")
agent_idYesunique agent identifier (e.g. "research-agent-v2")
tokens_inNoprompt tokens consumed (0 if unknown)
tokens_outNocompletion tokens consumed (0 if unknown)
agent_secretNorequired for every call after the first for this agent_id
amount_centsYesspend amount in cents (100 = $1.00), 0-10000000
workspace_keyNorequired when claiming a brand-new agent_id; not needed once the agent_id has been claimed

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only say write, non-idempotent, non-destructive; the description goes far beyond by disclosing the agent_secret minting/auth flow, the $100,000/entry cap, that over-cap entries are blocked rather than logged, and the critical caveat that caps bind the reported amount while only /proxy/{provider} enforces real spend. This is exactly the behavioral context annotations cannot carry.

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 core action is front-loaded in the first sentence, then the auth and cap mechanics follow in tight paragraphs with no filler. It is dense and long for a single tool, and a few clauses (e.g. the /start aside) could be trimmed, so a 4 rather than 5.

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?

For a 9-parameter authenticated write tool with an output schema present, the description covers the full call lifecycle: claiming, subsequent auth, caps, blocking behavior, and trust limitations. Nothing an agent needs to invoke it correctly is missing; return values are legitimately left to the output schema.

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?

Schema description coverage is 100%, so baseline is 3, but the description adds meaning on top: why agent_secret/workspace_key exist, the conditional requirement per call, and the reporting purpose of tokens_in/tokens_out + model. That genuine added value over the schema justifies a 4 rather than the baseline 3.

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?

States a specific verb and resource ('Record a spend entry for an AI agent') plus the scope of rails accepted and optional token counts. An agent can immediately distinguish this write-oriented tracking tool from read-side siblings like ledger_check_spend and ledger_report.

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

Usage Guidelines4/5

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

Gives concrete conditions: workspace_key is needed only for claiming a brand-new agent_id, agent_secret is needed for every later call, and tokens/model should be included on every LLM call. It also routes real-enforcement users toward /proxy/{provider}. It stops short of explicitly contrasting this tool against the closest siblings (e.g. ledger_check_spend, ledger_report), which keeps it off a 5.

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

ledger_wait_eventsWait for Agent EventsA
Read-onlyIdempotent
Inspect

Long-poll an agent's event feed — how an agent with no public URL receives alerts.

Webhooks (POST /v1/webhooks) push events to a URL you own; an agent on stdio MCP cannot host one, so it waits here instead. Call this in a loop: the call holds open up to timeout seconds (max 30) and returns when events arrive or the wait lapses.

consumer_id names this consumer durably — pick a stable one (e.g. "claude-code-main") and reuse it. Each call returns a cursor; pass it back on your next call once you have processed that batch — that is the ack. To get restart redelivery, also pass client_instance (your process id or any per-boot token) and client_started (when your process booted): when the pair changes, events that were served but never acked come back with redelivered: true, so nothing is lost to a crash between serve and process. (The stdio MCP server supplies its own pid/started automatically — hosted callers must opt in because the gateway cannot see the client's process.)

Each event is an envelope: id (deterministic — dedupe on it), kind (alert.raised | budget.warning | budget.exceeded | anomaly.detected), summary, context (agent_id, alert_type, timestamp), alerts_since_last_write (how many alerts are stacked up since the agent's last spend write — use it to throttle escalation), redelivered.

Requires a credential: either the agent's own agent_secret or its workspace's workspace_key (same rule as GET /v1/agents/{agent_id}/events/wait).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNooptional label for this consumer instancemcp
cursorNoline offset you have processed through (omit to continue)
timeoutNoseconds to hold the call open (default 5, max 30)
agent_idYesunique agent identifier
consumer_idYesdurable name for this consumer (1-64 chars, [A-Za-z0-9._-])
agent_secretNothe agent's own secret (either this or workspace_key)
workspace_keyNothe owning workspace's key (either this or agent_secret)
client_startedNowhen your process booted — paired with client_instance
client_instanceNoyour process identity (e.g. pid or per-boot token) — enables restart redelivery

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior5/5

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

With annotations already covering readOnly/idempotent/non-destructive, the description goes well beyond them: it explains the long-poll hold semantics and 30s cap, the cursor-as-ack contract, the exact condition that triggers redelivery ('when the pair changes, events that were served but never acked come back with redelivered: true'), and the credential rule. That is precisely the operational context an agent cannot infer from the annotations.

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?

Purpose is front-loaded in the first sentence, and the dense material (polling loop, ack, redelivery, credentials) is ordered by what a caller needs next. It runs long for a tool description, and the webhook parenthetical and the event-envelope enumeration are partly covered by the output schema, but almost every sentence carries operational weight.

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?

For a 9-parameter, stateful, long-polling tool this covers the full picture: invocation pattern, ack/redelivery failure modes, auth options, and event shape. With an output schema present, the envelope description is a bonus rather than a gap-filler, and nothing an agent needs to call this correctly is absent.

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?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning on top: it explains why `consumer_id` must be durable, how `cursor` functions as an acknowledgement rather than just an offset, and the coupled semantics of `client_instance` + `client_started` (per-boot token pair triggering redelivery). These relationships are not expressible in the flat schema.

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

Purpose4/5

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

States a specific verb and resource — long-polling an agent's event feed — and frames it against the webhook alternative ('an agent on stdio MCP cannot host one, so it waits here instead'). That contrast makes the tool's niche immediately legible. It stops short of differentiating from the closest sibling, ledger_alerts, so an agent comparing the two gets no help from this text.

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

Usage Guidelines4/5

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

Gives concrete operating instructions: call in a loop, hold up to `timeout` (max 30), reuse a stable `consumer_id`, pass the returned `cursor` back as the ack, and opt into `client_instance`/`client_started` for restart redelivery. What's missing is when-not-to-use guidance or a named alternative among siblings (e.g. ledger_alerts) for the non-polling case.

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

read_skillRead SkillAInspect

Read a product skill file by its skill:// URI.

ParametersJSON Schema
NameRequiredDescriptionDefault
uriYese.g. skill://<product>/<skill-name>/SKILL.md Get valid URIs from `skills_list_tool`.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. The verb 'read' implies a non-destructive operation, but the description does not elaborate on error handling, idempotency, or any side effects. Since it is a simple read operation, the primary behavior is clear, but the lack of explicit clarification about potential failures or returned data (beyond the output schema) leaves a gap. A 3 reflects adequate basic coverage without richer context.

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

Conciseness5/5

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

The description is a single, front-loaded sentence that conveys the essential purpose without any fluff. It wastes no words and is immediately actionable.

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

Completeness4/5

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

Given the tool's simplicity (one parameter, an output schema exists), the description is sufficient. It states the action and the URI input. It does not explicitly mention prerequisites beyond the URI source, but that is covered in the schema. The lack of error details is acceptable for a straightforward read tool, so a 4 is appropriate.

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

Parameters3/5

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

The schema description for the single parameter `uri` already includes a concrete example and instruction to get URIs from `skills_list_tool`. With 100% schema coverage, the baseline is 3. The tool description adds no additional meaning beyond paraphrasing the schema; it does not compensate further because the schema is already thorough.

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 states a specific verb ('read'), a clear resource ('product skill file'), and the exact input mechanism ('skill:// URI'). It clearly distinguishes itself from sibling tools like skills_list_tool, which lists skills, and the ledger_* family, which handles ledgers. An agent can immediately understand what action this performs.

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

Usage Guidelines4/5

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

The description explicitly instructs obtaining valid URIs from `skills_list_tool`, which is a sibling tool, thus providing a clear workflow: list first, then read. This is a direct usage guideline. However, it does not explicitly state when not to use this tool, but the referral to the list tool implies a prerequisite sequence that sufficiently routes the agent.

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

skills_list_toolSkills List ToolAInspect

List this product's skills. Each entry carries the SKILL.md URI, its name and description, verbatim frontmatter, and a per-file sha256 manifest. Read a body with read_skill.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It discloses the output structure (entries with URI, name, description, frontmatter, manifest) and hints at a read-only listing operation. However, it doesn't mention pagination, size limits, or whether the manifest is computed on demand, which would be useful for a listing tool.

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

Conciseness5/5

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

The description is two sentences, front-loads the purpose, and packs the output details into a compact list. Every sentence earns its place, and the pointer to read_skill is a useful routing hint without extra fluff.

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

Completeness4/5

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

For a zero-parameter listing tool with an output schema, the description is nearly complete. It explains what each entry contains and how to proceed to read a body. It could mention whether the list is sorted or whether it includes all skills, but these are minor gaps given the output schema exists.

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 has zero parameters, so there is no parameter semantics burden. The description fully explains what the tool returns, which is the only relevant semantic content. Baseline 4 is appropriate for a no-parameter tool.

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 clearly states the tool lists this product's skills and enumerates exactly what each entry contains (SKILL.md URI, name, description, verbatim frontmatter, sha256 manifest). It also distinguishes itself from the sibling read_skill by pointing to it for reading a body.

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

Usage Guidelines4/5

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

The description implies this is the listing tool and directs users to read_skill for body content, giving a clear alternative. It doesn't explicitly state when not to use it, but the context is sufficient for an agent to select it for listing versus reading.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 2 tool updates
    • Changedledger_api_docs1 field changed
      • changedInput schema / properties / topic / description
        Previous value: -"\"quickstart\" | \"mcp\" | \"rest\" | \"budget\" | \"errors\" | \"idempotency\" | \"all\"\n   (default \"\" == \"all\"). Unknown topics fall back to the full docs."New value: +"\"quickstart\" | \"mcp\" | \"rest\" | \"budget\" | \"errors\" | \"idempotency\" | \"metering\" | \"events\" | \"all\"\n   (default \"\" == \"all\"). Unknown topics fall back to the full docs."
    • Addedledger_wait_events
  2. 3 tool updates
    • Addedledger_approval_decide
    • Addedledger_approvals
    • Addedledger_request_approval
  3. 3 tool updates
    • Removedledger_list_agents
    • Addedledger_price
    • Addedledger_proxy_attach
  4. 1 tool update
    • Addedledger_check_spend
  5. 1 tool update
    • Addedledger_start
  6. 2 tool updates
    • Addedread_skill
    • Addedskills_list_tool
  7. 2 tool updates
    • Addedledger_revoke_secret
    • Addedledger_rotate_secret
  8. 4 tool updates
    • Changedledger_alerts3 fields changed
      • addedInput schema / properties / agent_id / description
        Added value: +"unique agent identifier"
      • addedInput schema / properties / agent_secret
        Added value: +{
        +  "default": "",
        +  "description": "the agent's own secret (either this or workspace_key)",
        +  "type": "string"
        +}
      • addedInput schema / properties / workspace_key
        Added value: +{
        +  "default": "",
        +  "description": "the owning workspace's key (either this or agent_secret)",
        +  "type": "string"
        +}
    • Changedledger_report2 fields changed
      • addedInput schema / properties / agent_secret
        Added value: +{
        +  "default": "",
        +  "description": "the agent's own secret (either this or workspace_key)",
        +  "type": "string"
        +}
      • addedInput schema / properties / workspace_key
        Added value: +{
        +  "default": "",
        +  "description": "the owning workspace's key (either this or agent_secret)",
        +  "type": "string"
        +}
    • Changedledger_set_budget1 field changed
      • addedInput schema / properties / workspace_key
        Added value: +{
        +  "default": "",
        +  "description": "required when claiming a brand-new agent_id; not\n           needed once the agent_id has been claimed",
        +  "type": "string"
        +}
    • Changedledger_track1 field changed
      • addedInput schema / properties / workspace_key
        Added value: +{
        +  "default": "",
        +  "description": "required when claiming a brand-new agent_id; not\n           needed once the agent_id has been claimed",
        +  "type": "string"
        +}

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables agents to track real-time token spend and cost velocity, automatically throttle or freeze execution when budgets are exceeded, and enforce sandbox and safety guardrails.
    7
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.