Skip to main content
Glama

Check Fact Freshness

check_fact
Read-onlyIdempotent

Avoid a duplicate expensive read-only tool call before repeating source-backed validation, especially across an agent fleet. Use for repeated paid web search, metered scraping, browser/extraction, rate-limited APIs, duplicate API validation or multi-step validation when the caller already has a known value. Returns SAME_OBSERVED, CHANGED_OBSERVED, CONTESTED, STALE or UNKNOWN. Only SAME_OBSERVED can be considered for caller-policy-gated reuse; every other status requires normal authoritative validation before OBSERVE. SeenRelay never browses or verifies externally.

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": {
      "fact": "<fact>",
      "known_value": "<known_value>"
    },
    "name": "check_fact"
  }
}

Input Schema

NameRequiredDescriptionDefault
factYesSource-backed fact coordinate whose recent shared evidence should be checked.
known_valueYesCaller-known value to compare with recent observations. Mutable observed content is excluded from fact identity.
max_age_secondsNoMaximum age, in seconds, of shared observations the caller is willing to consider. Omit to use the service default.

Output Schema

NameRequiredDescriptionDefault
hiveNoCurrent bounded Hive admission/lease state.
errorNoPresent instead of a decision status when CHECK cannot be admitted or is controlled.
statusNoDecision status when CHECK succeeds. Only SAME_OBSERVED can be considered for reuse, and only under caller policy. CHANGED_OBSERVED, CONTESTED, STALE and UNKNOWN require normal authoritative validation before any OBSERVE.
fact_keyNoCanonical SeenRelay fact identity for this coordinate.
next_stepNoExplicit cold/stale-path instruction: validate the authoritative source normally, then OBSERVE the independently obtained result.
useful_reuse_awardsNoQualified reuse awards attributable to this CHECK under SeenRelay telemetry rules; not a truth or independence score.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$defs": {
      +    "__schema0": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "number"
      +        },
      +        {
      +          "type": "boolean"
      +        },
      +        {
      +          "type": "null"
      +        },
      +        {
      +          "items": {
      +            "$ref": "#/$defs/__schema0"
      +          },
      +          "type": "array"
      +        },
      +        {
      +          "additionalProperties": {
      +            "$ref": "#/$defs/__schema0"
      +          },
      +          "propertyNames": {
      +            "type": "string"
      +          },
      +          "type": "object"
      +        }
      +      ]
      +    }
      +  },
      +  "$schema": "https://json-schema.org/draft/2020-12/schema",
      +  "additionalProperties": {},
      +  "description": "CHECK result. Exactly one of a decision status or an error is expected; additional evidence fields may be present.",
      +  "properties": {
      +    "error": {
      +      "additionalProperties": {},
      +      "description": "Present instead of a decision status when CHECK cannot be admitted or is controlled.",
      +      "properties": {
      +        "code": {
      +          "description": "Stable machine-readable service/admission error code.",
      +          "type": "string"
      +        },
      +        "detail": {
      +          "description": "Human-readable error detail. A tool error is not evidence that the source value is unchanged.",
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "code",
      +        "detail"
      +      ],
      +      "type": "object"
      +    },
      +    "fact_key": {
      +      "description": "Canonical SeenRelay fact identity for this coordinate.",
      +      "type": "string"
      +    },
      +    "hive": {
      +      "$ref": "#/$defs/__schema0",
      +      "description": "Current bounded Hive admission/lease state."
      +    },
      +    "next_step": {
      +      "const": "VALIDATE_THEN_OBSERVE",
      +      "description": "Explicit cold/stale-path instruction: validate the authoritative source normally, then OBSERVE the independently obtained result.",
      +      "type": "string"
      +    },
      +    "status": {
      +      "description": "Decision status when CHECK succeeds. Only SAME_OBSERVED can be considered for reuse, and only under caller policy. CHANGED_OBSERVED, CONTESTED, STALE and UNKNOWN require normal authoritative validation before any OBSERVE.",
      +      "enum": [
      +        "SAME_OBSERVED",
      +        "CHANGED_OBSERVED",
      +        "CONTESTED",
      +        "STALE",
      +        "UNKNOWN"
      +      ],
      +      "type": "string"
      +    },
      +    "useful_reuse_awards": {
      +      "description": "Qualified reuse awards attributable to this CHECK under SeenRelay telemetry rules; not a truth or independence score.",
      +      "maximum": 9007199254740991,
      +      "minimum": 0,
      +      "type": "integer"
      +    }
      +  },
      +  "type": "object"
      +}
  2. Changed7 schema fields changed
    • addedInput schema / properties / fact / description
      Added value: +"Source-backed fact coordinate whose recent shared evidence should be checked."
    • addedInput schema / properties / fact / properties / locator / properties / scheme / description
      Added value: +"Source-native locator type: RFC 6901-style JSON pointer, stable HTML element id, or stable source-native key."
    • addedInput schema / properties / fact / properties / locator / properties / value / description
      Added value: +"Source-native locator value. json_pointer values must begin with /; locator bytes are otherwise preserved."
    • addedInput schema / properties / fact / properties / qualifiers / description
      Added value: +"Identity-bearing semantic qualifiers. Include only fields needed to distinguish otherwise identical source-backed facts."
    • addedInput schema / properties / fact / properties / source / description
      Added value: +"Stable credential-free absolute HTTP(S) source URL. Tracking parameters are removed; authentication or signature query parameters are rejected."
    • addedInput schema / properties / known_value / description
      Added value: +"Caller-known value to compare with recent observations. Mutable observed content is excluded from fact identity."
    • addedInput schema / properties / max_age_seconds / description
      Added value: +"Maximum age, in seconds, of shared observations the caller is willing to consider. Omit to use the service default."
  3. First observed

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive/openWorld=false, so the bar is lower; the description still adds the crucial operational fact that 'SeenRelay never browses or verifies externally', plus the reuse policy gating SAME_OBSERVED. It doesn't state latency, cost, or what happens when no shared observations exist, but the essential behavioral boundary is disclosed.

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?

Three dense sentences with no filler, and the status list plus reuse caveat are placed where an agent will read them. The lead clause is jargon-heavy and its grammatical subject is unclear, which costs a point.

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?

A return-value schema and safety annotations exist, so return format needn't be re-explained; the description covers purpose, cost motivation, and the reuse rule. Gaps: max_age_seconds is never mentioned and the relationship to observe_fact (and the undefined term 'OBSERVE') is left implicit.

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%, so baseline 3 applies. The description hints at known_value semantics ('the caller already has a known value') but says nothing about max_age_seconds or how fact coordinates are formed, and the schema already carries all of that detail.

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 makes clear this is a pre-check against recently shared observations of a source-backed fact, and it enumerates the five statuses returned. However, the opening clause ('Avoid a duplicate expensive read-only tool call...') is convoluted and the tool's actual action is buried, and the sibling observe_fact is never named or contrasted.

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 gives concrete triggering scenarios (repeated paid web search, metered scraping, browser/extraction, rate-limited APIs, duplicate API validation) and an explicit exclusion rule: only SAME_OBSERVED may be considered for caller-policy-gated reuse, everything else requires normal authoritative validation. That is a real when/when-not contract.

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.