vortx-ai avatar

emem, the verifiable memory protocol for the physical world

vortx-ai/emem

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 emem

Run 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/mcp

Run in your terminal. Add --scope user to make it available in every project.

Tools

Verified live · 18 tools

Verified 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...

Parameters* required
attesterobject
ed25519 binding, verified. Omit it and the refusal's details.how_to_sign gives the digest to sign.
cellstring
cell64 to anchor the object directly (no geocode).
external_idsobject
Stable ids that drive convergence. Caller-supplied values win over geocoder-derived ones.
kindstring
Object class: bridge, river, farm_plot, building, admin_division, place, custom, ... Defaults to "place".
label*string
Human name of the object, e.g. "Golden Gate Bridge", "the north dam". Required.
latnumber
Latitude anchoring the object to a place, paired with lng. The identity is hashed from this anchor, so two agents anchoring the same object differently mint different entities.
lngnumber
Longitude, paired with lat.
parentstring
Optional parent entity_cid (containment).
placestring
Free-text place to anchor the object (geocoded). Provide place OR cell OR lat+lng.
emem_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...

Parameters* required
latnumber
WGS-84 latitude in degrees, paired with `lng`. REQUIRED with `lng` unless `place`/`q` is provided.
lngnumber
WGS-84 longitude in degrees, paired with `lat`. REQUIRED with `lat` unless `place`/`q` is provided.
namestring
Alias for `place`.
placestring
Free-text place name (e.g. 'Mount Everest', 'Tokyo'). REQUIRED unless `lat`+`lng` is provided. Aliases also accepted: `q`, `query`, `name`.
qstring
Alias for `place`, accepted because OSM/Mapbox/Google Geocoding all use `q`. Provide either this or `place` (or `lat`+`lng`).
querystring
Alias for `place`.
emem_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...

Parameters* required
as_of_signed_atstring
Bi-temporal transaction-time bound. RFC 3339 string. Returns only facts whose `signed_at` ≤ as_of_signed_at, answers `what did emem KNOW as of system-date Y`. Malformed strings are rejected with co...
as_of_tslotinteger
Bi-temporal valid-time bound. Returns the latest fact per (cell,band) whose tslot ≤ as_of_tslot, answers `what did this place look like AS OF date X`. Conflicts with an explicit `tslot` when as_of_...
bandstring
optional single band key, convenience alias for bands:[band]. Use when you want exactly one band (e.g. 'geotessera.2020', 'modis.ndvi_mean') and would otherwise have to wrap it in an array. Both `b...
bandsarray
optional band keys to filter, e.g. ['indices.ndvi','geotessera']
cell*string
cell64 string, e.g. 'defi.zb64a.cAzU.zfa27'
cell64string
Alias for `cell`.
deterministicboolean
Sugar over `provenance`: true keeps only facts any third party can recompute from the cited raw source (direct_sensor + deterministic_index); false keeps the rest (attested_execution + model_output...
includearray
Opt-in response expansion. include:['provenance'] attaches each fact's tamper-provenance class, which is what `deterministic` and the `provenance` filter select ON: without it you can filter by cla...
latnumber
Explicit latitude, an alternative to `cell`; paired with `lng`.
lngnumber
Explicit longitude, paired with `lat`.
placestring
Free-text place name, an alternative to `cell`.
provenancearray
Tamper-provenance filter: return only facts whose band's provenance class is in this list. `attested_execution` is a device reading trusted through its verified OS execution trace and platform atte...
scopeobject
Optional multi-tenant scope {user_id, agent_id, run_id, org_id}. When at least one field is set, the recall is FILTERED to facts written under the same four-tuple (a recall scoped to {user_id:'u1'}...
tslotinteger
optional time slot (band-tempo-relative integer offset from emem epoch)
emem_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...

Parameters* required
bandstring
Optional band key. When set, the minted citation carries the band's tamper-provenance block (class, deterministic, tamper_evidence, trust_rank) so the receiving agent sees the trust class without a...
cell*string
cell64, neither component may contain `:`.
fact_cid*string
52-char base32-nopad-lowercase content-id of the fact (full 32-byte blake3).
observed_onstring
The fact's source capture date (YYYY-MM-DD) as `/v1/recall` reports it in `sources[].captured_at`. Supplied together with `band` it additionally mints the self-describing `descriptor_token`. A wron...
emem_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...

Parameters* required
token*string
A `emem:fact:<cell64>:<fact_cid>` citation handle to dereference.
emem_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...

Parameters* required
current_responder_epochinteger
The responder key epoch you currently trust, from `/v1/manifests`. Produces an advisory `key_epoch_advisory` comparison against the receipt's epoch; a mismatch is reported, never rejected.
factsarray
The fact value(s) you intend to rely on. Each is content-addressed and checked for membership in the receipt's `fact_cids`, so a genuine receipt presented beside a tampered fact answers `valid:fals...
pubkey_b32string
Optional explicit responder pubkey (base32). When omitted, uses the receipt's embedded pubkey/responder fields.
receipt*object
The signed receipt envelope, the object under `receipt` in any read primitive's result. Must carry primitive/served_at/request_id/cells/fact_cids and either `signature` byte[] + `responder_pubkey`...
emem_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...

Parameters* required
bandstring
Band key filter (e.g. `indices.ndvi`). Omit to include all bands.
cellstring
Alias for `cell_prefix`, and the spelling the rest of the surface uses for a cell64. Send a cell64 you already hold and the scan narrows to that place instead of running over the corpus.
cell64string
Alias for `cell_prefix`.
cell_prefixstring
A cell64 to scan, or a bytewise prefix of one (e.g. `defi.zb5f9`). Omit to scan the whole corpus up to the scan cap. A full cell64 is a prefix of itself, so passing one narrows the scan to exactly...
include_same_attester_sourcesboolean
Default true: also report keys where ONE attester answered from two upstreams (a changed `derivation.fn_key` or `sources[].scheme` set). A re-signed provider is a refresh and stays out. Each record...default: true
limitinteger
Max contradictions to return.default: 100
min_severitynumber
Severity floor in [0, 1]. 0 = report every disagreement, 1 = only flagrant. Severity scoring is per band kind: scalar (max-min over band range), vector (1 - mean cosine), categorical (1 - mode share).default: 0.1
resume_afterstring
The `resume_after` of a scan that stopped at its time budget. The scan continues from the next key.
window_unix_sarray
[lo, hi] inclusive Unix-seconds filter on attestations' signed_at, all disagreeing attestations must fall in the window.
emem_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=...

Parameters* required
agentstring
Optional free-text label for who is asking. Advisory only, never a trust boundary.
claim_gatingboolean
Also flag measurable physical-world claims that carry NO citation (deny code CLAIM_UNGROUNDED, fix cite_observation). Off by default: it reports on the absence of a citation rather than on a failed...default: false
shapestring
Which envelope YOUR payload is in, so you never have to reshape it to ask the question: send the body your own framework produced and name its shape. native reads `texts`; `mcp` reads a JSON-RPC to...one of native · mcp · openai · cloudevent · policydefault: native
textsarray
Free text to check, and the only input this tool needs. Send just the pieces the question is about: a draft answer, a tool result, one turn. Do not send surrounding conversation, because nothing he...
emem_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...

Parameters* required
bundlestring
Filter by the job you are doing. Call with no arguments first to see each bundle and its size.one of tokenisation · verification · agent_to_agent · long_horizon · robotics · satellites
categorystring
Filter to one category. This is about the shape of the job, NOT about safety: 43 tools outside `write` declare `readOnlyHint: false` because reading a cold address can materialise or mint as a side...one of read · write · verify · introspect · plan
namestring
Return the full descriptor for exactly this tool (input schema, runnable example, annotations), e.g. `emem_ndvi`. Use this when you already know the name and want its schema without loading the who...
qstring
Free-text filter over tool names, titles and trigger text, e.g. `ndvi`, `cloud`, `flood`, `verify`, `token`. Plain lowercased substring over name + title + description + trigger text, not fuzzy and...
shapestring
Filter by what the answer looks like, which is usually the real question. `scalar` is one number at one address; `raster` is a gridded field over an area; `timeseries` is a value per timestep; `vec...one of scalar · timeseries · raster · geometry · vector · identity
tierstring
Which slice to list. Defaults to `all`, so this tool shows the whole surface even when the endpoint advertises only the core loop, and an `extended` tool you find here is callable by name through t...one of core · extended · all
emem_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...

Parameters* required
cellstring
cell64 string (alternative to `place`, use when you have one from a prior emem_locate / emem_recall response). Provide this OR `place` OR `lat`+`lng`.
includearray
Opt-in REST envelope sections. `reasoning` drops `algorithms_for_question`; add `algorithms` to keep it. The MCP projection ignores these.
include_imageboolean
Bundle a Sentinel-2 RGB scene URL for the resolved cell. Adds ~1-2 s on first call.default: false
latnumber
WGS-84 latitude (paired with `lng`; alternative to `place` / `cell`).
lngnumber
WGS-84 longitude (paired with `lat`).
modelstring
Optional. Compose an EXTRA prose answer with a named model, returned as `model_answer` beside the deterministic `answer`. It does not replace it: `answer` is synthesised from the structured fields...
placestring
Free-text place name (e.g. "Mount Fuji", "Ashok Nagar, Ranchi"). REQUIRED unless `cell` or `lat`+`lng` is provided. Extract the noun phrase from the user's turn; the responder geocodes via OSM Nomi...
q*string
User's natural-language question about the place (e.g. "is this neighbourhood flood-prone").
querystring
Alias for `q`.
questionstring
Alias for `q`.
verboseboolean
REST only: true adds per-algorithm formulas, band metadata and long prose. The MCP projection is small (about 7 KB) either way; the REST envelope is larger.default: false
searchSearch 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...

Parameters* required
query*string
A place, a question about one, a cell64 or emem:cell: handle, or an emem:fact: citation.
fetchDereference 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...

Parameters* required
id*string
An id from `search`: an `emem:fact:` citation, a bare fact_cid, or an `emem:cell:` handle for every fact at one cell.
emem_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...

Parameters* required
claimed_value*string | number
The value you are about to publish, as a string or a number. Send it as a STRING, character for character as you will emit it. A JSON number is stringified before the comparison, so `0.50` arrives...
strictboolean
Require BYTE-IDENTICAL equality. Default false, which also accepts a numerically equal value spelled differently (0.50 for 0.5). It changes exactly one outcome: the numerically-equal-but-respelled...
token*string
The citation you used. Any form resolve accepts, including a bare cid, which answers with `degraded: true`: a bare cid asserts no location, so the cell-binding check is skipped and the grade covers...
emem_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`...

Parameters* required
fact_cidsarray
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_...
purposestring
Optional human-readable purpose string. Included in the bundle_cid preimage so the same triples + different purposes produce distinct CIDs.
scopeobject
Multi-tenant scope `{user_id, agent_id, run_id, org_id}`, applied to EVERY triple's underlying recall so the whole bundle cites only facts written under that four-tuple.
triplesarray
One to 256 (cell, band, tslot?) triples to bundle. Each entry is recalled through the standard auto-materialize path; the bundle envelope cites every resulting fact_cid. 257 or more is a typed 400:...
emem_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...

Parameters* required
kinteger
Max candidates (default 10).
labelstring
Alias for `text`.
nearstring
Optional place/cell to narrow to objects anchored nearby.
textstring
Fuzzy phrasing to resolve to an existing canonical object (e.g. "the damaged bridge near the river").
tokenstring
A `emem:entity:<entity_cid>` handle to dereference directly to its signed object (bypasses the text search).
emem_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...

Parameters* required
aliasstring
An alternate label/phrasing that should resolve to this object.
attesterobject
ed25519 binding, verified. Omit it and the refusal's details.how_to_sign gives the digest to sign.
entity_cidstring
The canonical object to attach an equivalence to. Provide entity_cid OR entity_token.
entity_tokenstring
A `emem:entity:<entity_cid>` handle for the same.
external_idsobject
Stable ids to bind to this object.
stancestring
`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 delet...one of asserts · disputes
emem_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...

Parameters* required
as_of_signed_atstring
Bi-temporal transaction-time bound (RFC 3339). Also applied to candidates BEFORE cosine. Same Lance-bypass note as as_of_tslot.
as_of_tslotinteger
Bi-temporal valid-time bound. Applied to candidate cells BEFORE cosine scoring, a cell with no fact whose tslot ≤ as_of_tslot under the scoring band is dropped from the candidate pool (undecidable→...
bandstring
vector band to scan (default: 128-D Tessera foundation embedding). For mode=hamming/hamming_then_rerank you can pass either the cosine band (e.g. 'geotessera') or its binary sibling ('geotessera.bi...default: geotessera
cellstring
Alias for `key`.
cell64string
Alias for `key`.
filterobject
Claim-algebra predicate evaluated against every candidate before ranking. A cell with no fact for the filter's band is DROPPED rather than treated as false, so 'places like X where NDVI > 0.5' neve...
kinteger
How many neighbours to return.default: 10
key*string
cell64 (look up that cell's vector) or 'inline:[x,y,...]' literal vector
modestring
Scoring mode. cosine = fp32 over full vector (precise, ~256 B/cell scan). hamming = sign-bit popcount over the binary sibling band (~16 B/cell, ~1000× faster, ~65% recall@10). hamming_then_rerank =...one of cosine · hamming · hamming_then_rerankdefault: cosine
scopeobject
Multi-tenant scope `{user_id, agent_id, run_id, org_id}`. Setting it bypasses the ANN index entirely, because that index carries no scope column, and runs the brute-force scan instead: the tenant f...
emem_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 |...

Parameters* required
astring
is_like only: cell64 of the first place in the pair.
areasarray
area_over_time: up to 6 {id,geometry|bbox} on one chart
bstring
is_like only: cell64 of the second place. The answer is a cosine similarity in [-1,1] over the two cells' embeddings.
bandstring
did_change only: which band to test, e.g. "indices.ndvi". One band per call; the answer is a delta over `window`, not a whole-cell diff.
bboxobject
cellstring
cell64 address, e.g. "defi.zb64a.cAzU.zfa27". Required by did_change and confirm. Optional for what_is_here and ask: supply it to skip geocoding, omit it and give `place` instead.
claimobject
confirm only: the claim to test at `cell`, e.g. {"band":"indices.ndvi","op":"gt","value":0.4}. The answer is a verdict plus the signed facts it rests on.
descriptionstring
where_is: the place to resolve, e.g. "Mount Everest". ask: the user's question, forwarded verbatim. what_is_here: optional free text used as the question and, if `place` is absent, as the place. Ig...
end_datestring
YYYY-MM-DD
filterobject
find_like only: optional claim constraining which cells may be returned. Same object as `claim` below, same ops, same required fields.
geometryobject
area_over_time: GeoJSON Polygon; or bbox {min_lat,min_lng,max_lat,max_lng}.
indexstring
one of ndvi · ndwi · ndmi · lswi · evi · nbr
kinteger
find_like only: how many neighbours to return.
keystring
find_like only: cell64 to search from, ranked by embedding cosine.
latnumber
ask only: latitude, paired with `lng`, when you want to pin the location by coordinate rather than by name or cell64.
lngnumber
ask only: longitude, paired with `lat`.
max_scenesinteger
placestring
Free-text place name for what_is_here and ask when you have a name but no cell64, e.g. "Ashok Nagar, Ranchi". The responder geocodes it. Ignored when `cell` is present.
start_datestring
YYYY-MM-DD
type*string
Which intent; the table in the description gives each row's fields.one of where_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

PORT

PaaS 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:5051

Bind address for the HTTP server. When unset, the entrypoint derives it from PORT, falling back to 0.0.0.0:5051.

EMEM_DATAdefault: /var/emem

Path 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_URL

Optional 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_DOMAINS

Comma-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

emem logo

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


View the full README on GitHub

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

Related AI & LLM Tools MCP servers

View all
1sverklo avatarSverklosverklo/sverkloLocal-first MCP code intelligence: 37 tools — hybrid search, blast-radius, diff review, memory.71stars
2xelektron avatarToken Enhancerxelektron/token-enhancerCuts AI web-fetching costs up to 99.9% by stripping page junk before it reaches your LLM.66stars
3sagemindai avatarThreadline Mcpsagemindai/instarAgent-to-agent messaging relay. Discover agents, send messages, and receive replies. Zero-config.0stars
4dmitriygolub avatarThree.js DevTools MCPdmitriygolub/threejs-devtools-mcpInspect and edit Three.js scenes, materials, shaders, lights in real time from any AI agent64stars
5amanhij avatarZikkaronamanhij/zikkaronBiologically-inspired persistent memory engine for Claude Code MCP agents60stars
6tomohiro-owada avatarDevragtomohiro-owada/devragLightweight local RAG MCP server. 40x token reduction.60stars