Skip to main content
Glama

Contribute Fact Observation

observe_fact

After independently performing a fresh paid search, scrape, browser extraction, API read or other source-backed validation, deposit the observed result for later CHECKs. Returns accepted=true when a new observation is stored or deduplicated=true for a recognized retry/recent duplicate. Never OBSERVE hearsay. Optional Ed25519 proof establishes key possession and continuity, not truth or real-world independence.

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>",
      "value": "<value>"
    },
    "name": "observe_fact"
  }
}

Input Schema

NameRequiredDescriptionDefault
factYesSource-backed fact coordinate for the independently obtained observation.
valueYesValue independently obtained by the caller. Mutable observed content is excluded from fact identity.
observed_atNoISO-8601 time when the caller obtained the observation. Omit to use server receipt time.
observer_idNoOptional self-asserted continuity label. It is unverified unless accompanied by observer_proof.
observer_proofNoOptional Ed25519 proof of key possession, continuity and payload integrity; not proof of truth or real-world independence.
idempotency_keyNoCaller-chosen retry key for the same OBSERVE operation. Reusing it deduplicates an idempotent retry.
source_validatorNoOptional source-validator metadata from the independent validation. The caller decides whether a returned hint is sufficient for source confirmation.
evidence_fingerprintNoOptional caller-supplied fingerprint of the independently obtained evidence. SeenRelay stores it as provenance metadata and does not verify it against the source.

Output Schema

NameRequiredDescriptionDefault
hiveNoCurrent bounded Hive admission/lease state.
errorNoPresent when OBSERVE cannot be admitted or is controlled. This is not a statement about source truth.
reasonNoDeduplication reason when accepted=false and deduplicated=true.
acceptedNoTrue when a new independently obtained observation was stored. Omitted when OBSERVE cannot be admitted.
fact_keyNoCanonical SeenRelay fact identity for this coordinate.
deduplicatedNoTrue when an idempotent/recent duplicate was recognized and no new observation row was needed.
future_check_eligibleNoWhether the accepted or deduplicated observation is eligible to support later CHECKs under normal freshness rules.

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": "OBSERVE result. accepted=true means a new observation was stored; deduplicated=true means the retry/recent duplicate was recognized.",
      +  "properties": {
      +    "accepted": {
      +      "description": "True when a new independently obtained observation was stored. Omitted when OBSERVE cannot be admitted.",
      +      "type": "boolean"
      +    },
      +    "deduplicated": {
      +      "description": "True when an idempotent/recent duplicate was recognized and no new observation row was needed.",
      +      "type": "boolean"
      +    },
      +    "error": {
      +      "additionalProperties": {},
      +      "description": "Present when OBSERVE cannot be admitted or is controlled. This is not a statement about source truth.",
      +      "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"
      +    },
      +    "future_check_eligible": {
      +      "description": "Whether the accepted or deduplicated observation is eligible to support later CHECKs under normal freshness rules.",
      +      "type": "boolean"
      +    },
      +    "hive": {
      +      "$ref": "#/$defs/__schema0",
      +      "description": "Current bounded Hive admission/lease state."
      +    },
      +    "reason": {
      +      "description": "Deduplication reason when accepted=false and deduplicated=true.",
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
  2. Changed19 schema fields changed
    • addedInput schema / properties / evidence_fingerprint / description
      Added value: +"Optional caller-supplied fingerprint of the independently obtained evidence. SeenRelay stores it as provenance metadata and does not verify it against the source."
    • addedInput schema / properties / fact / description
      Added value: +"Source-backed fact coordinate for the independently obtained observation."
    • 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 / idempotency_key / description
      Added value: +"Caller-chosen retry key for the same OBSERVE operation. Reusing it deduplicates an idempotent retry."
    • addedInput schema / properties / observed_at / description
      Added value: +"ISO-8601 time when the caller obtained the observation. Omit to use server receipt time."
    • addedInput schema / properties / observer_id / description
      Added value: +"Optional self-asserted continuity label. It is unverified unless accompanied by observer_proof."
    • addedInput schema / properties / observer_proof / description
      Added value: +"Optional Ed25519 proof of key possession, continuity and payload integrity; not proof of truth or real-world independence."
    • addedInput schema / properties / observer_proof / properties / nonce / description
      Added value: +"16..64 random bytes encoded as unpadded base64url."
    • addedInput schema / properties / observer_proof / properties / public_key / description
      Added value: +"Raw 32-byte Ed25519 public key encoded as unpadded base64url."
    • addedInput schema / properties / observer_proof / properties / scheme / description
      Added value: +"Observer proof contract version."
    • addedInput schema / properties / observer_proof / properties / signature / description
      Added value: +"Raw 64-byte Ed25519 signature encoded as unpadded base64url."
    • addedInput schema / properties / observer_proof / properties / timestamp / description
      Added value: +"ISO-8601 signing time; it must fall within the configured proof-skew window."
    • addedInput schema / properties / source_validator / description
      Added value: +"Optional source-validator metadata from the independent validation. The caller decides whether a returned hint is sufficient for source confirmation."
    • addedInput schema / properties / source_validator / properties / kind / description
      Added value: +"Type of observer-supplied source-validator metadata."
    • addedInput schema / properties / source_validator / properties / value / description
      Added value: +"Observer-supplied validator value. Stored and returned only as a hint; SeenRelay does not verify it against the source."
    • addedInput schema / properties / value / description
      Added value: +"Value independently obtained by the caller. Mutable observed content is excluded from fact identity."
  3. First observed

TDQS

A4.3/5.0
Behavior4/5

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

Beyond the annotations, it explains the two return outcomes (accepted versus deduplicated) and clarifies that an Ed25519 proof demonstrates key possession and continuity, not truth. It still leaves some behavioral details implicit, such as failure modes, but with annotations covering safety and mutation hints this is strong disclosure.

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 precondition, then gives return semantics, the hearsay exclusion, and the proof caveat. Each sentence contributes useful selection or invocation context with 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?

For a complex mutation tool with nested objects and a full output schema, the description supplies the essential procedural context: independent validation, later CHECK use, return outcomes, and proof limitations. The schema and output schema carry the detailed field and return-value documentation, so nothing critical 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 description coverage is 100%, so the schema already documents all eight parameters thoroughly. The description adds little parameter-level meaning beyond repeating the proof caveat already present in the schema, which is the baseline expectation.

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 gives a specific verb and resource: deposit an independently observed result for later CHECKs. It clearly distinguishes this from the read/check side by referencing later CHECKs and by emphasizing that the observation must come from fresh source-backed validation.

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 the key precondition: use only after independently performing a fresh paid search, scrape, browser extraction, API read, or other source-backed validation. It also excludes hearsay, but it does not explicitly name or compare against the sibling check_fact tool as an alternative.

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.