Every change Wellknown observed on this MCP server, newest first, with what it was before and what it became. Tool-surface changes carry the definition diff. Nothing here is edited after the fact.
Changed the definition of "emem_intent"
⟨553 unchanged words⟩ lswi","evi","nbr","ndti","ndsi","mndwi","vv","vh","vh_vv"],"type": ⟨185 unchanged words⟩
Changed the definition of "emem_intent"
⟨551 unchanged words⟩ ndwi","ndmi","lswi","evi","nbr","ndti","vv","vh","vh_vv"],"type": ⟨185 unchanged words⟩
Authorization not required, issuer https://emem.dev
Changed the definition of "emem_ask", "emem_intent", "emem_locate" and 1 more
⟨103 unchanged words⟩ `_projection`, which names what the projection removed. It has `research_nearby` when vouched research agents signed conclusions inside the place. Those are pointers only; read them with emem_inferences. POST /v1/ask has more: `caveats`, `topic_routing`, `reasoning` ⟨44 unchanged words⟩
Only numbers and dates differ: this server embeds live figures in the definition, so the text moves without the contract changing.
⟨629 unchanged words⟩ ":"number"},"max_scenes":{"maximum":2496,"minimum":3,"type":"integer"}, ⟨107 unchanged words⟩
Recently observed → Live
Live → Recently observed
Authorization not required, issuer https://emem.dev
Authorization not required, issuer https://emem.dev
Authorization not required, issuer https://emem.dev
Authorization not required, issuer https://emem.dev
Changed the definition of "emem_intent"
⟨548 unchanged words⟩ index":{"enum":["ndvi","ndwi","ndmi","lswi","evi","vv","vh","vh_vv"],"type":"string"},"k":{ ⟨183 unchanged words⟩
Changed the definition of "emem_ask", "emem_echo_verify", "emem_entity" and 15 more
Single-shotAnswer a free-textanswerquestion about a real-world location in one call. Signed satellite,backedelevation,bywatersignedandsatellite/elevation/water/built-upbuilt-upreceipts.receiptsForwardssupporta
Changed the definition of "emem_intent" and "emem_tools"
⟨34 unchanged words⟩ only the fields its row needs. The planis EXECUTEDruns in the same call, so: youreceive the result (the resolved cell64, the similarity, the delta, thegetverdict)results, not a list of calls tomake yourself.make. type | needs | optional | answers where_is ⟨75 unchanged words⟩ description | place/cell/lat+lng | free-text question, packaged answer area_over_time | geometry OR bbox, start_date, end_date | index, max_scenes | an area's index per overpass with spread and anomaly An unknown or missing `type` returns astructured`needs_intent_type` envelope naming theseven
Authorization not required, issuer https://emem.dev
Changed the definition of "emem_entity_link"
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":falsetrue,"readOnlyHint":false,"title":"Attest that ⟨6 unchanged words⟩
Authorization not required, issuer https://emem.dev
Authorization not required, issuer https://emem.dev
Authorization not required, issuer https://emem.dev
Changed the definition of "emem_intent", "emem_locate", "emem_memory_token_resolve" and 2 more
⟨63 unchanged words⟩ a list of calls to make yourself. type| needs| optional| answers where_is| description|| cell64 for a named place what_is_here| cell OR place| description
Authorization not required
Changed the definition of "emem_ask", "emem_entity", "emem_entity_link" and 6 more
⟨46 unchanged words⟩ answer should carry its own evidence. Send theuser'squestion verbatim as `q` plusa location as`place`(free text), `cell`(cell64),or `lat`+`lng`.OneOverenvelopeMCPcomesabackpoint answer is a projection: `answer`,`spatial_trace``receipt` (the readings asciteprimitives
Changed the definition of "emem_ask", "emem_entity_link", "emem_entity_resolve" and 4 more
{"destructiveHint":false,"idempotentHint":truefalse,"openWorldHint":true,"readOnlyHint":false,"title" ⟨7 unchanged words⟩
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":truefalse,"readOnlyHint":false,"title":"Attest that ⟨6 unchanged words⟩
Recently observed → Live
Live → Recently observed
Changed the definition of "emem_guard_verdict"
⟨213 unchanged words⟩ own node. Example arguments: {"texts":["Lusail'sLusail ground sits at 2.6 m per emem:fact:defi.zb521.jawI.gOze:f3yr3urkrfwamlemwadulgth2qpw645vi6l6fhtuu4dy5o7onahq"]}
Changed the definition of "emem_guard_verdict"
⟨213 unchanged words⟩ own node. Example arguments: {"texts":["ElevationLusail'stheregroundissits918at 2.6 m per emem:fact:defi.zb493.xuqA.zcb5fdefi.zb521.jawI.gOze:yqbolgeoycqkvj3zkxukb4bjw4odhpwvfzqo3fbgwf4spk45zalaf3yr3urkrfwamlemwadulgth2qpw645vi6l6fhtuu4dy5o7onahq"]}
Authorization not required
Recently observed → Live
Changed the definition of "emem_intent" and "emem_tools"
Only numbers and dates differ: this server embeds live figures in the definition, so the text moves without the contract changing.
⟨260 unchanged words⟩ a dead end: every one of the115114 dispatches by name at `/mcp` and `/mcp/full`; the ⟨25 unchanged words⟩
Only numbers and dates differ: this server embeds live figures in the definition, so the text moves without the contract changing.
⟨68 unchanged words⟩ , YOU ARE SEEING A CURATED SUBSET OF115114
Live → Recently observed
Changed the definition of "emem_intent", "emem_memory_bundle" and "emem_tools"
Only numbers and dates differ: this server embeds live figures in the definition, so the text moves without the contract changing.
⟨260 unchanged words⟩ a dead end: every one of the110115 dispatches by name at `/mcp` and `/mcp/full`; the ⟨25 unchanged words⟩
{"properties":{"fact_cids":{"description":"Instead of triples: the exact facts to bind, by cid. A triple is resolved through recall and can bind a newer fact than the one you showed; a cid binds that fact and no other. Pass triples or fact_cids, not both.","items":{"type":"string"},"maxItems":256,"minItems":1,"type":"array"},"purpose":{"description":"Optional human-readable purpose string.
Authorization not required
Authorization not required
Authorization not required
Changed the definition of "fetch" and "search"
⟨61 unchanged words⟩ signed as, never re-rendered. A fact handleis a local dereference andwrites nothing; a cell handlegoes through the same wrapper,aslike `emem_recall`,so on a cold cell itMATERIALIZES a missing bandfirst,onreachingaupstreamcoldandcellsigning(fetchedwhatupstream,
Changed the definition of "emem_tools", "fetch" and "search"
Only numbers and dates differ: this server embeds live figures in the definition, so the text moves without the contract changing.
⟨44 unchanged words⟩ shape of the job, NOT about safety:1416 tools outside `write` declare `readOnlyHint: false` because ⟨327 unchanged words⟩
⟨57 unchanged words⟩ decimal string it was signed as, never re-rendered. A fact handle is a local dereference and writes nothing; a cell handle goes through the same wrapper as `emem_recall`, so on a cold cell it MATERIALIZES a missing band first, reaching upstream and signing what it fetched. The weaker path sets the flags: readOnlyHint false, openWorldHint true.
Authorization not required
Certificate changed, valid to 2026-12-13
Authorization not required
Changed the definition of "emem_find_similar", "emem_memory_contradictions", "emem_tools" and 1 more
⟨57 unchanged words⟩ default 10. It ranks what the corpus alreadyholdsholds; only when the KEY's own vector is missing does it materialise that one band for the key, signed andmaterialisesreportednothingin `materialize_notes`, then retry. Neighbours are never materialised, so an empty result means nobody has ⟨70 unchanged words⟩
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":truefalse,"title":"k-NN over the corpus by embedding"}
Changed the definition of "emem_guard_verdict", "emem_intent", "emem_locate" and 3 more
⟨140 unchanged words⟩ not resolve while you can still fix it.Set claim_gating`claim_gating:truetotrue` alsobe told whichnames measurable claimscarrywith no citationat allandwhich ememthe band that would answer them.CheckingFor a payloadsome otheranother
Changed the definition of "emem_entity_link" and "emem_entity_resolve"
Record a signed,equivalence:ATTRIBUTEDbindclaimanthatalternatea label ora stableexternal id (GERS / OSM / Wikidata)todenotes an existingcanonicalobject, or with `stance: "disputes"` that it does not. A shared-space write: it changes what other agents resolve, sofutureit
Changed the definition of "emem_ask", "emem_echo_verify", "emem_entity" and 7 more
⟨28 unchanged words⟩ returns one packaged envelope. When to use:UseCall when the questionconcernsis about a specificreal-worldplace anda packaged, citation-bearingthe answeris preferableshouldtocarrymanualitsprimitiveowncomposition.evidence.
Added "fetch" and "search" (16 tools before, 18 now)
Open one search result and read the signed record — 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. When 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 ser…
Find signed facts for a place, as citable sources — 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. When 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, u…
Changed the definition of "emem_ask"
before
—after
{"properties":{"_means":{"type":"string"},"answer":{"description":"The prose answer. The same text is in the content block, which also carries the full envelope.","type":"string"},"cell":{"description":"The cell64 the question resolved to: emem's address for the place.","type":"string"},"question":{"description":"The question as asked.","type":"string"},"schema":{"const":"emem.ask_structured.v1","type":"string"},"spatial_trace":{"description":"A spatial memory trace: what this responder has measured at this place, as primitives a model can reason over rather than a picture a person looks at.","properties":{"absent":{"description":"Bands this responder looked for and did not find. Absence is evidence: without it a consumer infers coverage nobody measured.","items":{"properties":{"band":{"type":"string"}},"type":"object"},"type":"array"},"at":{"description":"[lat, lng] of the cell, so a point has a position without a second call.","items":{"type":"number"},"type":"array"},"cell":{"type":"string"},"counts":{"description":"Totals taken BEFORE any cap, so truncation can be seen rather than guessed.","properties":{"absent":{"type":"integer"},"absent_shown":{"type":"integer"},"points_shown":{"type":"integer"},"present":{"type":"integer"}},"type":"object"},"layers":{"description":"Points grouped by what kind of evidence they are: surface (what the ground is), built (what stands on it), now (what is happening there), embedding (vectors for similarity). A layer absent from this list means the question never reached that kind of evidence; a band looked for and not found is in `absent` instead.","items":{"properties":{"layer":{"enum":["surface","built","now","embedding","other","ground"],"type":"string"},"points":{"description":"One per signed reading.","items":{"properties":{"age_s":{"description":"How old the reading was when this answer was written.","type":"integer"},"band":{"type":"string"},"class":{"description":"Provenance class: direct_sensor, deterministic_index, estimator, model_output, attested_execution, human_curated, unclassified. What KIND of claim this is.","type":"string"},"f":{"description":"Index into the fact_cids array in this result's text block. Dereference it to get the signed bytes.","type":"integer"},"unit":{"type":"string"},"value":{"description":"The measured value, in the band's own units."}},"required":["band","value"],"type":"object"},"type":"array"}},"required":["layer","points"],"type":"object"},"type":"array"},"schema":{"const":"emem.spatial_trace.v1","type":"string"},"stage":{"description":"Which stage of the answer grounded these readings.","type":"string"},"truncated":{"type":"boolean"}},"required":["schema","layers","counts"],"type":"object"}},"required":["schema","spatial_trace"],"type":"object"}Authorization not required
Certificate recorded, valid to 2026-09-23
Authorization not required
First tool surface recorded: 16 tools (server version 2.4.0)
Showing the latest 49 events. The API returns up to 500 and filters by kind: ?kind=tool_surface_changed
⟨133 unchanged words⟩ , and the bands with no materializer here. It has `research_nearby` when vouched research agents signed conclusions inside the place. Read those with emem_inferences before you recompute them. For one packaged answer in one call, use ⟨6 unchanged words⟩
⟨22 unchanged words⟩ "type":["string","null"]},"research_nearby":{"description":"Present when vouched research agents signed conclusions inside the place. Tokens only; read them with emem_inferences.","type":"object"},"selected":{"properties":{"confidence_reason":{"type ⟨18 unchanged words⟩
Only numbers and dates differ: this server embeds live figures in the definition, so the text moves without the contract changing.
⟨67 unchanged words⟩ TOOLS, IT IS A CURATED SUBSET OF115116, NOT THE FULL SURFACE. Hosts remove `_meta`, ⟨100 unchanged words⟩
Grade a valueyou arethataboutyoutowill emit against the signed fact that your citationpointscites.at.TheReturnstool`matches`returnsand,`matches`.whenWhenitthe value does not,thematch,`drift`itbetweenalsowhatreturnsyouthewere`drift`aboutbetweentoyoursayvalue andwhat ememtheholds.valueThisinisemem.theThis stepthat turnscatches a transcription errorinto a caughtthateventwouldinsteadotherwiseofbe a silent wrongnumber:number.aA modelthatcanresolvesresolve a fact correctlycanand stillretypetype `0.2411` for`0.241103`,`0.241103`.andNonothingotherelsestep in the loopnotices.sees this. Memory algebra: the `verify` operation (https://emem.dev/docs/model.html). When to use: Call this immediately beforepublishing,youloggingpublish, log orhandingpass onanya valueyou tookfrom an ememfact, andfact.treatTreat a false `matches` as agate ratherstop,thannot a warning.Pair it withUse `value_verbatim` from resolve: quote that exact decimal stringrather than reformatting the number, then echo-verifywhattheyoutextactuallyyou emitted. For a due-diligence or compliance record, thisis whatgivesletsayousignedassertcheck`everyforcitedeachvaluecitation.wasThenecho-verified`youwithcanastatesigned`everycheckcitedpervaluecitationwasinsteadecho-verified`.ofTheatoolpromise.alsoAcceptsaccepts a bare cidtoo, so a damaged citation stillgrades rather thangetsfailingaclosed.grade. Example arguments: {"token":"emem:fact: ⟨4 unchanged words⟩
⟨8 unchanged words⟩ plot, a river, a named place)a single,one shared,content-addressed identity thatidentity.anyEvery agent resolves this identity the same way.ReturnsThe result is an `entity_token` (`emem:entity:<entity_cid>`)plusand a signed receipt thatattestsshows how the reference resolved. Two agents that name the same objectmintget the SAMEentity_cid; whenentity_cid.aA stable external id (Overture GERS/or OSM)isdecidesknownidentityitwhendominatestheidentityresponder knows one, sodivergentdifferent labels for onerealobjectstillcollapse to one id. Thisis the object-level antidote tostops referential drift: 'the damaged bridge near the river' becomes onecanonicalthing that every model reasonsabout, not a phrase each model re-interprets.about. When to use: Call this when a conversation refers to a THING and youwantneed a handle thatsurvives summarisation andtravels betweenagents, before it drifts into 'that infrastructure issue'.agents. Anchor it with `place`, `cell`,or`lat`+`lng`, then`lat`+`lng`.handGive the `emem:entity:` token toanya peer, andtheythedereferencepeer gets the sameobject;object.recallRecall at its cell64forto read signed facts.PickChoose the correct sibling: thisonetool MINTS or returns anidentity you can anchor;identity. `emem_entity_resolve` findsoneansomeoneidentityalreadythat an agent registered before, from a fuzzyphrase;phrase. `emem_entity_link`asserts tworecordsspellingsthatyoutwoholdnames mean one object.NotDo not use it for an observation (that is a fact:use emem_recall or emem_memory_token)and notor fornaminga place (that isuse emem_locate). An entity is a thing AT ⟨16 unchanged words⟩
Record a signed, ATTRIBUTED claim that a label or an external id (GERS/, OSM/, Wikidata)denotesnames an existingobject, orobject.withWith `stance: "disputes"`, record that it does not.AThisshared-spaceis a write to the shared space: it changes what other agentsresolve,resolve.soTheitresponderisstoresstoredit with your key,rate-limitedlimitsperthe rate for each key, andweighedweighs it by how many INDEPENDENT keys agree.OneEverykey'sreaderbindingseesistheshownbindingtoofeveryonereaderkey asone key'sthe claim of one key, never as the answer. When to use: Call this when you canvouchconfirm that twophrasingsnamesdenotemean one object, or to attach an authoritative externalid;id.yourYour key goes on the record. Use `stance: "disputes"` whenanother key'sthe binding of another key iswrong:wrong.recordedThe dispute goes beside it,and deletes nothing.CorroboratingA second key on a correct single-key binding is usefulinby itself. Example arguments: {"entity_token":"emem: ⟨6 unchanged words⟩
Find the objects that agentshaveconnectedboundto aphrasingphrase.to,Therankedtool ranks them by INDEPENDENT corroboration, never by arrival order. Each candidatecarrieshas `asserted_by`, `disputed_by`, `independent_attesters` and `corroboration` (`single_key` | `multiple_independent_keys` | `none_attributed`);. `contested` issettrue when more than one object claims the name. Send `text` for candidates, `near` to narrow by place, or an `emem:entity:` `token` to dereference.Read-only;Thealiastool only reads. Alias text isotherdataagents'fromdata.other agents. When to use: Call this BEFOREmintingyou mint and beforeciting:youresolvecite. Resolve first, and mint only if nothingmatches,matches.readRead `corroboration` before you cite. A `single_key` binding isone agent'sthe claim of one agent about a sharedname;name.ifIf you canvouch forconfirm it, corroborate it with emem_entity_link, so the next reader sees two keys. Example ⟨9 unchanged words⟩
k-NNFindoverthe k nearest cells in the corpus by cell embedding or by an inline vector.ReturnsThe answer has `neighbors`,orderednearestnearest-firstfirst, each with `cell`, `score`, `lat`/`lng` and `band_used`,plusand a signed receipt over the vectors it read.Scoring`mode`issets`mode`:the scoring. cosine is exactfp32;fp32. hammingis acountssign-bitsignpopcountbitsthatand scansfarmany more cells for the samebudget;budget. hamming_then_rerank does both. `k` is1..10001 to 1000, default 10.ItThe tool ranks only what the corpusalready holds; onlyholds.whenWhen theKEY's own vectorKEYishasmissingnodoesvector, itmaterialisematerializes that one band for the key,signedsignsandit,reportedreports it in `materialize_notes`,thenandretry.triesNeighboursagain.areIt nevermaterialised,materializessoneighbours. Thus an empty result meansnobodythathasno attestedavectornearbyis near, not thatnowherenoresemblesplacetheiskey.similar. When to use: Callwhen the userthisasksfor 'find places like X',or 'where else looks like this', orhandswith anembedding to find neighbours.embedding. `key` iseithera cell64 or `inline:[x,y,...]`.DefaultThe default band is `geotessera` (the 128-D Tessera foundation embedding);.passFor`band:the"geotessera.multi_year"`1152-Dforfusiontheof1152-D99-vintageyears (2017–20252017 to 2025),fusion.send `band: "geotessera.multi_year"`. Example arguments: {"key":"defi.zb64a.cAzU.zfa27","k":10}
Runemem-guard'sthe emem-guard policypipelinechecksoveron text before youaresendaboutit.toThesend,checksagainstuse this responder's corpus.FindsThe tool finds every emem: citation, resolves each one, and returns allow or deny with amachine-readablereason that a machine can read: `EMEM-GUARD DENY <CODE> token=<token|-> fix=<fix> leaf=<leaf|->`.CodesThe codes are: PROV_SIG (the signature did not verify),. PROV_BYTES (the citation resolved to different contentthan claimed),. PROV_DRIFT (readingthehasreading moved past its band threshold),. PROV_VALUE (a stated valuedisagreesdoes not agree with the cited fact),. CLAIM_UNGROUNDED (a measurable claimwithhas nocitation,citation;opt-inturnviait on with claim_gating). `fix`istellstheyouactionablewhathalfto do: refresh_token, remove_reference, contact_admin, cite_observation, correct_value.GEO_ZONEOnlyandaredact_and_retryself-hostedcomeguardonlyreturnsfromGEO_ZONEaandself-hostedredact_and_retry.guard.This tool is ADVISORY:nothing isitblocked,blocksandnothing.aA citation that this responder does not hold is never a denial, because itiscanindistinguishablebefromaonecitationmintedfromelsewhere.another responder. Memory algebra: the `verify` operation (https://emem.dev/docs/model.html). When to use: Call it on yourowndraft before you assert something, or on a tool result before you reason onit,it.toThencatchyou can fix a citation that does notresolve while you can still fixresolve.it.With `claim_gating: true`, it also names measurable claims with no citation, and the band thatwould answeranswersthem.each. For a payload from another frameworkproduced(CloudEvent, OPA input, OpenAI moderations body,another server'sa tool call from another server), send itas-isunchanged and name its`shape`:`shape`.theThe default readerseesreads only `texts`, and a check that read nothingstillanswers allow. To ENFORCErather thantheconsultpolicy,emem_guard_selfhostuse emem_guard_selfhost. It returns the procedure for your own node. Example ⟨13 unchanged words⟩
SayState what you want in one typed object and get theanswer, without choosinganswer.aYouprimitive.do`type`notischoose atagged union:primitive.it`type` selects the intent ANDdecides whichthe other fieldsarethatread,thesotoolsendreads. Send only the fieldsitsinrowitsneeds.row. The plan runs in the same call: you get results, not a list ofcalls to make.calls. type | needs | optional | answers where_is ⟨60 unchanged words⟩ confirm | claim, cell | | verdictplusand the signed facts behind it ask | description | place/cell/lat+lng | free-text question, packaged answer area_over_time | geometry, bbox ORbbox,areas; start_date, end_date | index, max_scenes | index of anarea'sareaindexforpereach overpass, with spread and anomaly An unknown or missing `type` returns a `needs_intent_type` envelopenamingwith the validvalues,values. It is not a hard error. When to use: Call this when the questionmaps ontomatches one of the eight rowsaboveand youwouldpreferratherto state thegoalgoal.thanOtherwisepickcallathe primitive.Otherwise go direct: aA band at a cell isemem_recall,emem_recall.aA region isemem_recall_polygon,emem_recall_polygon.aA free-textplacequestion about a place is emem_ask (type:"ask"forwards tosends it there). `window` takes tslots, not dates: get them from emem_trajectory.A`areas` puts up to 6 areas on one chart. You can call a toolnamedthatherethis text names butnotyourlistedliststilldoesrunsnot show, by name, through tools/call. Example arguments: {"type":" ⟨8 unchanged words⟩
⟨23 unchanged words⟩ the pair.","type":"string"},"areas":{"description":"area_over_time: up to 6 {id,geometry|bbox} on one chart","maxItems":6,"type":"array"},"b":{"description":"is_like only: cell64 ⟨509 unchanged words⟩ :"find_like only: how many neighbours to return.Defaults to the primitive's own default when omitted.","minimum":1,"type":"integer"},"key":{"description":"find_like only: cell64 to searchfrom. Neighbours arefrom, ranked by embeddingcosine against this cell.cosine.","type":"string"},"lat":{ ⟨156 unchanged words⟩
MintGet the canonical,vendor-neutraladdress (cell64)forof a real-worldplace:place.theEverysharedagentspatialresolvesidentityaeveryplaceagenttoresolvesthetosameidenticallycell64, so two models refer to the sameground instead ofground.twoThedescriptionsanswerofalsoit.lists,Alsobyreturnstopic, thetopic-grouped inventory ofbands and algorithmsrecallablethat you can recall there. Fora first-classan OBJECT identity (a bridge, a plot, a named place)ratherinsteadthanof arawcell, use emem_entity. SendEITHER`lat`+`lng` as numbers,ORor a free-textplace;place.coordinatesWhenwinbothwhenarrive,boththearrive.coordinates win. `q`, `query` and `name` areall acceptedotherspellingsnamesoffor `place`.AThekeyanswer lists keys that this schema does not declareis reportedin `_unrecognised_arguments`, so a typoanswers about somewhere else rather thaniserroring.visible. When to use: Callwhen the input names a real-world placethisandwhen the next step needsitsthe cell64,orofwantsatonamedknowplace,whichorbandstheexistbandstherethatbeforeexistrecalling.there. `data_at_this_cell` lists everyrecallableband you can recall, by topic (`live_bands_by_topic`), the recipesfusingthat use them (`algorithms_for_topic`), and the bands with no materializer here. For one packaged answer ina singleone call, use `emem_ask`. Example arguments: {"place":"Mount Everest"}
ComposeCombine N (cell, band, tslot?) triples into ONE signed envelope. Each triplerunsgoes through the standardauto-materializerecallpath;path, which materializes on a miss. The tool puts the resulting fact_cidsare bundled intoin a content-addressed envelope, and the responder signsoverthe full receipt. Thecomposed`bundle_token` is `emem:bundle:<bundle_cid>`, a single:rebindableone string that cites thewholefull set. Memory algebra: the `merge` operation (https://emem.dev/docs/model.html). When to use: Callwhen thethisagentwhenwantsyoutomust citemultipleseveral (place, band,vintagedate) facts as one handle.TheYoubundlecanstaysverifyverifiablethe bundle offlineviawith/v1/verify_receipt/v1/verify_receipt.(theThe receipt covers all the cited fact_cids andcells).cells. Use this instead of Nseparatecalls`emem_memory_token`tocomposers`emem_memory_token` when the citation isconceptuallyonethingthing.(e.g.An example is "theEUDR-relevantEUDR baseline for these 8 plots at 2020-12-31").CapsTheatlimit is 256 triplesperforcall,eachandcall.theTheresponseanswerreportsgives `members` and `resolved`, so you can see a bundle thatonly partlyresolvedis visible without walkingonlyeveryincitation.part. Example arguments: {"triples":[{"cell" ⟨11 unchanged words⟩
SurfaceFind where the corpus DISAGREES with itself (algebra: competing evidence).When twoTwo or more independent sourcessignedcan sign different values for the same place+, band+andtime,time.thisThis tool returns that disagreement with a0–1severityscorefrom 0 to 1 andcitationsatocitationeveryfor each disputedfact,fact.insteadItofdoessilentlynotpickingpick one value andhidinghide the conflict.The opposite of a confident single answer: itIt tells you when not to trustone.a single answer. Read the SCOPE beforequotingyou quote azero:zero.byBy defaultthistheaskstoolonlycountswhetheronlytwodisagreementDISTINCTbetweenattesterstwodisagree,DIFFERENTsoattesters.oneOne responderanswering anthataddressanswers from twodifferentupstreamsis not counted untilcountsyouonlypasswith `include_same_attester_sources: true`. When to use: Call this before you rely on a number:'is there disagreement about X','do the sourcescorroborateagreethis'on X', 'audit this claim'.Narrow withUse `cell_prefix` for a region and `band` for onefamily;band family. `min_severity`dropsremovestrivialsmall differences. Severityisdependsperon the band kind: for a scalar,=the spread over the band'srange,range.vectorFor=a vector, 1-minus the meancosine,cosine.categoricalFor=a category, 1-minusmodetheshare.share of the mode. On a single-responderdeploymentnode, add `include_same_attester_sources:true`,true`.becauseThere, thelikeliestmostreallikely disagreementthereis one signeransweringthat answers from twoproviders and the default scope cannot report it.providers. Each record names its `disagreement_scope`. The receipt cites every disputedcid;cid.quantifyTo measure a pair,withuse`emem_diff`,`emem_diff`.orTo read the `disagrees_with` edge,viause `emem_edges_recall`. Example arguments: {"cell_prefix":"damO" ⟨4 unchanged words⟩
MintMake a citation handle, `emem:fact:<cell64>:<fact_cid>` (or `:<state_cid>`), that.anyAny agent or LLM resolves it to thebyte-identicalsame signedobject. The antidote to referential drift onobject,thebytevalueforside:byte.handGive this one string to another agent instead ofre-describinga new description of the fact.ValidatesThe tool checks that bothcomponentsparts arenon-emptynot empty andfreedoofnot contain the `:` separator. Memory algebra: the `cite` operation (https://emem.dev/docs/model.html). When to use: Call this when youwantneed onerebindablestringtothatcitecites a placeplusand an attested fact across messages,threads,agents or tools.Pair it withUse `emem_echo_verify` before you publish the value. FOR MANY FACTS, USEemem_memory_bundle INSTEAD, andemem_memory_bundle.thisThis ismeasured ratherathanmeasuredstylistic:result.aA token is 83 to 84 characters and 51 LLMtokens whiletokens.theThe value itpoints atcitesaveragesis 11 characters and 5.4,sotokens on average. Thus N tokenscostuse about9.5x9.5 times the context ofpastingthe Nnumbers and hit the window sooner.numbers. A bundle is 38 charactersatfor any N up to 256, and it resolves in one roundtrip: ittrip.winsItfromcostsN=1lessagainstthan tokensandfromN=5N=1,againstand less than the plainvalues.valuesIndividualfromtokensN=5.areUseforonecitingtoken to cite ONE fact that you must verify later. Example arguments: {" ⟨4 unchanged words⟩
ParseRead a `emem:fact:<cell64>:<fact_cid>` citation handle and return the reading that it cites. `value`, `unit`, `band` and `kind` areon the responseat the TOP level of the answer,alongsidebeside the full signed `fact`body they were lifted from. Savesbody.theYouagentdofromnotstring-splittingsplit the tokenandorchainingcall `GET /v1/facts/<cid>`manually.yourself. Memory algebra: the `resolve` operation (https://emem.dev/docs/model.html). When to use: Call this when youholdhave a memory_token from another agent or an earlier turn andwantneed thevalue behind it.value. For a scalar, quote `value_verbatim`, the exact decimal stringitthatwasthesignedresponderas.signed. A null `value` or `unit` means the fact has none (anabsence;absence,aordimensionlessan index with no unit),. It does not mean a missing field. A cid that this responder does not holdisreturns a typed404:404. Then try /v1/fetch, or resolve at a mirror. ⟨7 unchanged words⟩
Read the signed facts at a canonical address (cell64); auto-materializes.onWhen amissbandforhasanynobandfactwithyet but has a registeredmaterializer.materializer, the responder fetches it. A fact_cid names one signed attestation, soayourecalledcanfactciteisaciteablefact andre-verifiable ratherverifythanitaagain.paraphrase:Resolveresolvingtheitcid anywherereturnsandthoseyouexactget the same bytes.ItA fact_cid is NOT a fingerprint of the observation. The digestcoversincludes the responder's key and themomenttime itsigned,signed.soThus two responders that measure the same thingmintmake different fact_cids, and a cid resolves only at the responder that signedit; use emem_entityit.forFor identitythatacrosscrossesresponders,responders.usePassemem_entity. Send `deterministic:true` (or a `provenance` class list) to keep only factsrecomputablethat you can compute from the cited rawsource, with no model or human in the loop.source. In the memory algebra this is ensure(cell, bands), not get: you state what mustexist and the responder reuses or materializes.exist. When to use: Call this after `emem_locate`, or with aknowncell64 or a place name.ReturnsIt returns every Primary fact at that (cell, band, tslot).If a requestedA bandhascan have no factyetbuthashave amaterializer,materializer. Then the responder fetches the upstream value, signs it,persistsstores it and returns it in the same call. The first call(slowisonce,slow;cachedlaterafter),callssouse the cache. Thus any wired band recalls at any cell on Earth:passsend `bands: [<band>]`. `materialize_notes` lists whatwas just fetched;theemptycallwithfetched.noEmpty notesmeansmean no materializer here. Example arguments: {"cell" ⟨4 unchanged words⟩
The map of emem'stool surfacetools, and theonlyone toolyou needthattofindsfindall therest:others. It gives the working loop intheorderyou walk it(name, ground, cite, resolve, verify, check for drift),.thenThen it groups every other toolgroupedby the question it answers, each withitsa one-line trigger.PassSend `name` forone tool'sthe full schema of one tool andaanrunnableexampleexample.that runs. IF YOUARE READINGSEE A LIST OF 18 TOOLS,YOU AREITSEEINGIS A CURATED SUBSET OF 115, NOT THEWHOLEFULLSURFACE;SURFACE.hostsHostsstripremove `_meta`, so this text repeats thecountcount.isYourepeatedcanhere.callEveryevery catalogued toolstays callableby name through tools/call at either endpoint. When to use: Call this FIRST when you do not know which tool answers thequestion, or needquestion.aAlsocapabilitycallabsentitfromwhen your list:absentdoesfromnotthehavelista capability. A tool that is notabsentinfromyour list can still be on the server. `q` searches by topic (`ndvi`, `flood`, `verify`),. `name` returns one exactschema,schema. With no arguments,returnsyou get thewholefull map. /mcp/full registers the fullcatalog;catalog. emem_ask answers in oneshotcall withoutpickinga choice of primitive. Example arguments: {"q":"ndvi"}
Verify a signed receiptenvelopeonserver-side:therebuildsserver. The tool builds the canonical preimage again, under the rule that the receipt'sown`preimage_version`names,names.runsIt checks the ed25519oversignature with the embeddedkey and signature,key.andIt returns `{valid, reason, failure_detail, signature_valid, merkle_proof_valid, signer_pubkey_b32, preimage_blake3_hex}`. A receiptisverifiesBYTE-FOR-BYTEBYTE FOR BYTE ORNOTHING:NOTv2AT ALL. Version 2 binds the inclusion proof, so a change of anyreshapingkind(makes the signature fail: a dropped field, are-keyedrenamedonefield, asummary) invalidates the signaturesummary.byUsedesign.thisFortool when thein-browserbrowser/verifypagepath/verify isunavailable,notoravailable.forAlsoauseserver-sideit to auditofa receipt from a thirdparty's receipt.party. When to use:PassSend the receipt EXACTLY as the readprimitivetool returned it,wholecomplete andunmodified.unchanged. Two omissionsproducecause a false forgeryrather than a 400,andnottheyaare400.theDoonlynottwodropworth`merkle_proof`.memorising:Dodroppingnot`merkle_proof`,dropand`preimage_version`.droppingWithout`preimage_version`it(absentthedeserialisesvaluetois 0, whichsilentlyselects the v0 rule,so the proof still walks whileand the signature reads asinvalid).invalid.SignatureThe signature andpubkeythemaykey can be byte arrays, or `sig_b32`/and`responder_pubkey_b32`;`responder_pubkey_b32`.noTheothertoolspellingacceptsisnotolerated.otherReshapingnames. When a fieldthis responderchangedcanafterchecksigning,isthereportedanswerasis `reason: receipt_reshaped_after_signing`with the field named, never accepted.andOptionallynamessetthe`pubkey_b32`field.toToassertrequire a specificsigner.signer, set `pubkey_b32`. A bad signatureisreturns 200 with `valid: false`, never a 4xx. The example (from emem_tools) is a real receiptsignedover two Trafalgar Squarefacts:facts.unchangedUnchanged, it is`valid`;`valid`.changeChangeanyone byte, and it is not. Example arguments: 1602 ⟨32 unchanged words⟩
Dereference an id from`search`:`search`. You get the reading in one line, then the signed bodyit came from, the URLservingthat serves those bytes, and metadatanaming: cell, band, signing time and key.TakesThe id can be an `emem:fact:` citation, a bare fact_cid, or an `emem:cell:` handle for awholefull cell. The value isquoted asthe exact decimal stringitthatwasthesignedresponderassigned, neverre-rendered.a new format. A fact handle writesnothing;nothing.aA cell handle, like `emem_recall`, MATERIALIZES a missing band on a cold cell:(fetcheditupstreamfetches,signed,signspersisted),andsostorestheit. The flags follow that path: readOnlyHint false. When to use: Call this on each resultyouthatintendyoutowill cite, beforequotingyou quote the number. Quote the one-linereading;reading.theThe bodymakesletsitacheckablereader check it, and emem_echo_verify grades what you emit against it.AnWhenoversizea body is too large, the answer says soinlineandnamesgives the URLservingthat serves itwhole.complete. Example arguments: {"id":"emem:fact:defi.zb493.xoso.zcb6a:cxjiu7l54ujzrpnekp24n4534yojpue4mprddbvevnqtti3lh5bq"}
Search emem's signed corpus andreturnget resultsshapedascitations:citations.eachEach entry is one signedfact,fact.withIt has an `id` to dereference, a `title`namingwith band, place andthesigned valueas signed, and a stable `url`servingthat serves those bytes.TakesThe query can be a place,or a question aboutoneone. ('NDVI near Mount Fuji': a topic word narrows the results,and neverfailsremovesthemall of them.),It can also be a cell64,oran `emem:cell:` handle, or an emem citation,(which returns the one fact itcites).cites.CappedThe list has a cap for thewire;wire.theThe first entry (index 0) names the cell and the TRUE total. On a cold cell,itthe tool MATERIALIZES a missing band first, as `emem_recall` does:fetcheditupstreamfetches,signed,signspersisted.andHencestores it. Thus readOnlyHint false. When to use: Call this first when a question is about a place and the answer mustbehavecitable:citations.itItturnschanges the question into a list of sources,eachandof`fetch`whichexpands`fetch`eachexpands.source. Foraonesynthesisedcombined answer in one call, useemem_ask instead.emem_ask. Example arguments: {"query":"Trafalgar Square, London"}
{"description":"A tagged union:`type` selects the intent and decides whichonOTHER`type`; fieldsare read. Fields belonging to aofdifferentotherintentintents areignored, so send only the ones its row needs.ignored.","properties":{"a":{"description": ⟨62 unchanged words⟩ whole-cell diff.","type":"string"},"bbox":{"type":"object"},"cell":{"description":"cell64 address, e.g. ⟨285 unchanged words⟩ other intents.","type":"string"},"end_date":{"description":"YYYY-MM-DD","type":"string"},"filter":{"description":"find_like only: optional ⟨128 unchanged words⟩ ,"value"],"type":"object"},"geometry":{"description":"area_over_time: GeoJSON Polygon; or bbox {min_lat,min_lng,max_lat,max_lng}.","type":"object"},"index":{"enum":["ndvi","ndwi"],"type":"string"},"k":{"description":"find_like only: how ⟨74 unchanged words⟩ "minimum":-180,"type":"number"},"max_scenes":{"maximum":24,"minimum":3,"type":"integer"},"place":{"description":"Free-text place name for ⟨24 unchanged words⟩ is present.","type":"string"},"start_date":{"description":"YYYY-MM-DD","type":"string"},"type":{"description":"Whichintent, and so which other fields are read:intent; the table inthis tool'sthe description gives each row'sneeded and optionalfields.`ask` runs locate, topic routing and recall server-side.","enum":["where_is","what_is_here","is_like","did_change","find_like","confirm","ask","area_over_time"],"type":"string"},"window": ⟨43 unchanged words⟩
Only numbers and dates differ: this server embeds live figures in the definition, so the text moves without the contract changing.
⟨68 unchanged words⟩ , YOU ARE SEEING A CURATED SUBSET OF114115, NOT THE WHOLE SURFACE; hosts strip `_meta`, ⟨87 unchanged words⟩
⟨44 unchanged words⟩ shape of the job, NOT about safety:4243 tools outside `write` declare `readOnlyHint: false` because ⟨327 unchanged words⟩
⟨646 unchanged words⟩ string"},"type":{"description":"Whichquestion you are askingintent, andthereforeso which other fieldsapply. where_is: name a place, get its cell64 (needs `description`).arewhat_is_hereread:summarise a location (needs `cell`, OR `place`/`description`thetotableresolveinitthisfirst).tool'sis_like:descriptionpairwisegivessimilarityeach(needsrow's`a`needed and`b`). did_change: did one band move over a time window (needs `cell`, `band`, `window`). find_like: nearest neighbours to a known cell (needs `key`;optional`k`, `filter`). confirm: is a claim true at a cell (needs `claim` and `cell`). ask: free-text question about afields.place,`ask` runs locate,+topictopic-routerouting+and recallserver-side (needs `description`; optional `place`/`cell`/`lat`+`lng` to pin the location).server-side.","enum":["where_is","what_is_here"," ⟨51 unchanged words⟩
⟨129 unchanged words⟩ know which bands exist there before recalling. `data_at_this_cell`carries `live_bands_by_topic`lists(every recallable band,groupedby topic (`live_bands_by_topic`),`algorithms_for_topic`the(recipesthat fusefusing theminto named scores(`algorithms_for_topic`), and`declared_but_no_materializer_at_this_responder`.bands with no materializer here. For one packaged answer in a single call ⟨7 unchanged words⟩
before
—after
{"anyOf":[{"required":["cell64"]},{"required":["status"]}],"properties":{"cell64":{"description":"Pass as `cell` to emem_recall.","type":"string"},"data_at_this_cell":{"type":"object"},"next":{"type":"array"},"place_label":{"type":["string","null"]},"selected":{"properties":{"confidence_reason":{"type":"string"},"is_high_confidence":{"type":"boolean"}},"type":"object"},"status":{"description":"needs_location: no place named.","type":"string"}},"required":["next"],"type":"object"}⟨81 unchanged words⟩ scalar quote `value_verbatim`, the exact decimal stringthe factit was signedas: re-typing the JSON number is where measured precisionas.isAlost.null `value`andor `unit`are always present, and an explicit nullmeans the factgenuinelyhas none (an`absence` has noabsence;value;amostdimensionless indexbands are dimensionless)rather,thannot 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 ⟨17 unchanged words⟩
before
—after
{"properties":{"band":{"type":"string"},"canonical_token":{"type":"string"},"cell":{"type":"string"},"fact_cid":{"type":"string"},"fact_url":{"type":"string"},"kind":{"type":"string"},"receipt":{"type":"object"},"unit":{"type":["string","null"]},"value":{"description":"Scalars; a vector is in the text's fact.value.","type":["number","string","boolean","null"]},"value_verbatim":{"type":"string"}},"required":["canonical_token","cell","fact_cid","band","kind","receipt"],"type":"object"}⟨191 unchanged words⟩ `valid: false`, never a 4xx. The examplearguments(fromareemem_tools) is a real receiptthis respondersigned(key epoch 0)over twofacts atTrafalgar Square(the two `fact_cids`)facts:run itunchangedand `valid`it istrue;`valid`; change any byte and it is not. Example ⟨34 unchanged words⟩
⟨33 unchanged words⟩ stable `url` serving those bytes. Takes a place,nameor 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 citationhandle(a handlewhich returns the one fact it cites). Capped ⟨83 unchanged words⟩
{"properties":{"query":{"description":"A place,('TrafalgaraSquare,questionLondon')about one, a cell64,oranememcitation (`emem:fact:<cell64>cell:<fact_cid>`).A citation returns the one fact it citeshandle,so a result handed over by anotheroragentanresolvesemem:fact:exactly.citation.","type":"string"}},"required": ⟨3 unchanged words⟩
⟨54 unchanged words⟩ string"},"include":{"description":"Opt-inheavyRESTresponseenvelope sections.Default response is slim (~5 KB): answer + algorithm key + fact_cids +`reasoning`caveats.dropsName`algorithms_for_question`;specificaddsections`algorithms` toinclude them.keepIgnoredit.whenTheverbose=trueMCP(whichprojectionincludesignoreseverything).these.","items":{"enum":["band_observations","algorithm_outcomes","facts_full","temporal_composition","foundation_embeddingsscene","sceneinventory","inventoryreasoning","algorithms"],"type":"string"},"type":" ⟨165 unchanged words⟩ busy or down rather than silently substituted. Cosmosdeliberatesisandrefusedtypicallywhiletakesits13-22hosts.has no GPU.","type":"string"},"place":{ ⟨67 unchanged words⟩ "verbose":{"default":false,"description":"When true, return the fullRESTenvelopeonly:per-algorithm formulatruestrings,addstemporal_recipeper-algorithmblocksformulas,per-fact band_metadatabandduplicates,metadata andthelong_explanationprose.DefaultThe(sinceMCP2026-05-05)projection isfalse so the response fitssmallMCP's(about257 KBcap; the signed receipt + fact CIDs + algorithm keys + algorithms_cid are always retained. Pass true)toeithergetway; thefullRESTbodyenvelopewhenisdebugging.larger.","type":"boolean"}},"required": ⟨3 unchanged words⟩
⟨4 unchanged words⟩ "answer":{"description":"The prose answer.The same text isAlso in the content block, whichalsocarries the MCP projection; POST /v1/ask has the full envelope.","type":"string"},"cell ⟨256 unchanged words⟩ },"f":{"description":"Index intothe fact_cids array`receipt.fact_cids`in(orthistheresult'slisttext`_projection.fact_cids_at`block.names). Dereference itto getfor the signed bytes.","type":"integer"} ⟨78 unchanged words⟩
{"properties":{"attester":{"description":"ed25519 binding, verified. Omit it and the refusal's details.how_to_sign gives the digest to sign.","properties":{"pubkey_b32":{"type":"string"},"sig_b32":{"type":"string"}},"required":["pubkey_b32","sig_b32"],"type":"object"},"cell":{"description":"cell64 to anchor the ⟨168 unchanged words⟩
⟨10 unchanged words⟩ this object.","type":"string"},"attester":{"description":"ed25519 binding, verified. Omit it and the refusal's details.how_to_sign gives the digest to sign.","properties":{"pubkey_b32":{"type":"string"},"sig_b32":{"type":"string"}},"required":["pubkey_b32","sig_b32"],"type":"object"},"entity_cid":{"description":"The canonical object to ⟨84 unchanged words⟩
k-NN over the corpus by cell embedding or inline vector. Returns`neighbours``neighbors` ordered nearest-first, each with`cell64``cell`, `score`and,the`lat`/`lng``band`andscanned`band_used`, plus a signed receipt over the vectors ⟨134 unchanged words⟩ 2017–2025) fusion. Example arguments: {"key":"damO.zb000.xUti.zde78defi.zb64a.cAzU.zfa27","k":10}
⟨52 unchanged words⟩ 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, ⟨6 unchanged words⟩ the actionable half: refresh_token, remove_reference, contact_admin,cite_observation.cite_observation, correct_value. GEO_ZONE and redact_and_retry come only from a self-hosted guard. ADVISORY: nothing is blocked, and a citation ⟨143 unchanged words⟩
⟨292 unchanged words⟩ : {"type":"did_change","cell":"damO.zb000.xUti.zde78defi.zb64a.cAzU.zfa27","band":"indices.ndvi","window":[20245,20620]}
⟨101 unchanged words⟩ :{"description":"cell64 address, e.g. \"damO.zb000.xUti.zde78\defi.zb64a.cAzU.zfa27\". Required by did_change and confirm. Optional for ⟨692 unchanged words⟩
⟨224 unchanged words⟩ materializer here. Example arguments: {"cell":"damO.zb000.xUti.zde78defi.zb64a.cAzU.zfa27","bands":["weather.temperature_2m","copdem30m.elevation_mean"]}
⟨143 unchanged words⟩ cell":{"description":"cell64 string, e.g.'damO.zb000.xUti.zde78''defi.zb64a.cAzU.zfa27'","maxLength":23,"minLength":19,"pattern ⟨391 unchanged words⟩
⟨203 unchanged words⟩ this responder signed (key epoch 0) overone weathertwofactfacts at Trafalgar Square (the two `fact_cids`): run it unchanged and `valid` is true; ⟨42 unchanged words⟩
⟨55 unchanged words⟩ it cites). Capped for the wire; thefinalfirst entry (index 0) names the cell and the TRUE total. On ⟨67 unchanged words⟩
{"properties":{"results":{"description":"One entry per signed fact,TheplusFIRSTaentryfinal(indexentry0)foris the cell itself, carrying the true total, so a capped list still says how much therewas.was; after it, one entry per signed fact.","items":{"properties":{"id": ⟨50 unchanged words⟩
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":falsetrue,"readOnlyHint":true,"title":"Resolve a ⟨9 unchanged words⟩
{"destructiveHint":false,"idempotentHint":truefalse,"openWorldHint":true,"readOnlyHint":false,"title":"Intent-routed planner"}
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":falsetrue,"readOnlyHint":true,"title":"Resolve place ⟨5 unchanged words⟩
{"destructiveHint":false,"idempotentHint":falsetrue,"openWorldHint":true,"readOnlyHint":false,"title" ⟨6 unchanged words⟩
Only numbers and dates differ: this server embeds live figures in the definition, so the text moves without the contract changing.
⟨44 unchanged words⟩ shape of the job, NOT about safety:1642 tools outside `write` declare `readOnlyHint: false` because ⟨327 unchanged words⟩
Only numbers and dates differ: this server embeds live figures in the definition, so the text moves without the contract changing.
⟨68 unchanged words⟩ , YOU ARE SEEING A CURATED SUBSET OF110115, NOT THE WHOLE SURFACE; hosts strip `_meta`, ⟨87 unchanged words⟩
⟨75 unchanged words⟩ cell it MATERIALIZES a missing band first,through the same wrapperas `emem_recall`:the responder fetchesdoes:thefetched upstreamvalue,signs it and persists itsigned,so the corpus grows on demand here exactly as it does there. That ispersisted.whyHence readOnlyHintis false and openWorldHint is true.false. When to use: Call first when a ⟨41 unchanged words⟩
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":falsetrue,"readOnlyHint":truefalse,"title":"Open one search result and ⟨4 unchanged words⟩
⟨64 unchanged words⟩ entry names the cell and the TRUE total. On a cold cell it MATERIALIZES a missing band first, through the same wrapper as `emem_recall`: the responder fetches the upstream value, signs it and persists it, so the corpus grows on demand here exactly as it does there. That is why readOnlyHint is false and openWorldHint is true. When to use: Call first when a ⟨41 unchanged words⟩
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":truefalse,"title":"Find signed facts for a ⟨4 unchanged words⟩
⟨17 unchanged words⟩ "description":"Alias for `cell_prefix`, and thenamespelling theotherrestsixoftoolsthethatsurfacetakeusesaforcell64ause.cell64. Send a cell64 you already hold and the ⟨253 unchanged words⟩
Only numbers and dates differ: this server embeds live figures in the definition, so the text moves without the contract changing.
⟨44 unchanged words⟩ shape of the job, NOT about safety:1314 tools outside `write` declare `readOnlyHint: false` because ⟨327 unchanged words⟩
⟨225 unchanged words⟩ byte and it is not. Example arguments:{"receipt":{"cells":["defi.zb64a.cAzU.zfa27"],"cost":{"credits":0,"latency_p50_ms":1,"latency_p99_ms":20,"source_freshness_s":2014090,"was_cached":true},"fact_cids":["gn5praqrpnpszg3hiaf5dv4ox67dls73ivir7ladvr25sm7f3aka","ghctissil7k4si3g57fwtxxrk4fb56crujz2xictxzqj2zos3olq"],"merkle_proof":{"leaf_index":0,"path":[],"root":[12,67,60,231,210,105,254,175,126,230,209,51,182,142,45,47,209,102,110,233,215,185,156,142,190,238,189,208,49,152,196,21],"version":1},"preimage_version":2,"primitive":"emem.recall","registry_cid":"3pbqnyninz6xqll2ynjlh4djlppcp2mdcdmzeq4otebnli5ndzaa","request_id":"01M2GBYPN79QVNBAF7QF4GJVM6","responder":[255,254,72,239,8,57,144,88,50,189,59,5,171,89,152,150,76,49,228,100,142,79,43,250,36,191,48,224,42,206,101,84],"responder_key_epoch":0,"responder_pubkey_b32":"777er3yihgifqmv5hmc2wwmyszgddzderzhsx6rex4yoakwomvka","schema_cid":"d24rgwlq47a5ism5vkkbiuav3wi2voewqqgy4x4ttnhdnzziyfkq","served_at":"2026-09-14T16:28:10Z","signature":[39,191,224,161,96,20,92,102,97,108,62,36,155,155,93,54,153,176,171,68,0,253,83,250,0,0,73,242,5,64,219,119,169,93,240,155,44,111,251,184,102,101,226,155,214,54,125,24,186,145,1,174,13,24,74,68,124,247,24,172,143,154,150,10],"signature_b32":"e676bilacrogmylmhysjxg25g2m3bk2ead6vh6qaabe7ebka3n32sxpqtmwg765ymzs6fg6wgz6rrouragxa2gckir6pogfmr6njmcq"1602 bytes,"source_versions":too long to inline in a listing. Call `emem_tools` with `{"bands_cid":"mesoyti3qcs22pftcq27ljwcf3ifktnkqid4euqxyskhea5rpgra","registry_cid":"3pbqnyninz6xqll2ynjlh4djlppcp2mdcdmzeq4otebnli5ndzaa","schema_cid":"d24rgwlq47a5ism5vkkbiuav3wi2voewqqgy4x4ttnhdnzziyfkq","sources_cidname": "xu646y24wvuegd33m2mrpasxefqgdq3ow5ploezijer6trzuwe3aemem_verify_receipt"}}}` for it whole and runnable; it is not shortened here because a truncated example is not one.
⟨188 unchanged words⟩ turn. When to use: Call when theuser'squestion mapscleanlyonto one of the seven rows above and you would rather state the goal than pick a primitive.Reach past it forOtherwiseanythinggoelsedirect: aspecificband at a cell is emem_recall, a region is emem_recall_polygon,anda free-text place questionwith no obvious primitiveis emem_askdirectly(type:"ask"here justforwards to it). `window` takes tslots, not dates: getvalid onesthem fromemem_trajectory first.emem_trajectory. A toolthis routernamednameshere but`tools/list` doesabsentnotfromshow`tools/list` isNOTnot a dead end: every one of the 110 dispatches by name at `/mcp` and`/mcp/full`, so call `emem_trajectory` or `emem_recall_polygon` directly.`/mcp/full`;Thethe core list is 18 to keep theper-requestcatalog small,not to fence the rest off;and `emem_tools` enumeratesthem.the rest. Example arguments: {"type":"did_change"," ⟨7 unchanged words⟩
⟨104 unchanged words⟩ else rather than erroring. When to use:UseCallwheneverwhen the inputrefers tonames a real-worldlocationplace and the next step needstheits cell64identifier, or wants to know which bandsareexistavailablethere before recalling.The response carries`data_at_this_cell`with three sub-fields:carries `live_bands_by_topic` (everybandrecallablehereband, grouped by topicsuch as flood_water_event_window, vegetation_condition, built_up_human_geography), `algorithms_for_topic` (compositionrecipes that fusethose bandsthem into named scores),and`declared_but_no_materializer_at_this_responder` (cube slots reserved without a live connector).`declared_but_no_materializer_at_this_responder`. Forthe single-shot path that runs the full chainoneserver-sidepackagedandanswerreturnsinoneapackagedsingleanswercall, use`emem_ask` instead.`emem_ask`. Example arguments: {"place":"Mount Everest"}
⟨139 unchanged words⟩ or materializes. When to use: Call after `emem_locate`,(or with a known cell64).or place name. Returns every Primary factstoredat that (cell, band, tslot).IMPORTANT:Ififatherequestedcellband has no fact yetfor a requested band AND that bandbut has`has_materializer=true` (per `emem_coverage_matrix` /a`emem_materializers`)materializer, the responder fetches the upstream value, signs itunder its identity, persists it,and returns it in the sameresponse (slower on the firstcallwhile the upstream is fetched; fast(slow once, cached).Soafter),forso any wired bandyou canrecallsrecallatANYany cell on Earthwithout seeding, just: pass `bands: [<band>]`.The response carries`materialize_notes`listinglists what was justfetched. Emptyfetched;resultempty with no notes meansthe band hasno materializerat this responder.here. Example arguments: {"cell":"damO.zb000.xUti.zde78"," ⟨3 unchanged words⟩
⟨7 unchanged words⟩ the only tool you need to find therest. Returnsrest: the working loop in the order you walk it (namea thing, groundit, citeit, resolveit, verifyit, check for drift), then every other ⟨7 unchanged words⟩ , each with its one-line trigger. Pass `name`to getfor one tool's fullinputschema and a runnableexample, so you can use a tool without loading all of the descriptors into context.example. IF YOU ARE READING A LIST OF 18 ⟨5 unchanged words⟩ CURATED SUBSET OF 110, NOT THE WHOLESURFACE. The count is served in tools/list `_meta` and `_discovery`, and most MCPSURFACE; hosts stripnon-standard top-level fields before a model sees them`_meta`, soit is repeated HERE — a description istheone field every host passes through. The Earth-observation, search, embeddingcountandistransparency-logrepeatedtoolshere.areEvery cataloguedby thistooland every one of themstays callable by name through tools/call at either endpoint. When to use: CallthisFIRST when you do not know whichememtool answers the question, orwhen youneed a capabilityyou cannot seeabsentinfrom yourtool list. This responder advertises a small core loop by default rather than its full catalog, so a tool beinglist: absent fromyourthe listdoesis notmean it isabsent from the server.Pass`q`to searchsearches by topic (`ndvi`,`cloud`,`flood`, `verify`), `name`forreturns onetool'sexact schema,orno argumentsforreturns the whole map.If you/mcp/fullwantregisters the fullcatalog registered as callable tools instead, reconnect to the /mcp/fullcatalog;endpoint;emem_askforanswersainone-shotoneanswershot without picking aprimitive at all, use emem_ask.primitive. Example arguments: {"q":"ndvi"}
⟨7 unchanged words⟩ the canonical preimage under the rule the receipt'sOWNown `preimage_version` names(v2,current: tagged length-prefixed segments plus a segment binding the inclusion proof; v1: the same without that segment; absent/0: the legacy `request_id | served_at | primitive | cells, | fact_cids,` concatenation),runs ed25519 over the embeddedpubkeykey+and signature, and returns `{valid, reason, failure_detail, signature_valid, merkle_proof_valid, signer_pubkey_b32, preimage_blake3_hex}`. ARECEIPTreceiptISis BYTE-FOR-BYTE OR NOTHING: v2 binds theproof so it cannot be stripped ininclusiontransitproof,and the cost of that is thatso any reshaping— dropping(a dropped field,re-keyingait,re-keyedsummarisingone,ita—summary) invalidates the signature bydesign and looks exactly like tampering.design.UseFor when the in-browser /verify path isblocked (CDN offlineunavailable,agent runtime has no crypto)orwhen you wantfor a server-side audit of athird-party receipt. Memory algebra: the `verify`thirdoperationparty's(https://emem.dev/docs/model.html).receipt. When to use: Pass the receipt EXACTLY ⟨100 unchanged words⟩ 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. Example arguments: {"receipt":{"primitivecells":["recalldefi.zb64a.cAzU.zfa27"],"served_atcost":{"2026-05-14T12credits":000,"latency_p50_ms":00Z1,"latency_p99_ms":20,"request_idsource_freshness_s":2014090,"req-1was_cached":true},"cellsfact_cids":["damO.zb000.xUti.zde78gn5praqrpnpszg3hiaf5dv4ox67dls73ivir7ladvr25sm7f3aka","ghctissil7k4si3g57fwtxxrk4fb56crujz2xictxzqj2zos3olq"],"fact_cidsmerkle_proof":[{"qbq2dy7adyuvozs7s3gqg5jnpkcwq2duegltjyhbxsivuqbpjofqleaf_index":0,"path":[],"signatureroot":[12,67,60,231,210,105,254,175,126,230,209,51,182,142,45,47,209,102,110,233,215,185,156,142,190,238,189,208,49,152,196,21],"version":1},"preimage_version":2,3"primitive":"emem.recall","registry_cid":"3pbqnyninz6xqll2ynjlh4djlppcp2mdcdmzeq4otebnli5ndzaa","request_id":"01M2GBYPN79QVNBAF7QF4GJVM6","responder":[255,254,72,239,8,57,144,88,50,189,59,5,171,89,152,150,76,49,228,100,142,79,43,250,36,191,48,224,42,206,101,84],"responder_pubkeyresponder_key_epoch":0,"responder_pubkey_b32":"777er3yihgifqmv5hmc2wwmyszgddzderzhsx6rex4yoakwomvka","schema_cid":"d24rgwlq47a5ism5vkkbiuav3wi2voewqqgy4x4ttnhdnzziyfkq","served_at":"2026-09-14T16:28:10Z","signature":[439,191,224,161,96,20,92,102,97,108,62,36,155,155,93,54,153,176,171,68,0,253,83,250,0,0,73,242,5,664,219,119,169,93,240,155,44,111,251,184,102,101,226,155,214,54,125,24,186,145,1,174,13,24,74,68,124,247,24,172,143,154,150,10],"signature_b32":"e676bilacrogmylmhysjxg25g2m3bk2ead6vh6qaabe7ebka3n32sxpqtmwg765ymzs6fg6wgz6rrouragxa2gckir6pogfmr6njmcq","source_versions":{"bands_cid":"mesoyti3qcs22pftcq27ljwcf3ifktnkqid4euqxyskhea5rpgra","registry_cid":"3pbqnyninz6xqll2ynjlh4djlppcp2mdcdmzeq4otebnli5ndzaa","schema_cid":"d24rgwlq47a5ism5vkkbiuav3wi2voewqqgy4x4ttnhdnzziyfkq","sources_cid":"xu646y24wvuegd33m2mrpasxefqgdq3ow5ploezijer6trzuwe3a"}}}
⟨60 unchanged words⟩ ":"string"}},"type":"object"},"stance":{"description":"`asserts` (default): this phrasing denotes this object. `disputes`: it does not. Both are attributed to your key and recorded append-only; a dispute is shown beside the binding it answers and deletes nothing.","enum":["asserts","disputes"],"type":"string"}},"type":"object"}
ConvergeFindathefuzzyobjectsphrasingagentsontohavetheboundcanonicalaobjectphrasingotherto,agentsrankedalreadybymintedINDEPENDENT corroboration,sonevereveryonearrivalco-refersorder.toEachthecandidatesamecarriesidentity`asserted_by`,instead`disputed_by`,of`independent_attesters`re-mintinganddivergent`corroboration`ones.(`single_key`Pass|`text``multiple_independent_keys`(e.g.|"the`none_attributed`);collapsed`contested`spanisatsetthewhenford")moretothangetonerankedobjectexistingclaimscandidates;thepassname. `text` for candidates, `near` to narrowto abyplace;place, orpassan `emem:entity:` `token` todereference itdereference.directlyRead-only;toaliasthetextsignedisentityotherbody.agents'Read-only.data. When to use: Call BEFORE mintingwhenandanotherbeforeagentciting:mayresolvealreadyfirst,havemintregisteredonlytheifobjectnothing matches,orreadwhen`corroboration` before youreceivecite.aA`emem:entity:``single_key`tokenbindingandiswantonetheagent'sobjectclaimbehindaboutit.aThissharedisname;howiftwoyouagentscanavoidvouchreferentialfordrift:it,resolvecorroboratefirst,itmintwithonlyemem_entity_linkifsonothingthematches.next reader sees two keys. Example arguments: {"text":"the golden ⟨5 unchanged words⟩
⟨308 unchanged words⟩ The measured value, in the band's own units. `null` where the band was looked for and not found: an absence is a reading.","type":["number","string","boolean","null"]}},"required":["band","value"] ⟨42 unchanged words⟩
⟨71 unchanged words⟩ and echo the exact characters you will publish.","type":["string","number"]},"strict":{"description":"Require BYTE-IDENTICAL ⟨148 unchanged words⟩
⟨114 unchanged words⟩ refers to a THING and you want astablehandleto itthat survivessummarizationsummarisation and travels betweenagents/turns/LLMsagents, before it drifts into 'that infrastructure issue'. Anchor it with `place`,a`cell`, or`lat`+`lng`.`lat`+`lng`,Handthenthehandreturnedthe `emem:entity:` token to anyotherpeeragent;and they dereference theidenticalsameobject.object;Recall/askrecall atthe entity'sits`cell64`cell64 for signedfacts about it.facts. Pick therightsibling:`emem_entity`this one MINTS or returnsthean identityfor a thingyou cananchor to a place;anchor; `emem_entity_resolve`takes a fuzzy phrase andfindsan identityone someoneALREADYalready registered,so reach for it when you suspect the thing is known and you only havefromwordsaforfuzzyit;phrase; `emem_entity_link` assertsthattwo spellings youalreadyhold mean one object.Do NOT call thisNot for an observation,which(that is a factand belongs in: emem_recall or emem_memory_token,) anddonotcall it tofornamenaming a placeitself, which(that is emem_locate:).anAn entity is aTHINGthing AT aplace, not theplace. Example arguments: {"label":"Golden ⟨10 unchanged words⟩
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":falsetrue,"title":"k-NN over the corpus by embedding"}
⟨278 unchanged words⟩ a dead end: every one of the107110 dispatches by name at `/mcp` and `/mcp/full`, so call `emem_trajectory` or `emem_recall_polygon` directly. The core list is1618 to keep the per-request catalog small, not ⟨19 unchanged words⟩
⟨300 unchanged words⟩ fails the whole intent with `missing field value`.","type":["string","number","boolean","array","null"]},"window":{"description":"Test across ⟨172 unchanged words⟩ parser even for exists/absent, which ignore it.","type":["string","number","boolean","array","null"]},"window":{"description":"Test across ⟨300 unchanged words⟩
⟨100 unchanged words⟩ pass `include_same_attester_sources: true`. When to use: Callthis when trust mattersbefore you rely on a number,: 'is there disagreement about X', 'do the sources corroborate this', 'audit thisclaim', or 'find contradictory observations in region Y'. Use it to decide whether a fact is well-corroborated or contested.claim'. Narrow with `cell_prefix`(e.g. "defi.zb5")for a region and `band` for one family; `min_severity`filters outdrops 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 twodifferentproviders,and the default scope cannot report it. Each record names its`disagreement_scope` — `multi_attester` is two witnesses, `same_attester_provider_substitution` is one witness that changed instruments.`disagreement_scope`. The receipt cites every disputedCID, follow up with `emem_diff` tocid; quantify a pair,or (withthe refinement loop`emem_diff`,on)or read theemitted`disagrees_with` edge via `emem_edges_recall`. Example arguments: {" ⟨6 unchanged words⟩
⟨61 unchanged words⟩ ://emem.dev/docs/model.html). When to use: Call whenthe agent wantsyouawantsingleone rebindable string to cite a place plus an attested fact across messages, threads, agents,ortools, without re-fetching or re-describing it.tools. Pairwith `emem_verify_receipt` onitthewithreceiving`emem_echo_verify`endbeforetoyoucheckpublish thesigned payload. To cite an OBJECT rather than a single reading, use emem_entity's `emem:entity:` token.value. FOR MANY FACTS,USE emem_memory_bundle INSTEAD, and this isameasuredcostrather thana style preference. Measured over 131 scalar facts at 12 places across 57 bandsstylistic: a token is 83 to 84 characters and 51 LLM tokens,while thesignedvalue it points at averages10.911 characters and 5.4LLM tokens.,Soso Nindividualtokens costroughlyabout 9.5x theCONTEXTcontext ofsimplypasting the N numbers(7.7x by characters; the gap is BPE fragmenting a base32 cid,andLLM tokens arehit theunit that bills awindow),and an N-token prompt hits the context wall SOONER than the plain values would.sooner. A bundle is 38 charactersand 23 LLM tokensatANYany N up to 256 and resolves in one round trip: itbeats individual tokenswins from N=1 against tokens andbeatsfrompastingN=5 against the plainvalues from N>=5.values. Individual tokens are for citing ONE fact you mustbe able toverifylater; they are the wrong tool for carrying a set.later. Example arguments: {"cell":"defi.zb493.xoso.zcb6a","fact_cid":"cxjiu7l54ujzrpnekp24n4534yojpue4mprddbvevnqtti3lh5bq"}
⟨55 unchanged words⟩ ://emem.dev/docs/model.html). When to use: Call whenan agentyoureceiveshold a memory_token from another agent(orout of aanpreviousearlier turn)andwantswant the value behind it.ReadFor`value`aforscalar quote `value_verbatim`, thereadingexactanddecimal`unit`stringforthewhatfactitwas signed as: re-typing the JSON number is where measuredin;precisionbothis lost. `value` and `unit` are always present, and an explicit null means the fact genuinely has none (`kind:an"absence"``absence` has novalue, andvalue; most index bandsincluding NDVIare dimensionless) rather thanthat the field is missing. Forascalar, quote `value_verbatim` instead: it is the same number as the exact decimal string it was signed as, and re-typing a JSON number is where measured precision loss comesmissingfrom.field. The response also carries the parsed cell,+the fact_cid, the full`fact`signedbody,`fact` andthea stable `fact_url`an agent can handtoany other peer.hand404on.withAacidtypedthiscoderesponderifdoesthenotresponderholddoesn'tisholdathetypedcid;404: try /v1/fetchwith the cid then, orpaste the tokenresolve at a mirror. Example arguments: {"token" ⟨4 unchanged words⟩
Only numbers and dates differ: this server embeds live figures in the definition, so the text moves without the contract changing.
⟨81 unchanged words⟩ context. IF YOU ARE READING A LIST OF1618 TOOLS, YOU ARE SEEING A CURATED SUBSET OF108110, NOT THE WHOLE SURFACE. The count is ⟨177 unchanged words⟩
⟨145 unchanged words⟩ (https://emem.dev/docs/model.html). When to use: Passathe receiptobjectEXACTLY asreturned bythe read primitive,whole and unmodified (signature can be byte[] or sig_b32; pubkey can be byte[] orreturnedresponder_pubkey_b32it,thewholeverifierandtoleratesunmodified.thoseTwotwoomissionsspellingsproduceandanothingfalseelse).forgeryDorathernotthanomita`merkle_proof`400, anddo not reshape any field: under preimage_version 2 that returns `signature_valid: false` on data nobodytheytamperedarewith.theExactlyonly twoomissions reach this failure rather than aworth400memorising: dropping `merkle_proof`, and dropping `preimage_version` (whose absenceabsent deserialises to 0,andwhich silently selects the v0 rule, so theinclusionproof still walks while the signature reads asforgedinvalid).When this responder holdsSignaturetheandcitedpubkeyfactmayitbecanbytetellarraysreshapingorfrom`sig_b32`tampering/and`responder_pubkey_b32`;saysnosoother—spelling`reason:isreceipt_reshaped_after_signing`tolerated.withReshaping a`failure_detail` naming thefield,instead of `signature_invalid` — but it never accepts such athisreceipt,responderandcanancheckofflineisverifierreportedhasasno`reason:wayreceipt_reshaped_after_signing`towithmakethethatfielddistinctionnamed,atneverall.accepted. Optionallyoverrideset `pubkey_b32` to assertverification againsta specific signer.ReturnsA bad signature is 200 with `valid: false`when the signature fails, never4xx forastructurally-well-formed bad signature.4xx. Example arguments: {"receipt":{"primitive": ⟨19 unchanged words⟩