
emem, the verifiable memory protocol for the physical world
Every location on Earth gets a 64-bit cell identifier and a cryptographically signed answer for elevation, land cover, climate, or one of 46 remote sensing bands. Ask for a fact at a cell and emem fetches the tile, signs it with ed25519, persists it, and returns a content-addressed receipt you can verify at /verify without trusting the server. The MCP interface exposes locate, recall_bands, memory_create, memory_search, and memory_contradictions. Cold reads take 180ms, warm reads under 10ms, no API keys required. Four foundation models (Clay, Prithvi, Tessera, Galileo) run server-side for consensus scoring on deforestation, wetland change, and disaster anomaly. Reach for this when your agent needs a stable, auditable handle for real-world coordinates instead of hallucinating numbers.
- GitHub stars
- 89
- tools
- 18
- transport
- HTTP
- env vars
- 5
- last updated
- Nov 7, 2026
Install
From registry metadata$ npx add-mcp https://emem.dev/mcp --name ememRun in your terminal. add-mcp asks which agents to add it to (Claude Code, Codex, Cursor and more). Add -g to install it for every project.
Review the command, arguments and environment values before installing. MCP servers run with your local permissions.
Other ways
Claude Code
$ claude mcp add --transport http emem https://emem.dev/mcpRun in your terminal. Add --scope user to make it available in every project.
Tools
Verified live · 18 toolsVerified live against the running server on Nov 6, 2026.
emem_entityGive 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 th...9 params
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 th...
attesterobjectcellstringexternal_idsobjectkindstringlabel*stringlatnumberlngnumberparentstringplacestringemem_locateGet 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) ins...6 params
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) ins...
latnumberlngnumbernamestringplacestringqstringquerystringemem_recallRead 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 by...14 params
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 by...
as_of_signed_atstringas_of_tslotintegerbandstringbandsarraycell*stringcell64stringdeterministicbooleanincludearraylatnumberlngnumberplacestringprovenancearrayscopeobjecttslotintegeremem_memory_tokenMake 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...4 params
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...
bandstringcell*stringfact_cid*stringobserved_onstringemem_memory_token_resolveRead 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 alg...1 params
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 alg...
token*stringemem_verify_receiptVerify 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_val...4 params
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_val...
current_responder_epochintegerfactsarraypubkey_b32stringreceipt*objectemem_memory_contradictionsFind 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 doe...9 params
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 doe...
bandstringcellstringcell64stringcell_prefixstringinclude_same_attester_sourcesbooleanlimitintegermin_severitynumberresume_afterstringwindow_unix_sarrayemem_guard_verdictRun 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=...4 params
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=...
agentstringclaim_gatingbooleanshapestringnative · mcp · openai · cloudevent · policydefault: nativetextsarrayemem_toolsThe 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 sc...6 params
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 sc...
bundlestringtokenisation · verification · agent_to_agent · long_horizon · robotics · satellitescategorystringread · write · verify · introspect · plannamestringqstringshapestringscalar · timeseries · raster · geometry · vector · identitytierstringcore · extended · allemem_askAnswer 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 en...11 params
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 en...
cellstringincludearrayinclude_imagebooleanlatnumberlngnumbermodelstringplacestringq*stringquerystringquestionstringverbosebooleansearchSearch 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...1 params
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...
query*stringfetchDereference 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 valu...1 params
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 valu...
id*stringemem_echo_verifyGrade 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...3 params
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...
claimed_value*string | numberstrictbooleantoken*stringemem_memory_bundleCombine 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`...4 params
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`...
fact_cidsarraypurposestringscopeobjecttriplesarrayemem_entity_resolveFind 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_attrib...5 params
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_attrib...
kintegerlabelstringnearstringtextstringtokenstringemem_entity_linkRecord 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...6 params
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...
aliasstringattesterobjectentity_cidstringentity_tokenstringexternal_idsobjectstancestringasserts · disputesemem_find_similarFind 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. ham...10 params
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. ham...
as_of_signed_atstringas_of_tslotintegerbandstringcellstringcell64stringfilterobjectkintegerkey*stringmodestringcosine · hamming · hamming_then_rerankdefault: cosinescopeobjectemem_intentState 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. type | needs |...21 params
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. type | needs |...
astringareasarraybstringbandstringbboxobjectcellstringclaimobjectdescriptionstringend_datestringfilterobjectgeometryobjectindexstringndvi · ndwi · ndmi · lswi · evi · nbrkintegerkeystringlatnumberlngnumbermax_scenesintegerplacestringstart_datestringtype*stringwhere_is · what_is_here · is_like · did_change · find_like · confirm+1 more parameters. See the server's own documentation for the full schema.
Sponsors
Configuration
PORTPaaS port convention: the container entrypoint binds 0.0.0.0:$PORT when EMEM_BIND is not set explicitly. Falls back to 5051.
EMEM_BINDdefault: 0.0.0.0:5051Bind address for the HTTP server. When unset, the entrypoint derives it from PORT, falling back to 0.0.0.0:5051.
EMEM_DATAdefault: /var/ememPath to the persistent data directory (sled cache + ed25519 identity). Mount a volume here; on managed platforms that mount /data, set EMEM_DATA=/data.
EMEM_PUBLIC_URLOptional canonical origin for self-referencing URLs in MCP responses (e.g. https://emem.dev). When unset the server falls back to urn:emem.
EMEM_TLS_DOMAINSComma-separated hostnames for built-in Let's Encrypt ACME (TLS-ALPN-01). When set, the server binds 0.0.0.0:443 instead of EMEM_BIND.
Readme
The epistemic settlement memory layer for AI.
When agents, people and machines disagree about the world, emem settles what was observed, by whom, when and how. Every record is signed, has a content id, and anyone can check it offline.
Try it, no key · Start here · Quickstart · A worked example · Verify a token · Agent guide · Docs
Details
- Repository
- github.com/vortx-ai/emem
- Website
- emem.dev
- Categories
- AI & LLM Tools, Data & Analytics
- Package
ghcr.io/vortx-ai/emem:latest- Transport
- HTTP
- Registry
- MCP registry, active
- Resources
- 21
- Prompts
- 12
- Tools verified
- Nov 6, 2026