emem
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| EMEM_BIND | No | Bind address for the server (default: 0.0.0.0:5051) | 0.0.0.0:5051 |
| EMEM_DATA | No | Path to persistent storage directory (default: ./var/emem) | ./var/emem |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| completions | {} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| emem_entityA | 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 When to use: Call this when a conversation refers to a THING and you need a handle that travels between agents. Anchor it with Example arguments: {"label":"Golden Gate Bridge","kind":"bridge","place":"Golden Gate Bridge, San Francisco"} |
| emem_locateA | 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 When to use: Call this when the next step needs the cell64 of a named place, or the bands that exist there. Example arguments: {"place":"Mount Everest"} |
| emem_recallA | 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 When to use: Call this after Example arguments: {"cell":"defi.zb64a.cAzU.zfa27","bands":["weather.temperature_2m","copdem30m.elevation_mean"]} |
| emem_memory_tokenA | Make a citation handle, When to use: Call this when you need one string that cites a place and an attested fact across messages, agents or tools. Use Example arguments: {"cell":"defi.zb493.xoso.zcb6a","fact_cid":"cxjiu7l54ujzrpnekp24n4534yojpue4mprddbvevnqtti3lh5bq"} |
| emem_memory_token_resolveA | Read a When 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 Example arguments: {"token":"emem:fact:defi.zb493.xoso.zcb6a:cxjiu7l54ujzrpnekp24n4534yojpue4mprddbvevnqtti3lh5bq"} |
| emem_verify_receiptA | Verify a signed receipt on the server. The tool builds the canonical preimage again, under the rule that the receipt's When 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 Example arguments: 1602 bytes, too long to inline in a listing. Call |
| emem_memory_contradictionsA | 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 When to use: Call this before you rely on a number: 'do the sources agree on X', 'audit this claim'. Use Example arguments: {"cell_prefix":"damO","band":"indices.ndvi","min_severity":0.2} |
| emem_guard_verdictA | 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: When 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 Example arguments: {"texts":["Lusail ground sits at 2.6 m per emem:fact:defi.zb521.jawI.gOze:f3yr3urkrfwamlemwadulgth2qpw645vi6l6fhtuu4dy5o7onahq"]} |
| emem_toolsA | 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 When 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. Example arguments: {"q":"ndvi"} |
| emem_askA | Answer a free-text question about a real-world location in one call. Signed satellite, elevation, water and built-up receipts support the answer. The tool sends the place and the question through the locate, recall and algorithm chain on the server, and returns one packaged envelope. When to use: Call this when the question is about a specific place and the answer must carry its evidence. Send the question as Example arguments: {"q":"is this neighbourhood flood-prone for a flat purchase","place":"Ashok Nagar, Ranchi"} |
| searchA | Search emem's signed corpus and get results as citations. Each entry is one signed fact. It has an When 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 Example arguments: {"query":"Trafalgar Square, London"} |
| fetchA | Dereference an id from When 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. Example arguments: {"id":"emem:fact:defi.zb493.xoso.zcb6a:cxjiu7l54ujzrpnekp24n4534yojpue4mprddbvevnqtti3lh5bq"} |
| emem_echo_verifyA | Grade a value that you will emit against the signed fact that your citation cites. The tool returns When to use: Call this immediately before you publish, log or pass on a value from an emem fact. Treat a false Example arguments: {"token":"emem:fact:defi.zb572.xoso.zb1ec:4qj3l4mgh7ch5kvxmkqspjdl6y42oqhm42khh3gostccpixkbz5q","claimed_value":"-0.0522"} |
| emem_memory_bundleA | 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 When 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 Example arguments: {"triples":[{"cell":"defi.zb4d9.pefa.zf619","band":"copdem30m.elevation_mean"},{"cell":"defi.zb493.xoso.zcb6a","band":"indices.ndvi"}],"purpose":"audit baseline 2026"} |
| emem_entity_resolveA | Find the objects that agents connected to a phrase. The tool ranks them by INDEPENDENT corroboration, never by arrival order. Each candidate has When to use: Call this BEFORE you mint and before you cite. Resolve first, and mint only if nothing matches. Read Example arguments: {"text":"the golden gate bridge","near":"San Francisco"} |
| emem_entity_linkA | Record a signed, ATTRIBUTED claim that a label or an external id (GERS, OSM, Wikidata) names an existing object. With When 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 Example arguments: {"entity_token":"emem:entity:0a1b2c3d4e5f60718293","alias":"the north dam"} |
| emem_find_similarA | Find the k nearest cells in the corpus by cell embedding or by an inline vector. The answer has When to use: Call this for 'find places like X' or 'where else looks like this', or with an embedding. Example arguments: {"key":"defi.zb64a.cAzU.zfa27","k":10} |
| emem_intentA | State what you want in one typed object and get the answer. You do not choose a primitive. type | needs | optional | answers where_is | description | | cell64 for a named place what_is_here | cell OR place | description | what is attested at a location is_like | a, b | | cosine similarity of two cells did_change | cell, band, window | | delta for one band over [start,end] tslots find_like | key | k, filter | nearest cells by embedding confirm | claim, cell | | verdict and the signed facts behind it ask | description | place/cell/lat+lng | free-text question, packaged answer area_over_time | geometry, bbox OR areas; start_date, end_date | index, max_scenes | index of an area for each overpass, with spread and anomaly An unknown or missing When 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). Example arguments: {"type":"did_change","cell":"defi.zb64a.cAzU.zfa27","band":"indices.ndvi","window":[20245,20620]} |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| shared_fact | Turn something you observed into a signed record with one address, so another agent reads the same bytes instead of your summary of them. The core loop: ground it, read it, mint a citation. |
| verify_claim | Someone handed you a number, a token, or an assertion. Find out whether it resolves, whether the signature holds, and whether anyone signed a different value at the same address, without trusting the party who gave it to you or this responder. |
| carry_state | Your context is ending, or the work is going to another agent. Collapse what matters into citations that survive the boundary, instead of a summary that loses the ability to be checked. |
| a2a_exchange | The agent-to-agent door: find peers, read your inbox, send a signed message, hand over a citation another agent resolves and verifies without trusting you. Answers with the concrete call sequence for the exchange you name. |
| flood_history | Long-term flood/inundation history at a place, classified from JRC Global Surface Water v1.4 (1984–2021). |
| air_quality_now | Current PM2.5 / PM10 / NO2 / O3 / SO2 / CO at a place, classified against WHO 2021 AQG ladder. |
| urban_heat | Urban-heat-island assessment from MODIS LST day/night and indices.urban_canopy_index, with cooling-potential note. |
| place_summary | Quick characterisation: landcover (ESA WorldCover), elevation (Cop-DEM), greenness (NDVI), current temperature. |
| compare_places | Cosine similarity over the geotessera 128-D embedding, with dominant-band rationale. |
| forest_loss | Hansen Global Forest Change v1.13 layers: tree cover 2000, year of loss (2001–2025), gain mask. |
| coastal_eutrophication | SDG 14.1.1a coastal-eutrophication first-pass: floating-algae index + chlorophyll proxy + turbidity + SST. |
| carbon_uptake_anomaly | GPP anomaly z-score from MOD17A2H trajectory (current 8-day vs same-DOY climatology). |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| agents.md | Full integration guide: REST + MCP setup for Claude Desktop/Code, Cursor, Cline, OpenAI GPT, plus tool reference and worked examples. |
| spec | Authoritative protocol spec: cell64, tslot, content-addressing, ed25519 receipts, lazy materialization, attestation merkle root. |
| arcade-protocol | How an agent joins the live arcade at emem.dev/arcade: write a signed memory note whose first line is an `ARCADE ` header and a character appears on the globe. No roster, no registration. Gives the envelope, paths, every header field, the act vocabulary, the addressed-message form /v1/channel/geo geolocates, and the write preimage to sign. Position is asserted by the writer; attribution is proven by the signature. |
| whitepaper | Architecture and math: 1792-D voxel layout, BLAKE3 fact CIDs, ed25519 attestation, agent-native invariants. |
| llms.txt | LLM-optimised summary: when to call which primitive, which bands answer which question, 30-second curl examples. |
| llms-full.txt | Long-form LLM-optimised guide: full band catalogue, every primitive with example payload, error catalogue. |
| agent_walkthroughs | Agent walkthroughs: end-to-end flows for flood-history, urban-heat, similarity, and trajectory questions. |
| temporal | Temporal model: Tempo (Static/Slow/Medium/Fast/UltraFast), tslot mapping, backfill semantics, history bounds. |
| materializers | Materializer playbook: how a band's upstream connector turns into a signed fact, error envelope, no-fallback rule. |
| agent.json | Discovery manifest: operator, surfaces, primitives, policies, what a host platform reads to wire emem in. |
| privacy | Privacy policy of the responder operator (Vortx AI). No PII collected from inbound MCP/REST requests. |
| terms | Terms of service of the responder operator. Apache-2.0 protocol; hosted-instance terms. |
| signed fact card | An MCP Apps view for a signed fact: the value as it was signed, its content address, the signing key, and the two ways to check it that do not require trusting the card or the agent showing it. It deliberately does not render a verification tick, because a tick drawn by the responder is a picture of verification rather than the thing. |
| agent.roster | Every attester this responder has seen sign something, with what they signed. This is how you find peers to hand work to. An entry is a claim about a KEY, not about a party: what binds an agent to its words is that its writes verify under that key, which you check yourself. |
| registry.bands | Full bands manifest keyed by family/topic with units, value_range, interpretation, and per-band dimensions. |
| registry.algorithms | Algorithm registry: formula text, inputs, evaluation AST, accuracy_band, temporal_recipe, citations. |
| registry.sources | Upstream source registry: connector wiring, license, attribution, revisit cadence per source. |
| registry.topics | Topic taxonomy: which bands/algorithms answer which natural-language question. |
| registry.functions | Function registry: per-band recipes that turn raw upstream sources into one signed fact. |
| registry.schema | Active CDDL/JSON schema bundle, describes Receipt, Fact, RecallResp shapes on the wire. |
| corpus.state_stats | Signed snapshot of corpus liveness: distinct_cells, distinct_bands, facts_scanned, top per-band counts. |
TDQS
Scored across 18 tools
The set has several overlapping read paths: emem_ask, emem_intent, search/fetch, emem_recall and emem_locate can all answer place questions, while verify_receipt, echo_verify and guard_verdict form a related verification cluster. The descriptions explicitly distinguish sibling tools, but an agent still has to read carefully to avoid misselection.
Most tools use an emem_ prefix, but search and fetch are generic unprefixed names, and the set mixes verb-style names (locate, recall, ask, verify) with noun-style names (memory_token, memory_bundle, entity, intent, tools). The convention is readable but not predictable throughout.
At 18 tools this is in the borderline-heavy range for the rubric, and the broad geospatial/memory domain makes some breadth reasonable. However, multiple tools provide layered alternatives for similar outcomes, so the count feels somewhat heavier than necessary.
The core lifecycle is well covered: locate, recall, search/fetch, cite, resolve, verify, guard, contradictions, entities, bundles and similarity search. There are still gaps such as polygon recall, trajectory, diff and edge-recall tools referenced in descriptions, though emem_tools and emem_intent provide partial workarounds.