WhiteMagic — governed local memory for agent continuity
by lbailey94 · remote · local (npm, oci) · no sign-in to list tools · v10.5.0 · published by GitHub user lbailey94
Governed local-first memory and continuity for AI agents — signed receipts, optional hosted lane.
30 tools: 17 change things and 13 only read.
Scanned Oct 21, 2026
- Deletes or cancels0Claude Code: deny
- Can't be undone0Claude Code: ask
- Changes things17Claude Code: ask: see these tools
- Only reads13Claude Code: allow: see these tools
1 check matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http whitemagic https://mcp.whitemagic.dev/mcpFindings
Matches of fixed checks, with the text they matched.
The server marks "memory.search_batch" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "memory.search_batch" says "search": a word for reading.
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
30 tools
Changes things 17Claude Code: ask
economy_advanceRequest a small uncollateralized compute advance.No findings
Why it is in this group
- The description's first verb is "request": a word for a change.
Description, as the server wrote it Request a small uncollateralized compute advance. Phase 1 (2026-10-15): bound to your authenticated evaluation key (daily per-IP and global caps); new key identities start at a $0.10 ceiling that grows $0.25 per verified settled payment. Returns a recall-scope session pass; hosted write requires a paid lease.
Annotations the server declares
- title: Request Compute Advance
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
economy_aid_bridgeUNQUALIFIED and disabled: this route does not issue aid, credit, or session passes.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it UNQUALIFIED and disabled: this route does not issue aid, credit, or session passes. It remains fail-closed pending an independently reviewed end-to-end accounting and authorization contract.
Annotations the server declares
- title: Unqualified Aid Bridge
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
economy_chohan_arbitrateAdvisory contention tie-breaker only.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it Advisory contention tie-breaker only. It does not acquire or enforce locks, uses a post-hoc recomputable SHA-256 draw, and is not host-bias-proof.
Annotations the server declares
- title: Arbitrate Mutex Lock Contention
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
economy_chohan_rollAdvisory SHA-256 dice draw.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Advisory SHA-256 dice draw. The server seed is disclosed with the result; there is no prior commitment or host-bias proof.
Annotations the server declares
- title: Cho-Han Symmetry Breaker
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
economy_settleSettle outstanding compute balance to upgrade Bayesian reputation score and dynamically expand credit ceiling.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it Settle outstanding compute balance to upgrade Bayesian reputation score and dynamically expand credit ceiling. Supports payment reference or gasless EIP-3009 transfer authorization.
Annotations the server declares
- title: Settle Nano-Credit Balance
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
memory.aggregateAggregate a numeric or categorical field over matched memories.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Aggregate a numeric or categorical field over matched memories.
Annotations the server declares
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
- readOnlyHint: true
- title: Aggregate memories
memory.associationsAssociative neighbours of a memory (spreading activation over the association graph).No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Associative neighbours of a memory (spreading activation over the association graph).
Annotations the server declares
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
- readOnlyHint: true
- title: Memory associations
memory.filterFilter memories by metadata (tags, importance, recency).No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Filter memories by metadata (tags, importance, recency).
Annotations the server declares
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
- readOnlyHint: true
- title: Filter memories
memory.hybrid_recallCompatibility alias of memory.search — same implementation, same arguments, same results.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Compatibility alias of memory.search — same implementation, same arguments, same results. Kept for clients pinned to this name; prefer memory.search.
Annotations the server declares
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
- readOnlyHint: true
- title: Hybrid recall (compatibility alias)
memory.nearbyMemories near a coordinate address (5D spatial neighbourhood).No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Memories near a coordinate address (5D spatial neighbourhood).
Annotations the server declares
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
- readOnlyHint: true
- title: Nearby memories
memory.search_batchExecute multiple memory search queries concurrently in a single turn.1 finding
Why it is in this group
- The name "memory.search_batch" says "search": a word for reading.
- The description's first verb is "execute": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "memory.search_batch" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "memory.search_batch" says "search": a word for reading.
Description, as the server wrote it Execute multiple memory search queries concurrently in a single turn. Unpacks up to 10 queries, searches the curated corpus, and returns consolidated results.
Annotations the server declares
- title: Search memories in batch
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
memory.statsMemory index statistics: totals, galaxy spread, and index health.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Memory index statistics: totals, galaxy spread, and index health.
Annotations the server declares
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
- readOnlyHint: true
- title: Memory statistics
receipts.verifyVerify a receipt id or a bundle offline; fail-closed without an anchor (verdict PROVISIONAL).No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Verify a receipt id or a bundle offline; fail-closed without an anchor (verdict PROVISIONAL).
Annotations the server declares
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
- readOnlyHint: true
- title: Verify a continuity receipt
session.continuityRecall where the previous session left off: recent turns, checkpoints, and open work.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Recall where the previous session left off: recent turns, checkpoints, and open work.
Annotations the server declares
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
- readOnlyHint: true
- title: Recall session continuity
session.recallRecall a session's turns without continuity packaging.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Recall a session's turns without continuity packaging.
Annotations the server declares
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
- readOnlyHint: true
- title: Recall a session
session.replayReplay a session's recorded turns in order.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Replay a session's recorded turns in order.
Annotations the server declares
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
- readOnlyHint: true
- title: Replay a session
wmHosted router for available hosted tools.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Hosted router for available hosted tools. Use tools/list to discover supported routes.
Annotations the server declares
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
- readOnlyHint: true
- title: WhiteMagic memory and continuity meta-tool
Only reads 13Claude Code: allow
economy_ledgerInspect public transparency metrics: total loans disbursed, default rates, zero predatory liquidation policy, and sovereign free invariants.No findings
Why it is in this group
- The description's first verb is "inspect": a word for reading.
Description, as the server wrote it Inspect public transparency metrics: total loans disbursed, default rates, zero predatory liquidation policy, and sovereign free invariants.
Annotations the server declares
- title: Inspect Transparency Ledger
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
gnosis.explainExplain why a memory or route was selected (provenance readout).No findings
Why it is in this group
- The name "gnosis.explain" says "explain": a word for reading.
Description, as the server wrote it Explain why a memory or route was selected (provenance readout).
Annotations the server declares
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
- readOnlyHint: true
- title: Explain provenance
gnosis.statusKnowledge-surface status: galaxies, counts, and index health.No findings
Why it is in this group
- The name "gnosis.status" says "status": a word for reading.
Description, as the server wrote it Knowledge-surface status: galaxies, counts, and index health.
Annotations the server declares
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
- readOnlyHint: true
- title: Knowledge status
memory.batch_readRead several memories by id in one call.No findings
Why it is in this group
- The name "memory.batch_read" says "read": a word for reading.
Description, as the server wrote it Read several memories by id in one call.
Annotations the server declares
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
- readOnlyHint: true
- title: Batch read memories
memory.countCount memories matching optional filters without returning content.No findings
Why it is in this group
- The name "memory.count" says "count": a word for reading.
Description, as the server wrote it Count memories matching optional filters without returning content.
Annotations the server declares
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
- readOnlyHint: true
- title: Count memories
memory.listList memories with filters (galaxy, tags, limit, offset) for browsing and discovery.No findings
Why it is in this group
- The name "memory.list" says "list": a word for reading.
Description, as the server wrote it List memories with filters (galaxy, tags, limit, offset) for browsing and discovery.
Annotations the server declares
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
- readOnlyHint: true
- title: List memories
memory.queryStructured query over memories with filters and ordering.No findings
Why it is in this group
- The name "memory.query" says "query": a word for reading.
Description, as the server wrote it Structured query over memories with filters and ordering.
Annotations the server declares
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
- readOnlyHint: true
- title: Query memories
memory.readRetrieve a specific memory by its ID or coordinate address.No findings
Why it is in this group
- The name "memory.read" says "read": a word for reading.
Description, as the server wrote it Retrieve a specific memory by its ID or coordinate address.
Annotations the server declares
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
- readOnlyHint: true
- title: Read memory
memory.revisionsList or verify a memory's content revision chain (tamper evidence): every content update is chained and head-checked.No findings
Why it is in this group
- The description's first verb is "list": a word for reading.
Description, as the server wrote it List or verify a memory's content revision chain (tamper evidence): every content update is chained and head-checked.
Annotations the server declares
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
- readOnlyHint: true
- title: Memory revision chain
memory.searchSearch memories: hybrid BM25 + vector fusion with deterministic episodic and full-text fallbacks; each result discloses its recall_mode.No findings
Why it is in this group
- The name "memory.search" says "search": a word for reading.
Description, as the server wrote it Search memories: hybrid BM25 + vector fusion with deterministic episodic and full-text fallbacks; each result discloses its recall_mode. The preferred recall tool.
Annotations the server declares
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
- readOnlyHint: true
- title: Search memories
memory.tagsList the tag vocabulary with usage counts.No findings
Why it is in this group
- The description's first verb is "list": a word for reading.
Description, as the server wrote it List the tag vocabulary with usage counts.
Annotations the server declares
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
- readOnlyHint: true
- title: List memory tags
memory.vector.searchVector-similarity search over memory embeddings.No findings
Why it is in this group
- The name "memory.vector.search" says "search": a word for reading.
Description, as the server wrote it Vector-similarity search over memory embeddings.
Annotations the server declares
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
- readOnlyHint: true
- title: Vector search memories
session.listList sessions with titles and summaries.No findings
Why it is in this group
- The name "session.list" says "list": a word for reading.
Description, as the server wrote it List sessions with titles and summaries.
Annotations the server declares
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
- readOnlyHint: true
- title: List sessions
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 10.5.0. Values in angle brackets are yours to fill in.
claude mcp add --transport http whitemagic https://mcp.whitemagic.dev/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__whitemagic__memory_search",
"mcp__whitemagic__memory_read",
"mcp__whitemagic__memory_list",
"mcp__whitemagic__memory_revisions",
"mcp__whitemagic__memory_count",
"mcp__whitemagic__memory_tags",
"mcp__whitemagic__memory_batch_read",
"mcp__whitemagic__memory_query",
"mcp__whitemagic__memory_vector_search",
"mcp__whitemagic__session_list",
"mcp__whitemagic__gnosis_status",
"mcp__whitemagic__gnosis_explain",
"mcp__whitemagic__economy_ledger"
],
"ask": [
"mcp__whitemagic__wm",
"mcp__whitemagic__memory_hybrid_recall",
"mcp__whitemagic__session_continuity",
"mcp__whitemagic__receipts_verify",
"mcp__whitemagic__memory_stats",
"mcp__whitemagic__memory_aggregate",
"mcp__whitemagic__memory_associations",
"mcp__whitemagic__memory_filter",
"mcp__whitemagic__memory_nearby",
"mcp__whitemagic__session_recall",
"mcp__whitemagic__session_replay",
"mcp__whitemagic__memory_search_batch",
"mcp__whitemagic__economy_advance",
"mcp__whitemagic__economy_settle",
"mcp__whitemagic__economy_chohan_arbitrate",
"mcp__whitemagic__economy_chohan_roll",
"mcp__whitemagic__economy_aid_bridge"
],
"deny": []
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as whitemagic. Review it before you use it.
