Skip to main content
Glama

Get what changed in a run

get_changes
Read-onlyIdempotent

Report what changed in a project run against the run just before it, or against any run you name: pages added, modified and removed, field changes, and coverage. Use it to answer 'what changed on the site', or 'since last month' with against. list_pages shows every page whether or not it changed, and list_pages with url one page's text and versions. Inputs: project_id from list_projects. run_id from list_runs picks the run; empty means the latest finished run. against, another run's id from list_runs, compares the two directly instead of with the run just before. A run still going answers 409. Safeguards: removals are withheld when a run reached under 90% of the site, so a blocked crawl never reports pages as gone. A project's first run is a baseline with nothing to compare. Read-only and free: it reads stored data and never fetches.

Input Schema

NameRequiredDescriptionDefault
run_idNoA run's id, from list_runs; empty means the project's latest finished run.
againstNoAnother run's id, from list_runs, to compare with directly; omit to compare with the run just before.
project_idYesThe project's 32-character hex id, from list_projects.

Output Schema

NameRequiredDescriptionDefault
codeNoOnly on a failure: a machine-readable reason, e.g. read_only, validation, plan_limit or not_found.
runsNoThe finished runs a record exists for, newest first, for picking another run_id.
errorNoOnly when the call failed: what went wrong, in words an assistant can act on.
changeNo{runId, prevRunId, baseline, rebaselined, coverage, degraded, counts {added, modified, removed}, summary, feed, fields, withheld}. feed: each changed page as {url, path, kind (added, modified or removed), added and removed (words, e.g. '+12'), wordsBefore, wordsAfter}. fields: head and extracted field changes as {url, field, before, after}. withheld: removals held back because coverage was under 90%. Each list holds up to 200.
detailNoOnly on a failure: the API's own wording, when the error was rephrased.
statusNoOnly on a failure: the HTTP status code.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedInput schema / properties / against
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Another run's id, from list_runs, to compare with directly; omit to compare with the run just before.",
      +  "title": "Against"
      +}
    • changedOutput schema / description
      Previous value: -"A run's change record against the run before it."New value: +"A run's change record against the run before it, or against the run named in `against`."
  2. Changed3 schema fields changed
    • changedInput schema / properties / project_id / description
      Previous value: -"The project's id, as list_projects or create_project returns it."New value: +"The project's 32-character hex id, from list_projects."
    • changedInput schema / properties / run_id / description
      Previous value: -"A run's id, from list_runs, start_run or the runId a list_pages answer carries; leave empty for the last finished run."New value: +"A run's id, from list_runs; empty means the project's latest finished run."
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "additionalProperties": true,
      +  "description": "A run's change record against the run before it.",
      +  "properties": {
      +    "change": {
      +      "description": "{runId, prevRunId, baseline, rebaselined, coverage, degraded, counts {added, modified, removed}, summary, feed, fields, withheld}. feed: each changed page as {url, path, kind (added, modified or removed), added and removed (words, e.g. '+12'), wordsBefore, wordsAfter}. fields: head and extracted field changes as {url, field, before, after}. withheld: removals held back because coverage was under 90%. Each list holds up to 200.",
      +      "title": "Change"
      +    },
      +    "code": {
      +      "description": "Only on a failure: a machine-readable reason, e.g. read_only, validation, plan_limit or not_found.",
      +      "title": "Code"
      +    },
      +    "detail": {
      +      "description": "Only on a failure: the API's own wording, when the error was rephrased.",
      +      "title": "Detail"
      +    },
      +    "error": {
      +      "description": "Only when the call failed: what went wrong, in words an assistant can act on.",
      +      "title": "Error"
      +    },
      +    "runs": {
      +      "description": "The finished runs a record exists for, newest first, for picking another run_id.",
      +      "title": "Runs"
      +    },
      +    "status": {
      +      "description": "Only on a failure: the HTTP status code.",
      +      "title": "Status"
      +    }
      +  },
      +  "title": "ChangesOut",
      +  "type": "object"
      +}
  3. Changed1 schema field changed
    • changedInput schema / properties / run_id / description
      Previous value: -"A run's id, from start_run or the runId a list_pages answer carries; leave empty for the last finished run."New value: +"A run's id, from list_runs, start_run or the runId a list_pages answer carries; leave empty for the last finished run."
  4. Changed2 schema fields changed
    • addedInput schema / properties / project_id / description
      Added value: +"The project's id, as list_projects or create_project returns it."
    • addedInput schema / properties / run_id / description
      Added value: +"A run's id, from start_run or the runId a list_pages answer carries; leave empty for the last finished run."
  5. First observed

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the readOnly/idempotent annotations: it discloses that an in-progress run returns 409, that removals are suppressed when a run covered under 90% of the site, and that a project's first run is a baseline with nothing to compare. These are exactly the edge cases that prevent a wrong interpretation of an empty diff.

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-loads the core purpose before labeled Inputs/Safeguards/Read-only sections, and every clause carries information. The trailing 'it reads stored data and never fetches' mildly duplicates the readOnlyHint annotation, keeping it just short of a 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?

With an output schema present, return values need no explanation, and the description still covers inputs, cross-tool sourcing (list_projects, list_runs), error behavior, and the safeguard semantics. 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.

Parameters3/5

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

Schema coverage is 100% and the schema descriptions already explain run_id, against, and project_id, so the description largely restates them. It adds modest value by framing `against` as an alternative to the default previous-run comparison, but no format, syntax, or sourcing detail beyond what is already structured. 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?

States a specific verb and resource ('Report what changed in a project run') and enumerates the output categories: pages added, modified, removed, field changes, coverage. It explicitly differentiates itself from the sibling list_pages, which 'shows every page whether or not it changed', so an agent can route correctly without opening a 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 concrete trigger phrases ('what changed on the site', 'since last month') and maps the latter to the `against` parameter. It names the alternative (list_pages, and list_pages with url) and states the condition under which each applies, 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.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.