{"serverId":"mcp-registry/io.github.lbailey94/whitemagic-mcp","tools":[{"name":"gnosis.explain","fixed":{"name":"gnosis_explain","description":"Explain why a memory or route was selected (provenance readout).","inputSchema":{"type":"object","required":[],"properties":{"is_spawn":{"type":"boolean","description":"Claim: the invocation spawns a process"},"is_write":{"type":"boolean","description":"Claim: the invocation writes"},"args_hash":{"type":"string","description":"Hash of the arguments under evaluation"},"tool_name":{"type":"string","description":"Tool name to explain"},"is_network":{"type":"boolean","description":"Claim: the invocation uses the network"},"has_purpose":{"type":"boolean","description":"Claim: the invocation carries a purpose"}},"additionalProperties":false},"annotations":{"title":"Explain provenance","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"Explain provenance"},"changes":[{"kind":"name","detail":"Renamed \"gnosis.explain\" → \"gnosis_explain\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":190,"tokensAfter":190},{"name":"gnosis.status","fixed":{"name":"gnosis_status","description":"Knowledge-surface status: galaxies, counts, and index health.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"annotations":{"title":"Knowledge status","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"Knowledge status"},"changes":[{"kind":"name","detail":"Renamed \"gnosis.status\" → \"gnosis_status\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":50,"tokensAfter":50},{"name":"memory.aggregate","fixed":{"name":"memory_aggregate","description":"Aggregate a numeric or categorical field over matched memories.","inputSchema":{"type":"object","required":["query","metric"],"properties":{"limit":{"type":"integer","minimum":1,"description":"Maximum candidates considered (default 50; must be >= 1)"},"query":{"type":"string","description":"Full-text query selecting the memories to aggregate over"},"metric":{"type":"string","description":"Aggregate metric: count | session_count | session_span"}},"additionalProperties":false},"annotations":{"title":"Aggregate memories","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"Aggregate memories"},"changes":[{"kind":"name","detail":"Renamed \"memory.aggregate\" → \"memory_aggregate\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":145,"tokensAfter":145},{"name":"memory.associations","fixed":{"name":"memory_associations","description":"Associative neighbours of a memory (spreading activation over the association graph).","inputSchema":{"type":"object","required":["id"],"properties":{"id":{"type":"string","description":"Memory UUID to inspect"},"direction":{"type":"string","description":"Direction: from | to | both (default: both)"}},"additionalProperties":false},"annotations":{"title":"Memory associations","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"Memory associations"},"changes":[{"kind":"name","detail":"Renamed \"memory.associations\" → \"memory_associations\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":105,"tokensAfter":105},{"name":"memory.batch_read","fixed":{"name":"memory_batch_read","description":"Read several memories by id in one call.","inputSchema":{"type":"object","required":["ids"],"properties":{"ids":{"type":"array","items":{"type":"string"},"description":"Memory UUIDs to read"},"galaxy":{"type":"string","description":"Galaxy (default: codex)"}},"additionalProperties":false},"annotations":{"title":"Batch read memories","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"Batch read memories"},"changes":[{"kind":"name","detail":"Renamed \"memory.batch_read\" → \"memory_batch_read\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":93,"tokensAfter":93},{"name":"memory.count","fixed":{"name":"memory_count","description":"Count memories matching optional filters without returning content.","inputSchema":{"type":"object","required":[],"properties":{"galaxy":{"type":"string","description":"Galaxy to count (optional; all memory galaxies when absent)"}},"additionalProperties":false},"annotations":{"title":"Count memories","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"Count memories"},"changes":[{"kind":"name","detail":"Renamed \"memory.count\" → \"memory_count\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":84,"tokensAfter":84},{"name":"memory.filter","fixed":{"name":"memory_filter","description":"Filter memories by metadata (tags, importance, recency).","inputSchema":{"type":"object","required":[],"properties":{"tags":{"type":"array","items":{"type":"string"},"description":"Filter: memories with all of these tags"},"limit":{"type":"integer","description":"Maximum entries (default 50)"},"query":{"type":"string","description":"Filter: every whitespace-separated term must appear (case-insensitive) in the content or title"},"galaxy":{"type":"string","description":"Galaxy to filter (default codex)"},"offset":{"type":"integer","description":"Skip this many matching entries before returning (default 0)"},"exclude_tags":{"type":"array","items":{"type":"string"},"description":"Filter: drop memories carrying any of these tags"},"created_after":{"type":"string","description":"Filter: only memories created at or after this RFC 3339 timestamp (e.g. 2026-08-01T00:00:00Z)"},"created_before":{"type":"string","description":"Filter: only memories created at or before this RFC 3339 timestamp"},"max_importance":{"type":"number","description":"Filter: maximum importance (0-1)"},"min_importance":{"type":"number","description":"Filter: minimum importance (0-1)"}},"additionalProperties":false},"annotations":{"title":"Filter memories","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"Filter memories"},"changes":[{"kind":"name","detail":"Renamed \"memory.filter\" → \"memory_filter\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":344,"tokensAfter":344},{"name":"memory.hybrid_recall","fixed":{"name":"memory_hybrid_recall","description":"Compatibility alias of memory.search — same implementation, same arguments, same results. Kept for clients pinned to this name; prefer memory.search.","inputSchema":{"type":"object","required":["query"],"properties":{"limit":{"type":"integer","minimum":1,"description":"Maximum results (default 10; must be >= 1)"},"query":{"type":"string","description":"Full-text query"},"since":{"type":"string","description":"Inclusive lower time bound: RFC3339 ('2026-02-01T00:00:00Z') or epoch seconds"},"until":{"type":"string","description":"Inclusive upper time bound: RFC3339 or epoch seconds"},"galaxy":{"type":"string","description":"Galaxy filter (optional; default: search all memory galaxies, results labeled; \"all\" is accepted as an alias for the unfiltered default)"},"min_score":{"type":"number","description":"Absolute BM25 score floor"},"min_trust":{"type":"number","description":"Minimum source_trust (0-1): drop results below this trust floor"},"time_basis":{"type":"string","description":"Time basis for since/until: 'recorded' (created_at, default) or 'event' (event_time, falling back to created_at when unset)"},"include_cold":{"type":"boolean","description":"Opt-in unranked cold recovery (no thaw). Trust/importance floors apply; BM25 floors do not apply to unscored recovery. Search content is scrubbed navigation capped at 8192 characters; read by id/galaxy for the exact original."},"min_importance":{"type":"number","description":"Minimum memory importance (0-1)"},"cold_scan_limit":{"type":"integer","description":"Maximum cold records to scan when include_cold is set (default 2048)"},"min_score_ratio":{"type":"number","description":"Relative floor: reject hits below this fraction of the top score"}},"additionalProperties":false},"annotations":{"title":"Hybrid recall (compatibility alias)","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"Hybrid recall (compatibility alias)"},"changes":[{"kind":"name","detail":"Renamed \"memory.hybrid_recall\" → \"memory_hybrid_recall\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":500,"tokensAfter":500},{"name":"memory.list","fixed":{"name":"memory_list","description":"List memories with filters (galaxy, tags, limit, offset) for browsing and discovery.","inputSchema":{"type":"object","required":[],"properties":{"limit":{"type":"integer","description":"Maximum entries (default 20)"},"galaxy":{"type":"string","description":"Galaxy to list (default codex)"},"offset":{"type":"integer","description":"Skip this many matching entries before returning (default 0)"},"exclude_tags":{"type":"array","items":{"type":"string"},"description":"Drop memories carrying any of these tags"}},"additionalProperties":false},"annotations":{"title":"List memories","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"List memories"},"changes":[{"kind":"name","detail":"Renamed \"memory.list\" → \"memory_list\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":161,"tokensAfter":161},{"name":"memory.nearby","fixed":{"name":"memory_nearby","description":"Memories near a coordinate address (5D spatial neighbourhood).","inputSchema":{"type":"object","required":["query"],"properties":{"limit":{"type":"integer","description":"Maximum results (default 10)"},"query":{"type":"string","description":"Query text to locate in 5D space"},"galaxy":{"type":"string","description":"Galaxy (default: codex)"},"radius":{"type":"number","description":"Spatial radius cutoff (optional)"}},"additionalProperties":false},"annotations":{"title":"Nearby memories","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"Nearby memories"},"changes":[{"kind":"name","detail":"Renamed \"memory.nearby\" → \"memory_nearby\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":137,"tokensAfter":137},{"name":"memory.query","fixed":{"name":"memory_query","description":"Structured query over memories with filters and ordering.","inputSchema":{"type":"object","required":[],"properties":{"tags":{"type":"array","items":{"type":"string"},"description":"Filter: memories with all of these tags"},"limit":{"type":"integer","description":"Maximum entries (default 50)"},"query":{"type":"string","description":"Case-insensitive substring filter over content (literal match). For tokenized, ranked full-text retrieval use memory.search"},"galaxy":{"type":"string","description":"Galaxy to query (default codex)"},"created_after":{"type":"string","description":"Filter: only memories created at or after this RFC 3339 timestamp (e.g. 2026-08-01T00:00:00Z)"},"created_before":{"type":"string","description":"Filter: only memories created at or before this RFC 3339 timestamp"},"max_importance":{"type":"number","description":"Filter: maximum importance (0-1)"},"min_importance":{"type":"number","description":"Filter: minimum importance (0-1)"}},"additionalProperties":false},"annotations":{"title":"Query memories","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"Query memories"},"changes":[{"kind":"name","detail":"Renamed \"memory.query\" → \"memory_query\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":288,"tokensAfter":288},{"name":"memory.read","fixed":{"name":"memory_read","description":"Retrieve a specific memory by its ID or coordinate address.","inputSchema":{"type":"object","required":["id"],"properties":{"id":{"type":"string","description":"Memory UUID"},"galaxy":{"type":"string","description":"Galaxy containing the memory (default codex)"}},"additionalProperties":false},"annotations":{"title":"Read memory","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"Read memory"},"changes":[{"kind":"name","detail":"Renamed \"memory.read\" → \"memory_read\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":92,"tokensAfter":92},{"name":"memory.revisions","fixed":{"name":"memory_revisions","description":"List or verify a memory's content revision chain (tamper evidence): every content update is chained and head-checked.","inputSchema":{"type":"object","required":["id"],"properties":{"id":{"type":"string","description":"Memory UUID to inspect"},"action":{"type":"string","description":"Action: list (default) | verify"},"galaxy":{"type":"string","description":"Galaxy (default: codex)"}},"additionalProperties":false},"annotations":{"title":"Memory revision chain","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"Memory revision chain"},"changes":[{"kind":"name","detail":"Renamed \"memory.revisions\" → \"memory_revisions\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":128,"tokensAfter":128},{"name":"memory.search","fixed":{"name":"memory_search","description":"Search memories: hybrid BM25 + vector fusion with deterministic episodic and full-text fallbacks; each result discloses its recall_mode. The preferred recall tool.","inputSchema":{"type":"object","required":["query"],"properties":{"limit":{"type":"integer","minimum":1,"description":"Maximum results (default 10; must be >= 1)"},"query":{"type":"string","description":"Full-text query"},"since":{"type":"string","description":"Inclusive lower time bound: RFC3339 ('2026-02-01T00:00:00Z') or epoch seconds"},"until":{"type":"string","description":"Inclusive upper time bound: RFC3339 or epoch seconds"},"galaxy":{"type":"string","description":"Galaxy filter (optional; default: search all memory galaxies, results labeled; \"all\" is accepted as an alias for the unfiltered default)"},"min_score":{"type":"number","description":"Absolute BM25 score floor"},"min_trust":{"type":"number","description":"Minimum source_trust (0-1): drop results below this trust floor"},"time_basis":{"type":"string","description":"Time basis for since/until: 'recorded' (created_at, default) or 'event' (event_time, falling back to created_at when unset)"},"include_cold":{"type":"boolean","description":"Opt-in unranked cold recovery (no thaw). Trust/importance floors apply; BM25 floors do not apply to unscored recovery. Search content is scrubbed navigation capped at 8192 characters; read by id/galaxy for the exact original."},"min_importance":{"type":"number","description":"Minimum memory importance (0-1)"},"cold_scan_limit":{"type":"integer","description":"Maximum cold records to scan when include_cold is set (default 2048)"},"min_score_ratio":{"type":"number","description":"Relative floor: reject hits below this fraction of the top score"}},"additionalProperties":false},"annotations":{"title":"Search memories","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"Search memories"},"changes":[{"kind":"name","detail":"Renamed \"memory.search\" → \"memory_search\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":502,"tokensAfter":502},{"name":"memory.search_batch","fixed":{"name":"memory_search_batch","description":"Execute multiple memory search queries concurrently in a single turn. Unpacks up to 10 queries, searches the curated corpus, and returns consolidated results.","inputSchema":{"type":"object","required":["queries"],"properties":{"queries":{"type":"array","items":{"type":"string"},"description":"List of query strings to search (1 to 10 queries)."},"limit_per_query":{"type":"integer","default":5,"description":"Max results per query (default 5, max 20)."}},"additionalProperties":false},"annotations":{"title":"Search memories in batch","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"Search memories in batch"},"changes":[{"kind":"name","detail":"Renamed \"memory.search_batch\" → \"memory_search_batch\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":148,"tokensAfter":148},{"name":"memory.stats","fixed":{"name":"memory_stats","description":"Memory index statistics: totals, galaxy spread, and index health.","inputSchema":{"type":"object","required":[],"properties":{"galaxy":{"type":"string","description":"Galaxy to summarize (optional; default codex)"}},"additionalProperties":false},"annotations":{"title":"Memory statistics","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"Memory statistics"},"changes":[{"kind":"name","detail":"Renamed \"memory.stats\" → \"memory_stats\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":79,"tokensAfter":79},{"name":"memory.tags","fixed":{"name":"memory_tags","description":"List the tag vocabulary with usage counts.","inputSchema":{"type":"object","required":[],"properties":{"galaxy":{"type":"string","description":"Galaxy whose tags to list (optional; default codex)"}},"additionalProperties":false},"annotations":{"title":"List memory tags","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"List memory tags"},"changes":[{"kind":"name","detail":"Renamed \"memory.tags\" → \"memory_tags\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":74,"tokensAfter":74},{"name":"memory.vector.search","fixed":{"name":"memory_vector_search","description":"Vector-similarity search over memory embeddings.","inputSchema":{"type":"object","required":["memory_id"],"properties":{"limit":{"type":"integer","description":"Maximum results (default 10)"},"galaxy":{"type":"string","description":"Galaxy filter (optional)"},"embedding":{"type":"array","items":{"type":"number"},"description":"Raw embedding vector (alternative to memory_id)"},"memory_id":{"type":"string","description":"Memory UUID whose stored embedding is the query"}},"additionalProperties":false},"annotations":{"title":"Vector search memories","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"Vector search memories"},"changes":[{"kind":"name","detail":"Renamed \"memory.vector.search\" → \"memory_vector_search\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":153,"tokensAfter":153},{"name":"receipts.verify","fixed":{"name":"receipts_verify","description":"Verify a receipt id or a bundle offline; fail-closed without an anchor (verdict PROVISIONAL).","inputSchema":{"type":"object","required":[],"properties":{"id":{"type":"string","description":"Receipt task id (UUID or urn:uuid:)"},"bundle":{"type":"object","description":"Inline bundle to verify (alternative to id)"},"variant":{"type":"string","description":"Receipt variant (default original)"},"require_anchor":{"type":"boolean","description":"Fail-closed: without an anchor the verdict is PROVISIONAL"}},"additionalProperties":false},"annotations":{"title":"Verify a continuity receipt","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"Verify a continuity receipt"},"changes":[{"kind":"name","detail":"Renamed \"receipts.verify\" → \"receipts_verify\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":161,"tokensAfter":161},{"name":"session.continuity","fixed":{"name":"session_continuity","description":"Recall where the previous session left off: recent turns, checkpoints, and open work.","inputSchema":{"type":"object","required":[],"properties":{"n":{"type":"integer","description":"Number of prior turns (default 10)"},"since":{"type":"string","description":"Time-range floor: epoch seconds, RFC 3339, or YYYY-MM-DD"},"until":{"type":"string","description":"Time-range ceiling: epoch seconds, RFC 3339, or YYYY-MM-DD"},"max_content_bytes":{"type":"integer","description":"Per-turn content cap in bytes (256-262144, default 8192)"},"current_session_id":{"type":"string","description":"Session to exclude (optional)"},"max_response_bytes":{"type":"integer","description":"Turns budget in bytes (256-262144, default 49152)"},"include_briefing_text":{"type":"boolean","description":"Include the ready-to-inject briefing.text block (default false; adds bytes outside the turns budget)"}},"additionalProperties":false},"annotations":{"title":"Recall session continuity","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"Recall session continuity"},"changes":[{"kind":"name","detail":"Renamed \"session.continuity\" → \"session_continuity\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":267,"tokensAfter":267},{"name":"session.list","fixed":{"name":"session_list","description":"List sessions with titles and summaries.","inputSchema":{"type":"object","required":[],"properties":{"type":{"type":"string","description":"Filter by session type"},"title":{"type":"string","description":"Filter by title substring"},"sequence":{"type":"integer","description":"Filter by start sequence number"},"session_id":{"type":"string","description":"Filter by session UUID"}},"additionalProperties":false},"annotations":{"title":"List sessions","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"List sessions"},"changes":[{"kind":"name","detail":"Renamed \"session.list\" → \"session_list\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":125,"tokensAfter":125},{"name":"session.recall","fixed":{"name":"session_recall","description":"Recall a session's turns without continuity packaging.","inputSchema":{"type":"object","required":[],"properties":{"limit":{"type":"integer","description":"Maximum turns to return (default 50)"},"session_id":{"type":"string","description":"Session UUID to recall (defaults to the most recent session)"}},"additionalProperties":false},"annotations":{"title":"Recall a session","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"Recall a session"},"changes":[{"kind":"name","detail":"Renamed \"session.recall\" → \"session_recall\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":104,"tokensAfter":104},{"name":"session.replay","fixed":{"name":"session_replay","description":"Replay a session's recorded turns in order.","inputSchema":{"type":"object","required":[],"properties":{"n":{"type":"integer","description":"Maximum turns (default 50)"},"mode":{"type":"string","description":"full | selective | progressive | lossless (default full)"},"since":{"type":"string","description":"Time-range floor: epoch seconds, RFC 3339, or YYYY-MM-DD"},"until":{"type":"string","description":"Time-range ceiling: epoch seconds, RFC 3339, or YYYY-MM-DD"},"cursor":{"type":"string","description":"Lossless mode opaque placement cursor"},"page_size":{"type":"integer","description":"Lossless mode records per page (1-64, default 16)"},"session_id":{"type":"string","description":"Target session (required explicit UUID for lossless; otherwise default most recent)"},"turn_types":{"type":"array","items":{"type":"string"},"description":"Selective mode: turn types to keep"},"token_budget":{"type":"integer","description":"Progressive mode token budget (default 2000)"},"max_wire_bytes":{"type":"integer","description":"Lossless mode serialized JSON ceiling (1024-49152)"},"min_importance":{"type":"number","description":"Selective mode floor (default 0.7)"},"include_superseded":{"type":"boolean","description":"Also return turns replaced via supersedes (default false)."}},"additionalProperties":false},"annotations":{"title":"Replay a session","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"Replay a session"},"changes":[{"kind":"name","detail":"Renamed \"session.replay\" → \"session_replay\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":377,"tokensAfter":377}],"toolsChanged":23,"tokensSaved":0,"todo":[],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}