mcp-ad4m
The mcp-ad4m server provides persistent semantic memory, cross-session context, graph reasoning, and cross-terminal relay for Claude Code via a locally hosted AD4M executor (all data stays on your machine). It exposes 14 tools across these capability areas:
Agent & Configuration
Check agent status (DID, initialization state, keystore lock) via
ad4m_agent_statusDetect MCP registration misconfigurations and get fix instructions via
ad4m_config_check
Perspective (Graph) Management
List, create, and inspect named semantic graph Perspectives and Neighbourhoods
Memory Read & Write
Write signed LinkExpressions (
source → predicate → target) to a Perspective; auto-deduplicates every 10 writesQuery links by source, predicate, and/or target filters
Delete links by filter, returning matched/removed/failed counts
Graph Intelligence
Traverse (
ad4m_traverse): Bidirectional BFS multi-hop traversal from a starting node, returning a full connected subgraph grouped by predicate — enabling reasoning over structured facts, not just flat retrievalClassify (
ad4m_classify): Determine the correct storage layer (ad4m,env,local,relay) before writing to prevent misplacement
Memory Hygiene & Analytics
Optimize (
ad4m_optimize): Deduplicate and flag stale entries; supports dry-run mode; runs automatically every 10 writesStats (
ad4m_stats): View total link count, duplicate count, predicate breakdown, and oldest/newest entry timestamps
Cross-Terminal Relay
Write/read relay messages (
relay_write/relay_read): Exchange live state messages between multiple Claude Code terminals sharing the same AD4M executor, optionally filtered by session ID or timestamp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-ad4mremember that we decided to use React for the frontend"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-ad4m
AD4M MCP server for Claude Code — 14-tool semantic memory and enforcement layer.
Gives Claude Code persistent memory, cross-session context, and memory hygiene via a locally hosted AD4M executor. All data stays on your machine.
The Problem
Getting AD4M working with Claude Code requires:
Figuring out the executor port (it reads from
~/.ad4m/executor-port, not a fixed value)Writing a custom MCP server from scratch — none existed
Re-unlocking the agent on every reboot (no persistence)
No documented integration path for Claude Code specifically
This server solves all of it. One command sets everything up.
Related MCP server: Chronos MCP
One-Command Install
git clone https://github.com/thefranceway/mcp-ad4m.git
cd mcp-ad4m
./setup-claude-code.sh --passphrase YOUR_AD4M_PASSPHRASEThe script:
Installs dependencies
Stores your passphrase in macOS Keychain (not plaintext)
Installs a
launchdjob that auto-unlocks AD4M on every bootCreates a
ClaudeMemoryPerspective and saves the UUIDRegisters the MCP server at user scope via
claude mcp add -s user
Requires: Node.js 18+, AD4M executor running locally, macOS
Tools (14)
Tool | Description |
| DID, initialization state, keystore lock state |
| All local Perspectives |
| Create a new named semantic graph |
| Write a LinkExpression (source → predicate → target) |
| Query links with optional source/predicate/target filters |
| Remove links by filter — matched/removed/failed counts |
| Classify content by layer before writing (env/local/relay/ad4m) |
| Detect MCP registration in the wrong config file or scope |
| Deduplicate graph, flag stale entries, auto-runs every 10 writes |
| Total links, duplicate count, breakdown by predicate |
| BFS multi-hop graph traversal — returns connected subgraph |
| Inspect a shared AD4M Neighbourhood |
| Write cross-terminal live state via AD4M |
| Read cross-terminal relay messages |
Memory Architecture
AD4M stores information as signed links: source → predicate → target.
memory://project/zuafrique → ad4m://has-content → literal://Deployed CF Pages 2026-03-15
franc://session-log → franc://closed → literal://Session ended
franc://relay/terminal-a → franc://relay → literal://Build in progressLayer Taxonomy (enforced by ad4m_classify)
Layer | Where it belongs | Examples |
| AD4M semantic graph | Decisions, project facts, cross-session context |
|
| API keys, tokens, credentials |
|
| Rules, hooks, permissions |
| AD4M relay predicate | Live cross-terminal state |
Run ad4m_classify before ad4m_write_memory if unsure which layer to use.
Graph Traversal and Reasoning
ad4m_traverse exposes the semantic graph structure so Claude can reason over connected facts — not just retrieve individual entries.
How it works: Given a starting node URI, it runs a bidirectional BFS, following all links where the node appears as source or target. It expands outward hop by hop up to the requested depth, deduplicates edges, and returns the full subgraph grouped by predicate.
ad4m_traverse({
perspective_uuid: "...",
node: "memory://feedback/feedback_cloudflare_d1_builds",
depth: 2
})Returns:
{
"root": "memory://feedback/feedback_cloudflare_d1_builds",
"depth": 2,
"node_count": 3,
"edge_count": 2,
"by_predicate": {
"ad4m://has-name": [{ "from": "memory://...", "to": "literal://Cloudflare Worker + D1 build patterns" }],
"ad4m://has-content": [{ "from": "memory://...", "to": "literal://Always use prepare().run()..." }]
},
"summary": "3 connected nodes, 2 edges — 2-hop subgraph"
}Why this matters: ad4m_recall retrieves flat matches. ad4m_traverse returns the connected graph — Claude reads the full subgraph in one call and can derive conclusions, spot conflicts, and surface implications from graph structure alone. No formal logic engine required.
Depth guidance:
depth: 1— direct neighbors only (fast)depth: 2— default, covers most use casesdepth: 3–4— broad context retrieval (more queries, richer output)
Self-Optimization
The graph self-prunes automatically. Every 10 writes from any terminal increments a shared counter stored in AD4M (franc://optimizer → franc://write-count). When it hits 10, ad4m_optimize runs and removes exact duplicates.
To run manually:
ad4m_optimize({ perspective_uuid: "...", dry_run: true }) // report only
ad4m_optimize({ perspective_uuid: "...", dry_run: false }) // remove duplicatesCross-Terminal Relay
Two Claude Code terminals sharing the same AD4M executor can exchange live messages:
Terminal A:
relay_write({ perspective_uuid: "...", message: "build done", session_id: "terminal-a" })Terminal B:
relay_read({ perspective_uuid: "...", since: "2026-05-16T00:00:00Z" })Manual Setup (without the script)
1. Install
npm install2. Register with Claude Code (user scope)
claude mcp add -s user ad4m /path/to/mcp-ad4m/index.js \
--env AD4M_GQL_URL=http://localhost:4000/graphqlImportant: Always use
-s user. Without it,claude mcp adddefaults to project scope and registers the server only for the current directory. Opening Claude Code from any other directory causes the server to silently disappear fromclaude mcp listwith no error. See coasys/ad4m#822.
3. Unlock the agent before each session
curl -s http://localhost:4000/graphql \
-H "Content-Type: application/json" \
-d '{"query":"mutation { agentUnlock(passphrase: \"YOUR_PASSPHRASE\") { isUnlocked } }"}'Or install the launchd job from launchd/dev.ad4m.auto-unlock.plist to auto-unlock on boot.
Troubleshooting
Server missing from claude mcp list
Run ad4m_config_check inside Claude Code. It reads ~/.claude.json, detects whether the server is registered at project scope instead of user scope, and returns the exact command to fix it.
Or check manually:
claude mcp list # should show ad4m: ✓ Connected from any directoryIf it only appears from one directory, re-register at user scope:
claude mcp remove ad4m
claude mcp add -s user ad4m /path/to/mcp-ad4m/index.js \
--env AD4M_GQL_URL=http://localhost:4000/graphqlError Messages
The server returns actionable errors:
Situation | What you see |
Executor not running |
|
Agent locked |
|
Server missing from any directory | Registered at project scope — see Troubleshooting above |
Tested On
macOS 13.3 ARM64 (Apple M1)
AD4M executor v0.12.x
Claude Code CLI (Sonnet 4.6)
Node.js v24
Project Structure
mcp-ad4m/
├── index.js MCP server (14 tools, runs directly with Node)
├── dist/ Runtime copy (used by wrapper binary)
├── launchd/
│ └── dev.ad4m.auto-unlock.plist
├── setup-claude-code.sh One-command setup
└── package.jsonLicense
MIT
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
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/thefranceway/mcp-ad4m'
If you have feedback or need assistance with the MCP directory API, please join our Discord server