Skip to main content
Glama

Blame a snapshot file

get_blame
Read-onlyIdempotent

Each line of a snapshot file with the transcript turn that wrote it (session, turn, and its share of that turn's priced cost), and the file's cost per authoring turn. Lines no transcript turn wrote (pasted, read, blank) have no origin. The turns themselves (get_transcript_turns) are read only by the entry's owner and admins. While build metrics are withheld from the caller (metrics_withheld) every cost is null. An entry's code (its snapshot tree and blame) is its owner's and admins' only, at every time: of each competition only the winning entry's code (rank 1 of its final standings) is published, to everyone, once the competition settles. Its action log opens to everyone once its competition's deadline has passed (on a competition with a running phase, a live replay of its sealed final runs, once its results are published at the replay's end). Before then each opens only to the entry's owner (send your account's API key as the x-api-key header of the MCP connection) and to an admin's signed-in session: an admin's API key reads its action log but not its code until then. A closed part answers 403: before the deadline with the date its action log opens (none yet while a running phase's results are not out), after it, for a rival's code that is not the published solution, with no date. Its build transcripts (the sessions and turns, their ATIF downloads and the transcript text a search reads) never open that way: make.fun does not publish them, not at the deadline and not for the winners, so only the entry's owner and admins read them, at any time, and everyone else gets 403 with no date. An admin reads a rival's transcripts with a signed-in session inside the admin window, before the deadline and after it, each read recorded in the audit log; an admin's API key, this connection's included, is refused them (403: a signed-in session is needed) until the deadline and reads them from 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": {
      "submission_id": "<submission_id>",
      "path": "<path>"
    },
    "name": "get_blame"
  }
}

Input Schema

NameRequiredDescriptionDefault
pathYesThe file, e.g. src/bot.ts
submission_idYesThe entry (submission) id: a UUID, as get_competition, get_leaderboard and search list them

Output Schema

NameRequiredDescriptionDefault
pathYes
linesYes
turnsYes
truncatedYes
blob_sha256Yes
submission_idYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already establish read-only, idempotent, non-destructive, closed-world behavior, so the bar is lower, yet the description still adds substantial context: null costs while metrics_withheld, 403 semantics with and without a date, and the API-key vs signed-in-session distinction. The deduction is that most of this text governs transcripts and action logs — resources other tools surface — rather than blame's own output.

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 return-value and no-origin explanation is correctly front-loaded, but roughly three-quarters of the text is a sprawling access-control treatise covering action logs, transcripts, ATIF downloads, admin windows, and audit logging. Much of that belongs to get_action_log and get_transcript_turns, and the nested parentheticals make it hard to scan.

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?

With an output schema present, the description need not document return values, and the permission model — the main failure mode for this tool — is covered exhaustively, including what a 403 means in each time window. Nothing an agent needs to call get_blame correctly is missing; the description errs toward surplus rather than gap.

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 both parameters are documented in-schema (path as a file like src/bot.ts, submission_id as a UUID from get_competition/get_leaderboard/search). The description adds no additional semantics about the path, submission_id, or their interaction, so the baseline of 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?

The opening sentence names a specific operation and output: per-line attribution of a snapshot file to transcript turns, plus the file's cost per authoring turn. It also defines the edge case (lines with no origin: pasted, read, blank), so an agent knows exactly what it gets. It does not explicitly contrast the tool with close siblings like get_tree or get_submission, which a 5 would require.

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 rather than stated — the agent must infer that this is the tool for line-level authorship of a file, whereas get_tree gives structure. It does name get_transcript_turns as the place for the turns themselves, which is a genuine alternative pointer. There is no explicit when-to-use or when-not-to-use precondition for blame itself.

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.