Skip to main content
Glama

emem, the verifiable memory protocol for the physical world

Check a value against the fact it cites, before you publish it

emem_echo_verify
Read-onlyIdempotent

Grade a value that you will emit against the signed fact that your citation cites. The tool returns matches. When the value does not match, it also returns the drift between your value and the value in emem. This step catches a transcription error that would otherwise be a silent wrong number. A model can resolve a fact correctly and still type 0.2411 for 0.241103. No other step in the loop sees this. Memory algebra: the verify operation (https://emem.dev/docs/model.html).

When to use: Call this immediately before you publish, log or pass on a value from an emem fact. Treat a false matches as a stop, not a warning. Use value_verbatim from resolve: quote that exact decimal string, then echo-verify the text you emitted. For a due-diligence or compliance record, this gives a signed check for each citation. Then you can state every cited value was echo-verified. The tool also accepts a bare cid, so a damaged citation still gets a grade.

Example arguments: {"token":"emem:fact:defi.zb572.xoso.zb1ec:4qj3l4mgh7ch5kvxmkqspjdl6y42oqhm42khh3gostccpixkbz5q","claimed_value":"-0.0522"}

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
tokenYesThe citation you used. Any form resolve accepts, including a bare cid, which answers with `degraded: true`: a bare cid asserts no location, so the cell-binding check is skipped and the grade covers the value only. A cid that is not 52 characters is refused as a damaged citation rather than as a missing one, and must not be retried.
strictNoRequire BYTE-IDENTICAL equality. Default false, which also accepts a numerically equal value spelled differently (0.50 for 0.5). It changes exactly one outcome: the numerically-equal-but-respelled case, which passes by default and becomes `drift: "reformatted"` here. `rounded` and `wrong` already fail either way, so `strict` never turns a pass into a pass. It is also inert when `claimed_value` came in as a JSON number, because the respelling then happened in the JSON parser, before this tool saw it.
claimed_valueYesThe value you are about to publish, as a string or a number. Send it as a STRING, character for character as you will emit it. A JSON number is stringified before the comparison, so `0.50` arrives as `0.5` and `0.2411000` as `0.2411` (measured against the live responder): the trailing digits this check exists to defend are gone before it runs. Quote `value_verbatim` from resolve as a string and echo the exact characters you will publish.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
driftNoThe difference between what you wrote and what emem holds, when they disagree. Explicit null on an exact match: the key is always present, so branch on its value rather than on whether it exists. Declaring this `string` alone was a live schema violation on every matching call, which is how it was found.
tokenYesThe citation you passed, echoed back exactly as sent.
matchesYesWhether what you were about to publish agrees with the signed fact. Treat false as a gate, not a warning.
receiptNo
degradedNoTrue when a bare cid was passed and the cell binding could not be checked.
fact_cidNo
claimed_valueYesEchoed back, so a log line carries both sides of the comparison.
canonical_tokenNoThe token in its canonical spelling, whatever form you passed.
offline_verify_atNoWhere to re-run this check without trusting this responder.
resolved_value_verbatimNoThe fact's value as the exact decimal string it was signed as. Quote this rather than reformatting it.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / claimed_value / type
      Added value: +[
      +  "string",
      +  "number"
      +]
  2. Changed4 schema fields changed
    • changedInput schema / properties / claimed_value / description
      Previous value: -"The value you are about to publish, as a string or a number. A string is compared verbatim first, which is what catches a retype a float comparison would forgive."New value: +"The value you are about to publish, as a string or a number. Send it as a STRING, character for character as you will emit it. A JSON number is stringified before the comparison, so `0.50` arrives as `0.5` and `0.2411000` as `0.2411` (measured against the live responder): the trailing digits this check exists to defend are gone before it runs. Quote `value_verbatim` from resolve as a string and echo the exact characters you will publish."
    • changedInput schema / properties / strict / description
      Previous value: -"Require BYTE-IDENTICAL equality. Default false, which also accepts a numerically equal value spelled differently (0.50 for 0.5)."New value: +"Require BYTE-IDENTICAL equality. Default false, which also accepts a numerically equal value spelled differently (0.50 for 0.5). It changes exactly one outcome: the numerically-equal-but-respelled case, which passes by default and becomes `drift: \"reformatted\"` here. `rounded` and `wrong` already fail either way, so `strict` never turns a pass into a pass. It is also inert when `claimed_value` came in as a JSON number, because the respelling then happened in the JSON parser, before this tool saw it."
    • changedInput schema / properties / token / description
      Previous value: -"The citation you used. Any form resolve accepts, including a bare cid (answers degraded)."New value: +"The citation you used. Any form resolve accepts, including a bare cid, which answers with `degraded: true`: a bare cid asserts no location, so the cell-binding check is skipped and the grade covers the value only. A cid that is not 52 characters is refused as a damaged citation rather than as a missing one, and must not be retried."
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "canonical_token": {
      +      "description": "The token in its canonical spelling, whatever form you passed.",
      +      "type": "string"
      +    },
      +    "claimed_value": {
      +      "description": "Echoed back, so a log line carries both sides of the comparison.",
      +      "type": "string"
      +    },
      +    "degraded": {
      +      "description": "True when a bare cid was passed and the cell binding could not be checked.",
      +      "type": "boolean"
      +    },
      +    "drift": {
      +      "description": "The difference between what you wrote and what emem holds, when they disagree. Explicit null on an exact match: the key is always present, so branch on its value rather than on whether it exists. Declaring this `string` alone was a live schema violation on every matching call, which is how it was found.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "fact_cid": {
      +      "type": "string"
      +    },
      +    "matches": {
      +      "description": "Whether what you were about to publish agrees with the signed fact. Treat false as a gate, not a warning.",
      +      "type": "boolean"
      +    },
      +    "offline_verify_at": {
      +      "description": "Where to re-run this check without trusting this responder.",
      +      "type": "string"
      +    },
      +    "receipt": {
      +      "type": "object"
      +    },
      +    "resolved_value_verbatim": {
      +      "description": "The fact's value as the exact decimal string it was signed as. Quote this rather than reformatting it.",
      +      "type": "string"
      +    },
      +    "token": {
      +      "description": "The citation you passed, echoed back exactly as sent.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "matches",
      +    "token",
      +    "claimed_value"
      +  ],
      +  "type": "object"
      +}
  3. Added

TDQS

Score is being calculated.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.