{"server":"io.github.Vortx-AI/emem","count":47,"changes":[{"tool":"emem_intent","kind":"changed","observed_at":"2026-10-15T00:14:34.022Z","fields":["inputSchema"],"description_before":null,"description_after":null,"description_similarity":null,"before_hash":"e53dab698c0810964b83539409d61d91","after_hash":"3a01b968a4eaf8b43c721c6f86dfc558"},{"tool":"emem_intent","kind":"changed","observed_at":"2026-10-11T15:39:24.611Z","fields":["description","inputSchema"],"description_before":"Say what you want in one typed object and get the answer, without choosing a primitive. `type` is a tagged union: it selects the intent AND decides which other fields are read, so send only the fields its row needs. The plan runs in the same call: you get results, not a list of calls to make.\n\ntype | needs | optional | answers\nwhere_is | description | | cell64 for a named place\nwhat_is_here | cell OR place | description | what is attested at a location\nis_like | a, b | | cosine similarity of two cells\ndid_change | cell, band, window | | delta for one band over [start,end] tslots\nfind_like | key | k, filter | nearest cells by embedding\nconfirm | claim, cell | | verdict plus the signed facts behind it\nask | description | place/cell/lat+lng | free-text question, packaged answer\narea_over_time | geometry OR bbox, start_date, end_date | index, max_scenes | an area's index per overpass with spread and anomaly\n\nAn unknown or missing `type` returns a `needs_intent_type` envelope naming the valid values, not a hard error.\n\nWhen to use: Call when the question maps onto one of the eight rows above and you would rather state the goal than pick a primitive. Otherwise go direct: a band at a cell is emem_recall, a region is emem_recall_polygon, a free-text place question is emem_ask (type:\"ask\" forwards to it). `window` takes tslots, not dates: get them from emem_trajectory. A tool named here but not listed still runs by name through tools/call.\n\nExample arguments: {\"type\":\"did_change\",\"cell\":\"defi.zb64a.cAzU.zfa27\",\"band\":\"indices.ndvi\",\"window\":[20245,20620]}","description_after":"State what you want in one typed object and get the answer. You do not choose a primitive. `type` selects the intent AND the other fields that the tool reads. Send only the fields in its row. The plan runs in the same call: you get results, not a list of calls.\n\ntype | needs | optional | answers\nwhere_is | description | | cell64 for a named place\nwhat_is_here | cell OR place | description | what is attested at a location\nis_like | a, b | | cosine similarity of two cells\ndid_change | cell, band, window | | delta for one band over [start,end] tslots\nfind_like | key | k, filter | nearest cells by embedding\nconfirm | claim, cell | | verdict and the signed facts behind it\nask | description | place/cell/lat+lng | free-text question, packaged answer\narea_over_time | geometry, bbox OR areas; start_date, end_date | index, max_scenes | index of an area for each overpass, with spread and anomaly\n\nAn unknown or missing `type` returns a `needs_intent_type` envelope with the valid values. It is not a hard error.\n\nWhen to use: Call this when the question matches one of the eight rows and you prefer to state the goal. Otherwise call the primitive. A band at a cell is emem_recall. A region is emem_recall_polygon. A free-text question about a place is emem_ask (type:\"ask\" sends it there). `window` takes tslots, not dates: get them from emem_trajectory. `areas` puts up to 6 areas on one chart. You can call a tool that this text names but your list does not show, by name, through tools/call.\n\nExample arguments: {\"type\":\"did_change\",\"cell\":\"defi.zb64a.cAzU.zfa27\",\"band\":\"indices.ndvi\",\"window\":[20245,20620]}","description_similarity":0.735,"before_hash":"51a290334dd1e02db3cca60ceff3a746","after_hash":"e53dab698c0810964b83539409d61d91"},{"tool":"emem_find_similar","kind":"changed","observed_at":"2026-10-11T15:39:24.611Z","fields":["description"],"description_before":"k-NN over the corpus by cell embedding or inline vector. Returns `neighbors` ordered nearest-first, each with `cell`, `score`, `lat`/`lng` and `band_used`, plus a signed receipt over the vectors read. Scoring is `mode`: cosine is exact fp32; hamming is a sign-bit popcount that scans far more cells for the same budget; hamming_then_rerank does both. `k` is 1..1000, default 10. It ranks what the corpus already holds; only when the KEY's own vector is missing does it materialise that one band for the key, signed and reported in `materialize_notes`, then retry. Neighbours are never materialised, so an empty result means nobody has attested a vector nearby, not that nowhere resembles the key.\n\nWhen to use: Call when the user asks 'find places like X', 'where else looks like this', or hands an embedding to find neighbours. `key` is either a cell64 or `inline:[x,y,...]`. Default band is `geotessera` (128-D Tessera foundation embedding); pass `band: \"geotessera.multi_year\"` for the 1152-D 9-vintage (2017–2025) fusion.\n\nExample arguments: {\"key\":\"defi.zb64a.cAzU.zfa27\",\"k\":10}","description_after":"Find the k nearest cells in the corpus by cell embedding or by an inline vector. The answer has `neighbors`, nearest first, each with `cell`, `score`, `lat`/`lng` and `band_used`, and a signed receipt over the vectors it read. `mode` sets the scoring. cosine is exact fp32. hamming counts sign bits and scans many more cells for the same budget. hamming_then_rerank does both. `k` is 1 to 1000, default 10. The tool ranks only what the corpus holds. When the KEY has no vector, it materializes that one band for the key, signs it, reports it in `materialize_notes`, and tries again. It never materializes neighbours. Thus an empty result means that no attested vector is near, not that no place is similar.\n\nWhen to use: Call this for 'find places like X' or 'where else looks like this', or with an embedding. `key` is a cell64 or `inline:[x,y,...]`. The default band is `geotessera` (the 128-D Tessera foundation embedding). For the 1152-D fusion of 9 years (2017 to 2025), send `band: \"geotessera.multi_year\"`.\n\nExample arguments: {\"key\":\"defi.zb64a.cAzU.zfa27\",\"k\":10}","description_similarity":0.685,"before_hash":"1dc2b43bb3b32864f627ec5dc1244b03","after_hash":"97e307f8179886fec416adb6116519ab"},{"tool":"emem_entity_link","kind":"changed","observed_at":"2026-10-11T15:39:24.611Z","fields":["description"],"description_before":"Record a signed, ATTRIBUTED claim that a label or external id (GERS / OSM / Wikidata) denotes an existing object, or with `stance: \"disputes\"` that it does not. A shared-space write: it changes what other agents resolve, so it is stored with your key, rate-limited per key, and weighed by how many INDEPENDENT keys agree. One key's binding is shown to every reader as one key's claim, never as the answer.\n\nWhen to use: Call when you can vouch that two phrasings denote one object, or to attach an authoritative external id; your key goes on the record. Use `stance: \"disputes\"` when another key's binding is wrong: recorded beside it, deletes nothing. Corroborating a correct single-key binding is useful in itself.\n\nExample arguments: {\"entity_token\":\"emem:entity:0a1b2c3d4e5f60718293\",\"alias\":\"the north dam\"}","description_after":"Record a signed, ATTRIBUTED claim that a label or an external id (GERS, OSM, Wikidata) names an existing object. With `stance: \"disputes\"`, record that it does not. This is a write to the shared space: it changes what other agents resolve. The responder stores it with your key, limits the rate for each key, and weighs it by how many INDEPENDENT keys agree. Every reader sees the binding of one key as the claim of one key, never as the answer.\n\nWhen to use: Call this when you can confirm that two names mean one object, or to attach an authoritative external id. Your key goes on the record. Use `stance: \"disputes\"` when the binding of another key is wrong. The dispute goes beside it and deletes nothing. A second key on a correct single-key binding is useful by itself.\n\nExample arguments: {\"entity_token\":\"emem:entity:0a1b2c3d4e5f60718293\",\"alias\":\"the north dam\"}","description_similarity":0.736,"before_hash":"82750ea3d481efbb9dc890195a40f9c7","after_hash":"951d401f09b42055930bdf6e1c7397a0"},{"tool":"emem_entity_resolve","kind":"changed","observed_at":"2026-10-11T15:39:24.611Z","fields":["description"],"description_before":"Find the objects agents have bound a phrasing to, ranked by INDEPENDENT corroboration, never arrival order. Each candidate carries `asserted_by`, `disputed_by`, `independent_attesters` and `corroboration` (`single_key` | `multiple_independent_keys` | `none_attributed`); `contested` is set when more than one object claims the name. `text` for candidates, `near` to narrow by place, or an `emem:entity:` `token` to dereference. Read-only; alias text is other agents' data.\n\nWhen to use: Call BEFORE minting and before citing: resolve first, mint only if nothing matches, read `corroboration` before you cite. A `single_key` binding is one agent's claim about a shared name; if you can vouch for it, corroborate it with emem_entity_link so the next reader sees two keys.\n\nExample arguments: {\"text\":\"the golden gate bridge\",\"near\":\"San Francisco\"}","description_after":"Find the objects that agents connected to a phrase. The tool ranks them by INDEPENDENT corroboration, never by arrival order. Each candidate has `asserted_by`, `disputed_by`, `independent_attesters` and `corroboration` (`single_key` | `multiple_independent_keys` | `none_attributed`). `contested` is true when more than one object claims the name. Send `text` for candidates, `near` to narrow by place, or an `emem:entity:` `token` to dereference. The tool only reads. Alias text is data from other agents.\n\nWhen to use: Call this BEFORE you mint and before you cite. Resolve first, and mint only if nothing matches. Read `corroboration` before you cite. A `single_key` binding is the claim of one agent about a shared name. If you can confirm it, corroborate it with emem_entity_link, so the next reader sees two keys.\n\nExample arguments: {\"text\":\"the golden gate bridge\",\"near\":\"San Francisco\"}","description_similarity":0.776,"before_hash":"191ff0ea5527620e6a8b5cedc55640b6","after_hash":"4466833cdb7018bc5616b1b1e543c9b6"},{"tool":"emem_memory_bundle","kind":"changed","observed_at":"2026-10-11T15:39:24.611Z","fields":["description"],"description_before":"Compose N (cell, band, tslot?) triples into ONE signed envelope. Each triple runs through the standard auto-materialize recall path; the resulting fact_cids are bundled into a content-addressed envelope and the responder signs over the full receipt. The composed `bundle_token` is `emem:bundle:<bundle_cid>`, a single rebindable string that cites the whole set. Memory algebra: the `merge` operation (https://emem.dev/docs/model.html).\n\nWhen to use: Call when the agent wants to cite multiple (place, band, vintage) facts as one handle. The bundle stays verifiable offline via /v1/verify_receipt (the receipt covers all cited fact_cids and cells). Use this instead of N separate `emem_memory_token` composers when the citation is conceptually one thing (e.g. \"the EUDR-relevant baseline for these 8 plots at 2020-12-31\"). Caps at 256 triples per call, and the response reports `members` and `resolved` so a bundle that only partly resolved is visible without walking every citation.\n\nExample arguments: {\"triples\":[{\"cell\":\"defi.zb4d9.pefa.zf619\",\"band\":\"copdem30m.elevation_mean\"},{\"cell\":\"defi.zb493.xoso.zcb6a\",\"band\":\"indices.ndvi\"}],\"purpose\":\"audit baseline 2026\"}","description_after":"Combine N (cell, band, tslot?) triples into ONE signed envelope. Each triple goes through the standard recall path, which materializes on a miss. The tool puts the resulting fact_cids in a content-addressed envelope, and the responder signs the full receipt. The `bundle_token` is `emem:bundle:<bundle_cid>`: one string that cites the full set. Memory algebra: the `merge` operation (https://emem.dev/docs/model.html).\n\nWhen to use: Call this when you must cite several (place, band, date) facts as one handle. You can verify the bundle offline with /v1/verify_receipt. The receipt covers all the cited fact_cids and cells. Use this instead of N calls to `emem_memory_token` when the citation is one thing. An example is \"the EUDR baseline for these 8 plots at 2020-12-31\". The limit is 256 triples for each call. The answer gives `members` and `resolved`, so you can see a bundle that resolved only in part.\n\nExample arguments: {\"triples\":[{\"cell\":\"defi.zb4d9.pefa.zf619\",\"band\":\"copdem30m.elevation_mean\"},{\"cell\":\"defi.zb493.xoso.zcb6a\",\"band\":\"indices.ndvi\"}],\"purpose\":\"audit baseline 2026\"}","description_similarity":0.641,"before_hash":"9a7e816a2cc431b6132ef4000a9eba60","after_hash":"dda793676766515789b2b16c4577f04e"},{"tool":"emem_echo_verify","kind":"changed","observed_at":"2026-10-11T15:39:24.611Z","fields":["description"],"description_before":"Grade a value you are about to emit against the signed fact your citation points at. Returns `matches` and, when it does not, the `drift` between what you were about to say and what emem holds. This is the step that turns a transcription error into a caught event instead of a silent wrong number: a model that resolves a fact correctly can still retype `0.2411` for `0.241103`, and nothing else in the loop notices. Memory algebra: the `verify` operation (https://emem.dev/docs/model.html).\n\nWhen to use: Call immediately before publishing, logging, or handing on any value you took from an emem fact, and treat a false `matches` as a gate rather than a warning. Pair it with `value_verbatim` from resolve: quote that exact decimal string rather than reformatting the number, then echo-verify what you actually emitted. For a due-diligence or compliance record this is what lets you assert `every cited value was echo-verified` with a signed check per citation instead of a promise. Accepts a bare cid too, so a damaged citation still grades rather than failing closed.\n\nExample arguments: {\"token\":\"emem:fact:defi.zb572.xoso.zb1ec:4qj3l4mgh7ch5kvxmkqspjdl6y42oqhm42khh3gostccpixkbz5q\",\"claimed_value\":\"-0.0522\"}","description_after":"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).\n\nWhen 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.\n\nExample arguments: {\"token\":\"emem:fact:defi.zb572.xoso.zb1ec:4qj3l4mgh7ch5kvxmkqspjdl6y42oqhm42khh3gostccpixkbz5q\",\"claimed_value\":\"-0.0522\"}","description_similarity":0.6,"before_hash":"18563c3fdc779a85e70edcdf6426945a","after_hash":"fb67cfcaa2bc95b8a212a0e9d7e4f3cf"},{"tool":"fetch","kind":"changed","observed_at":"2026-10-11T15:39:24.611Z","fields":["description"],"description_before":"Dereference an id from `search`: the reading in one line, then the signed body it came from, the URL serving those bytes, and metadata naming cell, band, signing time and key. Takes an `emem:fact:` citation, a bare fact_cid, or an `emem:cell:` handle for a whole cell. The value is quoted as the exact decimal string it was signed as, never re-rendered. A fact handle writes nothing; a cell handle, like `emem_recall`, MATERIALIZES a missing band on a cold cell (fetched upstream, signed, persisted), so the flags follow that path: readOnlyHint false.\n\nWhen to use: Call on each result you intend to cite, before quoting the number. Quote the one-line reading; the body makes it checkable, and emem_echo_verify grades what you emit against it. An oversize body says so inline and names the URL serving it whole.\n\nExample arguments: {\"id\":\"emem:fact:defi.zb493.xoso.zcb6a:cxjiu7l54ujzrpnekp24n4534yojpue4mprddbvevnqtti3lh5bq\"}","description_after":"Dereference an id from `search`. You get the reading in one line, then the signed body, the URL that serves those bytes, and metadata: cell, band, signing time and key. The id can be an `emem:fact:` citation, a bare fact_cid, or an `emem:cell:` handle for a full cell. The value is the exact decimal string that the responder signed, never a new format. A fact handle writes nothing. A cell handle, like `emem_recall`, MATERIALIZES a missing band on a cold cell: it fetches, signs and stores it. The flags follow that path: readOnlyHint false.\n\nWhen to use: Call this on each result that you will cite, before you quote the number. Quote the one-line reading. The body lets a reader check it, and emem_echo_verify grades what you emit against it. When a body is too large, the answer says so and gives the URL that serves it complete.\n\nExample arguments: {\"id\":\"emem:fact:defi.zb493.xoso.zcb6a:cxjiu7l54ujzrpnekp24n4534yojpue4mprddbvevnqtti3lh5bq\"}","description_similarity":0.658,"before_hash":"d4976dc0392b6fa444e55bd428c0c528","after_hash":"61404e9e1746bc9dbce36e5da527b742"},{"tool":"search","kind":"changed","observed_at":"2026-10-11T15:39:24.611Z","fields":["description"],"description_before":"Search emem's signed corpus and return results shaped as citations: each entry is one signed fact, with an `id` to dereference, a `title` naming band, place and the value as signed, and a stable `url` serving those bytes. Takes a place, or a question about one ('NDVI near Mount Fuji': a topic word narrows the results, never fails them), a cell64 or `emem:cell:` handle, or an emem citation (which returns the one fact it cites). Capped for the wire; the first entry (index 0) names the cell and the TRUE total. On a cold cell it MATERIALIZES a missing band first, as `emem_recall` does: fetched upstream, signed, persisted. Hence readOnlyHint false.\n\nWhen to use: Call first when a question is about a place and the answer must be citable: it turns the question into a list of sources, each of which `fetch` expands. For a synthesised answer in one call, use emem_ask instead.\n\nExample arguments: {\"query\":\"Trafalgar Square, London\"}","description_after":"Search emem's signed corpus and get results as citations. Each entry is one signed fact. It has an `id` to dereference, a `title` with band, place and signed value, and a stable `url` that serves those bytes. The query can be a place or a question about one. ('NDVI near Mount Fuji': a topic word narrows the results and never removes all of them.) It can also be a cell64, an `emem:cell:` handle, or an emem citation, which returns the one fact it cites. The list has a cap for the wire. The first entry (index 0) names the cell and the TRUE total. On a cold cell, the tool MATERIALIZES a missing band first, as `emem_recall` does: it fetches, signs and stores it. Thus readOnlyHint false.\n\nWhen to use: Call this first when a question is about a place and the answer must have citations. It changes the question into a list of sources, and `fetch` expands each source. For one combined answer in one call, use emem_ask.\n\nExample arguments: {\"query\":\"Trafalgar Square, London\"}","description_similarity":0.714,"before_hash":"a8f25190abf6d74ced25f43552777357","after_hash":"edfcdd6397bc22e33b162fe192dfbe3e"},{"tool":"emem_ask","kind":"changed","observed_at":"2026-10-11T15:39:24.611Z","fields":["description"],"description_before":"Single-shot free-text answer about a real-world location, backed by signed satellite/elevation/water/built-up receipts. Forwards a place mention plus a question; runs the locate → recall → algorithm chain server-side; returns one packaged envelope.\n\nWhen to use: Call when the question is about a specific place and the answer should carry its own evidence. Send the question verbatim as `q` plus `place`, `cell` or `lat`+`lng`. Over MCP a point answer is a projection: `answer`, `receipt` (cite `receipt.fact_cids`), `place_resolved`, `routed_to`, `facts_summary`, `algorithm_outcomes_summary`, `spatial_trace`, `scene_url`, `model_answer` if you passed `model`, and `_projection` naming what was left out. POST /v1/ask has more: `caveats`, `topic_routing`, `reasoning`, and `inventory` with include:[\"inventory\"]. A `routed_to` other than answer comes back whole. It answers with a current value; for how X changed use emem_intent did_change or emem_diff.\n\nExample arguments: {\"q\":\"is this neighbourhood flood-prone for a flat purchase\",\"place\":\"Ashok Nagar, Ranchi\"}","description_after":"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.\n\nWhen 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.\n\nExample arguments: {\"q\":\"is this neighbourhood flood-prone for a flat purchase\",\"place\":\"Ashok Nagar, Ranchi\"}","description_similarity":0.765,"before_hash":"70250439d375aea3f9ac2dd04b7a1957","after_hash":"e02b1a23a47648a79fe74d858b707a32"},{"tool":"emem_tools","kind":"changed","observed_at":"2026-10-11T15:39:24.611Z","fields":["description"],"description_before":"The map of emem's tool surface, and the only tool you need to find the rest: the working loop in the order you walk it (name, ground, cite, resolve, verify, check for drift), then every other tool grouped by the question it answers, each with its one-line trigger. Pass `name` for one tool's full schema and a runnable example. IF YOU ARE READING A LIST OF 18 TOOLS, YOU ARE SEEING A CURATED SUBSET OF 115, NOT THE WHOLE SURFACE; hosts strip `_meta`, so the count is repeated here. Every catalogued tool stays callable by name through tools/call at either endpoint.\n\nWhen to use: Call FIRST when you do not know which tool answers the question, or need a capability absent from your list: absent from the list is not absent from the server. `q` searches by topic (`ndvi`, `flood`, `verify`), `name` returns one exact schema, no arguments returns the whole map. /mcp/full registers the full catalog; emem_ask answers in one shot without picking a primitive.\n\nExample arguments: {\"q\":\"ndvi\"}","description_after":"The map of emem's tools, and the one tool that finds all the others. It gives the working loop in order (name, ground, cite, resolve, verify, check for drift). Then it groups every other tool by the question it answers, each with a one-line trigger. Send `name` for the full schema of one tool and an example that runs. IF YOU SEE A LIST OF 18 TOOLS, IT IS A CURATED SUBSET OF 115, NOT THE FULL SURFACE. Hosts remove `_meta`, so this text repeats the count. You can call every catalogued tool by name through tools/call at either endpoint.\n\nWhen to use: Call this FIRST when you do not know which tool answers the question. Also call it when your list does not have a capability. A tool that is not in your list can still be on the server. `q` searches by topic (`ndvi`, `flood`, `verify`). `name` returns one exact schema. With no arguments, you get the full map. /mcp/full registers the full catalog. emem_ask answers in one call without a choice of primitive.\n\nExample arguments: {\"q\":\"ndvi\"}","description_similarity":0.638,"before_hash":"02fe97d4c334b7e8bf5660f4a007c2b6","after_hash":"697e2a0765ad47902948fedda102dff1"},{"tool":"emem_guard_verdict","kind":"changed","observed_at":"2026-10-11T15:39:24.611Z","fields":["description"],"description_before":"Run emem-guard's policy pipeline over text you are about to send, against this responder's corpus. Finds every emem: citation, resolves each one, and returns allow or deny with a machine-readable reason: `EMEM-GUARD DENY <CODE> token=<token|-> fix=<fix> leaf=<leaf|->`. Codes are PROV_SIG (signature did not verify), PROV_BYTES (resolved to different content than claimed), PROV_DRIFT (reading has moved past its band threshold), PROV_VALUE (a stated value disagrees with the cited fact), CLAIM_UNGROUNDED (a measurable claim with no citation, opt-in via claim_gating). `fix` is the actionable half: refresh_token, remove_reference, contact_admin, cite_observation, correct_value. GEO_ZONE and redact_and_retry come only from a self-hosted guard. ADVISORY: nothing is blocked, and a citation this responder does not hold is never a denial, because it is indistinguishable from one minted elsewhere. Memory algebra: the `verify` operation (https://emem.dev/docs/model.html).\n\nWhen to use: Call it on your own draft before you assert something, or on a tool result before you reason on it, to catch a citation that does not resolve while you can still fix it. `claim_gating: true` also names measurable claims with no citation and the band that would answer them. For a payload another framework produced (CloudEvent, OPA input, OpenAI moderations body, another server's tool call) send it as-is and name its `shape`: the default reader sees only `texts`, and a check that read nothing still answers allow. To ENFORCE rather than consult, emem_guard_selfhost returns the procedure for your own node.\n\nExample arguments: {\"texts\":[\"Lusail ground sits at 2.6 m per emem:fact:defi.zb521.jawI.gOze:f3yr3urkrfwamlemwadulgth2qpw645vi6l6fhtuu4dy5o7onahq\"]}","description_after":"Run the emem-guard policy checks on text before you send it. The checks use this responder's corpus. The tool finds every emem: citation, resolves each one, and returns allow or deny with a reason that a machine can read: `EMEM-GUARD DENY <CODE> token=<token|-> fix=<fix> leaf=<leaf|->`. The codes are: PROV_SIG (the signature did not verify). PROV_BYTES (the citation resolved to different content). PROV_DRIFT (the reading moved past its band threshold). PROV_VALUE (a stated value does not agree with the cited fact). CLAIM_UNGROUNDED (a measurable claim has no citation; turn it on with claim_gating). `fix` tells you what to do: refresh_token, remove_reference, contact_admin, cite_observation, correct_value. Only a self-hosted guard returns GEO_ZONE and redact_and_retry. This tool is ADVISORY: it blocks nothing. A citation that this responder does not hold is never a denial, because it can be a citation from another responder. Memory algebra: the `verify` operation (https://emem.dev/docs/model.html).\n\nWhen to use: Call it on your draft before you assert something, or on a tool result before you reason on it. Then you can fix a citation that does not resolve. With `claim_gating: true`, it also names measurable claims with no citation, and the band that answers each. For a payload from another framework (CloudEvent, OPA input, OpenAI moderations body, a tool call from another server), send it unchanged and name its `shape`. The default reader reads only `texts`, and a check that read nothing answers allow. To ENFORCE the policy, use emem_guard_selfhost. It returns the procedure for your own node.\n\nExample arguments: {\"texts\":[\"Lusail ground sits at 2.6 m per emem:fact:defi.zb521.jawI.gOze:f3yr3urkrfwamlemwadulgth2qpw645vi6l6fhtuu4dy5o7onahq\"]}","description_similarity":0.791,"before_hash":"fe3a28bf7dfcc3da0c63d88e1f364c2a","after_hash":"06c66a72f25377b2429e4eba8f101675"},{"tool":"emem_memory_contradictions","kind":"changed","observed_at":"2026-10-11T15:39:24.611Z","fields":["description"],"description_before":"Surface where the corpus DISAGREES with itself (algebra: competing evidence). When two or more independent sources signed different values for the same place + band + time, this returns that disagreement with a 0–1 severity score and citations to every disputed fact, instead of silently picking one value and hiding the conflict. The opposite of a confident single answer: it tells you when not to trust one. Read the SCOPE before quoting a zero: by default this asks only whether two DISTINCT attesters disagree, so one responder answering an address from two different upstreams is not counted until you pass `include_same_attester_sources: true`.\n\nWhen to use: Call before you rely on a number: 'is there disagreement about X', 'do the sources corroborate this', 'audit this claim'. Narrow with `cell_prefix` for a region and `band` for one family; `min_severity` drops trivial differences. Severity is per band kind: scalar = spread over the band's range, vector = 1 - mean cosine, categorical = 1 - mode share. On a single-responder deployment add `include_same_attester_sources: true`, because the likeliest real disagreement there is one signer answering from two providers and the default scope cannot report it. Each record names its `disagreement_scope`. The receipt cites every disputed cid; quantify a pair with `emem_diff`, or read the `disagrees_with` edge via `emem_edges_recall`.\n\nExample arguments: {\"cell_prefix\":\"damO\",\"band\":\"indices.ndvi\",\"min_severity\":0.2}","description_after":"Find where the corpus DISAGREES with itself (algebra: competing evidence). Two or more independent sources can sign different values for the same place, band and time. This tool returns that disagreement with a severity from 0 to 1 and a citation for each disputed fact. It does not pick one value and hide the conflict. It tells you when not to trust a single answer. Read the SCOPE before you quote a zero. By default the tool counts only disagreement between two DIFFERENT attesters. One responder that answers from two upstreams counts only with `include_same_attester_sources: true`.\n\nWhen to use: Call this before you rely on a number: 'do the sources agree on X', 'audit this claim'. Use `cell_prefix` for a region and `band` for one band family. `min_severity` removes small differences. Severity depends on the band kind: for a scalar, the spread over the band's range. For a vector, 1 minus the mean cosine. For a category, 1 minus the share of the mode. On a single-responder node, add `include_same_attester_sources: true`. There, the most likely disagreement is one signer that answers from two providers. Each record names its `disagreement_scope`. The receipt cites every disputed cid. To measure a pair, use `emem_diff`. To read the `disagrees_with` edge, use `emem_edges_recall`.\n\nExample arguments: {\"cell_prefix\":\"damO\",\"band\":\"indices.ndvi\",\"min_severity\":0.2}","description_similarity":0.651,"before_hash":"8289e329bfdd86cb3b718ef4c768068b","after_hash":"a5d5f0b30f92dd16615745df5a1e6324"},{"tool":"emem_verify_receipt","kind":"changed","observed_at":"2026-10-11T15:39:24.611Z","fields":["description"],"description_before":"Verify a signed receipt envelope server-side: rebuilds the canonical preimage under the rule the receipt's own `preimage_version` names, runs ed25519 over the embedded key and signature, and returns `{valid, reason, failure_detail, signature_valid, merkle_proof_valid, signer_pubkey_b32, preimage_blake3_hex}`. A receipt is BYTE-FOR-BYTE OR NOTHING: v2 binds the inclusion proof, so any reshaping (a dropped field, a re-keyed one, a summary) invalidates the signature by design. For when the in-browser /verify path is unavailable, or for a server-side audit of a third party's receipt.\n\nWhen to use: Pass the receipt EXACTLY as the read primitive returned it, whole and unmodified. Two omissions produce a false forgery rather than a 400, and they are the only two worth memorising: dropping `merkle_proof`, and dropping `preimage_version` (absent deserialises to 0, which silently selects the v0 rule, so the proof still walks while the signature reads as invalid). Signature and pubkey may be byte arrays or `sig_b32` / `responder_pubkey_b32`; no other spelling is tolerated. Reshaping a field this responder can check is reported as `reason: receipt_reshaped_after_signing` with the field named, never accepted. Optionally set `pubkey_b32` to assert a specific signer. A bad signature is 200 with `valid: false`, never a 4xx. The example (from emem_tools) is a real receipt signed over two Trafalgar Square facts: unchanged it is `valid`; change any byte and it is not.\n\nExample arguments: 1602 bytes, too long to inline in a listing. Call `emem_tools` with `{\"name\": \"emem_verify_receipt\"}` for it whole and runnable; it is not shortened here because a truncated example is not one.","description_after":"Verify a signed receipt on the server. The tool builds the canonical preimage again, under the rule that the receipt's `preimage_version` names. It checks the ed25519 signature with the embedded key. It returns `{valid, reason, failure_detail, signature_valid, merkle_proof_valid, signer_pubkey_b32, preimage_blake3_hex}`. A receipt verifies BYTE FOR BYTE OR NOT AT ALL. Version 2 binds the inclusion proof, so a change of any kind makes the signature fail: a dropped field, a renamed field, a summary. Use this tool when the browser page /verify is not available. Also use it to audit a receipt from a third party.\n\nWhen to use: Send the receipt EXACTLY as the read tool returned it, complete and unchanged. Two omissions cause a false forgery, not a 400. Do not drop `merkle_proof`. Do not drop `preimage_version`. Without it the value is 0, which selects the v0 rule, and the signature reads as invalid. The signature and the key can be byte arrays, or `sig_b32` and `responder_pubkey_b32`. The tool accepts no other names. When a field changed after signing, the answer is `reason: receipt_reshaped_after_signing` and names the field. To require a specific signer, set `pubkey_b32`. A bad signature returns 200 with `valid: false`, never a 4xx. The example (from emem_tools) is a real receipt over two Trafalgar Square facts. Unchanged, it is `valid`. Change one byte, and it is not.\n\nExample arguments: 1602 bytes, too long to inline in a listing. Call `emem_tools` with `{\"name\": \"emem_verify_receipt\"}` for it whole and runnable; it is not shortened here because a truncated example is not one.","description_similarity":0.615,"before_hash":"afde768c7c99281b213c92d9a0212914","after_hash":"a4efc045ca4d2ff4c910e5e4d701cf73"},{"tool":"emem_memory_token_resolve","kind":"changed","observed_at":"2026-10-11T15:39:24.611Z","fields":["description"],"description_before":"Parse a `emem:fact:<cell64>:<fact_cid>` citation handle and return the reading it cites. `value`, `unit`, `band` and `kind` are on the response at the TOP level, alongside the full signed `fact` body they were lifted from. Saves the agent from string-splitting the token and chaining `GET /v1/facts/<cid>` manually. Memory algebra: the `resolve` operation (https://emem.dev/docs/model.html).\n\nWhen to use: Call when you hold a memory_token from another agent or an earlier turn and want the value behind it. For a scalar quote `value_verbatim`, the exact decimal string it was signed as. A null `value` or `unit` means the fact has none (an absence; a dimensionless index), not a missing field. A cid this responder does not hold is a typed 404: try /v1/fetch, or resolve at a mirror.\n\nExample arguments: {\"token\":\"emem:fact:defi.zb493.xoso.zcb6a:cxjiu7l54ujzrpnekp24n4534yojpue4mprddbvevnqtti3lh5bq\"}","description_after":"Read a `emem:fact:<cell64>:<fact_cid>` citation handle and return the reading that it cites. `value`, `unit`, `band` and `kind` are at the TOP level of the answer, beside the full signed `fact` body. You do not split the token or call `GET /v1/facts/<cid>` yourself. Memory algebra: the `resolve` operation (https://emem.dev/docs/model.html).\n\nWhen to use: Call this when you have a memory_token from another agent or an earlier turn and need the value. For a scalar, quote `value_verbatim`, the exact decimal string that the responder signed. A null `value` or `unit` means the fact has none (an absence, or an index with no unit). It does not mean a missing field. A cid that this responder does not hold returns a typed 404. Then try /v1/fetch, or resolve at a mirror.\n\nExample arguments: {\"token\":\"emem:fact:defi.zb493.xoso.zcb6a:cxjiu7l54ujzrpnekp24n4534yojpue4mprddbvevnqtti3lh5bq\"}","description_similarity":0.717,"before_hash":"33679ee172481eceb312db8780751120","after_hash":"bc2016671916142798b45987c773c03e"},{"tool":"emem_memory_token","kind":"changed","observed_at":"2026-10-11T15:39:24.611Z","fields":["description"],"description_before":"Mint a citation handle, `emem:fact:<cell64>:<fact_cid>` (or `:<state_cid>`), that any agent or LLM resolves to the byte-identical signed object. The antidote to referential drift on the value side: hand this one string to another agent instead of re-describing the fact. Validates both components are non-empty and free of the `:` separator. Memory algebra: the `cite` operation (https://emem.dev/docs/model.html).\n\nWhen to use: Call when you want one rebindable string to cite a place plus an attested fact across messages, threads, agents or tools. Pair it with `emem_echo_verify` before you publish the value. FOR MANY FACTS USE emem_memory_bundle INSTEAD, and this is measured rather than stylistic: a token is 83 to 84 characters and 51 LLM tokens while the value it points at averages 11 characters and 5.4, so N tokens cost about 9.5x the context of pasting the N numbers and hit the window sooner. A bundle is 38 characters at any N up to 256 and resolves in one round trip: it wins from N=1 against tokens and from N=5 against the plain values. Individual tokens are for citing ONE fact you must verify later.\n\nExample arguments: {\"cell\":\"defi.zb493.xoso.zcb6a\",\"fact_cid\":\"cxjiu7l54ujzrpnekp24n4534yojpue4mprddbvevnqtti3lh5bq\"}","description_after":"Make a citation handle, `emem:fact:<cell64>:<fact_cid>` (or `:<state_cid>`). Any agent or LLM resolves it to the same signed object, byte for byte. Give this one string to another agent instead of a new description of the fact. The tool checks that both parts are not empty and do not contain the `:` separator. Memory algebra: the `cite` operation (https://emem.dev/docs/model.html).\n\nWhen to use: Call this when you need one string that cites a place and an attested fact across messages, agents or tools. Use `emem_echo_verify` before you publish the value. FOR MANY FACTS, USE emem_memory_bundle. This is a measured result. A token is 83 to 84 characters and 51 LLM tokens. The value it cites is 11 characters and 5.4 tokens on average. Thus N tokens use about 9.5 times the context of the N numbers. A bundle is 38 characters for any N up to 256, and it resolves in one round trip. It costs less than tokens from N=1, and less than the plain values from N=5. Use one token to cite ONE fact that you must verify later.\n\nExample arguments: {\"cell\":\"defi.zb493.xoso.zcb6a\",\"fact_cid\":\"cxjiu7l54ujzrpnekp24n4534yojpue4mprddbvevnqtti3lh5bq\"}","description_similarity":0.641,"before_hash":"400a6ebf37dceec0a23f106a17cfb567","after_hash":"924571507a91f15a525cdadb3ec30ce9"},{"tool":"emem_recall","kind":"changed","observed_at":"2026-10-11T15:39:24.611Z","fields":["description"],"description_before":"Read the signed facts at a canonical address (cell64); auto-materializes on a miss for any band with a registered materializer. A fact_cid names one signed attestation, so a recalled fact is citeable and re-verifiable rather than a paraphrase: resolving it anywhere returns those exact bytes. It is NOT a fingerprint of the observation. The digest covers the responder's key and the moment it signed, so two responders that measure the same thing mint different fact_cids and a cid resolves only at the responder that signed it; use emem_entity for identity that crosses responders. Pass `deterministic:true` (or a `provenance` class list) to keep only facts recomputable from the cited raw source, with no model or human in the loop. In the memory algebra this is ensure(cell, bands), not get: state what must exist and the responder reuses or materializes.\n\nWhen to use: Call after `emem_locate`, or with a known cell64 or place name. Returns every Primary fact at that (cell, band, tslot). If a requested band has no fact yet but has a materializer, the responder fetches the upstream value, signs it, persists it and returns it in the same call (slow once, cached after), so any wired band recalls at any cell on Earth: pass `bands: [<band>]`. `materialize_notes` lists what was just fetched; empty with no notes means no materializer here.\n\nExample arguments: {\"cell\":\"defi.zb64a.cAzU.zfa27\",\"bands\":[\"weather.temperature_2m\",\"copdem30m.elevation_mean\"]}","description_after":"Read the signed facts at a canonical address (cell64). When a band has no fact yet but has a registered materializer, the responder fetches it. A fact_cid names one signed attestation, so you can cite a fact and verify it again. Resolve the cid anywhere and you get the same bytes. A fact_cid is NOT a fingerprint of the observation. The digest includes the responder's key and the time it signed. Thus two responders that measure the same thing make different fact_cids, and a cid resolves only at the responder that signed it. For identity across responders, use emem_entity. Send `deterministic:true` (or a `provenance` class list) to keep only facts that you can compute from the cited raw source. In the memory algebra this is ensure(cell, bands), not get: you state what must exist.\n\nWhen to use: Call this after `emem_locate`, or with a cell64 or a place name. It returns every Primary fact at that (cell, band, tslot). A band can have no fact but have a materializer. Then the responder fetches the upstream value, signs it, stores it and returns it in the same call. The first call is slow; later calls use the cache. Thus any wired band recalls at any cell on Earth: send `bands: [<band>]`. `materialize_notes` lists what the call fetched. Empty notes mean no materializer here.\n\nExample arguments: {\"cell\":\"defi.zb64a.cAzU.zfa27\",\"bands\":[\"weather.temperature_2m\",\"copdem30m.elevation_mean\"]}","description_similarity":0.685,"before_hash":"4636cf1931768313424c34ad9594d6d6","after_hash":"d8827f6894bb2b07e3ddf86f7ba9fe30"},{"tool":"emem_locate","kind":"changed","observed_at":"2026-10-11T15:39:24.611Z","fields":["description"],"description_before":"Mint the canonical, vendor-neutral address (cell64) for a real-world place: the shared spatial identity every agent resolves to identically, so two models refer to the same ground instead of two descriptions of it. Also returns the topic-grouped inventory of bands and algorithms recallable there. For a first-class OBJECT identity (a bridge, a plot, a named place) rather than a raw cell, use emem_entity. Send EITHER `lat`+`lng` as numbers OR a free-text place; coordinates win when both arrive. `q`, `query` and `name` are all accepted spellings of `place`. A key this schema does not declare is reported in `_unrecognised_arguments`, so a typo answers about somewhere else rather than erroring.\n\nWhen to use: Call when the input names a real-world place and the next step needs its cell64, or wants to know which bands exist there before recalling. `data_at_this_cell` lists every recallable band by topic (`live_bands_by_topic`), the recipes fusing them (`algorithms_for_topic`), and bands with no materializer here. For one packaged answer in a single call, use `emem_ask`.\n\nExample arguments: {\"place\":\"Mount Everest\"}","description_after":"Get the canonical address (cell64) of a real-world place. Every agent resolves a place to the same cell64, so two models refer to the same ground. The answer also lists, by topic, the bands and algorithms that you can recall there. For an OBJECT identity (a bridge, a plot) instead of a cell, use emem_entity. Send `lat`+`lng` as numbers, or a free-text place. When both arrive, the coordinates win. `q`, `query` and `name` are other names for `place`. The answer lists keys that this schema does not declare in `_unrecognised_arguments`, so a typo is visible.\n\nWhen to use: Call this when the next step needs the cell64 of a named place, or the bands that exist there. `data_at_this_cell` lists every band you can recall, by topic (`live_bands_by_topic`), the recipes that use them (`algorithms_for_topic`), and the bands with no materializer here. For one packaged answer in one call, use `emem_ask`.\n\nExample arguments: {\"place\":\"Mount Everest\"}","description_similarity":0.657,"before_hash":"ed1891847d892feaf6d6cdbf06d68d14","after_hash":"1390921260fe3825adc7259f74d5c361"},{"tool":"emem_entity","kind":"changed","observed_at":"2026-10-11T15:39:24.611Z","fields":["description"],"description_before":"Give a real-world object (a bridge, a farm plot, a river, a named place) a single, shared, content-addressed identity that any agent resolves the same way. Returns an `entity_token` (`emem:entity:<entity_cid>`) plus a signed receipt that attests how the reference resolved. Two agents that name the same object mint the SAME entity_cid; when a stable external id (Overture GERS / OSM) is known it dominates identity, so divergent labels for one real object still collapse to one id. This is the object-level antidote to referential drift: 'the damaged bridge near the river' becomes one canonical thing every model reasons about, not a phrase each model re-interprets.\n\nWhen to use: Call when a conversation refers to a THING and you want a handle that survives summarisation and travels between agents, before it drifts into 'that infrastructure issue'. Anchor it with `place`, `cell`, or `lat`+`lng`, then hand the `emem:entity:` token to any peer and they dereference the same object; recall at its cell64 for signed facts. Pick the sibling: this one MINTS or returns an identity you can anchor; `emem_entity_resolve` finds one someone already registered from a fuzzy phrase; `emem_entity_link` asserts two spellings you hold mean one object. Not for an observation (that is a fact: emem_recall or emem_memory_token) and not for naming a place (that is emem_locate). An entity is a thing AT a place.\n\nExample arguments: {\"label\":\"Golden Gate Bridge\",\"kind\":\"bridge\",\"place\":\"Golden Gate Bridge, San Francisco\"}","description_after":"Give a real-world object (a bridge, a farm plot, a river, a named place) one shared identity. Every agent resolves this identity the same way. The result is an `entity_token` (`emem:entity:<entity_cid>`) and a signed receipt that shows how the reference resolved. Two agents that name the same object get the SAME entity_cid. A stable external id (Overture GERS or OSM) decides identity when the responder knows one, so different labels for one object collapse to one id. This stops referential drift: 'the damaged bridge near the river' becomes one thing that every model reasons about.\n\nWhen to use: Call this when a conversation refers to a THING and you need a handle that travels between agents. Anchor it with `place`, `cell` or `lat`+`lng`. Give the `emem:entity:` token to a peer, and the peer gets the same object. Recall at its cell64 to read signed facts. Choose the correct sibling: this tool MINTS or returns an identity. `emem_entity_resolve` finds an identity that an agent registered before, from a fuzzy phrase. `emem_entity_link` records that two names mean one object. Do not use it for an observation (use emem_recall or emem_memory_token) or for a place (use emem_locate). An entity is a thing AT a place.\n\nExample arguments: {\"label\":\"Golden Gate Bridge\",\"kind\":\"bridge\",\"place\":\"Golden Gate Bridge, San Francisco\"}","description_similarity":0.656,"before_hash":"1eeb336a62b9c13ca20baefc7bdac0ac","after_hash":"b9cbc6578d5937a4de84c88afb20196b"},{"tool":"emem_intent","kind":"changed","observed_at":"2026-10-09T22:05:02.622Z","fields":["description","inputSchema"],"description_before":"Say what you want in one typed object and get the answer, without choosing a primitive. `type` is a tagged union: it selects the intent AND decides which other fields are read, so send only the fields its row needs. The plan is EXECUTED in the same call, so you receive the result (the resolved cell64, the similarity, the delta, the verdict), not a list of calls to make yourself.\n\ntype | needs | optional | answers\nwhere_is | description | | cell64 for a named place\nwhat_is_here | cell OR place | description | what is attested at a location\nis_like | a, b | | cosine similarity of two cells\ndid_change | cell, band, window | | delta for one band over [start,end] tslots\nfind_like | key | k, filter | nearest cells by embedding\nconfirm | claim, cell | | verdict plus the signed facts behind it\nask | description | place/cell/lat+lng | free-text question, packaged answer\n\nAn unknown or missing `type` returns a structured `needs_intent_type` envelope naming the seven values rather than a hard error, so you can correct it on the next turn.\n\nWhen to use: Call when the question maps onto one of the seven rows above and you would rather state the goal than pick a primitive. Otherwise go direct: a band at a cell is emem_recall, a region is emem_recall_polygon, a free-text place question is emem_ask (type:\"ask\" forwards to it). `window` takes tslots, not dates: get them from emem_trajectory. A tool named here but absent from `tools/list` is not a dead end: every one of the 114 dispatches by name at `/mcp` and `/mcp/full`; the core list is 18 to keep the catalog small, and `emem_tools` enumerates the rest.\n\nExample arguments: {\"type\":\"did_change\",\"cell\":\"defi.zb64a.cAzU.zfa27\",\"band\":\"indices.ndvi\",\"window\":[20245,20620]}","description_after":"Say what you want in one typed object and get the answer, without choosing a primitive. `type` is a tagged union: it selects the intent AND decides which other fields are read, so send only the fields its row needs. The plan runs in the same call: you get results, not a list of calls to make.\n\ntype | needs | optional | answers\nwhere_is | description | | cell64 for a named place\nwhat_is_here | cell OR place | description | what is attested at a location\nis_like | a, b | | cosine similarity of two cells\ndid_change | cell, band, window | | delta for one band over [start,end] tslots\nfind_like | key | k, filter | nearest cells by embedding\nconfirm | claim, cell | | verdict plus the signed facts behind it\nask | description | place/cell/lat+lng | free-text question, packaged answer\narea_over_time | geometry OR bbox, start_date, end_date | index, max_scenes | an area's index per overpass with spread and anomaly\n\nAn unknown or missing `type` returns a `needs_intent_type` envelope naming the valid values, not a hard error.\n\nWhen to use: Call when the question maps onto one of the eight rows above and you would rather state the goal than pick a primitive. Otherwise go direct: a band at a cell is emem_recall, a region is emem_recall_polygon, a free-text place question is emem_ask (type:\"ask\" forwards to it). `window` takes tslots, not dates: get them from emem_trajectory. A tool named here but not listed still runs by name through tools/call.\n\nExample arguments: {\"type\":\"did_change\",\"cell\":\"defi.zb64a.cAzU.zfa27\",\"band\":\"indices.ndvi\",\"window\":[20245,20620]}","description_similarity":0.751,"before_hash":"87d0bbef889e24eccff5ff521c71206a","after_hash":"51a290334dd1e02db3cca60ceff3a746"},{"tool":"emem_tools","kind":"changed","observed_at":"2026-10-09T22:05:02.622Z","fields":["description","inputSchema"],"description_before":"The map of emem's tool surface, and the only tool you need to find the rest: the working loop in the order you walk it (name, ground, cite, resolve, verify, check for drift), then every other tool grouped by the question it answers, each with its one-line trigger. Pass `name` for one tool's full schema and a runnable example. IF YOU ARE READING A LIST OF 18 TOOLS, YOU ARE SEEING A CURATED SUBSET OF 114, NOT THE WHOLE SURFACE; hosts strip `_meta`, so the count is repeated here. Every catalogued tool stays callable by name through tools/call at either endpoint.\n\nWhen to use: Call FIRST when you do not know which tool answers the question, or need a capability absent from your list: absent from the list is not absent from the server. `q` searches by topic (`ndvi`, `flood`, `verify`), `name` returns one exact schema, no arguments returns the whole map. /mcp/full registers the full catalog; emem_ask answers in one shot without picking a primitive.\n\nExample arguments: {\"q\":\"ndvi\"}","description_after":"The map of emem's tool surface, and the only tool you need to find the rest: the working loop in the order you walk it (name, ground, cite, resolve, verify, check for drift), then every other tool grouped by the question it answers, each with its one-line trigger. Pass `name` for one tool's full schema and a runnable example. IF YOU ARE READING A LIST OF 18 TOOLS, YOU ARE SEEING A CURATED SUBSET OF 115, NOT THE WHOLE SURFACE; hosts strip `_meta`, so the count is repeated here. Every catalogued tool stays callable by name through tools/call at either endpoint.\n\nWhen to use: Call FIRST when you do not know which tool answers the question, or need a capability absent from your list: absent from the list is not absent from the server. `q` searches by topic (`ndvi`, `flood`, `verify`), `name` returns one exact schema, no arguments returns the whole map. /mcp/full registers the full catalog; emem_ask answers in one shot without picking a primitive.\n\nExample arguments: {\"q\":\"ndvi\"}","description_similarity":0.981,"before_hash":"0d0bab5577e7afe3a07afd67ef845ffb","after_hash":"02fe97d4c334b7e8bf5660f4a007c2b6"},{"tool":"emem_entity_link","kind":"changed","observed_at":"2026-10-08T17:32:56.314Z","fields":["annotations"],"description_before":null,"description_after":null,"description_similarity":null,"before_hash":"ad5b9914ebb6b235967076878246e6af","after_hash":"82750ea3d481efbb9dc890195a40f9c7"},{"tool":"emem_intent","kind":"changed","observed_at":"2026-10-01T01:19:41.281Z","fields":["description","inputSchema"],"description_before":"Say what you want in one typed object and get the answer, without choosing a primitive. `type` is a tagged union: it selects the intent AND decides which other fields are read, so send only the fields its row needs. The plan is EXECUTED in the same call, so you receive the result (the resolved cell64, the similarity, the delta, the verdict), not a list of calls to make yourself.\n\ntype             | needs                        | optional            | answers\nwhere_is         | description                  |                     | cell64 for a named place\nwhat_is_here     | cell OR place                | description         | what is attested at a location\nis_like          | a, b                         |                     | cosine similarity of two cells\ndid_change       | cell, band, window           |                     | delta for one band over [start,end] tslots\nfind_like        | key                          | k, filter           | nearest cells by embedding\nconfirm          | claim, cell                  |                     | verdict plus the signed facts behind it\nask              | description                  | place/cell/lat+lng  | free-text question, packaged answer\n\nAn unknown or missing `type` returns a structured `needs_intent_type` envelope naming the seven values rather than a hard error, so you can correct it on the next turn.\n\nWhen to use: Call when the question maps onto one of the seven rows above and you would rather state the goal than pick a primitive. Otherwise go direct: a band at a cell is emem_recall, a region is emem_recall_polygon, a free-text place question is emem_ask (type:\"ask\" forwards to it). `window` takes tslots, not dates: get them from emem_trajectory. A tool named here but absent from `tools/list` is not a dead end: every one of the 114 dispatches by name at `/mcp` and `/mcp/full`; the core list is 18 to keep the catalog small, and `emem_tools` enumerates the rest.\n\nExample arguments: {\"type\":\"did_change\",\"cell\":\"defi.zb64a.cAzU.zfa27\",\"band\":\"indices.ndvi\",\"window\":[20245,20620]}","description_after":"Say what you want in one typed object and get the answer, without choosing a primitive. `type` is a tagged union: it selects the intent AND decides which other fields are read, so send only the fields its row needs. The plan is EXECUTED in the same call, so you receive the result (the resolved cell64, the similarity, the delta, the verdict), not a list of calls to make yourself.\n\ntype | needs | optional | answers\nwhere_is | description | | cell64 for a named place\nwhat_is_here | cell OR place | description | what is attested at a location\nis_like | a, b | | cosine similarity of two cells\ndid_change | cell, band, window | | delta for one band over [start,end] tslots\nfind_like | key | k, filter | nearest cells by embedding\nconfirm | claim, cell | | verdict plus the signed facts behind it\nask | description | place/cell/lat+lng | free-text question, packaged answer\n\nAn unknown or missing `type` returns a structured `needs_intent_type` envelope naming the seven values rather than a hard error, so you can correct it on the next turn.\n\nWhen to use: Call when the question maps onto one of the seven rows above and you would rather state the goal than pick a primitive. Otherwise go direct: a band at a cell is emem_recall, a region is emem_recall_polygon, a free-text place question is emem_ask (type:\"ask\" forwards to it). `window` takes tslots, not dates: get them from emem_trajectory. A tool named here but absent from `tools/list` is not a dead end: every one of the 114 dispatches by name at `/mcp` and `/mcp/full`; the core list is 18 to keep the catalog small, and `emem_tools` enumerates the rest.\n\nExample arguments: {\"type\":\"did_change\",\"cell\":\"defi.zb64a.cAzU.zfa27\",\"band\":\"indices.ndvi\",\"window\":[20245,20620]}","description_similarity":1,"before_hash":"cf9969f05d2ac0ea5900e4f0e5246cba","after_hash":"87d0bbef889e24eccff5ff521c71206a"},{"tool":"search","kind":"changed","observed_at":"2026-10-01T01:19:41.281Z","fields":["description","inputSchema"],"description_before":"Search emem's signed corpus and return results shaped as citations: each entry is one signed fact, with an `id` to dereference, a `title` naming band, place and the value as signed, and a stable `url` serving those bytes. Takes a place name, a cell64, or an emem citation handle (a handle returns the one fact it cites). Capped for the wire; the first entry (index 0) names the cell and the TRUE total. On a cold cell it MATERIALIZES a missing band first, as `emem_recall` does: fetched upstream, signed, persisted. Hence readOnlyHint false.\n\nWhen to use: Call first when a question is about a place and the answer must be citable: it turns the question into a list of sources, each of which `fetch` expands. For a synthesised answer in one call, use emem_ask instead.\n\nExample arguments: {\"query\":\"Trafalgar Square, London\"}","description_after":"Search emem's signed corpus and return results shaped as citations: each entry is one signed fact, with an `id` to dereference, a `title` naming band, place and the value as signed, and a stable `url` serving those bytes. Takes a place, or a question about one ('NDVI near Mount Fuji': a topic word narrows the results, never fails them), a cell64 or `emem:cell:` handle, or an emem citation (which returns the one fact it cites). Capped for the wire; the first entry (index 0) names the cell and the TRUE total. On a cold cell it MATERIALIZES a missing band first, as `emem_recall` does: fetched upstream, signed, persisted. Hence readOnlyHint false.\n\nWhen to use: Call first when a question is about a place and the answer must be citable: it turns the question into a list of sources, each of which `fetch` expands. For a synthesised answer in one call, use emem_ask instead.\n\nExample arguments: {\"query\":\"Trafalgar Square, London\"}","description_similarity":0.891,"before_hash":"5d8354ef47f6a0b1bd5800251b5a0a94","after_hash":"a8f25190abf6d74ced25f43552777357"},{"tool":"emem_verify_receipt","kind":"changed","observed_at":"2026-10-01T01:19:41.281Z","fields":["description"],"description_before":"Verify a signed receipt envelope server-side: rebuilds the canonical preimage under the rule the receipt's own `preimage_version` names, runs ed25519 over the embedded key and signature, and returns `{valid, reason, failure_detail, signature_valid, merkle_proof_valid, signer_pubkey_b32, preimage_blake3_hex}`. A receipt is BYTE-FOR-BYTE OR NOTHING: v2 binds the inclusion proof, so any reshaping (a dropped field, a re-keyed one, a summary) invalidates the signature by design. For when the in-browser /verify path is unavailable, or for a server-side audit of a third party's receipt.\n\nWhen to use: Pass the receipt EXACTLY as the read primitive returned it, whole and unmodified. Two omissions produce a false forgery rather than a 400, and they are the only two worth memorising: dropping `merkle_proof`, and dropping `preimage_version` (absent deserialises to 0, which silently selects the v0 rule, so the proof still walks while the signature reads as invalid). Signature and pubkey may be byte arrays or `sig_b32` / `responder_pubkey_b32`; no other spelling is tolerated. Reshaping a field this responder can check is reported as `reason: receipt_reshaped_after_signing` with the field named, never accepted. Optionally set `pubkey_b32` to assert a specific signer. A bad signature is 200 with `valid: false`, never a 4xx. The example arguments are a real receipt this responder signed (key epoch 0) over two facts at Trafalgar Square (the two `fact_cids`): run it unchanged and `valid` is true; change any byte and it is not.\n\nExample arguments: 1602 bytes, too long to inline in a listing. Call `emem_tools` with `{\"name\": \"emem_verify_receipt\"}` for it whole and runnable; it is not shortened here because a truncated example is not one.","description_after":"Verify a signed receipt envelope server-side: rebuilds the canonical preimage under the rule the receipt's own `preimage_version` names, runs ed25519 over the embedded key and signature, and returns `{valid, reason, failure_detail, signature_valid, merkle_proof_valid, signer_pubkey_b32, preimage_blake3_hex}`. A receipt is BYTE-FOR-BYTE OR NOTHING: v2 binds the inclusion proof, so any reshaping (a dropped field, a re-keyed one, a summary) invalidates the signature by design. For when the in-browser /verify path is unavailable, or for a server-side audit of a third party's receipt.\n\nWhen to use: Pass the receipt EXACTLY as the read primitive returned it, whole and unmodified. Two omissions produce a false forgery rather than a 400, and they are the only two worth memorising: dropping `merkle_proof`, and dropping `preimage_version` (absent deserialises to 0, which silently selects the v0 rule, so the proof still walks while the signature reads as invalid). Signature and pubkey may be byte arrays or `sig_b32` / `responder_pubkey_b32`; no other spelling is tolerated. Reshaping a field this responder can check is reported as `reason: receipt_reshaped_after_signing` with the field named, never accepted. Optionally set `pubkey_b32` to assert a specific signer. A bad signature is 200 with `valid: false`, never a 4xx. The example (from emem_tools) is a real receipt signed over two Trafalgar Square facts: unchanged it is `valid`; change any byte and it is not.\n\nExample arguments: 1602 bytes, too long to inline in a listing. Call `emem_tools` with `{\"name\": \"emem_verify_receipt\"}` for it whole and runnable; it is not shortened here because a truncated example is not one.","description_similarity":0.956,"before_hash":"e447b94fe575e9868dae22a6adf6a729","after_hash":"afde768c7c99281b213c92d9a0212914"},{"tool":"emem_memory_token_resolve","kind":"changed","observed_at":"2026-10-01T01:19:41.281Z","fields":["description","outputSchema"],"description_before":"Parse a `emem:fact:<cell64>:<fact_cid>` citation handle and return the reading it cites. `value`, `unit`, `band` and `kind` are on the response at the TOP level, alongside the full signed `fact` body they were lifted from. Saves the agent from string-splitting the token and chaining `GET /v1/facts/<cid>` manually. Memory algebra: the `resolve` operation (https://emem.dev/docs/model.html).\n\nWhen to use: Call when you hold a memory_token from another agent or an earlier turn and want the value behind it. For a scalar quote `value_verbatim`, the exact decimal string the fact was signed as: re-typing the JSON number is where measured precision is lost. `value` and `unit` are always present, and an explicit null means the fact genuinely has none (an `absence` has no value; most index bands are dimensionless) rather than a missing field. The response also carries the parsed cell, the fact_cid, the full signed `fact` and a stable `fact_url` to hand on. A cid this responder does not hold is a typed 404: try /v1/fetch, or resolve at a mirror.\n\nExample arguments: {\"token\":\"emem:fact:defi.zb493.xoso.zcb6a:cxjiu7l54ujzrpnekp24n4534yojpue4mprddbvevnqtti3lh5bq\"}","description_after":"Parse a `emem:fact:<cell64>:<fact_cid>` citation handle and return the reading it cites. `value`, `unit`, `band` and `kind` are on the response at the TOP level, alongside the full signed `fact` body they were lifted from. Saves the agent from string-splitting the token and chaining `GET /v1/facts/<cid>` manually. Memory algebra: the `resolve` operation (https://emem.dev/docs/model.html).\n\nWhen to use: Call when you hold a memory_token from another agent or an earlier turn and want the value behind it. For a scalar quote `value_verbatim`, the exact decimal string it was signed as. A null `value` or `unit` means the fact has none (an absence; a dimensionless index), not a missing field. A cid this responder does not hold is a typed 404: try /v1/fetch, or resolve at a mirror.\n\nExample arguments: {\"token\":\"emem:fact:defi.zb493.xoso.zcb6a:cxjiu7l54ujzrpnekp24n4534yojpue4mprddbvevnqtti3lh5bq\"}","description_similarity":0.803,"before_hash":"324deaf028e3bcf473590b550c9c47c4","after_hash":"33679ee172481eceb312db8780751120"},{"tool":"emem_locate","kind":"changed","observed_at":"2026-10-01T01:19:41.281Z","fields":["description","outputSchema"],"description_before":"Mint the canonical, vendor-neutral address (cell64) for a real-world place: the shared spatial identity every agent resolves to identically, so two models refer to the same ground instead of two descriptions of it. Also returns the topic-grouped inventory of bands and algorithms recallable there. For a first-class OBJECT identity (a bridge, a plot, a named place) rather than a raw cell, use emem_entity. Send EITHER `lat`+`lng` as numbers OR a free-text place; coordinates win when both arrive. `q`, `query` and `name` are all accepted spellings of `place`. A key this schema does not declare is reported in `_unrecognised_arguments`, so a typo answers about somewhere else rather than erroring.\n\nWhen to use: Call when the input names a real-world place and the next step needs its cell64, or wants to know which bands exist there before recalling. `data_at_this_cell` carries `live_bands_by_topic` (every recallable band, grouped by topic), `algorithms_for_topic` (recipes that fuse them into named scores) and `declared_but_no_materializer_at_this_responder`. For one packaged answer in a single call, use `emem_ask`.\n\nExample arguments: {\"place\":\"Mount Everest\"}","description_after":"Mint the canonical, vendor-neutral address (cell64) for a real-world place: the shared spatial identity every agent resolves to identically, so two models refer to the same ground instead of two descriptions of it. Also returns the topic-grouped inventory of bands and algorithms recallable there. For a first-class OBJECT identity (a bridge, a plot, a named place) rather than a raw cell, use emem_entity. Send EITHER `lat`+`lng` as numbers OR a free-text place; coordinates win when both arrive. `q`, `query` and `name` are all accepted spellings of `place`. A key this schema does not declare is reported in `_unrecognised_arguments`, so a typo answers about somewhere else rather than erroring.\n\nWhen to use: Call when the input names a real-world place and the next step needs its cell64, or wants to know which bands exist there before recalling. `data_at_this_cell` lists every recallable band by topic (`live_bands_by_topic`), the recipes fusing them (`algorithms_for_topic`), and bands with no materializer here. For one packaged answer in a single call, use `emem_ask`.\n\nExample arguments: {\"place\":\"Mount Everest\"}","description_similarity":0.91,"before_hash":"42da29eff4f5e09716e6158216f7569c","after_hash":"ed1891847d892feaf6d6cdbf06d68d14"},{"tool":"emem_intent","kind":"changed","observed_at":"2026-09-29T20:12:31.999Z","fields":["description","inputSchema"],"description_before":"Say what you want in one typed object and get the answer, without choosing a primitive. `type` is a tagged union: it selects the intent AND decides which other fields are read, so send only the fields its row needs. The plan is EXECUTED in the same call, so you receive the result (the resolved cell64, the similarity, the delta, the verdict), not a list of calls to make yourself.\n\ntype             | needs                        | optional            | answers\nwhere_is         | description                  |                     | cell64 for a named place\nwhat_is_here     | cell OR place                | description         | what is attested at a location\nis_like          | a, b                         |                     | cosine similarity of two cells\ndid_change       | cell, band, window           |                     | delta for one band over [start,end] tslots\nfind_like        | key                          | k, filter           | nearest cells by embedding\nconfirm          | claim, cell                  |                     | verdict plus the signed facts behind it\nask              | description                  | place/cell/lat+lng  | free-text question, packaged answer\n\nAn unknown or missing `type` returns a structured `needs_intent_type` envelope naming the seven values rather than a hard error, so you can correct it on the next turn.\n\nWhen to use: Call when the question maps onto one of the seven rows above and you would rather state the goal than pick a primitive. Otherwise go direct: a band at a cell is emem_recall, a region is emem_recall_polygon, a free-text place question is emem_ask (type:\"ask\" forwards to it). `window` takes tslots, not dates: get them from emem_trajectory. A tool named here but absent from `tools/list` is not a dead end: every one of the 114 dispatches by name at `/mcp` and `/mcp/full`; the core list is 18 to keep the catalog small, and `emem_tools` enumerates the rest.\n\nExample arguments: {\"type\":\"did_change\",\"cell\":\"damO.zb000.xUti.zde78\",\"band\":\"indices.ndvi\",\"window\":[20245,20620]}","description_after":"Say what you want in one typed object and get the answer, without choosing a primitive. `type` is a tagged union: it selects the intent AND decides which other fields are read, so send only the fields its row needs. The plan is EXECUTED in the same call, so you receive the result (the resolved cell64, the similarity, the delta, the verdict), not a list of calls to make yourself.\n\ntype             | needs                        | optional            | answers\nwhere_is         | description                  |                     | cell64 for a named place\nwhat_is_here     | cell OR place                | description         | what is attested at a location\nis_like          | a, b                         |                     | cosine similarity of two cells\ndid_change       | cell, band, window           |                     | delta for one band over [start,end] tslots\nfind_like        | key                          | k, filter           | nearest cells by embedding\nconfirm          | claim, cell                  |                     | verdict plus the signed facts behind it\nask              | description                  | place/cell/lat+lng  | free-text question, packaged answer\n\nAn unknown or missing `type` returns a structured `needs_intent_type` envelope naming the seven values rather than a hard error, so you can correct it on the next turn.\n\nWhen to use: Call when the question maps onto one of the seven rows above and you would rather state the goal than pick a primitive. Otherwise go direct: a band at a cell is emem_recall, a region is emem_recall_polygon, a free-text place question is emem_ask (type:\"ask\" forwards to it). `window` takes tslots, not dates: get them from emem_trajectory. A tool named here but absent from `tools/list` is not a dead end: every one of the 114 dispatches by name at `/mcp` and `/mcp/full`; the core list is 18 to keep the catalog small, and `emem_tools` enumerates the rest.\n\nExample arguments: {\"type\":\"did_change\",\"cell\":\"defi.zb64a.cAzU.zfa27\",\"band\":\"indices.ndvi\",\"window\":[20245,20620]}","description_similarity":0.953,"before_hash":"62639fe0d5ac4bc76bd5dca7d4adc15a","after_hash":"cf9969f05d2ac0ea5900e4f0e5246cba"},{"tool":"emem_find_similar","kind":"changed","observed_at":"2026-09-29T20:12:31.999Z","fields":["description"],"description_before":"k-NN over the corpus by cell embedding or inline vector. Returns `neighbours` ordered nearest-first, each with `cell64`, `score` and the `band` scanned, plus a signed receipt over the vectors read. Scoring is `mode`: cosine is exact fp32; hamming is a sign-bit popcount that scans far more cells for the same budget; hamming_then_rerank does both. `k` is 1..1000, default 10. It ranks what the corpus already holds; only when the KEY's own vector is missing does it materialise that one band for the key, signed and reported in `materialize_notes`, then retry. Neighbours are never materialised, so an empty result means nobody has attested a vector nearby, not that nowhere resembles the key.\n\nWhen to use: Call when the user asks 'find places like X', 'where else looks like this', or hands an embedding to find neighbours. `key` is either a cell64 or `inline:[x,y,...]`. Default band is `geotessera` (128-D Tessera foundation embedding); pass `band: \"geotessera.multi_year\"` for the 1152-D 9-vintage (2017–2025) fusion.\n\nExample arguments: {\"key\":\"damO.zb000.xUti.zde78\",\"k\":10}","description_after":"k-NN over the corpus by cell embedding or inline vector. Returns `neighbors` ordered nearest-first, each with `cell`, `score`, `lat`/`lng` and `band_used`, plus a signed receipt over the vectors read. Scoring is `mode`: cosine is exact fp32; hamming is a sign-bit popcount that scans far more cells for the same budget; hamming_then_rerank does both. `k` is 1..1000, default 10. It ranks what the corpus already holds; only when the KEY's own vector is missing does it materialise that one band for the key, signed and reported in `materialize_notes`, then retry. Neighbours are never materialised, so an empty result means nobody has attested a vector nearby, not that nowhere resembles the key.\n\nWhen to use: Call when the user asks 'find places like X', 'where else looks like this', or hands an embedding to find neighbours. `key` is either a cell64 or `inline:[x,y,...]`. Default band is `geotessera` (128-D Tessera foundation embedding); pass `band: \"geotessera.multi_year\"` for the 1152-D 9-vintage (2017–2025) fusion.\n\nExample arguments: {\"key\":\"defi.zb64a.cAzU.zfa27\",\"k\":10}","description_similarity":0.902,"before_hash":"cedce227486bbb48f9a4d23358f756eb","after_hash":"1dc2b43bb3b32864f627ec5dc1244b03"},{"tool":"emem_entity_link","kind":"changed","observed_at":"2026-09-29T20:12:31.999Z","fields":["inputSchema"],"description_before":null,"description_after":null,"description_similarity":null,"before_hash":"78c66f90720469d178d48f164cd5eab7","after_hash":"ad5b9914ebb6b235967076878246e6af"},{"tool":"search","kind":"changed","observed_at":"2026-09-29T20:12:31.999Z","fields":["description","outputSchema"],"description_before":"Search emem's signed corpus and return results shaped as citations: each entry is one signed fact, with an `id` to dereference, a `title` naming band, place and the value as signed, and a stable `url` serving those bytes. Takes a place name, a cell64, or an emem citation handle (a handle returns the one fact it cites). Capped for the wire; the final entry names the cell and the TRUE total. On a cold cell it MATERIALIZES a missing band first, as `emem_recall` does: fetched upstream, signed, persisted. Hence readOnlyHint false.\n\nWhen to use: Call first when a question is about a place and the answer must be citable: it turns the question into a list of sources, each of which `fetch` expands. For a synthesised answer in one call, use emem_ask instead.\n\nExample arguments: {\"query\":\"Trafalgar Square, London\"}","description_after":"Search emem's signed corpus and return results shaped as citations: each entry is one signed fact, with an `id` to dereference, a `title` naming band, place and the value as signed, and a stable `url` serving those bytes. Takes a place name, a cell64, or an emem citation handle (a handle returns the one fact it cites). Capped for the wire; the first entry (index 0) names the cell and the TRUE total. On a cold cell it MATERIALIZES a missing band first, as `emem_recall` does: fetched upstream, signed, persisted. Hence readOnlyHint false.\n\nWhen to use: Call first when a question is about a place and the answer must be citable: it turns the question into a list of sources, each of which `fetch` expands. For a synthesised answer in one call, use emem_ask instead.\n\nExample arguments: {\"query\":\"Trafalgar Square, London\"}","description_similarity":0.967,"before_hash":"1b39f114a9bfa0561508b93719d53652","after_hash":"5d8354ef47f6a0b1bd5800251b5a0a94"},{"tool":"emem_ask","kind":"changed","observed_at":"2026-09-29T20:12:31.999Z","fields":["description","inputSchema","outputSchema"],"description_before":"Single-shot free-text answer about a real-world location, backed by signed satellite/elevation/water/built-up receipts. Forwards a place mention plus a question; runs the locate → recall → algorithm chain server-side; returns one packaged envelope.\n\nWhen to use: Call when the question is about a specific place and the answer should carry its own evidence. Send the user's question verbatim as `q` plus a location as `place` (free text), `cell` (cell64), or `lat`+`lng`. One envelope comes back: `answer`, `spatial_trace` (the readings as primitives, each point indexing `fact_cids`), `facts_summary`, `receipt` and `fact_cids` at the ROOT, and `caveats` naming grid resolution and revisit cadence. Missing bands are materialised on demand. `include: [\"reasoning\"]` adds the ordered stages with their detail; `include_image: true` bundles a Sentinel-2 thumbnail. A question outside the corpus answers `topic_routing.matched_topic: null` with the inventory, so you can route elsewhere rather than guess.\n\nExample arguments: {\"q\":\"is this neighbourhood flood-prone for a flat purchase\",\"place\":\"Ashok Nagar, Ranchi\"}","description_after":"Single-shot free-text answer about a real-world location, backed by signed satellite/elevation/water/built-up receipts. Forwards a place mention plus a question; runs the locate → recall → algorithm chain server-side; returns one packaged envelope.\n\nWhen to use: Call when the question is about a specific place and the answer should carry its own evidence. Send the question verbatim as `q` plus `place`, `cell` or `lat`+`lng`. Over MCP a point answer is a projection: `answer`, `receipt` (cite `receipt.fact_cids`), `place_resolved`, `routed_to`, `facts_summary`, `algorithm_outcomes_summary`, `spatial_trace`, `scene_url`, `model_answer` if you passed `model`, and `_projection` naming what was left out. POST /v1/ask has more: `caveats`, `topic_routing`, `reasoning`, and `inventory` with include:[\"inventory\"]. A `routed_to` other than answer comes back whole. It answers with a current value; for how X changed use emem_intent did_change or emem_diff.\n\nExample arguments: {\"q\":\"is this neighbourhood flood-prone for a flat purchase\",\"place\":\"Ashok Nagar, Ranchi\"}","description_similarity":0.546,"before_hash":"f5f58141cd235517ed88c0d721706c40","after_hash":"70250439d375aea3f9ac2dd04b7a1957"},{"tool":"emem_guard_verdict","kind":"changed","observed_at":"2026-09-29T20:12:31.999Z","fields":["description"],"description_before":"Run emem-guard's policy pipeline over text you are about to send, against this responder's corpus. Finds every emem: citation, resolves each one, and returns allow or deny with a machine-readable reason: `EMEM-GUARD DENY <CODE> token=<token|-> fix=<fix> leaf=<leaf|->`. Codes are PROV_SIG (signature did not verify), PROV_BYTES (resolved to different content than claimed), PROV_DRIFT (reading has moved past its band threshold), CLAIM_UNGROUNDED (a measurable claim with no citation, opt-in via claim_gating). `fix` is the actionable half: refresh_token, remove_reference, contact_admin, cite_observation. ADVISORY: nothing is blocked, and a citation this responder does not hold is never a denial, because it is indistinguishable from one minted elsewhere. Memory algebra: the `verify` operation (https://emem.dev/docs/model.html).\n\nWhen to use: Call it on your own draft before you assert something, or on a tool result before you reason on it, to catch a citation that does not resolve while you can still fix it. `claim_gating: true` also names measurable claims with no citation and the band that would answer them. For a payload another framework produced (CloudEvent, OPA input, OpenAI moderations body, another server's tool call) send it as-is and name its `shape`: the default reader sees only `texts`, and a check that read nothing still answers allow. To ENFORCE rather than consult, emem_guard_selfhost returns the procedure for your own node.\n\nExample arguments: {\"texts\":[\"Lusail ground sits at 2.6 m per emem:fact:defi.zb521.jawI.gOze:f3yr3urkrfwamlemwadulgth2qpw645vi6l6fhtuu4dy5o7onahq\"]}","description_after":"Run emem-guard's policy pipeline over text you are about to send, against this responder's corpus. Finds every emem: citation, resolves each one, and returns allow or deny with a machine-readable reason: `EMEM-GUARD DENY <CODE> token=<token|-> fix=<fix> leaf=<leaf|->`. Codes are PROV_SIG (signature did not verify), PROV_BYTES (resolved to different content than claimed), PROV_DRIFT (reading has moved past its band threshold), PROV_VALUE (a stated value disagrees with the cited fact), CLAIM_UNGROUNDED (a measurable claim with no citation, opt-in via claim_gating). `fix` is the actionable half: refresh_token, remove_reference, contact_admin, cite_observation, correct_value. GEO_ZONE and redact_and_retry come only from a self-hosted guard. ADVISORY: nothing is blocked, and a citation this responder does not hold is never a denial, because it is indistinguishable from one minted elsewhere. Memory algebra: the `verify` operation (https://emem.dev/docs/model.html).\n\nWhen to use: Call it on your own draft before you assert something, or on a tool result before you reason on it, to catch a citation that does not resolve while you can still fix it. `claim_gating: true` also names measurable claims with no citation and the band that would answer them. For a payload another framework produced (CloudEvent, OPA input, OpenAI moderations body, another server's tool call) send it as-is and name its `shape`: the default reader sees only `texts`, and a check that read nothing still answers allow. To ENFORCE rather than consult, emem_guard_selfhost returns the procedure for your own node.\n\nExample arguments: {\"texts\":[\"Lusail ground sits at 2.6 m per emem:fact:defi.zb521.jawI.gOze:f3yr3urkrfwamlemwadulgth2qpw645vi6l6fhtuu4dy5o7onahq\"]}","description_similarity":0.933,"before_hash":"d489ffd59bb0e0274eb5fef873ee9285","after_hash":"fe3a28bf7dfcc3da0c63d88e1f364c2a"},{"tool":"emem_verify_receipt","kind":"changed","observed_at":"2026-09-29T20:12:31.999Z","fields":["description"],"description_before":"Verify a signed receipt envelope server-side: rebuilds the canonical preimage under the rule the receipt's own `preimage_version` names, runs ed25519 over the embedded key and signature, and returns `{valid, reason, failure_detail, signature_valid, merkle_proof_valid, signer_pubkey_b32, preimage_blake3_hex}`. A receipt is BYTE-FOR-BYTE OR NOTHING: v2 binds the inclusion proof, so any reshaping (a dropped field, a re-keyed one, a summary) invalidates the signature by design. For when the in-browser /verify path is unavailable, or for a server-side audit of a third party's receipt.\n\nWhen to use: Pass the receipt EXACTLY as the read primitive returned it, whole and unmodified. Two omissions produce a false forgery rather than a 400, and they are the only two worth memorising: dropping `merkle_proof`, and dropping `preimage_version` (absent deserialises to 0, which silently selects the v0 rule, so the proof still walks while the signature reads as invalid). Signature and pubkey may be byte arrays or `sig_b32` / `responder_pubkey_b32`; no other spelling is tolerated. Reshaping a field this responder can check is reported as `reason: receipt_reshaped_after_signing` with the field named, never accepted. Optionally set `pubkey_b32` to assert a specific signer. A bad signature is 200 with `valid: false`, never a 4xx. The example arguments are a real receipt this responder signed (key epoch 0) over one weather fact at Trafalgar Square: run it unchanged and `valid` is true; change any byte and it is not.\n\nExample arguments: 1602 bytes, too long to inline in a listing. Call `emem_tools` with `{\"name\": \"emem_verify_receipt\"}` for it whole and runnable; it is not shortened here because a truncated example is not one.","description_after":"Verify a signed receipt envelope server-side: rebuilds the canonical preimage under the rule the receipt's own `preimage_version` names, runs ed25519 over the embedded key and signature, and returns `{valid, reason, failure_detail, signature_valid, merkle_proof_valid, signer_pubkey_b32, preimage_blake3_hex}`. A receipt is BYTE-FOR-BYTE OR NOTHING: v2 binds the inclusion proof, so any reshaping (a dropped field, a re-keyed one, a summary) invalidates the signature by design. For when the in-browser /verify path is unavailable, or for a server-side audit of a third party's receipt.\n\nWhen to use: Pass the receipt EXACTLY as the read primitive returned it, whole and unmodified. Two omissions produce a false forgery rather than a 400, and they are the only two worth memorising: dropping `merkle_proof`, and dropping `preimage_version` (absent deserialises to 0, which silently selects the v0 rule, so the proof still walks while the signature reads as invalid). Signature and pubkey may be byte arrays or `sig_b32` / `responder_pubkey_b32`; no other spelling is tolerated. Reshaping a field this responder can check is reported as `reason: receipt_reshaped_after_signing` with the field named, never accepted. Optionally set `pubkey_b32` to assert a specific signer. A bad signature is 200 with `valid: false`, never a 4xx. The example arguments are a real receipt this responder signed (key epoch 0) over two facts at Trafalgar Square (the two `fact_cids`): run it unchanged and `valid` is true; change any byte and it is not.\n\nExample arguments: 1602 bytes, too long to inline in a listing. Call `emem_tools` with `{\"name\": \"emem_verify_receipt\"}` for it whole and runnable; it is not shortened here because a truncated example is not one.","description_similarity":0.981,"before_hash":"204fd15ce7cd19760adf27d64079f878","after_hash":"e447b94fe575e9868dae22a6adf6a729"},{"tool":"emem_recall","kind":"changed","observed_at":"2026-09-29T20:12:31.999Z","fields":["description","inputSchema"],"description_before":"Read the signed facts at a canonical address (cell64); auto-materializes on a miss for any band with a registered materializer. A fact_cid names one signed attestation, so a recalled fact is citeable and re-verifiable rather than a paraphrase: resolving it anywhere returns those exact bytes. It is NOT a fingerprint of the observation. The digest covers the responder's key and the moment it signed, so two responders that measure the same thing mint different fact_cids and a cid resolves only at the responder that signed it; use emem_entity for identity that crosses responders. Pass `deterministic:true` (or a `provenance` class list) to keep only facts recomputable from the cited raw source, with no model or human in the loop. In the memory algebra this is ensure(cell, bands), not get: state what must exist and the responder reuses or materializes.\n\nWhen to use: Call after `emem_locate`, or with a known cell64 or place name. Returns every Primary fact at that (cell, band, tslot). If a requested band has no fact yet but has a materializer, the responder fetches the upstream value, signs it, persists it and returns it in the same call (slow once, cached after), so any wired band recalls at any cell on Earth: pass `bands: [<band>]`. `materialize_notes` lists what was just fetched; empty with no notes means no materializer here.\n\nExample arguments: {\"cell\":\"damO.zb000.xUti.zde78\",\"bands\":[\"weather.temperature_2m\",\"copdem30m.elevation_mean\"]}","description_after":"Read the signed facts at a canonical address (cell64); auto-materializes on a miss for any band with a registered materializer. A fact_cid names one signed attestation, so a recalled fact is citeable and re-verifiable rather than a paraphrase: resolving it anywhere returns those exact bytes. It is NOT a fingerprint of the observation. The digest covers the responder's key and the moment it signed, so two responders that measure the same thing mint different fact_cids and a cid resolves only at the responder that signed it; use emem_entity for identity that crosses responders. Pass `deterministic:true` (or a `provenance` class list) to keep only facts recomputable from the cited raw source, with no model or human in the loop. In the memory algebra this is ensure(cell, bands), not get: state what must exist and the responder reuses or materializes.\n\nWhen to use: Call after `emem_locate`, or with a known cell64 or place name. Returns every Primary fact at that (cell, band, tslot). If a requested band has no fact yet but has a materializer, the responder fetches the upstream value, signs it, persists it and returns it in the same call (slow once, cached after), so any wired band recalls at any cell on Earth: pass `bands: [<band>]`. `materialize_notes` lists what was just fetched; empty with no notes means no materializer here.\n\nExample arguments: {\"cell\":\"defi.zb64a.cAzU.zfa27\",\"bands\":[\"weather.temperature_2m\",\"copdem30m.elevation_mean\"]}","description_similarity":0.946,"before_hash":"b741b480d642042a535c48f852798841","after_hash":"4636cf1931768313424c34ad9594d6d6"},{"tool":"emem_entity","kind":"changed","observed_at":"2026-09-29T20:12:31.999Z","fields":["inputSchema"],"description_before":null,"description_after":null,"description_similarity":null,"before_hash":"6c46239e9d6fb0a623d6b84ecaf06aa4","after_hash":"1eeb336a62b9c13ca20baefc7bdac0ac"},{"tool":"emem_intent","kind":"changed","observed_at":"2026-09-29T13:52:26.074Z","fields":["annotations"],"description_before":null,"description_after":null,"description_similarity":null,"before_hash":"27bb195036e9b0f95d754119f2040217","after_hash":"62639fe0d5ac4bc76bd5dca7d4adc15a"},{"tool":"emem_entity_link","kind":"changed","observed_at":"2026-09-29T13:52:26.074Z","fields":["annotations"],"description_before":null,"description_after":null,"description_similarity":null,"before_hash":"4d0e548269429f9c67ff3c2d4e78a6a7","after_hash":"78c66f90720469d178d48f164cd5eab7"},{"tool":"emem_entity_resolve","kind":"changed","observed_at":"2026-09-29T13:52:26.074Z","fields":["annotations"],"description_before":null,"description_after":null,"description_similarity":null,"before_hash":"2b1b822af54e18696a88a2a502fb0504","after_hash":"191ff0ea5527620e6a8b5cedc55640b6"},{"tool":"emem_memory_bundle","kind":"changed","observed_at":"2026-09-29T13:52:26.074Z","fields":["annotations"],"description_before":null,"description_after":null,"description_similarity":null,"before_hash":"4be8098019bb0eb695a2d392754bf933","after_hash":"9a7e816a2cc431b6132ef4000a9eba60"},{"tool":"emem_ask","kind":"changed","observed_at":"2026-09-29T13:52:26.074Z","fields":["annotations"],"description_before":null,"description_after":null,"description_similarity":null,"before_hash":"85060455647c2024035e63cb6732724b","after_hash":"f5f58141cd235517ed88c0d721706c40"},{"tool":"emem_tools","kind":"changed","observed_at":"2026-09-29T13:52:26.074Z","fields":["inputSchema"],"description_before":null,"description_after":null,"description_similarity":null,"before_hash":"caf81cec066d90028319b27de2ad933d","after_hash":"0d0bab5577e7afe3a07afd67ef845ffb"},{"tool":"emem_locate","kind":"changed","observed_at":"2026-09-29T13:52:26.074Z","fields":["annotations"],"description_before":null,"description_after":null,"description_similarity":null,"before_hash":"35817dbededf9957af7ab04e6ce4ebe5","after_hash":"42da29eff4f5e09716e6158216f7569c"},{"tool":"emem_guard_verdict","kind":"changed","observed_at":"2026-09-27T13:57:57.821Z","fields":["description"],"description_before":"Run emem-guard's policy pipeline over text you are about to send, against this responder's corpus. Finds every emem: citation, resolves each one, and returns allow or deny with a machine-readable reason: `EMEM-GUARD DENY <CODE> token=<token|-> fix=<fix> leaf=<leaf|->`. Codes are PROV_SIG (signature did not verify), PROV_BYTES (resolved to different content than claimed), PROV_DRIFT (reading has moved past its band threshold), CLAIM_UNGROUNDED (a measurable claim with no citation, opt-in via claim_gating). `fix` is the actionable half: refresh_token, remove_reference, contact_admin, cite_observation. ADVISORY: nothing is blocked, and a citation this responder does not hold is never a denial, because it is indistinguishable from one minted elsewhere. Memory algebra: the `verify` operation (https://emem.dev/docs/model.html).\n\nWhen to use: Call it on your own draft before you assert something, or on a tool result before you reason on it, to catch a citation that does not resolve while you can still fix it. `claim_gating: true` also names measurable claims with no citation and the band that would answer them. For a payload another framework produced (CloudEvent, OPA input, OpenAI moderations body, another server's tool call) send it as-is and name its `shape`: the default reader sees only `texts`, and a check that read nothing still answers allow. To ENFORCE rather than consult, emem_guard_selfhost returns the procedure for your own node.\n\nExample arguments: {\"texts\":[\"Lusail's ground sits at 2.6 m per emem:fact:defi.zb521.jawI.gOze:f3yr3urkrfwamlemwadulgth2qpw645vi6l6fhtuu4dy5o7onahq\"]}","description_after":"Run emem-guard's policy pipeline over text you are about to send, against this responder's corpus. Finds every emem: citation, resolves each one, and returns allow or deny with a machine-readable reason: `EMEM-GUARD DENY <CODE> token=<token|-> fix=<fix> leaf=<leaf|->`. Codes are PROV_SIG (signature did not verify), PROV_BYTES (resolved to different content than claimed), PROV_DRIFT (reading has moved past its band threshold), CLAIM_UNGROUNDED (a measurable claim with no citation, opt-in via claim_gating). `fix` is the actionable half: refresh_token, remove_reference, contact_admin, cite_observation. ADVISORY: nothing is blocked, and a citation this responder does not hold is never a denial, because it is indistinguishable from one minted elsewhere. Memory algebra: the `verify` operation (https://emem.dev/docs/model.html).\n\nWhen to use: Call it on your own draft before you assert something, or on a tool result before you reason on it, to catch a citation that does not resolve while you can still fix it. `claim_gating: true` also names measurable claims with no citation and the band that would answer them. For a payload another framework produced (CloudEvent, OPA input, OpenAI moderations body, another server's tool call) send it as-is and name its `shape`: the default reader sees only `texts`, and a check that read nothing still answers allow. To ENFORCE rather than consult, emem_guard_selfhost returns the procedure for your own node.\n\nExample arguments: {\"texts\":[\"Lusail ground sits at 2.6 m per emem:fact:defi.zb521.jawI.gOze:f3yr3urkrfwamlemwadulgth2qpw645vi6l6fhtuu4dy5o7onahq\"]}","description_similarity":1,"before_hash":"ef952baa983d4aa25b0f183a43260cc3","after_hash":"d489ffd59bb0e0274eb5fef873ee9285"},{"tool":"emem_guard_verdict","kind":"changed","observed_at":"2026-09-26T13:41:04.057Z","fields":["description","outputSchema"],"description_before":"Run emem-guard's policy pipeline over text you are about to send, against this responder's corpus. Finds every emem: citation, resolves each one, and returns allow or deny with a machine-readable reason: `EMEM-GUARD DENY <CODE> token=<token|-> fix=<fix> leaf=<leaf|->`. Codes are PROV_SIG (signature did not verify), PROV_BYTES (resolved to different content than claimed), PROV_DRIFT (reading has moved past its band threshold), CLAIM_UNGROUNDED (a measurable claim with no citation, opt-in via claim_gating). `fix` is the actionable half: refresh_token, remove_reference, contact_admin, cite_observation. ADVISORY: nothing is blocked, and a citation this responder does not hold is never a denial, because it is indistinguishable from one minted elsewhere. Memory algebra: the `verify` operation (https://emem.dev/docs/model.html).\n\nWhen to use: Call it on your own draft before you assert something, or on a tool result before you reason on it, to catch a citation that does not resolve while you can still fix it. `claim_gating: true` also names measurable claims with no citation and the band that would answer them. For a payload another framework produced (CloudEvent, OPA input, OpenAI moderations body, another server's tool call) send it as-is and name its `shape`: the default reader sees only `texts`, and a check that read nothing still answers allow. To ENFORCE rather than consult, emem_guard_selfhost returns the procedure for your own node.\n\nExample arguments: {\"texts\":[\"Elevation there is 918 m per emem:fact:defi.zb493.xuqA.zcb5f:yqbolgeoycqkvj3zkxukb4bjw4odhpwvfzqo3fbgwf4spk45zala\"]}","description_after":"Run emem-guard's policy pipeline over text you are about to send, against this responder's corpus. Finds every emem: citation, resolves each one, and returns allow or deny with a machine-readable reason: `EMEM-GUARD DENY <CODE> token=<token|-> fix=<fix> leaf=<leaf|->`. Codes are PROV_SIG (signature did not verify), PROV_BYTES (resolved to different content than claimed), PROV_DRIFT (reading has moved past its band threshold), CLAIM_UNGROUNDED (a measurable claim with no citation, opt-in via claim_gating). `fix` is the actionable half: refresh_token, remove_reference, contact_admin, cite_observation. ADVISORY: nothing is blocked, and a citation this responder does not hold is never a denial, because it is indistinguishable from one minted elsewhere. Memory algebra: the `verify` operation (https://emem.dev/docs/model.html).\n\nWhen to use: Call it on your own draft before you assert something, or on a tool result before you reason on it, to catch a citation that does not resolve while you can still fix it. `claim_gating: true` also names measurable claims with no citation and the band that would answer them. For a payload another framework produced (CloudEvent, OPA input, OpenAI moderations body, another server's tool call) send it as-is and name its `shape`: the default reader sees only `texts`, and a check that read nothing still answers allow. To ENFORCE rather than consult, emem_guard_selfhost returns the procedure for your own node.\n\nExample arguments: {\"texts\":[\"Lusail's ground sits at 2.6 m per emem:fact:defi.zb521.jawI.gOze:f3yr3urkrfwamlemwadulgth2qpw645vi6l6fhtuu4dy5o7onahq\"]}","description_similarity":0.903,"before_hash":"51a87615041fd6d3ef2173b18050e678","after_hash":"ef952baa983d4aa25b0f183a43260cc3"},{"tool":"emem_intent","kind":"changed","observed_at":"2026-09-24T14:39:29.310Z","fields":["description"],"description_before":"Say what you want in one typed object and get the answer, without choosing a primitive. `type` is a tagged union: it selects the intent AND decides which other fields are read, so send only the fields its row needs. The plan is EXECUTED in the same call, so you receive the result (the resolved cell64, the similarity, the delta, the verdict), not a list of calls to make yourself.\n\ntype             | needs                        | optional            | answers\nwhere_is         | description                  |                     | cell64 for a named place\nwhat_is_here     | cell OR place                | description         | what is attested at a location\nis_like          | a, b                         |                     | cosine similarity of two cells\ndid_change       | cell, band, window           |                     | delta for one band over [start,end] tslots\nfind_like        | key                          | k, filter           | nearest cells by embedding\nconfirm          | claim, cell                  |                     | verdict plus the signed facts behind it\nask              | description                  | place/cell/lat+lng  | free-text question, packaged answer\n\nAn unknown or missing `type` returns a structured `needs_intent_type` envelope naming the seven values rather than a hard error, so you can correct it on the next turn.\n\nWhen to use: Call when the question maps onto one of the seven rows above and you would rather state the goal than pick a primitive. Otherwise go direct: a band at a cell is emem_recall, a region is emem_recall_polygon, a free-text place question is emem_ask (type:\"ask\" forwards to it). `window` takes tslots, not dates: get them from emem_trajectory. A tool named here but absent from `tools/list` is not a dead end: every one of the 115 dispatches by name at `/mcp` and `/mcp/full`; the core list is 18 to keep the catalog small, and `emem_tools` enumerates the rest.\n\nExample arguments: {\"type\":\"did_change\",\"cell\":\"damO.zb000.xUti.zde78\",\"band\":\"indices.ndvi\",\"window\":[20245,20620]}","description_after":"Say what you want in one typed object and get the answer, without choosing a primitive. `type` is a tagged union: it selects the intent AND decides which other fields are read, so send only the fields its row needs. The plan is EXECUTED in the same call, so you receive the result (the resolved cell64, the similarity, the delta, the verdict), not a list of calls to make yourself.\n\ntype             | needs                        | optional            | answers\nwhere_is         | description                  |                     | cell64 for a named place\nwhat_is_here     | cell OR place                | description         | what is attested at a location\nis_like          | a, b                         |                     | cosine similarity of two cells\ndid_change       | cell, band, window           |                     | delta for one band over [start,end] tslots\nfind_like        | key                          | k, filter           | nearest cells by embedding\nconfirm          | claim, cell                  |                     | verdict plus the signed facts behind it\nask              | description                  | place/cell/lat+lng  | free-text question, packaged answer\n\nAn unknown or missing `type` returns a structured `needs_intent_type` envelope naming the seven values rather than a hard error, so you can correct it on the next turn.\n\nWhen to use: Call when the question maps onto one of the seven rows above and you would rather state the goal than pick a primitive. Otherwise go direct: a band at a cell is emem_recall, a region is emem_recall_polygon, a free-text place question is emem_ask (type:\"ask\" forwards to it). `window` takes tslots, not dates: get them from emem_trajectory. A tool named here but absent from `tools/list` is not a dead end: every one of the 114 dispatches by name at `/mcp` and `/mcp/full`; the core list is 18 to keep the catalog small, and `emem_tools` enumerates the rest.\n\nExample arguments: {\"type\":\"did_change\",\"cell\":\"damO.zb000.xUti.zde78\",\"band\":\"indices.ndvi\",\"window\":[20245,20620]}","description_similarity":0.988,"before_hash":"ca1b0a7c6e4bf3859a1a05c49ed88460","after_hash":"27bb195036e9b0f95d754119f2040217"},{"tool":"emem_tools","kind":"changed","observed_at":"2026-09-24T14:39:29.310Z","fields":["description"],"description_before":"The map of emem's tool surface, and the only tool you need to find the rest: the working loop in the order you walk it (name, ground, cite, resolve, verify, check for drift), then every other tool grouped by the question it answers, each with its one-line trigger. Pass `name` for one tool's full schema and a runnable example. IF YOU ARE READING A LIST OF 18 TOOLS, YOU ARE SEEING A CURATED SUBSET OF 115, NOT THE WHOLE SURFACE; hosts strip `_meta`, so the count is repeated here. Every catalogued tool stays callable by name through tools/call at either endpoint.\n\nWhen to use: Call FIRST when you do not know which tool answers the question, or need a capability absent from your list: absent from the list is not absent from the server. `q` searches by topic (`ndvi`, `flood`, `verify`), `name` returns one exact schema, no arguments returns the whole map. /mcp/full registers the full catalog; emem_ask answers in one shot without picking a primitive.\n\nExample arguments: {\"q\":\"ndvi\"}","description_after":"The map of emem's tool surface, and the only tool you need to find the rest: the working loop in the order you walk it (name, ground, cite, resolve, verify, check for drift), then every other tool grouped by the question it answers, each with its one-line trigger. Pass `name` for one tool's full schema and a runnable example. IF YOU ARE READING A LIST OF 18 TOOLS, YOU ARE SEEING A CURATED SUBSET OF 114, NOT THE WHOLE SURFACE; hosts strip `_meta`, so the count is repeated here. Every catalogued tool stays callable by name through tools/call at either endpoint.\n\nWhen to use: Call FIRST when you do not know which tool answers the question, or need a capability absent from your list: absent from the list is not absent from the server. `q` searches by topic (`ndvi`, `flood`, `verify`), `name` returns one exact schema, no arguments returns the whole map. /mcp/full registers the full catalog; emem_ask answers in one shot without picking a primitive.\n\nExample arguments: {\"q\":\"ndvi\"}","description_similarity":0.981,"before_hash":"2f48d4e7aacf9a5c8bb197ba7eef8953","after_hash":"caf81cec066d90028319b27de2ad933d"}],"next_before":null,"next_actions":[]}