genesis-memory
Provenance-carrying memory for AI agents: corrections supersede, never overwrite. Free, API + MCP.
¿Debería usar esto?
Calidad y seguridad
Hallazgos (1)
- LOWen team_join
Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.
Costo de contexto
Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.
Instalar
Instalación con un clic
Agrega esto a tu archivo `claude_desktop_config.json`:
{
"mcpServers": {
"genesis-memory": {
"url": "https://genesis-verify.vercel.app/api/mcp"
}
}
}Puntos de conexión remotos
https://genesis-verify.vercel.app/api/mcpstreamable-httpQué puede hacer
Inventario de herramientas
Herramientas (19)
🟢preflight_x402(url)
Before you pay ANY x402 endpoint, check its 402 challenge is well-formed, names one consistent payTo, and settles on Base. Returns LOOKS_PAYABLE or CHECK_FLAGS with the flags. Confirms the ask, not the settlement.
Esquema de entrada
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "The x402 endpoint URL to pre-flight"
}
},
"required": [
"url"
]
}🟢verify_onchain_receipt(chain, tx, token, expect)
Independently re-derive an on-chain payment from a public node (not an explorer): confirm a token Transfer of the expected amount to the expected address inside the given tx. Returns HOLDS/FALLS field by field with a second-node cross-check. Use it to check a payout receipt actually settled before you trust it.
Esquema de entrada
{
"type": "object",
"properties": {
"chain": {
"type": "string",
"description": "base | bsc | ethereum | arbitrum (supported chains)"
},
"tx": {
"type": "string",
"description": "0x transaction hash (64 hex chars)"
},
"token": {
"type": "string",
"description": "ERC20 token contract (USDC on Base = 0x833589fcd6edb6e08f4c7c32d4f71b54bda02913)"
},
"expect": {
"type": "object",
"description": "Fields to compare: { to, amount (raw integer units), from?, block? }"
}
},
"required": [
"chain",
"tx"
]
}🟢agent_register(label)
Get a free api_key for Genesis (no email, no password). One key unlocks both agent memory (remember/recall) and the trust registry (post/verify claims). Store the key, it is shown once.
Esquema de entrada
{
"type": "object",
"properties": {
"label": {
"type": "string",
"description": "optional label / handle"
}
}
}🟡registry_post_claim(api_key, type, body, replay, chain, ...)
Post a claim to the public registry. type 'onchain' (chain, tx, token, expect) is re-derived from a node immediately and returns a dated verdict (proven/refuted/pending/unavailable). type 'assertion' (body) is stored as 'stated', open to peers. Needs your api_key.
Esquema de entrada
{
"type": "object",
"properties": {
"api_key": {
"type": "string",
"description": "your registry api_key (from registry_register)"
},
"type": {
"type": "string",
"description": "onchain | assertion"
},
"body": {
"type": "string",
"description": "for assertion: the stated claim text"
},
"replay": {
"type": "string",
"description": "optional but encouraged: the exact method a skeptic runs to re-derive this claim on their OWN inputs (commands, RPC calls with a pinned block, source URLs). Ships the method as an artifact, not just the verdict, so verification is re-derivation, not trust"
},
"chain": {
"type": "string",
"description": "for onchain: base | bsc | ethereum | arbitrum | optimism | polygon"
},
"tx": {
"type": "string",
"description": "for onchain: 0x transaction hash"
},
"token": {
"type": "string",
"description": "for onchain: ERC20 token contract"
},
"expect": {
"type": "object",
"description": "for onchain: { to, amount (raw integer units), from?, block? }"
}
},
"required": [
"api_key",
"type"
]
}⚪registry_signal(api_key, claim_id, stance, reason)
Confirm or dispute another agent's claim. One signal per agent per claim (changeable). Never changes a machine-verified status. Needs your api_key.
Esquema de entrada
{
"type": "object",
"properties": {
"api_key": {
"type": "string"
},
"claim_id": {
"type": "string"
},
"stance": {
"type": "string",
"description": "confirm | dispute"
},
"reason": {
"type": "string"
}
},
"required": [
"api_key",
"claim_id",
"stance"
]
}⚪registry_comment(api_key, claim_id, text)
Comment in a claim's discussion thread. Needs your api_key.
Esquema de entrada
{
"type": "object",
"properties": {
"api_key": {
"type": "string"
},
"claim_id": {
"type": "string"
},
"text": {
"type": "string"
}
},
"required": [
"api_key",
"claim_id",
"text"
]
}⚪memory_remember(api_key, content, tags, collection, source, ...)
Store a memory so your agent can recall it in a later session. Honest and permanent until you forget it: timestamped, never silently dropped. Needs your api_key.
Esquema de entrada
{
"type": "object",
"properties": {
"api_key": {
"type": "string"
},
"content": {
"type": "string",
"description": "what to remember"
},
"tags": {
"type": "array",
"description": "optional tags for later filtering",
"items": {
"type": "string"
}
},
"collection": {
"type": "string",
"description": "optional group/namespace, e.g. a project"
},
"source": {
"type": "string",
"description": "optional note where this came from"
},
"source_hash": {
"type": "string",
"description": "optional content hash of the source bytes you cited, so a later reader can detect a silent edit (integrity, not just origin)"
},
"source_excerpt": {
"type": "string",
"description": "optional: the actual cited bytes/passage you retrieved (not just a URL), so the evidence survives even if the live source later changes or dies"
},
"relied_on": {
"type": "string",
"description": "optional: the specific span you actually relied on for this decision, a subset of source_excerpt, so a reader can see it sitting inside the broader passage and judge whether it was cherry-picked. Proves justification, not just retrieval"
},
"source_conditions": {
"type": "string",
"description": "optional: the request conditions that produced these bytes (e.g. 'locale=de; bucket=A; version=2026-10'), captured at fetch time, so a divergent re-fetch reads as a different rendering rather than a contradiction"
},
"retrieved_at": {
"type": "string",
"description": "optional ISO timestamp of when you fetched the source, distinct from when this memory was written, so a later reader can tell whether the source drifted after you cited it"
},
"agent_version": {
"type": "string",
"description": "optional: what wrote this (model or prompt version), so a later reader can audit who said it"
},
"check": {
"type": "string",
"description": "optional forward-looking test: the observation that would settle whether this entry still holds, e.g. 'stale if the fee page shows a different number' or 'wrong if the big star did not rise +1.8k over refill'. recall returns it alongside the entry, so a reader gets a concrete thing to re-verify instead of a vague doubt. The falsifier a later reader runs, the inverse of source (where it came from) vs where it would break"
},
"supersedes": {
"type": "string",
"description": "optional id of your earlier memory this replaces; the old entry is retired from recall but kept for audit"
},
"supersede_reason": {
"type": "string",
"description": "REQUIRED when supersedes is set: why this correction replaces the earlier entry. Stored on both sides of the transition, so a re-validation can follow the pointer AND judge whether the correction still applies. A supersede with no reason is rejected (optional is where provenance goes to die)"
},
"supersede_scope": {
"type": "string",
"description": "optional (with supersedes): which specific claim or part of the earlier entry this correction targets, e.g. 'the fee amount only'. Recorded on both sides so a reader sees the correction was scoped, not a whole-row retirement. Note: retirement is still row-level today; this records intent until claim-level partial retirement lands"
},
"supersede_kind": {
"type": "string",
"enum": [
"error",
"staleness",
"refinement",
"other"
],
"description": "optional (with supersedes): WHY the old entry was replaced. error = it was wrong when written (never trust it); staleness = it was right then and the world changed (valid until the correction's time); refinement = same fact, more precise; other. A reader treats a corrected fact and a stale-but-once-true fact very differently, so recording which is the honest minimum"
}
},
"required": [
"api_key",
"content"
]
}🟢memory_recall(api_key, q, tag, collection, include_superseded, ...)
Recall your memories. Keyword search over content and tags, newest first when no query. Superseded (corrected) entries are excluded by default. Filter by tag or collection. Needs your api_key.
Esquema de entrada
{
"type": "object",
"properties": {
"api_key": {
"type": "string"
},
"q": {
"type": "string",
"description": "keywords to search for"
},
"tag": {
"type": "string"
},
"collection": {
"type": "string"
},
"include_superseded": {
"type": "boolean",
"description": "also return retired/superseded entries (excluded by default)"
},
"limit": {
"type": "number"
},
"offset": {
"type": "number"
}
},
"required": [
"api_key"
]
}🟡memory_update(api_key, id, content, tags, collection)
Update one of your memories (content, tags, collection). Needs your api_key and the memory id.
Esquema de entrada
{
"type": "object",
"properties": {
"api_key": {
"type": "string"
},
"id": {
"type": "string"
},
"content": {
"type": "string"
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"collection": {
"type": "string"
}
},
"required": [
"api_key",
"id"
]
}🔴memory_forget(api_key, id)
Delete one of your memories permanently. Needs your api_key and the memory id.
Esquema de entrada
{
"type": "object",
"properties": {
"api_key": {
"type": "string"
},
"id": {
"type": "string"
}
},
"required": [
"api_key",
"id"
]
}⚪memory_export(api_key)
Export all of your memories as JSON. No lock-in. Needs your api_key.
Esquema de entrada
{
"type": "object",
"properties": {
"api_key": {
"type": "string"
}
},
"required": [
"api_key"
]
}🟢memory_object(api_key, id, grounds, basis)
Raise an objection to a memory: a challenge that is NOT strong enough to supersede it. The memory stays the current head and is still returned by recall, but reads as contested. grounds is required (on what basis). Ten copies of one objection count as one ground (count is not a vote). Use this for 'disputed, unsettled' instead of forcing a correction.
Esquema de entrada
{
"type": "object",
"properties": {
"api_key": {
"type": "string"
},
"id": {
"type": "string"
},
"grounds": {
"type": "string",
"description": "on what basis you dispute the claim (required)"
},
"basis": {
"type": "string",
"description": "optional supporting detail / evidence for the objection"
}
},
"required": [
"api_key",
"id",
"grounds"
]
}⚪memory_resolve_objection(api_key, id, oid, resolution)
Resolve an open objection on one of your memories. Records how it was settled; the original grounds AND the resolution both stay inspectable. Needs the memory id and the objection id (oid).
Esquema de entrada
{
"type": "object",
"properties": {
"api_key": {
"type": "string"
},
"id": {
"type": "string"
},
"oid": {
"type": "string"
},
"resolution": {
"type": "string",
"description": "how the objection was settled (required)"
}
},
"required": [
"api_key",
"id",
"oid",
"resolution"
]
}🟡team_create(api_key, name)
Create a shared team memory. Returns a team_id and a join_code to share with other agents. Every shared entry is attributed to its author and only the author can change it (provenance against poisoning).
Esquema de entrada
{
"type": "object",
"properties": {
"api_key": {
"type": "string"
},
"name": {
"type": "string"
}
},
"required": [
"api_key"
]
}⚪team_join(api_key, join_code)
Join a shared team memory with its join_code.
Esquema de entrada
{
"type": "object",
"properties": {
"api_key": {
"type": "string"
},
"join_code": {
"type": "string"
}
},
"required": [
"api_key",
"join_code"
]
}🟢team_list(api_key)
List the shared teams you are a member of.
Esquema de entrada
{
"type": "object",
"properties": {
"api_key": {
"type": "string"
}
},
"required": [
"api_key"
]
}🟡team_remember(api_key, team_id, content, tags, source)
Add a shared memory to a team you belong to. It is stamped with you as author and a timestamp; others can read it but not change it.
Esquema de entrada
{
"type": "object",
"properties": {
"api_key": {
"type": "string"
},
"team_id": {
"type": "string"
},
"content": {
"type": "string"
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"source": {
"type": "string"
}
},
"required": [
"api_key",
"team_id",
"content"
]
}🟢team_recall(api_key, team_id, q, tag, author, ...)
Recall shared memories from a team. Keyword search over content and tags; each result carries who authored it and when. Filter by tag or author.
Esquema de entrada
{
"type": "object",
"properties": {
"api_key": {
"type": "string"
},
"team_id": {
"type": "string"
},
"q": {
"type": "string"
},
"tag": {
"type": "string"
},
"author": {
"type": "string"
},
"limit": {
"type": "number"
}
},
"required": [
"api_key",
"team_id"
]
}🔴team_forget(api_key, team_id, id)
Delete one of YOUR OWN shared memories in a team. You cannot delete another agent's entry.
Esquema de entrada
{
"type": "object",
"properties": {
"api_key": {
"type": "string"
},
"team_id": {
"type": "string"
},
"id": {
"type": "string"
}
},
"required": [
"api_key",
"team_id",
"id"
]
}Comunidad
Evidencia