Skip to main content
Glama

emem — протокол памяти Земли для ИИ-агентов

Цитируемая, контентно-адресуемая, подписанная память о каждом месте на Земле. 1 протокол. 8 примитивов чтения. Квитанции ed25519. Никаких ключей для L0/L1. Apache-2.0. Только чистый Rust + открытые данные.

License Rust MCP OpenAPI Container HF Space CI

GET   /health                    POST  /v1/recall          POST  /v1/find_similar
GET   /v1/agent_card             POST  /v1/compare         POST  /v1/diff
GET   /openapi.json              POST  /v1/query_region    POST  /v1/trajectory
GET   /.well-known/emem.json     POST  /v1/verify          POST  /v1/intent
GET   /v1/demos                  POST  /v1/attest          POST  /mcp
                                 POST  /v1/verify_receipt  GET   /v1/facts/:cid

Что это такое

emem — это протокол, а не сервис, для контентно-адресуемой памяти Земли. Каждый факт о каждом месте получает стабильный CID, производный от канонического CBOR его полезной нагрузки (cell × band × tslot). Каждое чтение — это подписанная квитанция, которую любой клиент может проверить офлайн с помощью открытого ключа ed25519 отвечающей стороны.

emem создан для ИИ-агентов: когда пользователь упоминает место, агент должен вызвать emem и сослаться на receipt.fact_cids[0]. Протокол одинаково хорошо работает через обычный REST, MCP JSON-RPC 2.0 и пользовательские действия OpenAPI 3.1.

Зачем это нужно агентам

LLM выдумывают пространственные факты. Без проверяемого, контентно-адресуемого уровня памяти любой ответ на вопрос «что находится в месте X?» невозможно проверить. emem исправляет это:

  • присваивая каждому пространственному факту cid, который обе стороны пересчитывают побайтово,

  • подписывая каждое чтение с помощью ed25519, включая открытый ключ отвечающей стороны, чтобы квитанцию можно было проверить офлайн,

  • покрывая всю Землю квадратным адресом cell64 (~10 м × ~10 м на экваторе, широта 21 бит × долгота 22 бита — соответствует собственному шагу Sentinel-1/-2). Биграммный алфавит кодека упорядочен по Гильберту, поэтому соседние ячейки получают визуально похожие строки, но геометрия представляет собой квадратную сетку.

Быстрый старт

Вариант A — Docker (инструментарий Rust не требуется)

docker run --rm -p 5051:5051 -v emem-data:/var/emem \
  ghcr.io/vortx-ai/emem:latest
curl -s http://localhost:5051/health

Вариант B — HuggingFace Space

Размещенный экземпляр находится по адресу huggingface.co/spaces/vortx-ai/emem. Обращайтесь к ${SPACE_URL}/mcp из любого MCP-клиента, чтобы взаимодействовать с ним.

Вариант C — Сборка из исходного кода

# 1) Build the workspace.
cargo build --release --workspace

# 2) Run the server (defaults: 0.0.0.0:5051, persistent storage at ./var/emem).
EMEM_BIND=0.0.0.0:5051 EMEM_DATA=./var/emem ./target/release/emem-server

# 3) Hit it.
curl -s http://localhost:5051/health
curl -s -X POST http://localhost:5051/v1/recall \
  -H 'content-type: application/json' \
  -d '{"cell":"damO.zb000.xUti.zde78"}'   # Mt Fuji

MCP / Claude Desktop / Cursor / Cline

Готовые к вставке конфигурации находятся в examples/:

платформа

файл

Claude Desktop

examples/claude-desktop.json

Claude Code

examples/claude-code.mcp.json

Cursor

examples/cursor.mcp.json

Cline (VS Code)

examples/cline.mcp.json

OpenAI GPT

examples/openai-gpt-action.json

LangChain

examples/langchain.py

LlamaIndex

examples/llamaindex.py

Полное руководство по интеграции агентов находится в docs/AGENTS.md.

Живые сквозные демонстрации

Два CLI-бинарных файла выполняют полный протокол против запущенного сервера и записывают файлы запроса + ответа + квитанции для каждого шага в var/demos/<UTC>/:

./target/release/emem-livedemo        # synthetic data, every primitive
./target/release/emem-realdemo        # real Copernicus DEM 30m S3 tiles

Сервер предоставляет артефакты трассировки по адресу GET /v1/demos.

Как это работает

                ┌──────────────┐                  ┌────────────────────┐
   user ──────► │ AI agent     │ ──────► /v1/    │ emem responder     │
                │ (Claude /    │  /mcp           │  ┌──────────────┐  │
                │  Cursor /    │  /openapi.json  │  │ ed25519 key  │  │
                │  GPT / etc)  │                 │  └──────────────┘  │
                └──────┬───────┘                 │  ┌──────────────┐  │
                       │                         │  │ sled cache   │  │
                       │  signed receipt         │  └──────────────┘  │
                       ▼                         │  ┌──────────────┐  │
                ┌──────────────┐                 │  │ merkle log   │  │
                │ user reply   │                 │  └──────────────┘  │
                │ + cid        │                 │  ┌──────────────┐  │
                └──────────────┘                 │  │ vsicurl COG  │ ──► open data
                                                 │  └──────────────┘  │   (Cop-DEM, JRC,
                                                 └────────────────────┘    Hansen, ESA…)

Алгебра адресов (стоимость токенов)

поле

биты

формат передачи

токены

cell

64

4 BPE биграммы

≤ 4

tslot

64

base32 short

≤ 2

vec

1792 D fp16

12-байтовый префикс

≤ 3

cid

32 B

8-байтовый префикс

≤ 3

Криптография: хеширование blake3, подписи ed25519, CIDs в формате base32-nopad-lowercase. Квитанции подписываются через blake3(request_id || served_at || primitive || cells || fact_cids), поэтому любой клиент проверяет их офлайн с помощью открытого ключа отвечающей стороны в /.well-known/emem.json.

Полная математика + архитектура в docs/WHITEPAPER.md. Спецификация формата передачи в docs/SPEC.md.

Открытый исходный код, открытые данные

emem поставляется только с зависимостями с открытым исходным кодом и считывает данные только от провайдеров открытых данных в своей сборке по умолчанию. Никаких API-ключей, никаких учетных данных оператора, никакой привязки к SaaS.

вопрос

как это обрабатывается

лицензия кода

Apache-2.0 (этот репозиторий)

лицензии библиотек

Все зависимости MIT / Apache-2.0 / BSD / ISC — см. NOTICE

лицензии данных

Copernicus DEM (открытые), JRC GSW (CC-BY 4.0), Hansen GFC (открытые), ESA WorldCover (CC-BY 4.0), GHSL / WorldPop (CC-BY 4.0), OSM (ODbL) — см. NOTICE

аутентификация

отсутствует для чтений L0/L1; ключ аттестатора ed25519 для записей L2

транспорт

HTTPS через встроенный rustls + Let's Encrypt ACME (без Cloudflare, без прокси)

Структура рабочего пространства

emem/
├── Cargo.toml                # workspace root
├── crates/
│   ├── emem-core/            # types, manifests, errors
│   ├── emem-codec/           # cell64, cid64, vec64, hilbert
│   ├── emem-fact/            # canonical CBOR + facts + receipts
│   ├── emem-claim/           # structured claims, verify outcomes
│   ├── emem-cache/           # sled hot cache (cell64 → cid64 → fact)
│   ├── emem-fetch/           # vsicurl Range reads, source connectors
│   ├── emem-storage/         # Storage trait, append-only merkle log
│   ├── emem-cubes/           # 1792-D voxel cube loader (legacy AgriSynth bootstrap)
│   ├── emem-primitives/      # recall, compare, find_similar, …
│   ├── emem-attest/          # merkle root, batch verify
│   ├── emem-intent/          # intent → plan
│   ├── emem-mcp/             # MCP tool surface
│   ├── emem-api-rest/        # axum router + OpenAPI + content nego
│   └── emem-cli/             # emem-server, emem-livedemo, emem-realdemo
├── docs/                     # SPEC, WHITEPAPER, AGENTS, DEPLOY
├── examples/                 # paste-ready MCP configs
└── web/                      # landing surface (HTML, JSON, llms.txt)

Развертывание

Для полноценного многоканального развертывания (GitHub public, GHCR, зеркало Docker Hub, HuggingFace Space, реестр MCP-серверов, PR в awesome-mcp-servers), следуйте docs/GO_LIVE.md.

См. docs/DEPLOY.md для получения полной информации о развертывании для самостоятельно размещенного экземпляра в стиле emem.dev. Кратко для emem.dev:

  1. EMEM_TLS_DOMAINS=emem.dev,www.emem.dev EMEM_TLS_CONTACT=mailto:avijeet@vortx.ai ./target/release/emem-server

  2. откройте :443 в вашем списке облачной безопасности,

  3. setcap 'cap_net_bind_service=+ep' ./target/release/emem-server,

  4. укажите A-запись emem.dev на публичный IP хоста — готово.

Сервер выполняет собственное TLS + Let's Encrypt ACME через rustls-acme / TLS-ALPN-01 (требуется только :443; без :80, без Cloudflare, без Caddy).

Участие в разработке

Проблемы и PR приветствуются — см. CONTRIBUTING.md для цикла разработки, CODE_OF_CONDUCT.md и SECURITY.md для раскрытия уязвимостей.

Лицензия

Apache License 2.0 — см. LICENSE и NOTICE.

A
license - permissive license
-
quality - not tested
C
maintenance

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Vortx-AI/emem'

If you have feedback or need assistance with the MCP directory API, please join our Discord server