Context7
Feeds AI the latest docs for libraries and frameworks before it answers, so code it writes does not use outdated, removed functions.
Description from the maker (original English)
Memory you own: capture on WhatsApp, filed into your Markdown vault, recalled with citations.
These three are never merged into one score: opinions, measurements and popularity are different things.
We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.
Pick the AI app you use, then copy the settings.
You need
Which app do you use?
Pick your app above. We remember it, so next time the button says “Install in …”.
Works in Claude on the web, desktop and mobile:
https://cloud.zenod.dev/mcpRun this in your terminal
claude mcp add --transport http memory https://cloud.zenod.dev/mcpPaste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json
{
"mcpServers": {
"memory": {
"url": "https://cloud.zenod.dev/mcp"
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
Paste into .vscode/mcp.json in your project
{
"servers": {
"memory": {
"type": "http",
"url": "https://cloud.zenod.dev/mcp"
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
ChatGPT connects only to servers on the internet:
https://cloud.zenod.dev/mcpMenu names can differ slightly by plan and over time.
Your choice stays on this device in a cookie; no account needed.
These settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.
The server asks you to sign in before it lists its tools.
We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 8, 2026
The registry name was verified against the domain zenod.dev (the registry checks domain ownership)
We have not read this repo from GitHub yet
We have not read this repo from GitHub yet
Responded in 496 ms (HTTP 401)
Declares OAuth sign-in, so your AI app can take you to log in
Not checked yet; we read the tool list when we check the endpoint
Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.
It passed 3 of 3 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.
The registry does not list a required key, though some servers ask you to sign in on first use.
It runs in the maker’s cloud. Connect over the internet with nothing to install, but what you send passes through the maker’s servers.
The GitHub repo last changed –, and the latest version (0.1.0) reached the registry today.
Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. It connects by URL, so apps that accept remote MCP servers work too, such as ChatGPT in developer mode.
In the same category: Context7, Codebase Memory, Exa
Servers in the same category from other makers, sorted by stars.
Reading a card:★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi
Feeds AI the latest docs for libraries and frameworks before it answers, so code it writes does not use outdated, removed functions.
Codebase knowledge graph for AI agents — 162 languages, sub-ms queries, 99% fewer tokens.
Connect AI agents to Exa for web search, content fetching, and multi-step research.
Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.
Zenod is a memory agent you talk to over plain MCP (streamable HTTP). You give it a GitHub repo to use as your memory vault; it stores what you tell it as immutable evidence + filed meaning with citations, and lets you search and read it back. Every write lands as a real git commit — Zenod hands you the commit SHA and GitHub URL as the receipt.
One box, one endpoint, one repo. Zenod is the only thing that holds your repo token. You never write the repo from anywhere else — attempts from another path fail loudly.
You need: Docker, a GitHub repo you own (empty is fine) + a token that can push to it, and an LLM key (Anthropic or OpenAI). No suite, no console — just this unit.
From this folder (units/zenod/). Until the repo split fires, the image is the repo root image with AGENT=zenod:
# from the repo root
docker build -t zenod .
docker run --rm -p 8080:8080 \ -v "$PWD/zenod-data:/data" \ -e AGENT=zenod \ -e ZENOD_DATA_DIR=/data \ -e VAULT_REPO="your-org/your-memory-repo" \ -e GITHUB_TOKEN="ghp_xxx_a_token_that_can_push_to_that_repo" \ -e ANTHROPIC_API_KEY="sk-ant-..." \ -e ZENOD_API_TOKEN="pick-any-long-secret-string" \ zenod
That is Option B: configure by hand — the three env vars above are all Zenod needs. (In the full suite the keyring/Console mints the MCP token and pushes VAULT_REPO + GITHUB_TOKEN + LLM key to /api/provision instead; a stranger self-hosting doesn't need that path.)
Zenod is now serving MCP at `http://localhost:8080/mcp`. Check it is up:
curl -s http://localhost:8080/api/health
The endpoint is vanilla MCP over streamable HTTP. Any MCP client works — e.g. Claude Desktop / claude with a custom connector, or the reference @modelcontextprotocol/inspector:
npx @modelcontextprotocol/inspector
Your token. /mcp always requires a bearer token — there is no tokenless mode. You control it two ways:
ZENOD_API_TOKEN in the run command above to any long secret string. That IS your bearer token — use it directly.ZENOD_API_TOKEN is unset, Zenod generates a token on first boot and prints it once to the container logs (docker logs | grep 'MCP bearer'). Copy it from there.Send it as Authorization: Bearer on every MCP call. (Treat it like a password. Note: GET /api/token is itself auth-gated — you need the token to call it — so use one of the two paths above to learn it in the first place.)
Run tools/list. You should see store_memory, ingest_memory, search_memory, get_memory, ask_brain, and get_task_result (full surface in SEAM-SURFACE.md).
Codex Desktop's MCP server settings have two separate concepts:
https:// /mcp.ZENOD_MCP_TOKEN.Do not paste the token itself into the Bearer token env var field. Codex reads that field as the name of an environment variable, then reads the actual bearer token from the Codex process environment.
For Codex CLI, this works when codex is launched from the same shell:
export ZENOD_MCP_TOKEN="<token>"
codex mcp add zenod --url https:// /mcp --bearer-token-env-var ZENOD_MCP_TOKEN
A normal shell export is temporary: it lasts only for that shell session and child processes. It does not survive a machine restart, and it does not affect an already running macOS GUI app launched from Finder, Dock, or Spotlight. For Codex Desktop, set the variable in the environment before starting Codex Desktop, or use a literal Authorization: Bearer header in the MCP server settings.
Store (mutating, async — returns a jobId, then poll):
// tools/call store_memory
{ "content": "My home insurance renews on March 3rd every year." } // -> returns { jobId: "..." } (status: queued)
// tools/call get_task_result { "jobId": "..." } // -> when done: // { status: "done", result: { // evidenceRef: "Log/2026-07-05.md#^e-7f3a2c", // pagesTouched: ["Areas/Insurance.md"], // commitSha: "a1b2c3d...", // <- your receipt: a real git commit // githubUrls: ["https://github.com/your-org/your-memory-repo/blob/main/Areas/Insurance.md"] // } }
Open the githubUrls link — the memory is a committed file in your repo.
Ingest media/artifacts (mutating, async — returns a jobId, then poll):
// tools/call ingest_memory
{ "mediaType": "screenshot", "artifactUrl": "https://example.test/screen.png", "filename": "screen.png", "sourceHint": "Claude upload", "contentHint": "remember the renewal date visible in this screenshot", "hints": ["insurance"] } // -> returns { jobId: "...", kind: "media_ingest", status: "queued" }
// tools/call get_task_result { "jobId": "..." } // -> when done, result includes: // { // status: "done", // rawArtifact: { handle, archiveUrl, sha256 }, // extraction: { handle, ocrHandle, transcriptHandle, archiveUrl, provider }, // digest: { evidenceRef, pagesTouched, commitSha, githubUrls } // } // Opaque handles that Zenod cannot resolve still return a loud // media_ingest_processor_unavailable receipt instead of fake success.
Search (read, fast, no LLM):
// tools/call search_memory
{ "query": "insurance renewal" } // -> hits: [{ path, snippet, score, githubUrl }], or the explicit text // "No memories match 'insurance renewal'." when there are none.
Get (read one note by path from a search hit):
// tools/call get_memory
{ "path": "Areas/Insurance.md" } // -> { path, frontmatter, body, githubUrl }
For fuzzy or cross-note questions ("what do I know about X?"), call `ask_brain` instead of search_memory — it runs a read-only research loop and returns a synthesized answer with cited sources.
tools/list + tools/call is all a caller needs to know. See ../../docs/SEAM-SPEC.md.store_memory gives you a commitSha + GitHub URL (via get_task_result). ingest_memory gives an async media receipt with raw artifact, extraction/transcript archive, digest, commit, and archive fields. A read returns data or an explicit "none". No silent acks; failures error loudly with { code, message }./api/provision) and read in exactly one place internally. Nothing else in the suite can write your repo. Any write attempt down another path fails loudly.| File | What it is |
|---|---|
README.md | this quickstart (an acceptance item) |
SEAM-SURFACE.md | the MCP tool surface + receipt shapes |
EXTRACTION-MAP.md | file-level extraction map (blueprint, RD-4 staged) |
Dockerfile | root-image-reuse note (staged; build from repo-root Dockerfile) |
docker-compose.zenod.yml | deploy stub |
Status honesty: this folder is the *seam of record* for Zenod-as-a-unit. The
physical extraction from the fused Console is STAGED behind the RD-4 split trigger
and has not fired — see
EXTRACTION-MAP.md. The running behavior above is real
today (image with
AGENT=zenod); the standalone folder is blueprint.