Repository navigation
Expand file tree
/
Copy pathserver.json
More file actions
121 lines (121 loc) · 6.28 KB
/
Copy pathserver.json
File metadata and controls
121 lines (121 loc) · 6.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
{
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
"name": "io.github.Vortx-AI/emem",
"title": "emem, the verifiable memory protocol for the physical world",
"description": "Shared, verifiable memory for machines and AI. Encode where data lives; decode with any AI.",
"version": "2.4.4",
"websiteUrl": "https://emem.dev",
"keywords": [
"memory",
"agent-memory",
"verifiable",
"robotics",
"mcp",
"model-context-protocol",
"ed25519",
"content-addressed",
"earth-observation",
"geospatial",
"no-api-key"
],
"categories": [
"data",
"geospatial",
"earth-observation"
],
"repository": {
"url": "https://github.com/Vortx-AI/emem",
"source": "github"
},
"icons": [
{
"src": "https://emem.dev/favicon.svg",
"mimeType": "image/svg+xml",
"sizes": [
"any"
]
}
],
"x-emem": {
"operator": {
"name": "Vortx AI Private Limited",
"country": "India",
"url": "https://vortx.ai"
},
"contact": {
"name": "Avijeet",
"email": "avijeet@vortx.ai",
"url": "https://emem.dev"
},
"privacyPolicyUrl": "https://emem.dev/privacy",
"termsOfServiceUrl": "https://emem.dev/terms",
"supportUrl": "https://emem.dev/support",
"issuesUrl": "https://github.com/Vortx-AI/emem/issues",
"documentationUrl": "https://emem.dev/whitepaper",
"directoryCompliance": {
"annotations": "every tool emits title + annotations.{readOnlyHint,destructiveHint} on tools/list",
"transport": "MCP Streamable HTTP (2025-03-26) over HTTPS",
"toolListing": "One tools/list at the advertised /mcp, with no cursor, returns the WHOLE 18-tool core surface in a single page (about 64 KB) and ends the chain there: nextCursor is null, so a scanner that takes page one and stops gets a complete, callable profile rather than a fragment. /mcp/full advertises all 115 across 7 pages (about 290 KB in total). The split is listing-only: tools/call dispatches any of the 115 by name at either endpoint, and the emem_tools tool maps the full surface on demand. /mcp is advertised deliberately, so a host connecting cold from a directory spends about 64 KB of context in one round trip rather than 290 KB over seven. Byte figures are measured and approximate; the tool count is exact.",
"auth": "No account, API key or OAuth token is required, and none is issued. Reads are unauthenticated and every stored memory is world-readable. Writes are unauthenticated but not anonymous: the MCP write surface (emem_memory_create, emem_memory_str_replace, emem_memory_insert, emem_memory_delete, emem_memory_rename) and the REST attestation endpoints (POST /v1/attest, POST /v1/challenge) each require an ed25519 `attester` binding over a blake3 preimage of (verb, path, body_hash). Writes under /memories/by_attester/<pubkey8>/ are accepted only from the key whose shortcode matches; elsewhere the first attester to create a path owns it and only that key may change it; and a legacy record carrying no persisted attester is frozen, refused to every key including the operator's, because no key can prove ownership of it. Cross-key writes return 403 memory_namespace_violation.",
"dataHandling": "Agent-written memory files persist and are world-readable by default. Entries written with kind: vault are AEAD-sealed against other callers, but the key derives from this responder's own ed25519 secret, so the operator can read vault plaintext; encrypt client-side if that matters. emem_memory_delete unlinks the path from the index but the content-addressed blob and prior versions remain, because the write log is append-only and an issued receipt must stay verifiable. See https://emem.dev/privacy for what is stored, for how long, how to enumerate your own files, and how to request operator erasure.",
"originAllowlist": "EMEM_ALLOWED_ORIGINS env var (comma-separated) flips CORS from `*` to a strict allowlist with Vary: Origin"
},
"staysCurrentAt": {
"capabilityManifest": "https://emem.dev/.well-known/emem-manifest.json",
"readOnlyProfile": "https://emem.dev/.well-known/emem-readonly.json",
"capabilityIndex": "https://emem.dev/v1/intents",
"note": "Poll the capability manifest instead of copying counts into a listing. It carries server_version, protocol_version, tool_count by tier and capability_manifest_cid, derived from the live registries on every request. An unchanged cid means nothing moved and the catalogue need not be re-read."
}
},
"packages": [
{
"registryType": "oci",
"identifier": "ghcr.io/vortx-ai/emem:latest",
"runtimeHint": "docker",
"transport": {
"type": "streamable-http",
"url": "http://localhost:5051/mcp"
},
"environmentVariables": [
{
"name": "PORT",
"description": "PaaS port convention: the container entrypoint binds 0.0.0.0:$PORT when EMEM_BIND is not set explicitly. Falls back to 5051.",
"isRequired": false,
"isSecret": false
},
{
"name": "EMEM_BIND",
"description": "Bind address for the HTTP server. When unset, the entrypoint derives it from PORT, falling back to 0.0.0.0:5051.",
"isRequired": false,
"isSecret": false,
"value": "0.0.0.0:5051"
},
{
"name": "EMEM_DATA",
"description": "Path to the persistent data directory (sled cache + ed25519 identity). Mount a volume here; on managed platforms that mount /data, set EMEM_DATA=/data.",
"isRequired": false,
"isSecret": false,
"value": "/var/emem"
},
{
"name": "EMEM_PUBLIC_URL",
"description": "Optional canonical origin for self-referencing URLs in MCP responses (e.g. https://emem.dev). When unset the server falls back to urn:emem.",
"isRequired": false,
"isSecret": false
},
{
"name": "EMEM_TLS_DOMAINS",
"description": "Comma-separated hostnames for built-in Let's Encrypt ACME (TLS-ALPN-01). When set, the server binds 0.0.0.0:443 instead of EMEM_BIND.",
"isRequired": false,
"isSecret": false
}
]
}
],
"remotes": [
{
"type": "streamable-http",
"url": "https://emem.dev/mcp"
}
]
}