Skip to main content
Glama

Report a run you finished

report_agent_run
Read-only

Call once when a run ends: its start and end time (ISO 8601), whether it completed or failed, how it ended (outcome: result -- it ended with a usable result; no_result -- it ended without one, or inconclusive; failed), the model, and the tokens it used (input, output, cache writes, cache reads; fast-mode calls separately in fast_usage; if you cannot see your token counts, estimate them -- the characters of everything you read and wrote, divided by 4 -- and set usage_estimated: true beside usage (not inside it); never send zeros for them; always say the model you ran on, exactly as your host names it: it prices the tokens, and Rithmo checks it against the models your owner set and alerts them to a different one), and optionally the same tokens by model (usage_by_model: up to 20 { model, speed: standard | fast, long_context, usage }) so each model is priced at its own rate. run_ref is your own id for the run; reporting the same run again records nothing new. Requires the mcp:report scope. Rithmo prices the run itself; the run shows on the agent's page as reported by the agent. Optionally say what the run was asked (task, a few words), how it ended (result, a few words) and what it read (read: up to 50 { kind: file | url | tool, ref }) and the work behind it (work: up to 10 { system, kind: repo | branch | commit | pull_request | ticket, label, url (https) }) and where its tokens went (breakdown: { kind: instructions | research | editing | testing | sharing | tools | delegating | thinking | other, usage }, the same tokens split by kind of work, adding up to usage plus fast_usage for every token type; one that does not is left out) and where you left your result for a person to see (delivered_to: { where, in a few words, e.g. "ChatGPT chat" or "Slack #marketing"; url (https) of it when you have one }), which the agent's page shows so its owner knows where to look. These are shown as your own account of the run; they grant nothing. Always say how many actions the run took that changed or sent anything in any system (actions_taken; 0 when none): Rithmo compares it with the checks you made, and a run that acted without checking is blocked until a person reviews it.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "run_ref": "<run_ref>",
      "ended_at": "<ended_at>",
      "status": "<status>"
    },
    "name": "report_agent_run"
  }
}

Input Schema

NameRequiredDescriptionDefault
readNo
taskNo
workNo
modelNoText: the model you ran on, exactly as your host names it.
usageNo
resultNo
statusYes
outcomeNo
run_refYes
ended_atYes
agent_keyNo
breakdownNo
fast_usageNo
started_atNo
delivered_toNo
actions_takenNo
usage_by_modelNo
usage_estimatedNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Added

TDQS

A3.8/5.0
Behavior4/5

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

Well beyond the annotations, it discloses an auth requirement (mcp:report scope), an idempotency rule per run_ref, downstream effects (Rithmo prices the run; it appears on the agent's page; mismatched models are flagged to the owner), and a hard gating consequence (runs with actions but no checks are blocked pending human review). It also explains why the readOnlyHint is defensible: 'These are shown as your own account of the run; they grant nothing.' Minor tension with idempotentHint=false ('reporting the same run again records nothing new'), though that is per-run_ref rather than an outright contradiction; no failure/validation behavior is described.

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

Conciseness2/5

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

The trigger is correctly front-loaded, but the remainder is a single sprawling run-on sentence with deeply nested parentheticals ('and the work behind it (`work`: up to 10 {…}) and where its tokens went…'), mixing required-field instructions, estimation heuristics, pricing policy, and UI effects. An agent must re-parse it to extract per-field rules, and several requirements (usage_estimated placement, never send zeros) are easy to miss mid-clause. It is not padded with filler, but the structure actively obstructs use.

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 an 18-parameter, deeply nested, no-output-schema write tool, the description covers nearly everything an agent needs: when to call, which fields are required in practice, how to approximate token counts, how models are priced, and what happens downstream. Remaining holes are the undocumented agent_key and no statement about what a successful call returns or how validation errors surface. Those are minor compared with the field-level guidance provided.

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 only 6% across 18 parameters, so the description carries almost the entire semantic load and does so substantively: it defines the outcome enum values (result / no_result / failed), the token fields including fast_usage, the up-to-20 usage_by_model shape with speed and long_context, the breakdown sum constraint ('adding up to usage plus fast_usage… one that does not is left out'), and an exact placement rule for usage_estimated ('beside usage (not inside it)'). Gaps remain: agent_key is never mentioned, the required `status` field is only implied by 'whether it completed or failed', and started_at/ended_at key names are not given explicitly.

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 opening clause 'Call once when a run ends' gives a specific trigger plus a clear resource (a completed run of this agent), and the body enumerates exactly what gets recorded (times, outcome, model, token usage, references, actions taken). It does not explicitly contrast itself with siblings such as start_agent_run or report_action_outcome, so differentiation is left to inference from their names. Purpose is clear, but the enumerated detail is buried in one long sentence.

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 states a concrete when: 'Call once when a run ends', and adds conditional instructions ('if you cannot see your token counts, estimate them… the characters of everything you read and wrote, divided by 4', 'never send zeros', 'reporting the same run again records nothing new'). It also warns of a consequence that affects workflow: a run that acted without checking is blocked until a person reviews it. What it never does is name an alternative tool or say when-not to call this versus report_action_outcome.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources