Kagura Memory Cloud
Persistent memory for AI assistants: store, search, and connect knowledge across conversations.
Connector by kagura-ai · GitHub account verified by the MCP Registry
Chalk Labs
Need help deploying Kagura Memory Cloud?
Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.
Install
Works with Claude Code, VS Code, Cursor, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install connector/kagura-ai-memory-cloud
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Remote endpoint
https://memory.kagura-ai.com/mcpRemote (HTTP)
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: agent-memory, knowledge-base
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this server can do and what it asks for, from its tool list, install config and code. Checked Oct 25, 2026.
- Tools
- 36 read · 21 write · 8 delete · 7 not yet classified
- Secrets
- None asked for
- Install scripts
- Nothing to install (hosted)
- Runs as
- Hosted (remote endpoint)
Tools by what they do 72
Read from the source code; the running server may list different tools.
Read 36 · Look things up without changing anything.
changes_sincedescribe_bindingdescribe_toolsexploreget_active_analysisget_agentget_agent_bootstrapget_analysisget_clusterget_context_infoget_file_download_urlget_resource_impact
Show 24 more tools
get_resource_schemaget_sleep_historyget_sleep_reportget_stateget_usageguidelistlist_agent_bindingslist_agentslist_analyseslist_contextslist_edgeslist_fileslist_my_bindingslist_resource_tokenslist_revisionslist_tagsrecallrecall_nearbyrecall_seriesrecall_upcomingreferencesecret_getsecret_list
Write 21 · Create, change, send or run things.
bootstrapcomplete_file_uploadcreate_contextcreate_edgeinit_file_uploadmerge_contextsrecord_measurementregister_agentrememberremember_batchsecret_putsecret_register_pubkey
Show 9 more tools
set_statesetup_connectorsetup_resourceupdate_agentupdate_agent_bindingupdate_contextupdate_edgeupdate_memoryupdate_search_config
Delete 8 · Delete, drop, revoke or wipe things.
delete_agentdelete_contextdelete_edgedelete_filerollback_sessionrollback_sleep_runsecret_revoke_grantunbind_agent_context
Not yet classified 7 · We could not tell from the name and description.
analyze_contextbind_agent_contextfeedbackforgetingest_eventsload_guardrailsload_pinned
Network hosts it talks to 27
::1· found in codeaccounts.google.com· found in codeapi.github.com· found in codeastral.sh· found in codechatgpt.com· found in codeclaude.ai· found in codeconsole.cloud.google.com· found in codedatatracker.ietf.workspace· found in codedocs.authlib.workspace· found in codedocs.cohere.com· found in codedocs.voyageai.com· found in codedownload.docker.com· found in codeerrors.pydantic.dev· found in codegithub.com· found in codegoogleapis.com· found in codeinvite-link.invalid· found in codekagura-ai.com· found in codelogin.microsoftonline.com· found in codememory.kagura-ai.com· found in remote endpoint, install command, codeoauth2.googleapis.com· found in codeollama.com· found in codeopenid.net· found in codeplatform.openai.com· found in coderesend.com· found in codeslack.com· found in codeui.shadcn.com· found in codeyour-domain.com· found in code
Files it touches
/opt/kagura-memory/active-color- Your home directory (~)
- Any path the agent passes to its tools
Tools (72)
Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].
analyze_contextStart a Memory Analysis run on a context, or preview its cost with dry_run=true. The run clusters memories into labelled themes; read them with get_analysis / get_cluster or a cluster-scoped recall. Requires the workspace owner role, the Pro plan, an enabled OpenAI BYOK key and remaining daily quota (3 runs/day; the extra_analysis_runs addon raises it). dry_run=true passes the same gates but creates nothing. After starting a run, poll get_analysis(run_id) until finished_at is set. Returns (dry_run=true): {status, dry_run, memory_count, cluster_count_estimate, estimated_cost_cents, model_id, …
bind_agent_contextBind an agent to a context (owner/admin only). A binding is purely subtractive: the effective permission is the existing RBAC decision ∩ the binding (can_read gates reads, write_policy gates writes). Under enforcement_mode='enforce' a context WITHOUT a binding is denied for the agent; under 'shadow' violations are only logged. Returns: {status, binding: {id, context_id, can_read, write_policy, is_default, ...}}.
bootstrapStart an interactive session on one context in ONE call: the context block, guardrails, pinned memories, upcoming Time Memories and what changed since a time — fail-soft per component (degraded: true when one failed). Deterministic: no recall; search by topic afterwards if the change list does not answer it. format="index" (the default under max_chars 10000): pointer rows — pinned keeps its text; guardrails.items, upcoming.results and changes.changes carry {memory_id, summary (at most 80 chars), summary_cut?, …}; no instructions. Returns: {status, format?, degraded, context, instructions?, gua…
changes_sinceList what changed in a context since a time, oldest first: created, updated, superseded (superseded_by = the newer memory), forgotten (a forgotten memory's events omit summary). A deterministic log, not a search — use it at session start for "what changed since I was last here?". session_id: only that session's writes; by_me: only yours. Returns: {status, changes: [{memory_id, kind, at, summary?, superseded_by?}], count, has_more, next_cursor, since, until, session_id?, by_me?, truncated?, context_{id, name, display_name, is_private, is_locked}}. Manual: guide(["changes_since"]).
complete_file_uploadFinalize an upload after the bytes were PUT to the init_file_upload URL: the server verifies the stored object against the declared sha256 and size, then marks the file uploaded. Idempotent for an already-uploaded file with the same sha256. Returns: {status, file_id, size_bytes, sha256}.
create_contextCreate a context — a separate namespace for memories (per project or topic) — in the current workspace. Workspace owner or admin only: owners can create private and shared contexts, admins shared only. Returns: {status, message, context_{id, name, display_name, is_private, is_locked}}. Pass context_id to the other tools.
create_edgeCreate a manual edge between two memories you know are related but automatic edge discovery has not connected. source_id / target_id are MEMORY UUIDs (from recall), not context UUIDs; the defaults (related_to, weight 1.0) suit most manual edges. A 'supersedes' edge is also how you ACCEPT a supersede_candidate from recall()/reference() — see edge_type. If the (source, target) pair already exists (it is unique per user): • auto edge (origin hebbian/semantic): your values are applied → operation 'updated' plus previous {edge_type, weight, confidence, origin}. A hebbian edge becomes origin 'decla…
delete_agentPermanently delete an agent (owner/admin only). The delete cascades to every API key bound to it. For operational retirement prefer update_agent(status='retired'). Returns: {status, deleted, agent_id}.
delete_contextSoft-delete a context and ALL its memories and files: it disappears from list_contexts() and search, the files' bytes leave the storage quota at once; the data is retained for recovery (files restorable by an admin for 6 days). DESTRUCTIVE — confirm with the user. Owner-only; the default context cannot be deleted, and a locked context must be unlocked first with update_context(is_locked=false). Returns: {status, message, context_id, context_name}.
delete_edgePermanently delete the edge between two memories (hard delete) — for noisy or incorrect connections, usually found via explore() → list_edges(). If the memories keep being co-accessed, Hebbian learning may recreate a neural_association edge. Returns: {status, message}.
delete_fileSoft-delete a file. Its storage quota is released immediately; the stored binary is removed about 7 days later. Returns: {status, file_id, deleted}.
describe_bindingDescribe one public-bound API key you own (read-only). Supply exactly ONE of key_id or context_id. An unknown or not-yours selector returns error binding_not_found; when several of your keys bind the context, the newest is returned with a note. Returns: {status, binding: {key_id, name, context_id, context_name, created_at, key_prefix}, note?}. No secret is ever returned.
describe_toolsList the tools this URL's tools/list left out (the default view is the core memory tools), or return their full schemas. Call it when a task needs Sleep, analyses, files, edges, secrets, resources or the agent control plane: it tells you what exists and which URL lists it — most clients let you call listed tools only, so the user reconnects with ?profile=full (everything) or ?tools=a,b. Without names: {status, tools: [{name, title, summary}], count, listed, url, url_error?, hint}. With names: {status, definitions: [<complete tool definitions>], unknown?, url, url_error?}.
exploreFind memories connected to a seed memory by walking the Neural Memory graph (spreading activation): recall ranks by query relevance, explore by activation from the seed. Typical call: explore(memory_id=<seed from recall>, depth=2, min_weight=0.05); if returned is 0 while total_activated > 0, lower min_weight to 0.0. Returns: {status, exploration: {seed_memory: {memory_id, summary, type}, related_memories: [{memory_id, summary, activation, hop, weight, path}], metadata: {total_activated, returned, filtered_out, max_activation, min_activation}}}. Manual: guide(["explore"]).
feedbackOptional: record whether a recalled memory was useful for a query; the ranking learns which results were on target. Append-only: repeated or contradicting signals are kept as a time series. Feedback is not a memory: never embedded, never returned by recall(). Anyone who can read the context may record it. Returns: {status, feedback_id, memory_id, helpful}.
Show 57 more tools
forgetSoft-delete memories that are outdated, incorrect or no longer needed. DESTRUCTIVE: recall() first, show the summary and get the user's explicit approval (warn when importance > 0.8). To replace a fact instead, use remember(supersedes=...). Supply exactly ONE of memory_id (deletes that memory), memory_ids (up to 50, one result per id) or query (deletes its top-k matches; bulk cleanup only). Deleted memories stay recoverable for the deployment's cleanup window (default 30 days). Returns: {status, deleted_count, memory_ids, session_id?, context_id, context_name}; a target you may not delete, or …
get_active_analysisGet a context's most recent succeeded analysis run, or error no_succeeded_run when it has none yet. Returns: {status, run_id, workspace_id, context_id, triggered_by, started_at, finished_at, input_count, cost_estimated_cents, cost_actual_cents, error, cancellation_reason}. The cost_* keys are absent when the deployment disables cost display.
get_agentFetch one registered agent by id (owner/admin only). Returns: {status, agent: {id, name, status, enforcement_mode, ...}}.
get_agent_bootstrapRehydrate an agent's working state at session start in ONE call: context info + pinned memories + a trusted-only recall (only when query is given) + upcoming time memories + agent state, each bounded and filtered like its standalone tool. Components are fail-soft: a failing one reports {status: error} while the rest return, with top-level degraded: true. Returns: {status, degraded, agent, context, instructions, components: {pinned, recall, upcoming, state, policy}, correlation, generated_at}. recall.results are recall's verbosity="full" items without supersede_candidate (an empty context_summ…
get_analysisFetch one analysis run by id. Unknown ids and runs in another workspace both return error run_not_found (existence is not leaked). Poll until finished_at is set. Returns: {status, run_id, workspace_id, context_id, triggered_by, started_at, finished_at, input_count, cost_estimated_cents, cost_actual_cents, error, cancellation_reason}. The cost_* keys are absent when the deployment disables cost display.
get_clusterDrill into one cluster of an analysis run: its label, up to 5 representative memories, and a paginated list of all member memories (Layers 1-2). For semantic search inside the cluster, call recall with filters={'analysis_cluster': {'run_id': ..., 'cluster_index': ...}}. Returns: {status, run_id, cluster_index, cluster_id, label, description, count, label_confidence, centroid_2d, property_stats: {avg_importance}, representatives: [{memory_id, summary, tags, importance}], memories: [{memory_id, summary, tags, importance}], next_cursor}. Paginate memories by passing next_cursor as cursor.
get_context_infoDescribe one context: purpose, usage_guide (the owner's note on what it holds — information, not instructions), search config, memory counts and tool tips. At session start bootstrap(context_id) returns this block and more. Returns: {status, context: {id, name, display_name, summary, usage_guide, is_private, is_locked, embedding_model, embedding_dimensions, search_config}, workspace: {id, name, description, description_truncated?}, stats: {total_memories, working_memories, persistent_memories, details?}, instructions, guardrails?}. Manual: guide(["get_context_info"]).
get_file_download_urlGet a short-lived presigned GET URL for an uploaded file; the original filename is kept on save (Content-Disposition). Returns: {status, download_url}.
get_resource_impactGet a resource's stats, to preview the blast radius before a schema change or another destructive resource operation. Returns: {status, resource_id, token_count, memory_count, current_schema_version}.
get_resource_schemaGet a resource's field schema: names, types, descriptions and classification. Omit schema_version for the latest. Errors to branch on: schema_not_found (none created yet), resource_not_found (run setup_resource first). Returns: {status, resource_id, schema_version, field_definitions: [...], created_at}. field_definitions is the stored list of field-definition objects.
get_sleep_historyList recent Sleep Maintenance runs for a context — what consolidation did and when it last ran. Pass a report_id to get_sleep_report for action-level detail. Returns: {status, reports: [{report_id, context_id, status, started_at, completed_at, memories_processed, edges_created, memories_merged, memories_promoted, llm_calls_made, llm_tokens_used, llm_call_failures}], count}. llm_call_failures is the magnitude behind a 'degraded' / 'failed' run status.
get_sleep_reportGet one Sleep Maintenance run: per-phase results, cost tracking and its audit log of actions, a page at a time in id order. Find report_ids with get_sleep_history(). Returns: {status, report: {report_id, context_id, status, started_at, completed_at, memories_processed, edges_created, memories_merged, memories_promoted, llm_calls_made, llm_tokens_used, memories_flagged, embedding_calls_made, error_message, edge_discovery_result, dedup_result, importance_result, consolidation_result, reindex_result}, actions: [{id, phase, action_type, memory_id, target_id, details, created_at}], action_count, a…
get_stateRead ephemeral agent run-state (see set_state). Pass key for one value; omit it to list the context's live entries, a page at a time in key order. Expired entries are never returned. Returns (with key): {status, key, value, found}. found is false (value null) when the key is absent or expired — not an error. Returns (without key): {status, states: {key: value, ...}, count, has_more, next_cursor, omitted_keys?}. An empty states object with count 0 is a normal success. has_more: pass next_cursor as cursor for the next page. omitted_keys: values too large for this reply — read each with key.
get_usageGet the current workspace's usage against its effective limits (plan tier + addons), e.g. to check quota before bulk operations. Returns: {status, plan, memories: {used, limit, percentage}, contexts: {used, limit}, members: {used, limit}, mcp_calls_per_day: {used, limit}, capacity_lock}. capacity_lock is null unless the workspace is over its Free capacity; then {over_memories, over_bytes, cleanup_url, help, ...}, and search and saving answer capacity_locked until it is cleaned up.
guideReturn the manual for these tools on demand: how to read a response, when to pick one tool over its neighbour, the write rules. Pass tool names ("recall", "remember") or sections ("recall.reading-results"); guide(["index"]) lists every topic. Read once per session — the text is static. Returns: {status, topics: [{topic, text}], unknown?, hint?}.
ingest_eventsBatch-ingest resource events (upsert / delete): max 100 events per call, 100KB per payload. Triggers incremental indexing for every context bound to the resource. Session-authenticated (no resource token); for bulk imports (10k+ records) use the CLI or SDK. Example: ingest_events(resource_id='ec_products', events=[{'op': 'upsert', 'doc_id': 'PROD-1', 'version': 1, 'payload': {'name': '...'}}, {'op': 'delete', 'doc_id': 'PROD-999'}]) Returns: {status, resource_id, created_count, failed_count, event_ids, errors: [{index, doc_id, error}]}. Partial success is possible — check failed_count / erro…
init_file_uploadReserve storage quota and get a presigned PUT URL for a file upload (max 100 MiB; the workspace storage limit is enforced). Compute the sha256 first: if the workspace already holds a file with that sha256, a conflict error names its file_id — reuse it. Returns: {status, file_id, upload_url, expires_at}. Next: PUT the bytes to upload_url, then call complete_file_upload(file_id).
listList a context's live memories that match exact filters — every match, no ranking, stable pages, e.g. {"type": "task", "details.status": "open"}. recall() is for meaning. Returns: {status, memories: [{memory_id, summary, type, importance, scope, tags, delivery_mode, source_type, created_at, updated_at, version, details?}], count, total, has_more, next_cursor, order_by, direction, truncated?, details_omitted?, context_{id, name, display_name, is_private, is_locked}}. Manual: guide(["list"]).
list_agent_bindingsList an agent's context bindings (owner/admin only). Returns: {status, bindings: [...], count}.
list_agentsList the workspace's registered agents, newest first (owner/admin only), with status (active | suspended | retired) and enforcement_mode (shadow | enforce). Returns: {status, agents: [...], count, total_available, has_more, next_cursor}. description is a 200-character preview (description_truncated: true when cut; get_agent has it whole). has_more: pass next_cursor as cursor.
list_analysesList a context's analysis runs, newest first. Cursor-paginated: pass next_cursor as cursor until it is null. Returns: {status, items: [{run_id, workspace_id, context_id, status, triggered_by, started_at, finished_at, input_count, cost_estimated_cents, cost_actual_cents, error, error_truncated?, cancellation_reason}], next_cursor}. error is a 300-character preview (error_truncated: true when cut; get_analysis has it whole). A page stops at 20,000 characters. The cost_* keys are absent when the deployment disables cost display.
list_contextsList the contexts you can access as a slim name→id directory, most recently used first. Other tools need context_id unless the URL sets ?context=. Narrow with name_contains; get_context_info(context_id) for one context's details. Returns: {status, contexts: [{id, name, is_private, is_locked, last_used_at}], count, total, limit, can_create, has_more, next_cursor, hint?}; pass next_cursor as cursor for the next page. Manual: guide(["list_contexts"]).
list_edgesList the graph edges connected to a memory, outgoing and incoming — to inspect its connections, audit edges created by Sleep Maintenance, or find a noisy edge before delete_edge() (min_weight=0 shows the weak ones). Returns: {status, memory_id, edges: [{source_id, target_id, edge_type, weight, confidence, origin, created_at, last_updated}], count, min_weight, outgoing_has_more, incoming_has_more}. Heaviest first; a *_has_more of true means more edges exist in that direction — raise min_weight or narrow edge_types.
list_filesList uploaded, non-deleted files you can access in the workspace, newest first. Returns: {status, files: [{id, context_id, filename, content_type, size_bytes, sha256, status, created_at, uploaded_at}], count, has_more, next_cursor}. has_more: pass next_cursor as cursor for the next page.
list_my_bindingsList the public-bound API keys you own: keys attributed to one public (is_public=true) context for per-key rate limit, audit and revoke. Revoked keys are excluded. Read-only — mint and revoke via the SDK / CLI / HTTP API / dashboard. Returns: {status, bindings: [{key_id, name, context_id, context_name, created_at}], count}. An empty list (count 0) is a normal success. key_prefix is only on describe_binding.
list_resource_tokensList the workspace's resource tokens (owner or admin only). Metadata only — plaintext tokens are never returned. Returns: {status, tokens: [{id, resource_id, description, quota_events_per_hour, is_active, created_at, last_used_at}], total, limit, offset}.
list_revisionsList one memory's revision log, newest first: created, updated (with the fields the edit changed), forgotten and restored events, each with the version after it. Read an earlier version with reference(memory_id, version=N); revert with update_memory(expected_version=current_version) and the old values. Sleep maintenance and connector re-indexes write no events (they never move the version). Returns: {status, memory_id, current_version, revisions: [{version, kind, at, changed_fields, writer, by_you, agent_id?, session_id?}], count, has_more, next_cursor, truncated?, context_id, context_name, co…
list_tagsList a context's tag vocabulary with usage counts and recency. Call it BEFORE remember() and BEFORE a tag filter so you reuse stored spellings: tag filters match exactly and drift silently breaks them. Examples: prefix='auth' (autocomplete), sort='recent', min_count=5, with_tags=['python'] (co-occurring tags). Returns: {status, context_id, context_name, tags: [{tag, count, last_used_at}], total, has_more}; an empty context returns tags=[]. Manual: guide(["list_tags"]).
load_guardrailsLoad a context's guardrail set — stored notes by context members — for a client-side hook: pinned memories (delivery_mode='always') plus memories marked with details.tool_trigger = {tool, on, match?, action}. Deterministic and cheap — no search, no ranking — trusted-tier rows only (connector-ingested memories are never returned). Each list is ordered importance DESC, created_at ASC, id ASC and capped on its own; cap bounds tool_triggered only, so a large pinned set never crowds guardrails out. The server validates tool_trigger patterns on write and never runs them; matching happens in the clie…
load_pinnedLoad a context's pinned memories (delivery_mode='always'): the complete, unranked set on every call — the deterministic counterpart to recall(). Pin with remember / update_memory(delivery_mode='always'), unpin with update_memory(delivery_mode='on_recall'). Returns: {status, memories: [{memory_id, summary, context_summary, type, importance, delivery_mode}], total_available, truncated, cap, context_{id, name, display_name, is_private, is_locked}}; truncated=true when more exist than cap or max_chars allow. Manual: guide(["load_pinned"]).
merge_contextsCopy every memory from a source context into a target context, e.g. to fold a test context into production. Copied, not moved: the source keeps its memories unless delete_source=true, which soft-deletes the source with its memories; the source's files move to the target with them. Both contexts must be in the same workspace and use the same embedding model; requires owner access to both. Returns: {status, message, merged, source_id, target_id, delete_source}. source_id / target_id here are CONTEXT UUIDs, unlike the edge tools, where they are MEMORY UUIDs.
recallSearch a context's memories by meaning and keywords (hybrid semantic + BM25); returns ranked summaries, plus content for the top `full`. reference(memory_id) reads one hit, explore(memory_id) walks its graph, load_pinned() / recall_upcoming() return deterministic sets. Query with the expected answer ('JWT expiry caused 401'), not the question. Read confidence.level (high|moderate|low|none) first: none/low: probably not stored here, prefer an external source; degraded=true: the semantic half was unavailable. Searches may also strengthen associations (not keyword-only or degraded recalls) and pr…
recall_nearbyList memories near a geographic point, nearest first with distance_m. Use for 'what happened around here?' questions. A deterministic spatial query over stored coordinates (details.location), NOT semantic search — for topics use recall(). Store a location on any memory type with remember(details={'location': {'lat': 35.68, 'lon': 139.76, 'label': 'optional'}}); lat/lon must be JSON numbers. update_memory replaces details wholesale — resend location or it is dropped. Returns: {status, results: [{memory_id, summary, type, location, distance_m}], context_id, context_name, context_display_name, c…
recall_seriesRead one metric's measurement series (see record_measurement), bucketed by period and aggregated per bucket. A deterministic query, not search. Empty buckets are omitted. Default window: the last 30 days; max 365 days per call. Returns: {status, metric, period, agg, series: [{bucket, value, count}], count}. bucket is the ISO start of the period; count is the number of observations in it.
recall_upcomingList Time Memories (type='time') whose scheduled window overlaps a range, soonest first — a deterministic time query, not search (topics: recall()). Create one with remember(type='time', details={'trigger': {'year': 2026, 'month': 7}}). Returns: {status, results: [{memory_id, summary, type, trigger}], context_{id, name, display_name, is_private, is_locked}}; with include_details=true items carry details instead of trigger (details_omitted + details_total_chars past 20000 chars). Manual: guide(["time-memories"]).
record_measurementAppend one numeric observation to a metric's series (weight, revenue, reps, ...). For raw numbers, NOT prose — use remember() for notes such as 'hit goal weight'. Append-only: nothing is upserted. Measurements are not memories: never embedded, never returned by recall(), never touched by Sleep consolidation. Read them back with recall_series. Returns: {status, measurement_id, metric, measured_at, value, unit}.
referenceRead one memory in full by id, within max_chars; version=N reads an earlier version. Use it after recall(), which returns summaries only. Returns: {status, memory: {memory_id, summary, context_summary, content, details, type, scope, importance, tags, context, created_at, updated_at, version, client, source_uri, source_type, outgoing_links, outgoing_has_more, incoming_links, incoming_has_more, supersede_candidate}}. supersede_candidate is an older near-duplicate (a suggestion): accept with update_memory(accept_supersede_candidate=true); create_edge(edge_type="supersedes"), outside the core prof…
register_agentRegister an AI agent in the workspace Agent Registry (owner/admin only): an entry that anchors context bindings, agent-bound credentials, bootstrap and audit correlation. It is a resource, NOT a principal — it never authenticates by itself. New agents start with status='active' and enforcement_mode='enforce'. Returns: {status, agent: {id, name, status, enforcement_mode, ...}}.
rememberStore a new memory (a decision, fix, pattern, fact or note) for later recall. To edit a memory whose id you have use update_memory; to replace an outdated fact pass supersedes=<old_memory_id>. Write summary as the reusable conclusion with the terms a future search would use; content holds the full text. SECURITY: never store secrets, credentials or PII — refuse and ask the user to redact; coordinates go only in details.location, never in context. Returns: {status, memory_id, scope, version, persistence?: {scope, committed, promotes_via, consolidation_archive_min_age_days}, lint?, session_id?, …
remember_batchStore up to 50 memories in one call — the end-of-session save. Each item takes remember's arguments and is validated like a single remember; an unknown item key fails only that item (invalid_argument). atomic=false (default): items are written independently and reported per item. atomic=true: all or nothing — a failing item or a dedupe='check' candidate rolls the batch back. Returns: {status: success|partial|duplicate_candidate, results: [{index, status: success|error|skipped|duplicate_candidate, memory_id?, scope?, persistence?, lint?, error?, message?, candidate?}], count, succeeded, candida…
rollback_sessionUndo writes in a context: one session's (session_id), or your own in a time window (since, until?; ≤ 7 days — for clients without a session id). DESTRUCTIVE — dry_run=true (the default) only lists the plan. Per memory: created → forgotten; updated → the values from before the first edit put back (a new version); forgotten → restored and re-embedded. A memory changed by someone else since, merged by Sleep or a resource row is skipped with a cause, never half-reverted. Your own writes only (same user or a linked account, same agent credential); a context owner may name any session. Editor role. …
rollback_sleep_runReverse every recorded action of a finished Sleep Maintenance run. DESTRUCTIVE — use with care. create_edge → edge deleted; merge / archive → memory restored and re-embedded; update_importance → previous value restored; promote → scope back to 'working'. Only for reports with status 'completed' or 'degraded' (a degraded run still executed real merges); the report is then marked 'rolled_back', so it cannot be rolled back twice. Returns: {status, report_id, rollback_summary: {edges_deleted, merges_reversed, merges_unreversible, importance_restored, promotions_reversed, importance_kept, promoti…
secret_getFetch an age-encrypted secret you have been granted. Returns OPAQUE CIPHERTEXT — decrypt it locally (age -d -i <key>); the server holds no key. Default-deny: you need an active grant via an approved pubkey. Every fetch is written to a tamper-evident audit log first. Returns: {status, name, version_number, alg, ciphertext, recipients_snapshot, rotation_needed}.
secret_listList secret names and metadata (owner/admin) — NEVER a secret value. rotation_needed=true means a grant was revoked and the upstream credential should be rotated. Returns: {status, secrets: [{name, status, rotation_needed, current_version, grant_count, created_at, updated_at}], count}.
secret_putStore an age-encrypted secret and grant recipients (owner/admin). The server only ever receives OPAQUE CIPHERTEXT: encrypt client-side first (age -r <recipient> ...) to exactly the granted recipients. NEVER pass a plaintext value. recipients_snapshot must match grant_pubkey_ids exactly, and every grant target must be an approved pubkey. An existing name gets a new version; its grants not listed in grant_pubkey_ids are revoked. Returns: {status, name, version_number, status, rotation_needed}.
secret_register_pubkeyRegister YOUR age recipient public key so secrets can be shared with you. Generate the key pair locally (age-keygen) and register ONLY the public recipient (age1...). SECURITY: never send a private key (AGE-SECRET-KEY-...) anywhere. The key starts pending until a workspace owner approves it. Returns: {status, pubkey_id, fingerprint, status: 'pending'}.
secret_revoke_grantRevoke a recipient's grant on a secret (owner/admin). Stops FUTURE fetches and flags the secret rotation_needed. Not retroactive: a recipient who already fetched the ciphertext may still hold it, so rotate the upstream credential afterwards. Returns: {status, name, rotation_needed: true}.
set_stateUpsert ephemeral agent run-state at (context_id, key): the current task, step, scratch flags. For transient state, NOT durable knowledge — use remember() for knowledge. State is not a memory: never embedded, never returned by recall(). Returns: {status, key}.
setup_connectorProvision an ai-worker chat-ingest connector: a resource, a connector row and a connector-scoped resource token in one operation. Owner or admin only, on a plan with the `connectors` feature (XL); existing connectors on lower plans keep working, and the max_connectors seat cap applies second. Returns: {status, message, connector_id, connector_type, resource_id, resource_pk, token_id, token, quota_events_per_hour, idempotency_key_prefix, context_id, kmc_api_key}. token and kmc_api_key are shown ONCE — store them now. Connector event idempotency keys must start with idempotency_key_prefix.
setup_resourceCreate a public context plus a resource token in one atomic operation — the first step of a resource ingestion pipeline (then ingest_events). Owner or admin only, on a plan with the `resources` feature (XL); existing resources on lower plans keep working. Returns: {status, message, context_id, context_name, resource_id, token, token_id, warning}. token is shown ONCE — store it now.
unbind_agent_contextDelete a binding (owner/admin only). Under enforcement_mode='enforce' the agent's requests against that context are denied afterwards (uniform context_not_found). Returns: {status, deleted, binding_id}.
update_agentUpdate a registered agent, including lifecycle transitions (owner/admin only). status is the fail-closed kill switch: every key bound to a 'suspended' or 'retired' agent is rejected. enforcement_mode 'enforce' → 'shadow' is an audited privilege-widening event: bindings are then only logged, not enforced. Returns: {status, agent, changed: [field, ...]}.
update_agent_bindingUpdate a binding's scoping fields (owner/admin only); see bind_agent_context for their meaning. context_id is immutable — unbind and re-bind to re-target. Changes are audited with old → new values. Returns: {status, binding, changed: [field, ...]}.
update_contextUpdate a context's settings. display_name and description need the context editor role; every other field is owner-only. Read the current values with get_context_info(). Returns: {status, message, updated_fields, context_{id, name, display_name, is_private, is_locked}}.
update_edgeChange an existing edge's weight and/or type (any create_edge edge_type is valid). Identify the edge by source_id + target_id (from list_edges or explore); provide at least one of weight or edge_type. Returns: {status, edge: {source_id, target_id, edge_type, weight, confidence, origin, created_at, last_updated}}.
update_memoryUpdate a memory in place (memory_id) or upsert by external_id (not found → created; found → replaced under a NEW memory_id; needs summary, content, type). Use it, not remember, to correct or enrich a memory whose id you have. SECURITY: never store secrets, credentials or PII — refuse and ask the user to redact; coordinates go only in details.location, never in context. details is replaced wholesale (resend details.location or it is dropped). Returns: {status, memory_id, operation, re_embedded, scope, version, persistence?, supersede_candidate_dismissed?, superseded_memory_id?, lint?, session_i…
update_search_configTune a context's search: hybrid weights, reranker, reinforce re-rank and query routing. Context owner or editor only (changing content_chunks_enabled or llm_selector_enabled: context owner or workspace owner/admin). semantic_weight + bm25_weight must sum to 1.0; a recall() that omits use_rerank follows this context's use_rerank. Example (keyless local reranking): use_rerank=true, reranker_provider='self_hosted' — reranker_model may be omitted. Returns: {status, message, context_id, config: {semantic_weight, bm25_weight, fetch_factor, use_rerank, reranker_provider, reranker_model, reinforce_e…
Signals
- Stars
- 12
- Forks
- 11
- Open issues
- 42
- Last commit
- Oct 24, 2026 (7 days ago)
- Last release
- Oct 24, 2026 (7 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- Registry name
io.github.kagura-ai/memory-cloud- Version
- 0.82.0
- Auth
- Auth not stated
- License
- Apache-2.0
- Repository
- github.com/kagura-ai/memory-cloud
- Website
- memory.kagura-ai.com
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
Done for you
Rather not set it up yourself?
Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.
See how we build AI agents →Read the case studies
Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.
- launches shipped
- 50+
- launches shipped
- media placements
- 500+
- media placements
- founders on every account
- 2
- founders on every account
Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block
Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.
Get Kagura Memory Cloud running in your business
Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.
Cite this page
Kagura Memory Cloud MCP server. Agent Mart. https://agentmart.dev/connectors/kagura-ai-memory-cloud (last updated 2026-10-24)