Skip to main content
Glama

emem, the verifiable memory protocol for the physical world

Ask a free-text question about a place

emem_ask

Answer a free-text question about a real-world location in one call. Signed satellite, elevation, water and built-up receipts support the answer. The tool sends the place and the question through the locate, recall and algorithm chain on the server, and returns one packaged envelope.

When to use: Call this when the question is about a specific place and the answer must carry its evidence. Send the question as q, with place, cell or lat+lng. Over MCP a point answer is a projection. It has answer, receipt (cite receipt.fact_cids), place_resolved, routed_to, facts_summary, algorithm_outcomes_summary, spatial_trace and scene_url. It has model_answer if you sent model, and _projection, which names what the projection removed. POST /v1/ask has more: caveats, topic_routing, reasoning, and inventory with include:["inventory"]. A routed_to other than answer comes back complete. The answer gives a current value. For how X changed, use emem_intent did_change or emem_diff.

Example arguments: {"q":"is this neighbourhood flood-prone for a flat purchase","place":"Ashok Nagar, Ranchi"}

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
qYesUser's natural-language question about the place (e.g. "is this neighbourhood flood-prone").
latNoWGS-84 latitude (paired with `lng`; alternative to `place` / `cell`).
lngNoWGS-84 longitude (paired with `lat`).
cellNocell64 string (alternative to `place`, use when you have one from a prior emem_locate / emem_recall response). Provide this OR `place` OR `lat`+`lng`.
modelNoOptional. Compose an EXTRA prose answer with a named model, returned as `model_answer` beside the deterministic `answer`. It does not replace it: `answer` is synthesised from the structured fields and never calls a model, so every number in it traces to a fact_cid, and asking for a model must not turn a checkable answer into an unchecked one. `model_answer` carries provenance.class = model_output. Name it by base_model (`nvidia/Cosmos3-Edge`), by family (`cosmos3_edge`, `gemma`), or by any fragment naming exactly one of them (`cosmos`); a fragment matching several is refused and names them; an unroutable name is refused with the list of routable ones, and a routable model whose service is not answering is refused as busy or down rather than silently substituted. Cosmos is refused while its host has no GPU.
placeNoFree-text place name (e.g. "Mount Fuji", "Ashok Nagar, Ranchi"). REQUIRED unless `cell` or `lat`+`lng` is provided. Extract the noun phrase from the user's turn; the responder geocodes via OSM Nominatim.
queryNoAlias for `q`.
includeNoOpt-in REST envelope sections. `reasoning` drops `algorithms_for_question`; add `algorithms` to keep it. The MCP projection ignores these.
verboseNoREST only: true adds per-algorithm formulas, band metadata and long prose. The MCP projection is small (about 7 KB) either way; the REST envelope is larger.
questionNoAlias for `q`.
include_imageNoBundle a Sentinel-2 RGB scene URL for the resolved cell. Adds ~1-2 s on first call.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
cellNoThe cell64 the question resolved to: emem's address for the place.
_meansNo
answerNoThe prose answer. Also in the content block, which carries the MCP projection; POST /v1/ask has the full envelope.
schemaYes
questionNoThe question as asked.
spatial_traceYesA spatial memory trace: what this responder has measured at this place, as primitives a model can reason over rather than a picture a person looks at.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / model / description
      Previous value: -"Optional. Compose an EXTRA prose answer with a named model, returned as `model_answer` beside the deterministic `answer`. It does not replace it: `answer` is synthesised from the structured fields and never calls a model, so every number in it traces to a fact_cid, and asking for a model must not turn a checkable answer into an unchecked one. `model_answer` carries provenance.class = model_output. Name it by base_model (`nvidia/Cosmos3-Edge`), by family (`cosmos3_edge`, `gemma`), or by any fragment naming exactly one of them (`cosmos`); a fragment matching several is refused and names them; an unroutable name is refused with the list of routable ones, and a routable model whose service is not answering is refused as busy or down rather than silently substituted. Cosmos deliberates and typically takes 13-22 s."New value: +"Optional. Compose an EXTRA prose answer with a named model, returned as `model_answer` beside the deterministic `answer`. It does not replace it: `answer` is synthesised from the structured fields and never calls a model, so every number in it traces to a fact_cid, and asking for a model must not turn a checkable answer into an unchecked one. `model_answer` carries provenance.class = model_output. Name it by base_model (`nvidia/Cosmos3-Edge`), by family (`cosmos3_edge`, `gemma`), or by any fragment naming exactly one of them (`cosmos`); a fragment matching several is refused and names them; an unroutable name is refused with the list of routable ones, and a routable model whose service is not answering is refused as busy or down rather than silently substituted. Cosmos is refused while its host has no GPU."
  2. Changed5 schema fields changed
    • changedInput schema / properties / include / description
      Previous value: -"Opt-in heavy response sections. Default response is slim (~5 KB): answer + algorithm key + fact_cids + caveats. Name specific sections to include them. Ignored when verbose=true (which includes everything)."New value: +"Opt-in REST envelope sections. `reasoning` drops `algorithms_for_question`; add `algorithms` to keep it. The MCP projection ignores these."
    • changedInput schema / properties / include / items / enum
      Previous value: -[
      -  "band_observations",
      -  "algorithm_outcomes",
      -  "facts_full",
      -  "temporal_composition",
      -  "foundation_embeddings",
      -  "scene",
      -  "inventory"
      -]New value: +[
      +  "band_observations",
      +  "algorithm_outcomes",
      +  "facts_full",
      +  "temporal_composition",
      +  "scene",
      +  "inventory",
      +  "reasoning",
      +  "algorithms"
      +]
    • changedInput schema / properties / verbose / description
      Previous value: -"When true, return the full envelope: per-algorithm formula strings, temporal_recipe blocks, per-fact band_metadata duplicates, and the long _explanation prose. Default (since 2026-05-05) is false so the response fits MCP's 25 KB cap; the signed receipt + fact CIDs + algorithm keys + algorithms_cid are always retained. Pass true to get the full body when debugging."New value: +"REST only: true adds per-algorithm formulas, band metadata and long prose. The MCP projection is small (about 7 KB) either way; the REST envelope is larger."
    • changedOutput schema / properties / answer / description
      Previous value: -"The prose answer. The same text is in the content block, which also carries the full envelope."New value: +"The prose answer. Also in the content block, which carries the MCP projection; POST /v1/ask has the full envelope."
    • changedOutput schema / properties / spatial_trace / properties / layers / items / properties / points / items / properties / f / description
      Previous value: -"Index into the fact_cids array in this result's text block. Dereference it to get the signed bytes."New value: +"Index into `receipt.fact_cids` (or the list `_projection.fact_cids_at` names). Dereference it for the signed bytes."
  3. Changed2 schema fields changed
    • changedOutput schema / properties / spatial_trace / properties / layers / items / properties / points / items / properties / value / description
      Previous value: -"The measured value, in the band's own units."New value: +"The measured value, in the band's own units. `null` where the band was looked for and not found: an absence is a reading."
    • addedOutput schema / properties / spatial_trace / properties / layers / items / properties / points / items / properties / value / type
      Added value: +[
      +  "number",
      +  "string",
      +  "boolean",
      +  "null"
      +]
  4. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "_means": {
      +      "type": "string"
      +    },
      +    "answer": {
      +      "description": "The prose answer. The same text is in the content block, which also carries the full envelope.",
      +      "type": "string"
      +    },
      +    "cell": {
      +      "description": "The cell64 the question resolved to: emem's address for the place.",
      +      "type": "string"
      +    },
      +    "question": {
      +      "description": "The question as asked.",
      +      "type": "string"
      +    },
      +    "schema": {
      +      "const": "emem.ask_structured.v1",
      +      "type": "string"
      +    },
      +    "spatial_trace": {
      +      "description": "A spatial memory trace: what this responder has measured at this place, as primitives a model can reason over rather than a picture a person looks at.",
      +      "properties": {
      +        "absent": {
      +          "description": "Bands this responder looked for and did not find. Absence is evidence: without it a consumer infers coverage nobody measured.",
      +          "items": {
      +            "properties": {
      +              "band": {
      +                "type": "string"
      +              }
      +            },
      +            "type": "object"
      +          },
      +          "type": "array"
      +        },
      +        "at": {
      +          "description": "[lat, lng] of the cell, so a point has a position without a second call.",
      +          "items": {
      +            "type": "number"
      +          },
      +          "type": "array"
      +        },
      +        "cell": {
      +          "type": "string"
      +        },
      +        "counts": {
      +          "description": "Totals taken BEFORE any cap, so truncation can be seen rather than guessed.",
      +          "properties": {
      +            "absent": {
      +              "type": "integer"
      +            },
      +            "absent_shown": {
      +              "type": "integer"
      +            },
      +            "points_shown": {
      +              "type": "integer"
      +            },
      +            "present": {
      +              "type": "integer"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "layers": {
      +          "description": "Points grouped by what kind of evidence they are: surface (what the ground is), built (what stands on it), now (what is happening there), embedding (vectors for similarity). A layer absent from this list means the question never reached that kind of evidence; a band looked for and not found is in `absent` instead.",
      +          "items": {
      +            "properties": {
      +              "layer": {
      +                "enum": [
      +                  "surface",
      +                  "built",
      +                  "now",
      +                  "embedding",
      +                  "other",
      +                  "ground"
      +                ],
      +                "type": "string"
      +              },
      +              "points": {
      +                "description": "One per signed reading.",
      +                "items": {
      +                  "properties": {
      +                    "age_s": {
      +                      "description": "How old the reading was when this answer was written.",
      +                      "type": "integer"
      +                    },
      +                    "band": {
      +                      "type": "string"
      +                    },
      +                    "class": {
      +                      "description": "Provenance class: direct_sensor, deterministic_index, estimator, model_output, attested_execution, human_curated, unclassified. What KIND of claim this is.",
      +                      "type": "string"
      +                    },
      +                    "f": {
      +                      "description": "Index into the fact_cids array in this result's text block. Dereference it to get the signed bytes.",
      +                      "type": "integer"
      +                    },
      +                    "unit": {
      +                      "type": "string"
      +                    },
      +                    "value": {
      +                      "description": "The measured value, in the band's own units."
      +                    }
      +                  },
      +                  "required": [
      +                    "band",
      +                    "value"
      +                  ],
      +                  "type": "object"
      +                },
      +                "type": "array"
      +              }
      +            },
      +            "required": [
      +              "layer",
      +              "points"
      +            ],
      +            "type": "object"
      +          },
      +          "type": "array"
      +        },
      +        "schema": {
      +          "const": "emem.spatial_trace.v1",
      +          "type": "string"
      +        },
      +        "stage": {
      +          "description": "Which stage of the answer grounded these readings.",
      +          "type": "string"
      +        },
      +        "truncated": {
      +          "type": "boolean"
      +        }
      +      },
      +      "required": [
      +        "schema",
      +        "layers",
      +        "counts"
      +      ],
      +      "type": "object"
      +    }
      +  },
      +  "required": [
      +    "schema",
      +    "spatial_trace"
      +  ],
      +  "type": "object"
      +}
  5. Changed1 schema field changed
    • changedInput schema / properties / model / description
      Previous value: -"Optional. Compose an EXTRA prose answer with a named model, returned as `model_answer` beside the deterministic `answer`. It does not replace it: `answer` is synthesised from the structured fields and never calls a model, so every number in it traces to a fact_cid, and asking for a model must not turn a checkable answer into an unchecked one. `model_answer` carries provenance.class = model_output. Name it by base_model (`nvidia/Cosmos3-Edge`) or by family (`cosmos3_edge`, `gemma`); an unroutable name is refused with the list of routable ones, and a routable model whose service is not answering is refused as busy or down rather than silently substituted. Cosmos deliberates and typically takes 13-22 s."New value: +"Optional. Compose an EXTRA prose answer with a named model, returned as `model_answer` beside the deterministic `answer`. It does not replace it: `answer` is synthesised from the structured fields and never calls a model, so every number in it traces to a fact_cid, and asking for a model must not turn a checkable answer into an unchecked one. `model_answer` carries provenance.class = model_output. Name it by base_model (`nvidia/Cosmos3-Edge`), by family (`cosmos3_edge`, `gemma`), or by any fragment naming exactly one of them (`cosmos`); a fragment matching several is refused and names them; an unroutable name is refused with the list of routable ones, and a routable model whose service is not answering is refused as busy or down rather than silently substituted. Cosmos deliberates and typically takes 13-22 s."
  6. Changed1 schema field changed
    • addedInput schema / properties / model
      Added value: +{
      +  "description": "Optional. Compose an EXTRA prose answer with a named model, returned as `model_answer` beside the deterministic `answer`. It does not replace it: `answer` is synthesised from the structured fields and never calls a model, so every number in it traces to a fact_cid, and asking for a model must not turn a checkable answer into an unchecked one. `model_answer` carries provenance.class = model_output. Name it by base_model (`nvidia/Cosmos3-Edge`) or by family (`cosmos3_edge`, `gemma`); an unroutable name is refused with the list of routable ones, and a routable model whose service is not answering is refused as busy or down rather than silently substituted. Cosmos deliberates and typically takes 13-22 s.",
      +  "type": "string"
      +}
  7. Changed2 schema fields changed
    • addedInput schema / properties / query
      Added value: +{
      +  "description": "Alias for `q`.",
      +  "type": "string"
      +}
    • addedInput schema / properties / question
      Added value: +{
      +  "description": "Alias for `q`.",
      +  "type": "string"
      +}
  8. Changed1 schema field changed
    • changedInput schema / properties / cell / description
      Previous value: -"cell64 string (alternative to `place` — use when you have one from a prior emem_locate / emem_recall response). Provide this OR `place` OR `lat`+`lng`."New value: +"cell64 string (alternative to `place`, use when you have one from a prior emem_locate / emem_recall response). Provide this OR `place` OR `lat`+`lng`."
  9. Changed1 schema field changed
    • addedInput schema / properties / include
      Added value: +{
      +  "description": "Opt-in heavy response sections. Default response is slim (~5 KB): answer + algorithm key + fact_cids + caveats. Name specific sections to include them. Ignored when verbose=true (which includes everything).",
      +  "items": {
      +    "enum": [
      +      "band_observations",
      +      "algorithm_outcomes",
      +      "facts_full",
      +      "temporal_composition",
      +      "foundation_embeddings",
      +      "scene",
      +      "inventory"
      +    ],
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  10. Changed3 schema fields changed
    • addedInput schema / properties / cell / maxLength
      Added value: +23
    • addedInput schema / properties / cell / minLength
      Added value: +19
    • addedInput schema / properties / cell / pattern
      Added value: +"^(?:(?:[bcdfghjklmnpqrstvwxyz][aeiouAEIOU]){2}|z[0-9a-f]{4})(?:\\.(?:(?:[bcdfghjklmnpqrstvwxyz][aeiouAEIOU]){2}|z[0-9a-f]{4})){3}$"
  11. Changed1 schema field changed
    • addedInput schema / properties / verbose
      Added value: +{
      +  "default": false,
      +  "description": "When true, return the full envelope: per-algorithm formula strings, temporal_recipe blocks, per-fact band_metadata duplicates, and the long _explanation prose. Default (since 2026-05-05) is false so the response fits MCP's 25 KB cap; the signed receipt + fact CIDs + algorithm keys + algorithms_cid are always retained. Pass true to get the full body when debugging.",
      +  "type": "boolean"
      +}
  12. Changed4 schema fields changed
    • removedInput schema / anyOf
      Removed value: -[
      -  {
      -    "required": [
      -      "place"
      -    ]
      -  },
      -  {
      -    "required": [
      -      "cell"
      -    ]
      -  },
      -  {
      -    "required": [
      -      "lat",
      -      "lng"
      -    ]
      -  }
      -]
    • removedInput schema / description
      Removed value: -"Single-shot free-text answer about a real-world location. `q` is always required. Exactly one location form is also required: `place` (free text — extract the noun phrase from the user's turn), `cell` (cell64 from a prior call), or both `lat`+`lng`."
    • changedInput schema / properties / cell / description
      Previous value: -"cell64 string (alternative to `place` — use when you have one from a prior emem_locate / emem_recall response)."New value: +"cell64 string (alternative to `place` — use when you have one from a prior emem_locate / emem_recall response). Provide this OR `place` OR `lat`+`lng`."
    • changedInput schema / properties / place / description
      Previous value: -"Free-text place name (e.g. \"Mount Fuji\", \"Ashok Nagar, Ranchi\"). Use this when the user's turn names a place — extract the noun phrase yourself; the responder geocodes via OSM Nominatim."New value: +"Free-text place name (e.g. \"Mount Fuji\", \"Ashok Nagar, Ranchi\"). REQUIRED unless `cell` or `lat`+`lng` is provided. Extract the noun phrase from the user's turn; the responder geocodes via OSM Nominatim."
  13. Changed6 schema fields changed
    • addedInput schema / anyOf
      Added value: +[
      +  {
      +    "required": [
      +      "place"
      +    ]
      +  },
      +  {
      +    "required": [
      +      "cell"
      +    ]
      +  },
      +  {
      +    "required": [
      +      "lat",
      +      "lng"
      +    ]
      +  }
      +]
    • addedInput schema / description
      Added value: +"Single-shot free-text answer about a real-world location. `q` is always required. Exactly one location form is also required: `place` (free text — extract the noun phrase from the user's turn), `cell` (cell64 from a prior call), or both `lat`+`lng`."
    • changedInput schema / properties / cell / description
      Previous value: -"cell64 string (alternative to `place`)."New value: +"cell64 string (alternative to `place` — use when you have one from a prior emem_locate / emem_recall response)."
    • changedInput schema / properties / lng / description
      Previous value: -"WGS-84 longitude."New value: +"WGS-84 longitude (paired with `lat`)."
    • changedInput schema / properties / place / description
      Previous value: -"Free-text place name. One of `place`, `cell`, or (`lat`+`lng`) is required."New value: +"Free-text place name (e.g. \"Mount Fuji\", \"Ashok Nagar, Ranchi\"). Use this when the user's turn names a place — extract the noun phrase yourself; the responder geocodes via OSM Nominatim."
    • changedInput schema / properties / q / description
      Previous value: -"User's natural-language question about the place."New value: +"User's natural-language question about the place (e.g. \"is this neighbourhood flood-prone\")."
  14. First observed

TDQS

Score is being calculated.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.