Skip to content

MCP Tools Reference

Detailed parameter schemas for all 36 MCP tools.

Palace — Read Tools

mempalace_status

Palace overview: total drawers, wing and room counts, AAAK spec, and memory protocol.

Parameters: None

Returns: { total_drawers, wings, rooms, protocol, aaak_dialect }


mempalace_list_wings

List all wings with drawer counts.

Parameters: None

Returns: { wings: { "wing_name": count } }


mempalace_list_rooms

List rooms within a wing (or all rooms if no wing given).

ParameterTypeRequiredDescription
wingstringNoWing to list rooms for

Returns: { wing, rooms: { "room_name": count } }


mempalace_get_taxonomy

Full wing → room → drawer count tree.

Parameters: None

Returns: { taxonomy: { "wing": { "room": count } } }


Semantic search. Returns verbatim drawer content with similarity scores.

ParameterTypeRequiredDescription
querystringYesWhat to search for
limitintegerNoMax results (default: 5)
wingstringNoFilter by wing
roomstringNoFilter by room

Returns: { query, filters, results: [{ text, wing, room, source_file, similarity }] }


mempalace_check_duplicate

Check if content already exists in the palace before filing.

ParameterTypeRequiredDescription
contentstringYesContent to check
thresholdnumberNoSimilarity threshold 0–1 (default: 0.85–0.87)

Returns: { is_duplicate, matches: [{ id, wing, room, similarity, content }] }


mempalace_get_aaak_spec

Returns the AAAK dialect specification.

Parameters: None

Returns: { aaak_spec: "..." }


Palace — Write Tools

mempalace_add_drawer

File verbatim content into the palace. Identical content (same deterministic drawer ID) is silently skipped. For similarity-based duplicate detection before filing, use mempalace_check_duplicate.

ParameterTypeRequiredDescription
wingstringYesWing (project name)
roomstringYesRoom (aspect: backend, decisions, etc.)
contentstringYesVerbatim content to store
source_filestringNoWhere this came from
added_bystringNoWho is filing (default: "mcp")

Returns: { success, drawer_id, wing, room }


mempalace_checkpoint

Save a whole session in one call. Semantic-dedups each item, files the non-duplicates as drawers, then writes one diary entry. Use this instead of many separate mempalace_check_duplicate / mempalace_add_drawer / mempalace_diary_write calls — it renders as a single tool-call card in the host UI (and keeps the spinner up for the whole save). Reuses the same single-item handlers, so dedup, idempotency, and verbatim guarantees are identical.

ParameterTypeRequiredDescription
itemsarrayYesVerbatim items to file. Each is { wing, room, content }
diaryobjectNoDiary entry written after filing: { agent_name, entry, topic?, wing? } (entry is AAAK-format)
dedup_thresholdnumberNoSimilarity threshold 0–1 for the per-item dedup check (default 0.9)

Returns: { added: [...], duplicates: [...], errors: [...], diary? }


mempalace_delete_drawer

Delete a drawer by ID. Irreversible.

ParameterTypeRequiredDescription
drawer_idstringYesID of the drawer to delete

Returns: { success, drawer_id }


mempalace_mine

Mine a directory into the palace — the MCP equivalent of mempalace mine. Wraps the same in-process miners the CLI uses; runs synchronously and returns the miner's summary as output. The palace write lock is automatic — a concurrent mine returns a structured already-running error. Orphan cleanup is separate (see mempalace_sync).

ParameterTypeRequiredDescription
sourcestringYesDirectory to mine
modestringNoprojects (code/docs, default), convos (chat transcripts), or extract (office docs; needs the mempalace[extract] extra)
wingstringNoTarget wing (default: source directory name)
agentstringNoRecorded on every drawer (default: mempalace)
limitintegerNoMax files to process (0 = all; default 0)
dry_runbooleanNoReport what would be filed without writing (default false)
extractstringNoConvos extraction strategy: exchange (default) or general; ignored by other modes

Returns: { success, mode, dry_run, output } on success (output is the miner's human-readable summary; output_truncated: true is added when a very large summary is tail-trimmed), or { success: false, error, error_class? } on failure.


mempalace_delete_by_source

Bulk-delete every drawer mined from one source_file (exact match). Use this to clean up benchmark or test data that was accidentally mined into a user wing — for example ShareGPT dumps or results_mempal_*.jsonl eval files drowning out real memories in semantic search. Matching is pushed down to the storage backend via a where filter, so it is not subject to the SQLite variable limit no matter how many drawers share the source. Returns a dry-run match count and a small sample by default; pass dry_run=false to commit. Irreversible.

ParameterTypeRequiredDescription
source_filestringYesExact source_file metadata value to remove (e.g. the full path that was mined)
dry_runbooleanNoPreview the match count without deleting; default true. Pass false to actually delete

Returns (dry run): { success, dry_run, source_file, match_count, sample, hint }Returns (commit): { success, dry_run, source_file, deleted }


mempalace_sync

Prune drawers whose source files are gitignored, deleted, or moved. Returns a dry-run report by default; pass apply=true to commit deletions.

ParameterTypeRequiredDescription
project_dirstringNoProject root to scope the sync (auto-detected from drawer metadata if omitted)
wingstringNoLimit to one wing
applybooleanNoActually delete drawers; default is dry-run preview

Returns: { scanned, kept, gitignored, missing, no_source, out_of_scope, removed_drawers, removed_closets, dry_run, by_source }


mempalace_get_drawer

Fetch a single drawer by ID — returns full content and metadata.

ParameterTypeRequiredDescription
drawer_idstringYesID of the drawer to fetch

Returns: { drawer_id, content, wing, room, metadata } where metadata.source_file, when present, is the basename only — the absolute path written by the miners is reduced before the dict is returned to MCP clients.


mempalace_list_drawers

List drawers with pagination. Optional wing/room filter. Returns IDs, wings, rooms, and content previews.

ParameterTypeRequiredDescription
wingstringNoFilter by wing
roomstringNoFilter by room
limitintegerNoMax results per page (default 20, max 100)
offsetintegerNoOffset for pagination (default 0)

Returns: { drawers: [...], total, limit, offset }


mempalace_update_drawer

Update an existing drawer's content and/or metadata (wing, room). Fetches the existing drawer first; returns an error if not found.

ParameterTypeRequiredDescription
drawer_idstringYesID of the drawer to update
contentstringNoNew content (omit to keep existing)
wingstringNoNew wing (omit to keep existing)
roomstringNoNew room (omit to keep existing)

Returns: { success, drawer_id, updated_fields }


Knowledge Graph Tools

mempalace_kg_query

Query entity relationships with time filtering.

ParameterTypeRequiredDescription
entitystringYesEntity to query (e.g. "Max", "MyProject")
as_ofstringNoDate filter — only facts valid at this date (YYYY-MM-DD)
directionstringNooutgoing, incoming, or both (default: both)

Returns: { entity, as_of, facts: [{ direction, subject, predicate, object, valid_from, valid_to, current }], count }


mempalace_kg_add

Add a fact to the knowledge graph.

ParameterTypeRequiredDescription
subjectstringYesThe entity doing/being something
predicatestringYesRelationship type (e.g. "loves", "works_on")
objectstringYesThe entity being connected to
valid_fromstringNoWhen this became true (YYYY-MM-DD)
source_closetstringNoCloset ID where this fact appears

Returns: { success, triple_id, fact }


mempalace_kg_invalidate

Mark a fact as no longer true.

ParameterTypeRequiredDescription
subjectstringYesEntity
predicatestringYesRelationship
objectstringYesConnected entity
endedstringNoWhen it stopped being true (default: today)

Returns: { success, fact, ended }


mempalace_kg_supersede

Atomically replace a fact with its successor at a single shared boundary. Use when a single-valued fact changes (model, employer, address) instead of a separate mempalace_kg_invalidate + mempalace_kg_add — a point-in-time query at the boundary then returns only the new value.

ParameterTypeRequiredDescription
subjectstringYesEntity whose fact is changing
predicatestringYesRelationship (e.g. uses_model, works_at)
old_objectstringYesValue being replaced
new_objectstringYesNew value
atstringNoBoundary instant (YYYY-MM-DD or YYYY-MM-DDTHH:MM:SSZ; default: now UTC)

Returns: { success, triple_id, fact, superseded }


mempalace_kg_timeline

Chronological timeline of facts.

ParameterTypeRequiredDescription
entitystringNoEntity to get timeline for (omit for full timeline)

Returns: { entity, timeline: [{ subject, predicate, object, valid_from, valid_to, current }], count }


mempalace_kg_stats

Knowledge graph overview.

Parameters: None

Returns: { entities, triples, current_facts, expired_facts, relationship_types }


mempalace_traverse

Walk the palace graph from a room. Find connected ideas across wings.

ParameterTypeRequiredDescription
start_roomstringYesRoom to start from
max_hopsintegerNoHow many connections to follow (default: 2)

Returns: [{ room, wings, halls, count, hop, connected_via }]


mempalace_find_tunnels

Find rooms that bridge two wings.

ParameterTypeRequiredDescription
wing_astringNoFirst wing
wing_bstringNoSecond wing

Returns: [{ room, wings, halls, count, recent }]


mempalace_graph_stats

Palace graph overview: nodes, tunnels, edges, connectivity.

Parameters: None

Returns: { total_rooms, tunnel_rooms, total_edges, rooms_per_wing, top_tunnels }


mempalace_create_tunnel

Create a cross-wing tunnel linking two palace locations. Use when content in one project relates to another — e.g., an API design in project_api connects to a database schema in project_database.

ParameterTypeRequiredDescription
source_wingstringYesWing of the source
source_roomstringYesRoom in the source wing
target_wingstringYesWing of the target
target_roomstringYesRoom in the target wing
labelstringNoDescription of the connection
source_drawer_idstringNoSpecific source drawer ID
target_drawer_idstringNoSpecific target drawer ID

Returns: { success, tunnel_id, source, target }


mempalace_list_tunnels

List all explicit cross-wing tunnels. Optionally filter by wing.

ParameterTypeRequiredDescription
wingstringNoFilter tunnels by wing (source or target)

Returns: { tunnels: [...], count }


mempalace_delete_tunnel

Delete an explicit tunnel by its ID.

ParameterTypeRequiredDescription
tunnel_idstringYesTunnel ID to delete

Returns: { success, tunnel_id }


mempalace_list_hallways

List within-wing hallway records (entity-to-entity co-occurrence links built at mine time). Optionally filter by wing.

ParameterTypeRequiredDescription
wingstringNoFilter hallways by wing

Returns: [ { id, wing, entity_a, entity_b, co_occurrence_count, rooms, ... }, ... ]


mempalace_delete_hallway

Delete a hallway record by its ID.

ParameterTypeRequiredDescription
hallway_idstringYesHallway ID to delete

Returns: { deleted: bool }


mempalace_follow_tunnels

Follow tunnels from a room to see what it connects to in other wings. Returns connected rooms with drawer previews.

ParameterTypeRequiredDescription
wingstringYesWing to start from
roomstringYesRoom to follow tunnels from

Returns: [{ wing, room, label, previews }]


Agent Diary Tools

mempalace_diary_write

Write to your personal agent diary.

ParameterTypeRequiredDescription
agent_namestringYesYour name — each agent gets its own wing
entrystringYesDiary entry (in AAAK format recommended)
topicstringNoTopic tag (default: "general")

Returns: { success, entry_id, agent, topic, timestamp }


mempalace_diary_read

Read recent diary entries.

ParameterTypeRequiredDescription
agent_namestringYesYour name
last_nintegerNoNumber of recent entries (default: 10)

Returns: { agent, entries: [{ date, timestamp, topic, content }], total, showing }


System Tools

mempalace_hook_settings

Get or set auto-save hook behaviour. silent_save=true saves directly without MCP-level clutter; silent_save=false uses the legacy blocking path. desktop_toast=true surfaces a desktop notification when a save completes. Call with no arguments to view the current settings.

ParameterTypeRequiredDescription
silent_savebooleanNotrue = silent direct save, false = blocking MCP calls
desktop_toastbooleanNotrue = show desktop toast via notify-send

Returns: { silent_save, desktop_toast }


mempalace_memories_filed_away

Check whether a recent palace checkpoint was saved. Returns message count and timestamp of the last save.

Parameters: None

Returns: { filed, message_count, timestamp }


mempalace_reconnect

Force a reconnect to the palace database. Use this after external scripts or CLI commands modified the palace directly, which can leave the in-memory HNSW index stale.

Parameters: None

Returns: { success, message, drawers, vector_disabled[, vector_disabled_reason] } (on no-palace: { success: false, message, drawers, vector_disabled }; on exception: { success: false, error })

Released under the MIT License.