genesis-memory
Provenance-carrying memory for AI agents: corrections supersede, never overwrite. Free, API + MCP.
我該用這個嗎
品質與安全性
發現項目(1)
- LOW在 team_join 中
根據工具定義與協定合規性的自動化分析。
上下文成本
這是每次將伺服器的工具載入模型上下文時所消耗的約略 token 數量。數量越高,可用於其他工作的注意力就越少。
安裝
一鍵安裝
將以下內容加入你的 `claude_desktop_config.json` 檔案:
{
"mcpServers": {
"genesis-memory": {
"url": "https://genesis-verify.vercel.app/api/mcp"
}
}
}遠端端點
https://genesis-verify.vercel.app/api/mcpstreamable-http它能做什麼
工具清單
工具(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.
輸入結構描述
{
"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.
輸入結構描述
{
"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.
輸入結構描述
{
"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.
輸入結構描述
{
"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.
輸入結構描述
{
"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.
輸入結構描述
{
"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.
輸入結構描述
{
"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.
輸入結構描述
{
"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.
輸入結構描述
{
"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.
輸入結構描述
{
"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.
輸入結構描述
{
"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.
輸入結構描述
{
"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).
輸入結構描述
{
"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).
輸入結構描述
{
"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.
輸入結構描述
{
"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.
輸入結構描述
{
"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.
輸入結構描述
{
"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.
輸入結構描述
{
"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.
輸入結構描述
{
"type": "object",
"properties": {
"api_key": {
"type": "string"
},
"team_id": {
"type": "string"
},
"id": {
"type": "string"
}
},
"required": [
"api_key",
"team_id",
"id"
]
}社群
證據