emem, the verifiable memory protocol for the physical world
REMOTE · EMEM.DEV · 2 COMPONENTS · SCANNED AUG 3
Shared, verifiable memory for AI agents and robots: signed tokens that resolve and verify offline.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score →
Endpoint Security63
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation check failed: no authorisation is required to call this server, and it exposes a tool marked destructive (memory_create). See how to fix → View diagnostics → Fail
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability51
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (poor).Fail
- Context-footprint check failed: tool/resource definitions use about 40357 tokens (~328/item across 123 items; 105 tools + 18 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management27
- Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage97
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 91% of tool parameters carry a description.Partial
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.
remote · emem.dev
claude mcp add --transport http vortx-ai-emem https://emem.dev/mcp
[mcp_servers.vortx-ai-emem] url = "https://emem.dev/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"vortx-ai-emem": {
"type": "remote",
"url": "https://emem.dev/mcp",
"enabled": true
}
}
} openclaw mcp add vortx-ai-emem --url https://emem.dev/mcp --transport streamable-http
mcp_servers:
vortx-ai-emem:
url: "https://emem.dev/mcp" {
"mcpServers": {
"vortx-ai-emem": {
"type": "http",
"url": "https://emem.dev/mcp"
}
}
} The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 2 Aug 26 +3
- Schema quality: unverified → poor ▲ functional
- 1 Aug 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 31 Jul 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 30 Jul 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 10 to 13. That category is still filling its 30-day observation window: 3 days of observed history at the previous scan, 4 at this one. The score rises as the window fills, whether or not the server changes.
- 29 Jul 26 −3
- The server rewrote its instructions, which are the text every model session reads security
- Tool “emem_band_raster” rewrote its description, which is the text the model reads security
- Tool “emem_bands” rewrote its description, which is the text the model reads security
- Tool “emem_burn_severity” rewrote its description, which is the text the model reads security
- Tool “emem_capabilities” rewrote its description, which is the text the model reads security
- Tool “emem_cell_geojson” rewrote its description, which is the text the model reads security
- Tool “emem_cell_scene_rgb” rewrote its description, which is the text the model reads security
- Tool “emem_compare_bands” rewrote its description, which is the text the model reads security
- Tool “emem_coverage_map” rewrote its description, which is the text the model reads security
- Tool “emem_coverage_matrix” rewrote its description, which is the text the model reads security
- Tool “emem_data_availability” rewrote its description, which is the text the model reads security
- Tool “emem_deforestation_alert” rewrote its description, which is the text the model reads security
- Tool “emem_edges_recall” rewrote its description, which is the text the model reads security
- Tool “emem_elevation” rewrote its description, which is the text the model reads security
- Tool “emem_embedding_centroid” rewrote its description, which is the text the model reads security
- Tool “emem_errors” rewrote its description, which is the text the model reads security
- Tool “emem_eudr_dds” rewrote its description, which is the text the model reads security
- Tool “emem_explain_algorithm” rewrote its description, which is the text the model reads security
- Tool “emem_fetch” rewrote its description, which is the text the model reads security
- Tool “emem_field_boundaries” rewrote its description, which is the text the model reads security
- Tool “emem_fleet” rewrote its description, which is the text the model reads security
- Tool “emem_heat_solve” rewrote its description, which is the text the model reads security
- Tool “emem_hunt” rewrote its description, which is the text the model reads security
- Tool “emem_intent” rewrote its description, which is the text the model reads security
- Tool “emem_jepa_predict” rewrote its description, which is the text the model reads security
- Tool “emem_jepa_predict_v2” rewrote its description, which is the text the model reads security
- Tool “emem_log_sth” rewrote its description, which is the text the model reads security
- Tool “emem_log_witnesses” rewrote its description, which is the text the model reads security
- Tool “emem_memory_contradictions” rewrote its description, which is the text the model reads security
- Tool “emem_memory_search” rewrote its description, which is the text the model reads security
- Tool “emem_neighborhood_consistency” rewrote its description, which is the text the model reads security
- Tool “emem_recall_many” rewrote its description, which is the text the model reads security
- Tool “emem_recall_polygon” rewrote its description, which is the text the model reads security
- Tool “emem_region_similarity” rewrote its description, which is the text the model reads security
- Tool “emem_rice_ch4” rewrote its description, which is the text the model reads security
- Tool “emem_sar_forest_disturbance” rewrote its description, which is the text the model reads security
- Tool “emem_sources” rewrote its description, which is the text the model reads security
- Tool “emem_state” rewrote its description, which is the text the model reads security
- Tool “emem_state_multi” rewrote its description, which is the text the model reads security
- Tool “emem_temporal_route” rewrote its description, which is the text the model reads security
- Tool “emem_topics” rewrote its description, which is the text the model reads security
- Tool “emem_trajectory” rewrote its description, which is the text the model reads security
- Tool “emem_verify_receipt” rewrote its description, which is the text the model reads security
- Tool “memory_delete” rewrote its description, which is the text the model reads security
- Tool “memory_str_replace” rewrote its description, which is the text the model reads security
- Tool “emem_terrain” rewrote its description, which is the text the model reads security
- Tool “emem_air” rewrote its description, which is the text the model reads security
- Tool “emem_triple_consensus” rewrote its description, which is the text the model reads security
- Tool “emem_algorithms” rewrote its description, which is the text the model reads security
- Tool “emem_ask” rewrote its description, which is the text the model reads security
- Tool “emem_backfill” rewrote its description, which is the text the model reads security
- Schema quality: good → poor functional
- Server version: 1.2.1 → 1.3.0 functional
- New tool “emem_reason” functional
- New tool “emem_substrates” functional
- New tool “emem_trace_verify” functional
- “emem_backfill” reworded the description of “band” cosmetic
- “emem_compare_bands” reworded the description of “tslot_a” cosmetic
- “emem_derive” reworded the description of “code_cid” cosmetic
- “emem_derive” reworded the description of “provenance_class” cosmetic
- “emem_edges_recall” reworded the description of “obj” cosmetic
- “emem_elevation” reworded the description of “cell” cosmetic
- “emem_field_boundaries” reworded the description of “zoom” cosmetic
- “emem_find_similar” reworded the description of “as_of_tslot” cosmetic
- “emem_find_similar” reworded the description of “band” cosmetic
- “emem_find_similar” reworded the description of “mode” cosmetic
- “emem_forest” reworded the description of “band” cosmetic
- “emem_forest” reworded the description of “bands” cosmetic
- “emem_hunt” reworded the description of “event” cosmetic
- “emem_locate” reworded the description of “q” cosmetic
- “emem_lst” reworded the description of “band” cosmetic
- “emem_lst” reworded the description of “bands” cosmetic
- “emem_memory_contradictions” reworded the description of “window_unix_s” cosmetic
- “emem_memory_search” reworded the description of “q” cosmetic
- “emem_memory_token” reworded the description of “cell” cosmetic
- “emem_ndvi” reworded the description of “band” cosmetic
- “emem_ndvi” reworded the description of “bands” cosmetic
- “emem_query_region” reworded the description of “as_of_tslot” cosmetic
- “emem_raster_resolve” reworded the description of “spot_check” cosmetic
- “emem_recall” reworded the description of “as_of_signed_at” cosmetic
- “emem_recall” reworded the description of “as_of_tslot” cosmetic
- “emem_recall” reworded the description of “band” cosmetic
- “emem_recall” reworded the description of “deterministic” cosmetic
- “emem_recall” reworded the description of “provenance” cosmetic
- “emem_recall_many” reworded the description of “bands” cosmetic
- “emem_recall_polygon” reworded the description of “as_of_tslot” cosmetic
- “emem_recall_polygon” reworded the description of “include” cosmetic
- “emem_recall_polygon” reworded the description of “projection” cosmetic
- “emem_rice_ch4” reworded the description of “cultivation_period_days” cosmetic
- “emem_rice_ch4” reworded the description of “efc_kg_ch4_ha_day” cosmetic
- “emem_soil” reworded the description of “band” cosmetic
- “emem_soil” reworded the description of “bands” cosmetic
- “emem_state” reworded the description of “as_of_tslot” cosmetic
- “emem_state_multi” reworded the description of “as_of_tslot” cosmetic
- “emem_temporal_route” reworded the description of “intent” cosmetic
- “emem_trajectory” reworded the description of “as_of_tslot” cosmetic
- “emem_water” reworded the description of “band” cosmetic
- “emem_water” reworded the description of “bands” cosmetic
- “emem_weather” reworded the description of “band” cosmetic
- “emem_weather” reworded the description of “bands” cosmetic
- “emem_air” reworded the description of “band” cosmetic
- “emem_air” reworded the description of “bands” cosmetic
- “emem_ask” reworded the description of “cell” cosmetic
- “emem_at” reworded the description of “band” cosmetic
- “emem_at” reworded the description of “bands” cosmetic
- Tool “emem_embedding_centroid” changed its title: Embedding centroid — mean-pooled GeoTessera vector for a region → Embedding centroid, mean-pooled GeoTessera vector for a region cosmetic
- Tool “emem_embedding_diversity” changed its title: Embedding diversity — landscape heterogeneity over a region → Embedding diversity, landscape heterogeneity over a region cosmetic
- Tool “emem_eudr_dds” changed its title: EUDR Due Diligence Statement — polygon-in, signed Annex II envelope out → EUDR Due Diligence Statement, polygon-in, signed Annex II envelope out cosmetic
- Tool “emem_hunt” changed its title: Hunter mode — find event hotspots over a region → Hunter mode, find event hotspots over a region cosmetic
- Tool “emem_memory_search” changed its title: emem_memory_search — semantic search over /memories/* files → emem_memory_search, semantic search over /memories/* files cosmetic
- Tool “emem_region_similarity” changed its title: Region similarity — cosine of two regions' mean GeoTessera embeddings → Region similarity, cosine of two regions' mean GeoTessera embeddings cosmetic
- Tool “emem_terrain” changed its title: Terrain triad — slope + ruggedness + topographic position from DEM → Terrain triad, slope + ruggedness + topographic position from DEM cosmetic
- Tool “memory_create” changed its title: memory_create — write a memory file (overwrite if exists) → memory_create, write a memory file (overwrite if exists) cosmetic
- Tool “memory_delete” changed its title: memory_delete — remove a memory file or directory → memory_delete, remove a memory file or directory cosmetic
- Tool “memory_insert” changed its title: memory_insert — insert at a given line → memory_insert, insert at a given line cosmetic
- Tool “memory_list_by_kind” changed its title: memory_list_by_kind — typed enumeration of memory files → memory_list_by_kind, typed enumeration of memory files cosmetic
- Tool “memory_rename” changed its title: memory_rename — move a memory file → memory_rename, move a memory file cosmetic
- Tool “memory_str_replace” changed its title: memory_str_replace — exact-string replacement in a memory file → memory_str_replace, exact-string replacement in a memory file cosmetic
- Tool “memory_view” changed its title: memory_view — read file or directory listing → memory_view, read file or directory listing cosmetic
- 27 Jul 26 0
- Stability: unverified → 0.03 ▲ functional
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 26 Jul 26 63
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 3 Aug 2026 · Probed https://emem.dev/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=emem.dev | CN=YE1,O=Let's Encrypt,C=US | 25 Jun 2026 | 23 Sept 2026 | ECDSA 256 | ECDSA-SHA384 | 585b40324d02015c7ffa469b0dc392dd4a8 |
| SANs: emem.dev, www.emem.dev | ||||||
| CN=YE1,O=Let's Encrypt,C=US (CA) | CN=Root YE,O=ISRG,C=US | 3 Sept 2025 | 2 Sept 2028 | ECDSA 384 | ECDSA-SHA384 | 5ddd70dd31f801c85c186a7a04b80afe |
| CN=Root YE,O=ISRG,C=US (CA) | CN=ISRG Root X2,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | ECDSA 384 | ECDSA-SHA384 | 872165fc34b6e5fba8add5b3705fb53a |
| CN=ISRG Root X2,O=Internet Security Research Group,C=US (CA) | CN=ISRG Root X1,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | ECDSA 384 | SHA256-RSA | 6c8f1dc727c7117f7baf853ac980f9cd |
DNSSEC insecure
Validation of emem.dev. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| dev. | present | 60074 | 8 | Verified |
| emem.dev. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication No authorisation required
The endpoint answered without asking for a token. Anyone who knows the URL can reach it.
| Result | No authorisation required |
|---|---|
| HTTP status | 200 |
| Header | Value |
|---|---|
| strict-transport-security | max-age=31536000; includeSubDomains; preload |
| content-security-policy | default-src 'self'; script-src 'self' https://www.googletagmanager.com https://esm.sh https://cdn.redocly.com 'sha256-1LQb9Vhps9539K8WtLY4YJCvLqfXXHHrFKFU9lO7yDo=' 'sha256-3vokV7ulOzXmEDPT8jHerCF3DotZc5zDsH+ktR8/bQg=' 'sha256-5drXHcFDsHyX/M9ryszbgZHB7YSCe55jIHn/02mKXPw=' 'sha256-8vnQX7+vHcAt3ELB02aOu4MJIM+256eIdW2+xkLr5ac=' 'sha256-BC3kmFRQjI7i3nY+wYMTbt65j6ljlx+ZN433t/kignI=' 'sha256-BCnJeyXiJpn+/3NNsV51yA064CoZ8FJsey8VGQBHnM8=' 'sha256-BuChz52GVMz8nc76A+SoFZTTc+l8J0PvArPG3PF9GAE=' 'sha256-BwiUvoXcoNy0+qgJzFyEd7Q/AC9W8wpF6jwhJqdAXC4=' 'sha256-CHjGNtQ7K1LwQzVfsQaI5HpMPnT/QUFevTLL+ir1EE0=' 'sha256-D18y043mO+yptyU9fUFvoFL8ZhV2+JbGm/GzXbHoER8=' 'sha256-ESM3y/M07WghKtExySfU1rCnornbOI7uIwzL3Ngu+ok=' 'sha256-GKaIUE1muvRIoxngaNj1LRkSVR2DROt1XVsNzhyI2js=' 'sha256-JncTJLIIYKBmqB4e18NO64h1JN22U2SsMTZXAeD5db8=' 'sha256-MM8UG+X+sxn1SSO3vbj0Q/JHl9Ekn4SS1eg4MOnAIeU=' 'sha256-Nt0FXER1PgT47bnh3eP4amurWD7ly8tLVRAmcCvhk+w=' 'sha256-OgLVXQgwqGXNUbOLG2XzC/cqA1NCgR635CscyVTF6Kg=' 'sha256-RtmdiUQ8ytLlWLjL0uoPLD2w1CqKFVw9iF5YrcdnCI |
| x-content-type-options | nosniff |
| referrer-policy | strict-origin-when-cross-origin |
| permissions-policy | geolocation=(), microphone=(), camera=() |
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://emem.dev/mcp | Verified | 200 | |
| http (plaintext) | http://emem.dev/mcp | HTTPS enforced | 308 | https://emem.dev/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability.
emem_air Air-quality snapshot (CAMS PM2.5 / NO2 / O3) ~373
Recall the signed Copernicus CAMS air-quality facts (PM2.5 + NO2 + O3) at a place's cell64, attesting on a miss. Composes locate → recall → aggregate; each band carries a citeable fact_cid. When to use: Use when the user names a place and asks about air quality, pollution, or emissions exposure. CAMS is the European reanalysis, global coverage, ~0.4° native (resampled). For finer-grained urban PM2.5, pair with /v1/at-style stations data when available. Example arguments: {"place":"Delhi, India"}
| Name | Type | Req | Description |
|---|---|---|---|
| band | string | — | Optional single band override, replaces the endpoint's default band set with this one. |
| bands | string | — | Optional CSV of band keys, replaces the endpoint's default band set. |
| include | array | — | Opt-in heavy response sections. Default response omits per-cell arrays to stay under MCP's 25 KB cap. Name specific sections to include them. |
| lat | number | — | WGS-84 latitude. Paired with `lng`. Use when you already have coordinates. |
| lng | number | — | WGS-84 longitude. Paired with `lat`. |
| n_cells | integer | — | Polygon fan-out width. `n_cells: 1` = point at centroid. Defaults vary per endpoint (1 for /v1/at, 16 for single-band endpoints). |
| place | string | — | Free-text place name. Resolved through the standard /v1/locate cascade (wide-bbox → embedded → GeoNames → cache → Photon → Nominatim). Provide this OR `lat`+`lng`. |
| tslot | integer | — | Optional tslot offset (band-tempo-relative). |
No output schema declared.
No examples provided.
emem_algorithms Composition recipes (algorithms) ~235
Content-addressed dictionary of composition recipes, formulas that fuse attested band facts (and embeddings) into derived scores, classifications, and similarity metrics. When to use: Call when the user's question is COMPOSITE (flood risk, urban density, water consensus, change-since-2020) rather than a single band readout. Each entry has `kind` (solo | combined | embedding), the input `bands` (assemble one `emem_recall` body from them), the `formula` in plain math, the `output` shape, and a `citation`. The agent applies the formula in-process and quotes the algorithm key + `algorithms_cid` (from `emem_manifests`) alongside the input fact_cids, that gives the receipt enough context for any other operator to replay the same composition deterministically. Embedding entries (cosine, novelty, change, neighborhood-consistency) operate on `geotessera`; for the most common k-NN pattern the protocol-native `emem_find_similar` is faster than fetching vectors and computing locally. Example arguments: {}
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
emem_ask Ask a free-text question about a place ~714
Single-shot free-text answer about a real-world location, backed by signed satellite/elevation/water/built-up receipts. Forwards a place mention plus a question; runs the locate → recall → algorithm chain server-side; returns one packaged envelope. When to use: Use when the question concerns a specific real-world place and a packaged, citation-bearing answer is preferable to manual primitive composition. Forward the user's question verbatim as `q` plus the location as `place` (free text), `cell` (cell64), or `lat`+`lng`. The server resolves the location, classifies the question to a topic, recalls every relevant band (auto-materializing Sentinel-2 / Sentinel-1 / Cop-DEM / JRC GSW / Overture / weather on miss), surfaces the algorithm recipes that compose those bands into named scores, and returns a single envelope with `topic_routing`, `facts`, `algorithms_for_question`, an optional Sentinel-2 RGB scene URL, and a `caveats` block (grid resolution, revisit cadence). All facts are signed by the responder; the signed `receipt` (and its content-addressed `fact_cids`) is surfaced at the envelope ROOT, `response.receipt` / `response.fact_cids`, exactly like every other primitive, and is also mirrored under `facts_summary.receipt` for back-compat. Set `include_image: true` to bundle the latest cloud-free Sentinel-2 thumbnail. Out-of-scope questions return `topic_routing.matched_topic: null` plus the full inventory so the caller can route elsewhere. Example arguments: {"q":"is this neighbourhood flood-prone for a flat purchase","place":"Ashok Nagar, Ranchi"}
| Name | Type | Req | Description |
|---|---|---|---|
| cell | string | — | 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`. |
| include | array | — | Opt-in heavy response sections. Default response is slim (~5 KB): answer + algorithm key + fact_cids + caveats. Name specific sections to include them. Ignored when verbose=true (which includes every… |
| include_image | boolean | — | Bundle a Sentinel-2 RGB scene URL for the resolved cell. Adds ~1-2 s on first call. |
| lat | number | — | WGS-84 latitude (paired with `lng`; alternative to `place` / `cell`). |
| lng | number | — | WGS-84 longitude (paired with `lat`). |
| place | string | — | 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 Nomina… |
| q | string | yes | User's natural-language question about the place (e.g. "is this neighbourhood flood-prone"). |
| verbose | boolean | — | When true, return the full envelope: per-algorithm formula strings, temporal_recipe blocks, per-fact band_metadata duplicates, and the long _explanation prose. Default (since 2026-05-05) is false so… |
No output schema declared.
No examples provided.
emem_at Multi-band snapshot at a place ~440
One-shot recall of the signed facts at a place's cell64 (or lat/lng); each band carries a citeable fact_cid. Defaults to emem's standard at-a-glance band set; pass `band` / `bands` to override. Polygon-resolved places stay at the centroid by default (`n_cells: 1`) to keep multi-band calls cheap; pass `n_cells: 2..=64` to fan out. When to use: Use when the user names a place and wants the standard situational readout (vegetation + elevation + landcover + recent weather) without picking bands. Polygon-aware: `place` that resolves to a polygon (park, lake, district) lands at the centroid unless `n_cells` widens it. For a single band, use the domain-specific shortcuts (emem_ndvi, emem_air, …) or emem_recall directly. Example arguments: {"place":"Yellowstone National Park"}
| Name | Type | Req | Description |
|---|---|---|---|
| band | string | — | Optional single band override, replaces the endpoint's default band set with this one. |
| bands | string | — | Optional CSV of band keys, replaces the endpoint's default band set. |
| include | array | — | Opt-in heavy response sections. Default response omits per-cell arrays to stay under MCP's 25 KB cap. Name specific sections to include them. |
| lat | number | — | WGS-84 latitude. Paired with `lng`. Use when you already have coordinates. |
| lng | number | — | WGS-84 longitude. Paired with `lat`. |
| n_cells | integer | — | Polygon fan-out width. `n_cells: 1` = point at centroid. Defaults vary per endpoint (1 for /v1/at, 16 for single-band endpoints). |
| place | string | — | Free-text place name. Resolved through the standard /v1/locate cascade (wide-bbox → embedded → GeoNames → cache → Photon → Nominatim). Provide this OR `lat`+`lng`. |
| tslot | integer | — | Optional tslot offset (band-tempo-relative). |
No output schema declared.
No examples provided.
emem_backfill Materialize historical facts in a window ~701
Materialize and sign every per-tslot fact for one (cell, band) inside a [start_unix, end_unix] window. Returns a signed list of (tslot, fact_cid, status) for each step. Slow but possible, one upstream fetch per tslot, capped by `max_facts`. READ THE COUNT CAREFULLY: `steps[].tslot` is the REQUESTED slot, not the slot the fact landed in. A signed fact carries the SCENE's own tslot, so consecutive request slots routinely share one `fact_cid`, and `materialized_count` counts request slots rather than observations. Sizing a backfill by `materialized_count` will overestimate what the record actually gained: count DISTINCT `fact_cid`s instead. A 24-day window returning `materialized_count: 24` over 10 distinct cids means the sky answered on 10 days, and `emem_trajectory` over the requested tslots will look empty because the facts sit at their real scene dates. When to use: Call when the user wants HISTORY for a fast/medium-tempo band and `emem_trajectory` returned only the latest point. The responder iterates the tslot range derived from the band's tempo, calls the per-tslot historical materializer, signs each result, and persists. After completion `emem_trajectory` over the same window returns the full series. Bands without a historical materializer (e.g. `weather.*` from met.no's nowcast) return `status: "present_only"` for past tslots, check `emem_coverage_matrix.history_available_from`/`history_available_to` to see how far back each band can be backfilled. Prefer this over staking an attestation when the upstream is publicly fetchable. Example arguments: {"cell":"damO.zb000.xUti.zde78","band":"modis.ndvi_mean","start_unix":1640995200,"end_unix":1735689600,"max_facts":24}
| Name | Type | Req | Description |
|---|---|---|---|
| band | string | yes | Band key. Must be a band whose materializer supports historical fetch, see `emem_coverage_matrix` field `history_available_from`/`history_available_to`. |
| budget_ms | integer | — | Optional soft budget in ms for the preparer form. |
| cell | string | yes | cell64 or place name (auto-resolved). |
| cells | array | — | The preparer form: up to 64 cells, each backfilled across the same band and window under the partial-results contract (budget_ms, pending[], converged). Warm an area before reasoning over it; the ide… |
| end_unix | integer | — | Window end as Unix epoch seconds (UTC). Defaults to now. |
| max_facts | integer | — | Cap on number of facts materialized in one call. |
| refresh | boolean | — | Force re-materialization even where a fact already exists, superseding it (the old fact stays resolvable by cid and as_of_signed_at). Use to pick up a materializer change on already-warmed cells, e.g… |
| start_unix | integer | — | Window start as Unix epoch seconds (UTC). Defaults to the band's `history_available_from`. |
No output schema declared.
No examples provided.
emem_band_composite Band composite: a signed cloud-masked median over a window ~583
Mint a signed, cloud-masked median composite over a date window as a raster-shaped field: the clean, gap-filled texture a world model actually drapes, rather than one cloudy scene. It reads every Sentinel-2 scene in [start_date, end_date] over the bbox, masks each per pixel by its SCL scene-classification class (default reject {0,1,3,8,9,10}: no-data, saturated, cloud shadow, cloud, cirrus; snow 11 is KEPT because snow is surface, not occlusion, and a snow-rejected median would fabricate a bare winter scene; override with mask_policy), and takes the per-pixel lower-of-two median (never averaging two measurements into a value nobody took) with a pinned min_valid_count, below which a pixel is nodata. The mask policy, min_valid_count, and the exact member scene list are pinned in the signed derivation, so a stranger re-derives the composite pixel for pixel from the same scenes. Returns an emem:raster: token (resolve with emem_raster_resolve) plus the content-addressed artifact; the receipt binds (aoi_cid, derivation_cid). Needs at least two clear scenes at one CRS. This signs and persists the derivation. When to use: Call when a world model or an analyst needs the clean composite texture over an area across a season, not a single-date snapshot that may be cloudy: a scrub-frame base layer, a gap-filled band drape, a cloud-free mosaic. For one pinned scene use emem_band_raster; for the per-slice time series use emem_band_cube. Example arguments: {"bbox":{"min_lat":32.5699,"min_lng":77.0328,"max_lat":32.5727,"max_lng":77.0362},"band":"s2.B04","start_date":"2026-05-01","end_date":"2026-07-31"}
| Name | Type | Req | Description |
|---|---|---|---|
| band | string | yes | One of s2.B02, s2.B03, s2.B04, s2.B08, s2.B11, s2.B12. |
| bbox | object | yes | WGS-84 bounding box of the area of interest. |
| end_date | string | yes | Window end YYYY-MM-DD, inclusive. |
| mask_policy | array | — | SCL classes to reject per pixel. Default [0,1,3,8,9,10]; snow 11 is kept as surface. |
| max_scenes | integer | — | Cap on scenes read. Default 12. |
| min_valid_count | integer | — | Per-pixel minimum valid samples for a value, else nodata. Default 1. |
| start_date | string | yes | Window start YYYY-MM-DD, inclusive. |
No output schema declared.
No examples provided.
emem_band_cube Band cube: a field over time, as a signed manifest ~590
Mint an emem:cube: token: a Sentinel-2 field over an AOI ACROSS TIME. A world model is a field over an area across time, and emem:raster: names only one time-slice, so a 4D world's time scrub had no token to anchor. This mints one band_raster member per target date, each an independent, resolvable emem:raster: derivation, then signs a cube record binding the ordered set. It is NOT new pixels: lineage terminates in each member's pinned scene, so a stranger walks cube -> members -> scenes and re-derives every value from raw Sentinel-2 bytes. cube_cid content-addresses the ordered membership (blake3 of the member derivation cids), so the same slices always name the same cube. Two dates that resolve to the same scene collapse; a cube needs at least two distinct slices and caps at 24 per mint (refused with the cap named). Each member echoes `requested_dates` (the observed_on entries that mapped to it) and `requested_date_distance_days` (the nearest one's gap from the scene's own capture date), so a caller lines a requested date up with its slice directly rather than guessing by tslot proximity. The receipt's FIELD preimage segment binds (aoi_cid, derivation_cid), reported by /v1/verify_receipt as field_bound. Returns the emem:cube: token plus the member emem:raster: tokens. This signs and persists the cube record and its members. When to use: Call when a world model or change-over-time analysis needs a time series of fields over one AOI, not one snapshot: the 4D world token, a phenology stack, a before/during/after triptych. For one time-slice use emem_band_raster; for one cell's value over time use emem_trajectory; resolve a received cube with emem_cube_resolve. Example arguments: {"bbox":{"min_lat":32.5699,"min_lng":77.0328,"max_lat":32.5727,"max_lng":77.0362},"band":"s2.B08","observed_on":["2026-05-01","2026-06-01","2026-07-01"]}
| Name | Type | Req | Description |
|---|---|---|---|
| band | string | yes | One of s2.B02, s2.B03, s2.B04, s2.B08, s2.B11, s2.B12. |
| bbox | object | yes | WGS-84 bounding box of the area of interest, shared by every slice. |
| observed_on | array | yes | 2 to 24 target capture dates YYYY-MM-DD. Each names the nearest scene, pinned per member; two dates that resolve to the same scene collapse to one slice. |
No output schema declared.
No examples provided.
emem_band_raster Band raster: a field as a signed derivation ~862
Return a native-resolution Sentinel-2 window over a bounding box as a FIELD, not a set of points: the pixels become one content-addressed grid artifact (deterministic f32 encoding; fetch the bytes at the returned artifact url, Cache-Control immutable), and what the receipt attests is the DERIVATION, never a byte pipe. A persisted derivation record pins the chosen scene (id, asset, capture time, cloud cover), the recipe (band_raster@1), the grid georeferencing in the scene's UTM CRS, and best-effort per-cell anchors that bridge the artifact to existing signed facts; the receipt's FIELD preimage segment binds (aoi_cid, derivation_cid), reported by /v1/verify_receipt as field_bound. Bounds are refusals with the cap named: six raw S2 bands (B02/B03/B04/B08/B11/B12) and 512 px per side at native resolution (about 5.1 km at 10 m). Anchors never materialize a fact, so a cold AOI costs one scene read, nothing more. The artifact is evictable BY DESIGN: the record persists like any fact and pins everything needed to rebuild identical bytes, so eviction turns a dereference into a recompute, never a broken citation. Returns two tokens: emem:raster: (resolve with emem_raster_resolve) and the record's own emem:fact: handle. This signs and persists the derivation record. TERRAIN: pass band `copdem30m.elevation` (or `elevation` / `dem`) for a static Copernicus GLO-30 elevation field via the dem_raster@1 path, no scene selection, no cloud, EPSG:4326 grid; a bbox crossing a 1-degree DEM tile edge is refused (single-tile only) and open ocean has no tile. EMBEDDING (WB-5): pass an encoder band (geotessera etc.) for a MULTI-CHANNEL embedding field via embedding_raster@1, a signed N-D vector per cell (geotessera = 128-D) packed into one artifact, so a client-side per-cell embedding fan-out becomes one citeable token; every filled cell is anchored to its real signed encoder fact; grid capped at 256 cells at the 0.1-degree native step. When to use: Call when an agent needs an area's actu…
| Name | Type | Req | Description |
|---|---|---|---|
| band | string | yes | One of s2.B02, s2.B03, s2.B04, s2.B08, s2.B11, s2.B12 (Sentinel-2 scalar field); copdem30m.elevation (also elevation / dem) for a static GLO-30 DEM field via dem_raster@1; OR an encoder band (geotess… |
| bbox | object | yes | WGS-84 bounding box of the area of interest. |
| observed_on | string | — | Optional target capture date YYYY-MM-DD (Sentinel-2 only; ignored for the static DEM band); the scene actually chosen is pinned in the derivation record either way. |
No output schema declared.
No examples provided.
emem_bands Active band ontology ~56
Active band ontology (offsets, dims, tempo, privacy). When to use: Call once at session start to learn the band registry, every other primitive's `band` argument MUST come from this list. Example arguments: {}
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
emem_benchmark Hand-verified eval items for agent grading ~142
Hand-verified evaluation items for grading an agent against the responder. Returns {items[], grader_url}. Submit answers (cell64 or fact_cid per item) to POST /v1/benchmark/grade for per-item scores. Items today: elevation recall, NDVI, find_similar neighbours. When to use: Call once at agent-onboarding time (or in CI) to fetch the canonical task list, then have the agent answer each item using its normal tool routing, and POST the answers map to /v1/benchmark/grade for a deterministic score. Lets an operator regression-check that an agent build still hits ground truth. Example arguments: {}
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
emem_burn_severity Burn severity (dNBR, Key & Benson) from pre/post-fire NBR ~356
Compute the differenced Normalized Burn Ratio (dNBR = NBR_pre − NBR_post; Key & Benson 2006) and map it to the USGS burn-severity classes (unburned / low / moderate-low / moderate-high / high). Supply `nbr_pre` + `nbr_post` (pin the scenes bracketing the fire date) for a correct result, or omit both to use the two most-recent stored `indices.nbr` scenes (older=pre, newer=post) as a coarse estimate. The result is signed; the receipt cites the NBR fact_cids it read from the shared memory. When to use: Call after a wildfire to quantify how badly an area burned, or to triage post-fire severity across a region cell-by-cell. Best practice: explicitly pass `nbr_pre`/`nbr_post` from scenes that bracket the known fire date, the stored-trajectory fallback just takes the two most-recent scenes and may not bracket the fire. Surface `dnbr` and `severity_class`. For active-fire detection use `emem_hunt` with the wildfire event instead. Example arguments: {"cell":"defi.zb493.xoso.zcb6a","nbr_pre":0.62,"nbr_post":0.11}
| Name | Type | Req | Description |
|---|---|---|---|
| cell | string | yes | cell64 or place name. |
| nbr_post | number | — | Post-fire NBR. When both nbr_pre and nbr_post are omitted the endpoint uses the two most-recent stored indices.nbr scenes (older=pre, newer=post). |
| nbr_pre | number | — | Pre-fire NBR. Pin the scene just before the fire date for a correct result. |
No output schema declared.
No examples provided.
emem_capabilities Cached upstream capability snapshot ~213
Live capability snapshot of the responder's GPU sidecar, extensions[] (e.g. gpu, clay-v1.5, prithvi-eo2), cuda_available, models_loaded[], healthy, last_polled_unix_s. Refreshed every 30 s by a background poller; reads are constant-time. When to use: Call before scheduling a GPU-heavy plan (Clay / Prithvi / Galileo embeddings, foundation-anchored algorithms) so the agent knows whether the GPU tier is up *right now* without per-request /health round-trips. Pair with `emem_topics` (its `algorithm_availability` map says which algorithm keys can run given the current capabilities) and `emem_explain_algorithm` (full inference-tier metadata per algorithm). When `extensions[]` is empty the sidecar is unreachable, only CPU/scalar/cached tiers will produce facts; foundation-anchored materializers will sign Absence with `gpu_unavailable` reason. Example arguments: {}
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
emem_cell_geojson Cell polygon as GeoJSON ~193
Cell polygon as a native MCP EmbeddedResource (mimeType application/geo+json). Properties carry centre lat/lng, bbox, approx size in metres, and the 8-cell neighbourhood, drop straight into Mapbox / Leaflet / Deck.gl / QGIS without a GIS pipeline. When to use: Call when the agent (or a downstream renderer) needs the cell as geographic geometry, for map overlays, polygon-clipping ops, or feeding a styling pipeline. Pass `cell` as cell64 or place name. The result is a GeoJSON Feature with Polygon geometry; for a FeatureCollection that includes every recalled fact's value as a property, fetch /v1/cells/{cell64}/recall_geojson?bands=... over plain REST instead. Example arguments: {"cell":"damO.zb000.waro.zcb89"}
| Name | Type | Req | Description |
|---|---|---|---|
| cell | string | yes | cell64 or place name |
No output schema declared.
No examples provided.
emem_cell_scene_rgb Sentinel-2 true-colour thumbnail (PNG) ~367
True-colour Sentinel-2 L2A RGB thumbnail centred on a cell. PNG returned as a native MCP ImageContent block (mimeType image/png). Pure-Rust pipeline: STAC search + HTTP-Range COG reads + 2-98 percentile stretch + PNG encode. When to use: Call when the user wants a VISUAL of a place, 'show me what this looks like', 'before/after the flood', 'is there a forest here', 'is this developed'. Returns a 256×256 px RGB image (~2.56 km × ~2.56 km at S2's 10 m native resolution), centred on the cell. Pass `cell` as a cell64 string OR a place name (auto-resolved). `max_cloud` filters scenes by `eo:cloud_cover` (default 20 %); raise it (60–80 %) for cloud-prone tropics if you keep getting 'no scene' errors. `datetime` is an RFC 3339 interval like `"2024-01-01T00:00:00Z/2024-12-31T00:00:00Z"` for a temporal slice (defaults to last 90 days). `structuredContent` carries the STAC item id, capture time, cloud_cover, EPSG, and per-channel reflectance percentile stretch values used, quote those alongside the image so the receipt is reproducible. Example arguments: {"cell":"damO.zb000.waro.zcb89","max_cloud":20}
| Name | Type | Req | Description |
|---|---|---|---|
| cell | string | yes | cell64 or place name |
| datetime | string | — | RFC 3339 interval; defaults to last 90 days |
| max_cloud | number | — | max eo:cloud_cover percent |
No output schema declared.
No examples provided.
emem_cells_in_bbox Enumerate the cell64s in a bounding box, paged ~364
Enumerate every cell64 whose centre falls in a bounding box, paged, in stable row-major order (north row first, then west column first). Pure geometry: it reads no facts and signs no receipt, because the answer is a deterministic function of the bbox and the active grid that anyone can reproduce. It walks the integer lat/lng grid directly, so it never skips or double-counts a cell the way a float-stepped lattice does. Returns `cells`, the exact `total`, and `next_cursor` (null when exhausted). This is the paging loop as emem's job instead of every client reimplementing a lattice; a London-scale AOI is tens of thousands of cells, so page it. page_size defaults 1024, caps at 4096. When to use: Call when you need the actual cell list over an area rather than a sample: building a world, a dense recall over an AOI, or a deterministic sample frame. Feed each page's `cells` straight to emem_recall_many with a budget_ms to read them under the partial-results contract, and page with next_cursor until it is null. For a coarse sample (not every cell) emem_query_region or emem_recall_polygon subsample to max_cells instead. Example arguments: {"bbox":{"min_lat":32.5699,"min_lng":77.0328,"max_lat":32.5727,"max_lng":77.0362},"page_size":1024}
| Name | Type | Req | Description |
|---|---|---|---|
| bbox | object | yes | WGS-84 bounding box to enumerate. |
| cursor | integer | — | row-major offset to resume from; pass the previous response's next_cursor. |
| page_size | integer | — | cells per page. |
No output schema declared.
No examples provided.
emem_change_attribution Change attribution ledger: why did this place's readout move ~501
The first runnable surface of the change decomposition Δz = Δ_env + Δ_sensor + Δ_geo + Δ_encoder + ε: a per-term evidence LEDGER for the readout change at a cell, with NO numeric split. `observed` carries the Tessera year-over-year embedding change. `terms.env` carries label-free index pairs (NDVI, NBR, NDWI) with raw deltas and both fact cids, evidence a future estimator would read. `terms.sensor` records what each visit was observed through (source scheme and scene id per band) and whether that path changed. `terms.geo` is declared not estimated (no registration-residual surface exists). `terms.encoder` is pinned by construction: both vintages are slices of one signed multi-year fact under one recipe, named by fn_key. `terms.noise` reports the S2 scene-classification class per visit, so a cloud flip is visible. `split` is null and `attribution_note` says why: splitting a delta numerically needs a calibrated cross-encoder, cross-sensor stability model this responder does not have, and inventing magnitudes would fabricate the exact confusion the decomposition exists to prevent. The ledger persists: each run stores itself as a derivative fact (band change_attribution.ledger, parents = every fact read) and the response returns its own emem:fact: token under ledger_fact, so an attribution is cited and dereferenced like any reading. The receipt binds every input fact cid plus the stored ledger cid. Bands read cold may materialize, so this signs and persists facts. When to use: Call when a change surface (emem_diff, emem_state_diff, emem_triple_consensus, did_change) reported that a place's readout moved and the question is WHY: world, instrument, pixels, model, or noise. Read the per-term evidence and cite its fact cids; do not expect a numeric split (`split` is null by design, see `attribution_note`). Bands with fewer than two distinct tslots at the cell appear under evidence_absent with a typed reason rather than a fabricated pair. For the raw delta itself use emem_…
| Name | Type | Req | Description |
|---|---|---|---|
| cell | string | yes | cell64 or place name. |
No output schema declared.
No examples provided.
emem_compare Compare two cells (cosine + scalar deltas) ~139
Compare two cells: cosine similarity over shared vector bands + per-band scalar deltas. When to use: Call when the user asks 'how similar is X to Y', 'compare these two places', or wants a difference vector. Returns a single cosine score and per-band deltas. Example arguments: {"a":"damO.zb000.xUti.zde78","b":"damO.zb000.xUto.sisA"}
| Name | Type | Req | Description |
|---|---|---|---|
| a | string | yes | cell64 of cell A |
| b | string | yes | cell64 of cell B |
| family | string | — | optional band-key prefix (e.g. 'indices.') |
No output schema declared.
No examples provided.
emem_compare_bands Compare two bands at one cell ~488
Compare two bands at the same cell. Scalar pair → metric=delta, value=b-a. Vector pair (equal dim) → metric=cosine + per-dim delta. Returns a signed receipt naming both source fact CIDs. When to use: Call when the user wants cross-source consistency at one place ('does Cop-DEM agree with GMRT here?'), cross-vintage drift ('how did the embedding change between 2017 and 2024 at this cell?'), or any band-vs-band comparison within a single cell. `cell` + `a` + `b` are required. `tslot_a`/`tslot_b` are OPTIONAL: omit them to let the responder auto-pick each band's latest attested tslot, required for medium/fast-tempo bands (NDVI 30-day, MODIS 8-day, weather, CAMS) where there is no fact at tslot=0. The response carries `tslot_resolution` (echoes what was chosen and why) and `bands_with_no_history` (lists any band the cell has no attested fact for). Example arguments: {"cell":"damO.zb000.wapu.yAxe","a":"copdem30m.elevation_mean","b":"gmrt.topobathy_mean"}
| Name | Type | Req | Description |
|---|---|---|---|
| a | string | yes | band A key (e.g. 'copdem30m.elevation_mean') |
| b | string | yes | band B key (e.g. 'gmrt.topobathy_mean') |
| cell | string | yes | cell64 (`cell64` accepted as alias) |
| predicate | object | — | Optional consistency predicate. When set, the response carries a signed `verdict` (true|false|incomparable) over the comparison. |
| tslot_a | integer | — | tslot for band A. Omit to auto-pick the latest attested tslot for this band at this cell, required for medium/fast-tempo bands (NDVI 30-day, MODIS 8-day, weather, CAMS) which have NO fact at tslot=0.… |
| tslot_b | integer | — | tslot for band B. Same auto-pick semantics as `tslot_a` when omitted. |
No output schema declared.
No examples provided.
emem_compare_same_doy Compare a band at the same day-of-year across years ~480
Compare a band at the SAME day-of-year across several years, the honest way to measure year-over-year change on a seasonal band. For each year it finds the signed facts bracketing the target day-of-year and linearly interpolates to it, and EXCLUDES years that cannot be bracketed (with a typed reason) rather than extrapolating. This is the primitive the phenology advisory on emem_diff points at: comparing a seasonal band at two different days-of-year mixes phenology with real change (the '4 prospered / 0 stressed' trap), so comparing at one fixed DOY makes a year-over-year delta change rather than season. Interpolated values are model-derived, not directly signed; the bracketing fact_cids are recoverable via emem_trajectory. When to use: Call when the user wants a year-over-year comparison of a seasonal band (NDVI, LST, greenness) and cares that it is change, not season: 'is this field greener than last year', 'compare the July vegetation across 2022-2025'. Pass the day-of-year and the list of years. For a raw two-date delta use emem_diff (and read its phenology block); for the full series use emem_trajectory. BRACKET WIDTH MATTERS: a year is excluded unless the record holds a sample on EACH side of the target day-of-year within that year, so the natural first attempt (a tight window around the date you care about) usually excludes most years. Measured against this responder, plus or minus 21 days failed to bracket at three cells; plus or minus 60 days bracketed reliably. Backfill that wide before comparing, and read the typed exclusion reason rather than the year count. Example arguments: {"cell":"defi.zb572.xoso.zb1ec","band":"indices.ndvi","doy":196,"years":[2023,2024,2025,2026]}
| Name | Type | Req | Description |
|---|---|---|---|
| band | string | yes | — |
| cell | string | — | cell64 or place name |
| doy | integer | yes | target day-of-year |
| lat | number | — | — |
| lng | number | — | — |
| place | string | — | — |
| years | array | yes | years to compare at that day-of-year |
No output schema declared.
No examples provided.
emem_corpus_state_stats Signed snapshot of corpus liveness ~141
Signed snapshot of corpus liveness: distinct_cells, distinct_bands, facts_scanned, top per-band counts, manifest CIDs. Same payload that backs /v1/stream's corpus.state tick (signed). Use this for a one-shot poll instead of holding an SSE connection. When to use: Call when an agent needs a single liveness reading to surface in a dashboard, attach to a report, or decide whether to refresh local caches. Includes ed25519 signature over a deterministic preimage so the snapshot is verifiable. For a continuous feed, GET /v1/stream over Server-Sent Events instead. Example arguments: {}
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
emem_coverage_map Coverage map (SVG image) ~192
Live SVG render of the responder's corpus density, returned as a proper MCP EmbeddedResource content block (image/svg+xml), multimodal MCP agents can render it natively. When to use: Call when the user asks 'where do you have data?', 'show me the coverage', or wants a visual brief of the responder's corpus footprint. Returns a 1440×720 Plate-Carrée SVG (1° × 1° bins, log-scale colour, continent envelopes for orientation) plus a structuredContent summary (cell_count, total_facts, responder pubkey, REST URL). Multi-content-block reply: an EmbeddedResource (mimeType `image/svg+xml`, with text + uri) followed by a one-line text summary so text-only clients still see the cell / fact counts. For the bare image bytes, fetch `/v1/coverage_map.svg` over plain REST. Example arguments: {}
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
emem_coverage_matrix Per-band live status & history bounds ~221
Per-band live status, what data is alive AND auto-materializable, with history bounds, tempo cadence, and the responder pubkey that signs the band. When to use: Call BEFORE `emem_recall` when you don't know which bands answer at this responder. For each band returns `has_materializer` (true → an empty recall will auto-fetch+sign, no seeding needed), `facts_count` (how many cells already cached), `last_attested_unix_s` (freshness), `tempo_seconds` (slot duration), `history_available_from` / `history_available_to` (oldest/newest Unix epoch the materializer can fetch, use these to bound an `emem_backfill` request), and `responder_pubkey_b32` (the ed25519 key whose signature attests this band, use to detect federation / multi-responder setups). Bands with `has_materializer=false AND facts_count=0` are cube placeholders without a wired connector, don't bother recalling them. Example arguments: {}
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
emem_cube_resolve Dereference an emem:cube: field-over-time token ~356
Resolve emem:cube:<aoi_cid>:<band>:<tslot_lo>..<tslot_hi>:<derivation_cid> back to its signed cube record and the ordered member emem:raster: tokens. Same fail-closed rule as emem_raster_resolve: the cid must be a band_cube@1 derivation, the token's aoi_cid, band, and tslot range must each match the signed record, and cube_cid is recomputed from the record's members so an altered membership is refused (typed 409), not silently served. Returns the full record plus a member_tokens list you resolve independently with emem_raster_resolve or batch through resolve_many; each member's artifact is at GET /v1/artifacts/{cid}, immutable. The receipt binds (aoi_cid, derivation_cid) through the FIELD preimage segment. When to use: Call when you receive an emem:cube: token from another agent and want the verified time series behind it: this returns the bound record and the member raster tokens, then resolve those (or resolve_many) and re-hash each artifact against its artifact_cid for the spot-check tier. For a single emem:raster: token use emem_raster_resolve; for emem:fact: use emem_memory_token_resolve. Example arguments: {"token":"emem:cube:<aoi_cid>:s2.B08:20600..20651:<derivation_cid>"}
| Name | Type | Req | Description |
|---|---|---|---|
| token | string | yes | emem:cube:<aoi_cid>:<band>:<tslot_lo>..<tslot_hi>:<derivation_cid> |
No output schema declared.
No examples provided.
emem_data_availability Per-band temporal coverage catalog ~195
Temporal catalog: for every materializable band the upstream-of-record window the data genuinely covers, the temporal `kind` (static | annual_snapshot | annual_stack | time_series | now_only | per_release), tempo seconds, upstream wire path, and whether `emem_backfill` is meaningful. When to use: Call before `emem_backfill` or any historical recall to check whether a band has a meaningful past at the requested time. Each entry includes `history_available_from_unix` / `history_available_to_unix` (and ISO strings) plus `backfill_supported`. Use this to avoid trial-and-error 422s on now-only bands (`weather.*`) and to enumerate the per-year `geotessera.YYYY` vintages the responder ships. The catalog is driven by the same registry the recall path consults, so what it lists is exactly what materializes. Example arguments: {}
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
emem_deforestation_alert Deforestation alert proxy (NDVI drop + embedding change) ~382
Composite deforestation-alert score: `alert_score = 0.5·clamp01(ndvi_drop/0.30) + 0.5·clamp01(embedding_change/0.20)`, where `ndvi_drop = max(0, ndvi_modis_baseline − ndvi_now)` and `embedding_change = 1 − cos(tessera_latest, tessera_prev)`. Each half degrades INDEPENDENTLY and honestly: if a band is missing, that half is dropped AND the output is renamed so a half-score can never be mistaken for the full composite. If NEITHER half is computable the response is a signed `inconclusive` carrying no number. Every response also carries a machine-readable `degraded` boolean plus `degraded_reason` (closed set: `embedding_half_unavailable`, `ndvi_half_unavailable`, `no_inputs`) and `degraded_message`, so a caller gates on the flag instead of parsing prose. When to use: Call to flag recent forest-loss-like change at a known cell when you want a single 0..1 alert score rather than a full ensemble. Gate on `degraded`/`degraded_reason`: a half-score (`degraded:true`) must NOT be thresholded against the 0.6 alert gate. Read the renamed score field and the present/absent halves, don't treat a half-score as the full composite. For multi-cell open-world discovery use `emem_hunt` (deforestation event); for the three-encoder change ensemble use `emem_triple_consensus`; for regulatory EUDR evidence use `emem_eudr_dds`. Example arguments: {"cell":"defi.zb493.xoso.zcb6a"}
| Name | Type | Req | Description |
|---|---|---|---|
| cell | string | yes | cell64 or place name. |
No output schema declared.
No examples provided.
emem_derive Register your own derivation over emem facts ~1,353
Register a value YOU computed from facts this responder holds, and get back a citeable `emem:fact:` token whose lineage terminates in emem-signed measurements. The registered fact names its parents by CID, so a stranger walks the DAG down to signed sensor data instead of trusting your summary. Requires an ed25519 `attester` block. What the responder signs is narrow and it says so on the response: that YOU submitted this derivation, over these parents, at this time, and it stored it. NOT that the value is true. Algebra: derive. When to use: Call when you have computed something from emem facts (a delta, a zone classification, a per-plot verdict, a model output) and need to hand another agent a token for it rather than a claim. Every input token must already resolve here; recall or backfill the parents first. Provenance class is model_output or human_curated; the sensor classes are refused, since this responder did not compute your value. Note the tenancy rule: a derived fact carries no canonical (cell, band, tslot) key, so it will NOT appear in anyone's emem_recall at that cell. That is the point: you are getting citation and resolution, not an injection into the shared commons. Read it back with emem_memory_token_resolve, or list your own with emem_derive_list. Idempotent per (your key, derivation body): re-registering an identical derivation returns the same token rather than a twin, so retrying a timed-out call is safe. Example arguments: {"fn_key":"same_doy_ndvi_delta@1","inputs":["emem:fact:defi.zb493.xoso.zcb6a:cxjiu7l54ujzrpnekp24n4534yojpue4mprddbvevnqtti3lh5bq"],"cell":"defi.zb493.xoso.zcb6a","band":"indices.ndvi","tslot_window":[19723,20634],"op":"delta","value":0.14,"confidence":0.9,"provenance_class":"model_output"}
| Name | Type | Req | Description |
|---|---|---|---|
| attester | object | — | ed25519 caller binding: {pubkey_b32, sig_b32}, where sig signs blake3("emem.memory_write|derive|/v1/derive|"+body_hash) and body_hash = blake3(the CBOR of {fn_key, inputs, cell, band, tslot_window, o… |
| band | string | yes | Band key the derivative pertains to, e.g. `indices.ndvi`. |
| budget_ms | integer | — | Optional soft budget in ms. If registration does not finish in time, returns 202 {status: pending} and completes in the background; since derive is idempotent per (attester, body), re-POSTing the ide… |
| cell | string | yes | cell64 to anchor the derivative at. |
| code_cid | string | — | Optional blake3 of the code/formula that computed the value. GC-1 tier-1: if `op` is a pure scalar function this responder recognises (delta = inputs[1]-inputs[0], mean, sum), pinning a `code_cid` ma… |
| confidence | number | yes | YOUR confidence in the value. The responder records it; it does not check it. |
| fn_key | string | yes | Your derivation recipe key, e.g. `same_doy_ndvi_delta@1`. Free-form: it names YOUR function, not an entry in this responder's registry, and the responder never runs it. |
| inputs | array | yes | Parent tokens, each `emem:fact:<cell64>:<fact_cid>`. EVERY one must resolve to a fact this responder already holds, or the call is refused naming the one that did not: lineage that cannot be walked i… |
| op | string | yes | Operator: delta | mean | trend | rate | anomaly. |
| provenance_class | string | yes | How the value was produced. `direct_sensor` and `deterministic_index` are refused as a DECLARATION: this responder did not compute your value and will not take your word that it is recomputable. It c… |
| tslot_window | array | yes | Inclusive [start, end] tslot window the derivation spans. |
| value | — | yes | The value you computed. Any JSON value. |
No output schema declared.
No examples provided.
emem_derive_list List one attester's registered derivations ~296
List the derivations registered by one ed25519 key, optionally filtered to a cell (and then a band). The explicit opt-in read for caller-registered derivatives: they hold no canonical key, so no default read path returns them, and this is the only way to enumerate one rather than resolve it by token. When to use: Call to enumerate your own derivations (pass your pubkey_b32), or to inspect what a specific attester has claimed when you already have a reason to trust or audit that key. There is no all-attesters form: naming whose claims you want is the contract, not a filter you can omit. Example arguments: {"attester_pubkey_b32":"n2vqbtqx4dmz3xk6yqhkdmnjmfqvnqzq2qgz7ymkflgnvzptdcaa","cell":"defi.zb493.xoso.zcb6a"}
| Name | Type | Req | Description |
|---|---|---|---|
| attester_pubkey_b32 | string | yes | The base32 pubkey whose derivations to list. Required: there is no query that returns every caller's derivations, because derivations are attester-scoped by design. |
| band | string | — | Optional band filter. Only narrows when `cell` is also set (the index is keyed cell-before-band). |
| cell | string | — | Optional cell64 filter. |
| limit | integer | — | — |
No output schema declared.
No examples provided.
emem_diff Signed delta between two tslots ~267
Compute a DerivativeFact (delta) between a band's values at two tslots. Algebra: diff. For a time-varying band the response also carries an unsigned `phenology` advisory: the day-of-year of each tslot, their gap, and a `caution` when the two dates sit at different points in the seasonal cycle, because that delta mixes phenology with real change (the '4 prospered / 0 stressed' trap). It surfaces the bias rather than rejecting the call; the advisory never enters the receipt. When to use: Call when the user asks 'what changed between t1 and t2', 'give me the delta'. Returns a signed DerivativeFact + receipt; the delta itself is content-addressed and citable. Read the `phenology` block before treating a seasonal-band delta as change: if `same_doy` is false, compare the same day-of-year across years instead. Example arguments: {"cell":"damO.zb000.xUti.zde78","band":"indices.ndvi","tslot_a":0,"tslot_b":12}
| Name | Type | Req | Description |
|---|---|---|---|
| band | string | yes | — |
| cell | string | yes | — |
| tslot_a | integer | yes | — |
| tslot_b | integer | yes | — |
No output schema declared.
No examples provided.
emem_echo_verify Check a value against the fact it cites, before you publish it ~402
Grade a value you are about to emit against the signed fact your citation points at. Returns `matches` and, when it does not, the `drift` between what you were about to say and what emem holds. This is the step that turns a transcription error into a caught event instead of a silent wrong number: a model that resolves a fact correctly can still retype `0.2411` for `0.241103`, and nothing else in the loop notices. Algebra: verify. When to use: Call immediately before publishing, logging, or handing on any value you took from an emem fact, and treat a false `matches` as a gate rather than a warning. Pair it with `value_verbatim` from resolve: quote that exact decimal string rather than reformatting the number, then echo-verify what you actually emitted. For a due-diligence or compliance record this is what lets you assert `every cited value was echo-verified` with a signed check per citation instead of a promise. Accepts a bare cid too, so a damaged citation still grades rather than failing closed. Example arguments: {"token":"emem:fact:defi.zb572.xoso.zb1ec:2p6sz3pv45ndkyqstir4nd6bjnzx63rrcb4pnhgahsnb2oczh5aq","claimed_value":"-0.0558"}
| Name | Type | Req | Description |
|---|---|---|---|
| claimed_value | — | yes | The value you are about to publish, as a string or a number. A string is compared verbatim first, which is what catches a retype a float comparison would forgive. |
| strict | boolean | — | Require BYTE-IDENTICAL equality. Default false, which also accepts a numerically equal value spelled differently (0.50 for 0.5). |
| token | string | yes | The citation you used. Any form resolve accepts, including a bare cid (answers degraded). |
No output schema declared.
No examples provided.
emem_edges_recall Recall temporal knowledge-graph edges ~773
Read temporal knowledge-graph edges (subj --pred--> obj, valid over [valid_from, valid_to)), bi-temporally filtered, in EITHER direction. Forward (`subj`, direction="out", the default): edges originating at a subject fact. Reverse (`obj`, direction="in"): edges pointing AT a fact, what disagrees-with / supersedes / relates-to it. Returns a signed list of edges plus the distinct neighbour fact CIDs (`objs` for out, `subjs` for in); the receipt commits the returned edge CIDs into its signature preimage. When to use: Call this to read the typed CONNECTIONS of a fact, what disagrees with it, what superseded it, what relates to it, as of a point in time. A plain recall gives you the fact; this gives you how that fact links to others in the memory graph. Ask it when the user says 'what is this related to', 'what replaced this observation', 'why is this value contested', or 'what did this place's relations look like as of date X'. Pick a direction: set `subj` (direction="out") to ask 'what does this fact point at'; set `obj` (direction="in") to ask the REVERSE, 'what disagrees-with / supersedes / points-at this fact'. Set exactly one of subj/obj, an ambiguous or empty request errors honestly rather than returning a silent empty. Pass `as_of_tslot` to get the latest edge per neighbour whose valid interval covers that moment (newer edges shadow older, nothing is deleted); pass `pred` (e.g. `disagrees_with`, `supersedes`) to filter, or omit it (empty string) for every predicate. Tip: a quicker way to get a fact + its outbound edges in one shot is `emem_recall` with include:["edges"]. Follow each edge's `obj`/`subj` with `emem_fetch` to resolve the related fact, or `emem_verify_receipt` to confirm the signature offline. Example arguments: {"subj":"qbq2dy7adyuvozs7s3gqg5jnpkcwq2duegltjyhbxsivuqbpjofq","pred":"replaced_by","as_of_tslot":1767225600}
| Name | Type | Req | Description |
|---|---|---|---|
| as_of_tslot | integer | — | Valid-time bound. Returns the latest edge per neighbour whose [valid_from, valid_to) interval covers this tslot; supersession keeps the newest edge. Omit for all edges regardless of valid-time. |
| direction | string | — | Traversal direction. "out" (default) = subj→objs; "in" = obj→subjs. Inferred from which of subj/obj you set when omitted; an ambiguous (both set) or empty (neither set) request is rejected with an ho… |
| limit | integer | — | Max edges to return. |
| obj | string | — | Object fact CID (reverse, direction="in"): edges TERMINATING at this fact ("what points at this fact", what disagrees-with / supersedes / relates-to it) are returned. Set exactly one of `subj` or `ob… |
| pred | string | — | Predicate filter (e.g. `replaced_by`, `disagrees_with`, `supersedes`, `co_located_with`). Empty string (default) scans every predicate for the anchor fact. |
| subj | string | — | Subject fact CID (forward, direction="out"): edges ORIGINATING at this fact ("what does this fact point at") are returned. Set exactly one of `subj` or `obj`. |
No output schema declared.
No examples provided.
emem_elevation Coherent elevation across Cop-DEM + GMRT + WorldCover ~274
One-shot elevation answer that fuses Cop-DEM 30 m (land), GMRT (ocean topobathy), and ESA WorldCover (water mask) into a single signed scalar at a place or coordinate. Returns `elevation_m`, the source actually used, and a `coherence_note` when the two surfaces disagree at the coast. When to use: Use when the user asks 'how high is X' or 'what's the elevation at this lat/lng' and you want the correct answer regardless of whether the cell is land, water, or coastline, the handler picks Cop-DEM for land and GMRT for water and surfaces the choice. Pass `place` (free text), `lat`+`lng`, OR `cell`. Otherwise, prefer emem_recall with `copdem30m.elevation_mean` / `gmrt.topobathy_mean` individually. Example arguments: {"place":"Mount Everest"}
| Name | Type | Req | Description |
|---|---|---|---|
| cell | string | — | cell64 string, skip geocoding entirely. |
| lat | number | — | WGS-84 latitude. |
| lng | number | — | WGS-84 longitude. |
| place | string | — | Free-text place name. Resolved through the standard locate cascade. Provide this OR `lat`+`lng` OR `cell`. |
No output schema declared.
No examples provided.
emem_embedding_centroid Embedding centroid, mean-pooled GeoTessera vector for a region ~271
Mean-pool the 128-D GeoTessera embedding over a region's cells: centroid = (1/N) Σ v_i, plus the L2-normalised centroid and a content-addressed centroid_cid. The building block region_similarity composes. Region is {place} | {polygon_bbox} | {cells}. NaN dims are averaged over their finite contributors. CPU-only. When to use: Call when you need one representative embedding vector for an area, to feed similarity search, clustering, or a linear probe over places rather than single cells. Returns a stable centroid_cid for citation. Signed `inconclusive` when no cell in the region carried a vector. Example arguments: {"place":"Serengeti National Park","max_cells":64}
| Name | Type | Req | Description |
|---|---|---|---|
| cells | array | — | Explicit cell64 list (taken verbatim, capped by max_cells). Alternative to place/polygon_bbox. |
| max_cells | integer | — | Cap on cells sampled from the region; surfaced as coverage_capped. |
| place | string | — | Free-text place name; resolved through the layered geocoder to a polygon bbox, then sampled. One of place/polygon_bbox/cells required. |
| polygon_bbox | object | — | Explicit bbox; sampled on a grid. Alternative to place/cells. |
No output schema declared.
No examples provided.
emem_embedding_diversity Embedding diversity, landscape heterogeneity over a region ~294
Quantify how varied a region's landscape is: diversity = (1/(N(N-1))) Σ_{i<j} (1 − cosine(v_i, v_j)), the mean pairwise cosine distance over the region's GeoTessera embeddings. 0 = perfectly uniform; higher = more heterogeneous land cover (a determinantal-point-process / k-medoid diversity). Region is {place} | {polygon_bbox} | {cells}. CPU-only. When to use: Call for habitat-heterogeneity / biodiversity-proxy inputs, or to tell a monoculture from a mosaic landscape, or to rank regions by how mixed they are. Needs ≥2 embedding-covered cells, else a signed `inconclusive`. Pair with `emem_terrain` ruggedness for a fuller heterogeneity picture. Example arguments: {"place":"Okavango Delta","max_cells":64}
| Name | Type | Req | Description |
|---|---|---|---|
| cells | array | — | Explicit cell64 list (taken verbatim, capped by max_cells). Alternative to place/polygon_bbox. |
| max_cells | integer | — | Cap on cells sampled from the region; surfaced as coverage_capped. |
| place | string | — | Free-text place name; resolved through the layered geocoder to a polygon bbox, then sampled. One of place/polygon_bbox/cells required. |
| polygon_bbox | object | — | Explicit bbox; sampled on a grid. Alternative to place/cells. |
No output schema declared.
No examples provided.
emem_entity Mint or get a canonical object identity ~446
Give a real-world object (a bridge, a farm plot, a river, a named place) a single, shared, content-addressed identity that any agent resolves the same way. Returns an `entity_token` (`emem:entity:<entity_cid>`) plus a signed receipt that attests how the reference resolved. Two agents that name the same object mint the SAME entity_cid; when a stable external id (Overture GERS / OSM) is known it dominates identity, so divergent labels for one real object still collapse to one id. This is the object-level antidote to referential drift: 'the damaged bridge near the river' becomes one canonical thing every model reasons about, not a phrase each model re-interprets. When to use: Call when a conversation refers to a THING and you want a stable handle to it that survives summarization and travels between agents/turns/LLMs, before it drifts into 'that infrastructure issue'. Anchor it with `place`, a `cell`, or `lat`+`lng`. Hand the returned `emem:entity:` token to any other agent; they dereference the identical object. Recall/ask at the entity's `cell64` for signed facts about it. Example arguments: {"label":"Golden Gate Bridge","kind":"bridge","place":"Golden Gate Bridge, San Francisco"}
| Name | Type | Req | Description |
|---|---|---|---|
| cell | string | — | cell64 to anchor the object directly (no geocode). |
| external_ids | object | — | Stable ids that drive convergence. Caller-supplied values win over geocoder-derived ones. |
| kind | string | — | Object class: bridge, river, farm_plot, building, admin_division, place, custom, ... Defaults to "place". |
| label | string | yes | Human name of the object, e.g. "Golden Gate Bridge", "the north dam". Required. |
| lat | number | — | — |
| lng | number | — | — |
| parent | string | — | Optional parent entity_cid (containment). |
| place | string | — | Free-text place to anchor the object (geocoded). Provide place OR cell OR lat+lng. |
No output schema declared.
No examples provided.
emem_entity_link Attest that a phrasing/id denotes an existing object ~239
Record a signed equivalence: bind an alternate label or a stable external id (GERS / OSM / Wikidata) to an existing canonical object so future `emem_entity_resolve` calls on that phrasing converge to the same entity_cid. Builds the shared reference graph that keeps different agents' vocabularies pointing at one identity. When to use: Call when you learn that two phrasings denote the same object ('the north dam' == an existing entity), or to attach an authoritative external id to an object minted from free text. Example arguments: {"entity_token":"emem:entity:0a1b2c3d4e5f60718293","alias":"the north dam"}
| Name | Type | Req | Description |
|---|---|---|---|
| alias | string | — | An alternate label/phrasing that should resolve to this object. |
| entity_cid | string | — | The canonical object to attach an equivalence to. Provide entity_cid OR entity_token. |
| entity_token | string | — | A `emem:entity:<entity_cid>` handle for the same. |
| external_ids | object | — | Stable ids to bind to this object. |
No output schema declared.
No examples provided.
emem_entity_resolve Resolve a phrase (or emem:entity: token) to a canonical object ~279
Converge a fuzzy phrasing onto the canonical object other agents already minted, so everyone co-refers to the same identity instead of re-minting divergent ones. Pass `text` (e.g. "the collapsed span at the ford") to get ranked existing candidates; pass `near` to narrow to a place; or pass an `emem:entity:` `token` to dereference it directly to the signed entity body. Read-only. When to use: Call BEFORE minting when another agent may already have registered the object, or when you receive a `emem:entity:` token and want the object behind it. This is how two agents avoid referential drift: resolve first, mint only if nothing matches. Example arguments: {"text":"the golden gate bridge","near":"San Francisco"}
| Name | Type | Req | Description |
|---|---|---|---|
| k | integer | — | Max candidates (default 10). |
| label | string | — | Alias for `text`. |
| near | string | — | Optional place/cell to narrow to objects anchored nearby. |
| text | string | — | Fuzzy phrasing to resolve to an existing canonical object (e.g. "the damaged bridge near the river"). |
| token | string | — | A `emem:entity:<entity_cid>` handle to dereference directly to its signed object (bypasses the text search). |
No output schema declared.
No examples provided.
emem_errors Stable error code catalog ~45
Stable error code catalog. When to use: Call to enumerate the wire-stable error codes, useful when the LLM wants to programmatically branch on responses. Example arguments: {}
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
emem_eudr_dds EUDR Due Diligence Statement, polygon-in, signed Annex II envelope out ~759
Produce a Due Diligence Statement per Regulation (EU) 2023/1115 for one or more plots. Each plot carries operator-supplied geometry (GeoJSON Polygon for >4 ha, Point for ≤4 ha non-cattle per Article 2(28)), country of production (ISO3), Combined Nomenclature code (HS-6+), and quantity in kg. The endpoint applies the regulation's 10 % canopy / 0.5 ha / 5 m height forest definition (Article 2(4)) using the EU Commission's expected JRC GFC2020 V3 baseline plus Hansen GFC v1.12 loss-year confirmation; Sims et al. 2025 driver attribution and RADD SAR fallback layer on when those connectors are wired (Absence today). The response is an Annex II-shaped envelope with per-plot verdict (pass/fail/not_in_scope/indeterminate/below_mmu), failing-cell fraction, and signed fact CIDs for every per-cell verdict, operators quote them in the company's Article 12 record. Article 9(1)(b) legality (land tenure, FPIC, country-of-origin laws) is structurally out of EO scope; the response carries an explicit `legality_disclaimer` for that reason. When to use: Call when a commodity supplier or EU importer needs to evidence due diligence under Regulation (EU) 2023/1115. Use the plot-level signed receipts as evidence inside the operator's company record; pair with a partner legality module before submitting the final DDS to the EU Information System (TRACES NT). For a single plot, pass one entry in `plots`. For batch supply-chain audits, pass up to a few dozen plots in one call, the endpoint fans out per plot. Surface the failing-cell fraction, the chosen forest baseline, and the legality disclaimer in the user-facing response so the operator understands what the engine claims (and does not). Example arguments: {"plots":[{"plot_id":"farm-001","geometry_geojson":{"type":"Polygon","coordinates":[[[-60.5,-3.5],[-60.4,-3.5],[-60.4,-3.4],[-60.5,-3.4],[-60.5,-3.5]]]},"country_of_production":"BRA","commodity_hs":"0901","commodity_name":"coffee","quantity_kg":12000}],"operator":{"name":"Acme Coffee…
| Name | Type | Req | Description |
|---|---|---|---|
| cut_off_date | string | — | EUDR cut-off date in ISO 8601. The regulation's value is 2020-12-31; only loss after this date counts as failure. |
| forest_baseline_override | string | — | Optional baseline override. Default 'jrc_gfc2020_v3' is the EU Commission's expected (non-binding) baseline. Acceptable: 'jrc_gfc2020_v3', 'hansen_only', 'both'. |
| legality_module | string | — | Operator-chosen legality provider. Default null surfaces the explicit Article 9(1)(b) out-of-EO-scope disclaimer. |
| max_cells_per_plot | integer | — | Sample budget per POLYGON plot. Omit to auto-derive from polygon area (~110 cells/ha, clamped to 51,200) so the whole plot is evaluated; EUDR plots are typically large, so do not set a small value un… |
| operator | object | — | — |
| plots | array | yes | One or more plots to evaluate for EUDR compliance. |
No output schema declared.
No examples provided.
emem_explain_algorithm One-algorithm drill-down (formula + inputs + citation) ~193
Per-key drill-down on a single composition recipe, full body (kind, inputs, formula, output, citation, references) for ONE algorithm key. Companion to `emem_algorithms` (which is the catalog). When to use: Call when you already know the algorithm key (from `emem_algorithms`'s catalog or the topic registry) and need its full math. Cheaper than fetching the full catalog when you only need one entry. Returns the same structure that `/v1/algorithms/{key}` does. 404s with `cid_not_found` if the key isn't registered, call `emem_algorithms` for the live key list. Example arguments: {"key":"walkability_score@1"}
| Name | Type | Req | Description |
|---|---|---|---|
| key | string | yes | Algorithm key including version suffix, e.g. `walkability_score@1`. Get the live key list from `emem_algorithms`. |
No output schema declared.
No examples provided.
emem_fetch Resolve a fact by content-address (CID) ~276
Fetch a fact by its content-address (CID). Returns the full signed Primary or Absence fact, the same body served by REST `/v1/facts/{cid}`. Closes the citation loop: any fact_cid surfaced by recall, materialize, attest, or verify can be re-resolved by another agent without REST. When to use: Call whenever you have a `fact_cid` (e.g. from `emem_recall`'s response, an `emem_attest` receipt, an `emem_materializers` outcome, or a citation in another agent's reply) and need the full fact body, its value, unit, sources, signer, signed_at, and derivation. Particularly useful for verifying that a citation a downstream agent gave you actually resolves on this responder. The response is byte-identical across responders for the same CID, the CID itself is the validator. Example arguments: {"cid":"qbq2dy7adyuvozs7s3gqg5jnpkcwq2duegltjyhbxsivuqbpjofq"}
| Name | Type | Req | Description |
|---|---|---|---|
| cid | string | yes | Content-address of any persisted fact (Primary or Absence). Returned by every recall, attest, materialize, and verify call as `fact_cid` / `fact_cids`. |
No output schema declared.
No examples provided.
emem_field_boundaries Per-field agricultural boundaries (Fields of The World) ~413
Per-field agricultural-boundary polygons from the Fields of The World global product (~3.17B fields, 241 countries, 10 m resolution, CC-BY-4.0). Returns a GeoJSON FeatureCollection with the polygon geometries, FIBOA-compatible properties, and a planar `area_m2` per field, plus provenance (source CID, provider URL, license, attribution). When to use: Call when the user asks about farms, fields, parcels, croplands, plots, or agricultural boundaries inside a region, anywhere the OSM/Nominatim boundary alone is too coarse (the OSM polygon for a farm is its estate envelope; this returns the individual field polygons inside). Pass `place` (free-text) or `polygon_bbox`. For farms wider than ~10 km², split the bbox: the fetcher caps each call at 16 covering tiles. The receipt quotes `license: CC-BY-4.0` and `attribution: Fields of The World / Taylor Geospatial Institute`, surface both with any rendered map. For a one-shot "facts at every cell inside the farm PLUS the field polygons", call `emem_recall_polygon` with `include: ["ftw_fields"]` instead. Example arguments: {"polygon_bbox":{"min_lat":36.70,"max_lat":36.74,"min_lng":-119.84,"max_lng":-119.80}}
| Name | Type | Req | Description |
|---|---|---|---|
| place | string | — | Free-text place/farm/region name; resolved through the same layered geocoder as /v1/recall_polygon. REQUIRED unless `polygon_bbox` is provided. |
| polygon_bbox | object | — | Explicit bbox; alternative to `place`. |
| zoom | integer | — | Web-Mercator zoom level for the FTW PMTiles read. Default = library-picked min(14, archive.max_zoom). Higher zoom = sharper boundaries but more tiles per query (capped internally at 16, split very wi… |
No output schema declared.
No examples provided.
emem_find_similar k-NN over the corpus by embedding ~464
k-NN over the corpus by cell embedding or inline vector. When to use: Call when the user asks 'find places like X', 'where else looks like this', or hands an embedding to find neighbours. `key` is either a cell64 or `inline:[x,y,...]`. Default band is `geotessera` (128-D Tessera foundation embedding); pass `band: "geotessera.multi_year"` for the 1152-D 9-vintage (2017–2025) fusion. Example arguments: {"key":"damO.zb000.xUti.zde78","k":10}
| Name | Type | Req | Description |
|---|---|---|---|
| as_of_signed_at | string | — | Bi-temporal transaction-time bound (RFC 3339). Also applied to candidates BEFORE cosine. Same Lance-bypass note as as_of_tslot. |
| as_of_tslot | integer | — | 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→dr… |
| band | string | — | 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.bin1… |
| k | integer | — | — |
| key | string | yes | cell64 (look up that cell's vector) or 'inline:[x,y,...]' literal vector |
| mode | string | — | 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 = t… |
No output schema declared.
No examples provided.
emem_fleet Satellite / sensor lineage per band ~134
Per-band satellite-and-sensor fleet inventory, names the upstream platform (e.g. Sentinel-2A/B, MODIS Aqua/Terra, Landsat-8/9), revisit cadence, native resolution, and license for every materialized band. Lets an agent attribute imagery products correctly and pick the right band when revisit cadence matters. When to use: Call when the user asks 'which satellite is this from', 'what's the revisit time', or needs source attribution for a derived answer. Pair with emem_materializers for the wire path and emem_sources for the connector-level metadata. Example arguments: {}
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
emem_forest Forest signals (Hansen GFC + ESA WorldCover) ~357
Recall the signed forest facts at a place's cell64: Hansen Global Forest Change (tree cover 2000 baseline + year-of-loss) + ESA WorldCover 2021 land class, attested on a miss; each carries a citeable fact_cid. When to use: Use when the user asks about deforestation, canopy cover, forest loss, or wants a forest-vs-not classification. Hansen gives year-of-loss for any cell with disturbance since 2001; WorldCover gives the current land class. Example arguments: {"place":"Amazon, Brazil"}
| Name | Type | Req | Description |
|---|---|---|---|
| band | string | — | Optional single band override, replaces the endpoint's default band set with this one. |
| bands | string | — | Optional CSV of band keys, replaces the endpoint's default band set. |
| include | array | — | Opt-in heavy response sections. Default response omits per-cell arrays to stay under MCP's 25 KB cap. Name specific sections to include them. |
| lat | number | — | WGS-84 latitude. Paired with `lng`. Use when you already have coordinates. |
| lng | number | — | WGS-84 longitude. Paired with `lat`. |
| n_cells | integer | — | Polygon fan-out width. `n_cells: 1` = point at centroid. Defaults vary per endpoint (1 for /v1/at, 16 for single-band endpoints). |
| place | string | — | Free-text place name. Resolved through the standard /v1/locate cascade (wide-bbox → embedded → GeoNames → cache → Photon → Nominatim). Provide this OR `lat`+`lng`. |
| tslot | integer | — | Optional tslot offset (band-tempo-relative). |
No output schema declared.
No examples provided.
emem_functions Active function registry ~52
Active function registry (derivation recipes). When to use: Call when you need to know which derivative ops are available for `emem_diff` or how a band is computed from upstream sources. Example arguments: {}
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
emem_grid_info Active grid encoding ~165
Active grid encoding: cell64 ground resolution, lat/lng axis sizes, DGGS lineage. When to use: Call once at session start (or when the user asks about cell resolution / 'how big is a cell'). Returns the actual ground resolution today (~9.54 m × 9.55 m square at the equator (lat 21 bits × lng 22 bits, matching Sentinel-1/Sentinel-2 native pixel pitch). The cell64 bit layout reserves a resolution-tag field for future hierarchical refinement targeting H3-equivalent res-13 (~3.4 m) cells in v0.1.) and the spec target. Useful before you reason about whether one cell is enough or whether you need `emem_recall_polygon`. Example arguments: {}
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
emem_heat_solve 2-D heat-equation forecast (urban LST evolution) ~353
Forward-step 2-D explicit finite-difference solver for the heat equation ∂u/∂t = α∇²u over a 3×3 cell stencil centred on `cell`. Reads `modis.lst_day_8day` (Land Surface Temperature) at the centre and 8 cell64 neighbours, integrates N hours ahead under a CFL-stable timestep, returns a signed forecast. Real PDE rollout, not a decay-scoring heuristic. When to use: Use when the user wants a short-horizon LST forecast (urban heat island, surface-temperature evolution, heatwave onset modelling) at a specific cell. Default α=1e-6 m²/s matches urban surface diffusivity (Oke 2017); pass a smaller α for water bodies or higher for vegetated surfaces. The solver caps at one-week horizons because the 8-day MODIS composite stops being a representative initial condition past that. Each call materialises 9 MODIS facts (one per neighbour) on miss, first call ~5 s cold, ~30 ms warm. Receipt cites all 9 input fact CIDs. Example arguments: {"cell":"damO.zb000.xUti.zde78","hours_ahead":6}
| Name | Type | Req | Description |
|---|---|---|---|
| cell | string | yes | cell64 string. Forecast LST evolution at this cell. |
| diffusivity_m2_per_s | number | — | Thermal diffusivity α (m²/s). Default urban surface (Oke 2017 §2.3); use ~5e-7 for vegetation, ~1.4e-7 for water. |
| hours_ahead | number | — | Forecast horizon in hours; capped at 168 (one week). |
No output schema declared.
No examples provided.
emem_hunt Hunter mode, find event hotspots over a region ~633
Event-discovery sweep: pick an event keyword (algal_bloom, deforestation, flood_extent, wildfire, urban_heat_island, methane_plume, landslide, drought, soil_salinity, crop_stress, water_turbidity, oil_slick) plus a region (free-text name or polygon_bbox). The responder geocodes the region, fans out across up to 32 sampled cells, recalls each event's primary scalar input band, and returns the top 8 hotspots ranked by that scalar, each an attested entry in the shared memory carrying its cell64, lat/lng, the recalled value, a fact_cid for citation, and a scene.png URL. Bypass for free-text input is `emem_ask` (the classifier in /v1/ask routes "find X in Y" questions to the same hunter path). When to use: Call when the user asks an open-world discovery question ("find oil spills in the Persian Gulf", "where is deforestation happening in the Amazon", "show me algal blooms in Lake Erie", "hunt wildfires across California"). Surface 3–8 hotspots with their scene.png as image attachments and quote at least one fact_cid. For `oil_slick` the responder honestly reports `not_yet_implemented` and points at SAR-darkening + turbidity proxies, don't fabricate detections. The ranking uses the algorithm's primary scalar input only; for the full per-cell algorithm score, fetch the formula at /v1/algorithms/<key> and apply it client-side over the same recalled bands. Example arguments: {"event":"algal_bloom","region":"Lake Erie"}
| Name | Type | Req | Description |
|---|---|---|---|
| event | string | yes | Event keyword. Maps to one registered detection algorithm: algal_bloom → algal_bloom_chlorophyll_ndci@1, deforestation → deforestation_alert_ndvi_drop@1, flood_extent → flood_extent_sar_threshold@1,… |
| polygon_bbox | object | — | Explicit polygon bbox; alternative to `region`. Provide when you already have coordinates from a prior locate / recall_polygon call. |
| region | string | — | Free-text region (e.g. "Persian Gulf", "Sahel", "Lake Erie", "California"). Resolved through the same geocoder as /v1/locate. REQUIRED unless `polygon_bbox` is provided. |
No output schema declared.
No examples provided.
emem_intent Intent-routed planner ~160
Submit a typed Intent; receive a plan or executed result. When to use: Call when the user asks something like 'where is X' or 'is A like B' and you don't want to pick a primitive yourself, the planner maps Intent variants to the right tool call. Example arguments: {"type":"what_is_here","cell":"damO.zb000.xUti.zde78"}
| Name | Type | Req | Description |
|---|---|---|---|
| a | string | — | — |
| b | string | — | — |
| band | string | — | — |
| cell | string | — | — |
| claim | object | — | — |
| description | string | — | — |
| k | integer | — | — |
| key | string | — | — |
| type | string | yes | — |
| window | array | — | — |
No output schema declared.
No examples provided.
emem_jepa_predict Constrained JEPA-pattern next-month NDVI predictor ~365
Predict next-month NDVI at a cell using a constrained JEPA-pattern AR(2) seasonal predictor. Reads up to 24 past months of `indices.ndvi`, fits a closed-form predictor `y_{t+1} = α·(lag-12 NDVI or recent mean) + β·(last + slope) + γ·recent_mean`, returns the prediction clamped to NDVI's physical range. Coefficients (α=0.6, β=0.3, γ=0.1) are NOT learned, they're fixed from the agricultural-NDVI literature. For the learned multi-band dynamics head, see `emem_jepa_predict_v2` (jepa_temporal_predictor@2). When to use: Use when the user wants a one-month-ahead NDVI forecast at a specific cell (crop-stress monitoring, growing-season tracking, vegetation-anomaly anticipation). Lookback defaults to 6 months; if fewer monthly tslots are attested at this cell, the predictor uses what's there and surfaces the count in `lookback_months_used`. Returns 422 if no NDVI history exists at the cell, chain to `emem_backfill` first to seed history. Receipt cites every input NDVI fact CID. Example arguments: {"cell":"damO.zb000.xUti.zde78","lookback_months":6}
| Name | Type | Req | Description |
|---|---|---|---|
| band | string | — | Band to forecast. v1 supports 'indices.ndvi' only. |
| cell | string | yes | cell64 to forecast at. |
| forecast_horizon_months | integer | — | Horizon in months ahead. v1 supports 1 only. |
| lookback_months | integer | — | How many past months of history to read. |
No output schema declared.
No examples provided.