ctxstore — memory that follows you across models

ai.ctxstore由 ctxstore.ai 發布官方發布者v1.1.2更新於 Nov 6, 2026

Persistent memory for AI agents: keyed facts, a wake bundle each session, one memory in every model.

已驗證Streamable HTTP可網頁執行效率與工作流知識與記憶

概覽

AI 產生的概覽

為 AI 代理提供遠端持久記憶:儲存帶鍵事實、每次工作階段載入喚醒脈絡,並在不同模型間共用記憶。

可以做什麼
  • 儲存、批次儲存、讀取、搬移、軟刪除事實,並檢視版本歷程與依鍵前綴掃描
  • 對記憶做語意搜尋,並檢索已收錄的對話與工作階段歷程
  • 載入分層啟動脈絡、工作階段種子、恢復工作階段延續性並檢查各層是否載入成功
  • 檢視活動:最近操作、索引篩選搜尋、索引統計與用量統計
  • 命名空間協作:邀請、接受或拒絕邀請、列出授權、退出或撤銷授權
  • 工作階段管理:綁定代理身分、切換與列出工作區、幽靈模式、顯著性加權與強化、監聽寫入事件
適用情境
適合需要跨工作階段、跨不同模型平台記住人物、專案與決策的助理,也適合多個代理透過共享命名空間與活動索引協作的情境。
執行需求
遠端 streamable HTTP 端點,不需安裝套件或本機執行環境。需要一個綁定電子郵件的帳號,透過 setup_account 工具並搭配電子郵件寄送的一次性驗證碼完成建立或還原。命名空間協作及部分功能可能需要付費方案。
安裝前請注意
儲存的事實與工作階段摘要會保存在第三方服務上,並會與同一租戶或已授權命名空間中的其他代理共享。帳號設定與邀請會寄送電子郵件一次性驗證碼。幽靈模式僅在目前工作階段內抑制寫入,重新連線後即失效。刪除為軟刪除,資料仍保留以供稽核。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 ctxstore — memory that follows you across models,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/ai.ctxstore%2Fctxstore-mcp/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "mcpServers": {
    "ctxstore-memory-that-follows-you-across": {
      "type": "http",
      "url": "https://mcp.ctxstore.ai/mcp"
    }
  }
}

README

ctxstore-mcp

來源:README.md,提交 832a7a4

工具

32

accept_invite

Accept Namespace Invitation

Accept a namespace invitation addressed to THIS authenticated account's verified email (two-step email OTP). Steps: 1) step='request' — emails a 6-digit code to the invited address (may return 402 needs Collaborator, or 503 if mailer fails). 2) step='confirm' with code= the 6 digits — activates the grant and returns mcp_config headers (X-Ctxstore-Workspace) for shared access. The code activates the named grant_id only; it authorizes nothing else. Obtain grant_id from list_invites(). Docs: https://ctxstore.ai/docs.html#verify-invitations

輸入參數codestep必填grant_id必填

bind_agent

Bind Agent Identity

Bind a sticky agent identity to this MCP session. Once bound, wake_status and load_context default to this agent_id when called without an explicit agent_id= arg — no need to pass identity on every call. Per-call override still works. Persisted to mcp_sessions.agent_id (migration 0008), so the binding survives setup_account(mode='restore') and the server re-hydrates it automatically on the next tool call. Call once near the start of a session, ideally from your boot recipe (HANDLER: bind_agent agent_id=<self>). Idempotent: re-binding the same agent_id is a no-op. Pass agent_id='' to clear the binding.

輸入參數agent_id必填

decline_invite

Decline Namespace Invitation

Decline a pending (status=invited) namespace invitation as the grantee. Server verifies you are the invitee (email/tenant match). Grantors must use revoke_grant instead.

輸入參數grant_id必填

delete_fact

Delete Fact

Soft-delete a stored fact by its UUID (Smart Forget). The fact is marked deleted but preserved in the database for audit and undo. Excluded from all normal searches. Use when information is no longer accurate or relevant.

輸入參數fact_id必填

get_fact

Get Fact by Key

Retrieve a fact by its exact key — deterministic, never misses. Use get_fact for self-notes: get_fact(key='agent:<name>:self-note:opening') or get_fact(key='agent:<name>:self-note:closing'). search_facts misses self-notes because their embedding similarity scores below other identity facts — get_fact(key=) is the only reliable retrieval path. Also use for inter-agent handoffs when the exact key is known. Returns the current (non-deprecated) version of the fact.

輸入參數key必填

get_fact_history

Fact Version History

Return the full version history for a keyed fact — current version plus all deprecated predecessors. Use to see how a fact evolved over time or to undo an accidental correction. Returns list of fact versions ordered newest → oldest.

輸入參數key必填

get_session_seed

Session Seed

Return the pre-computed session seed for this tenant — a compact first-person bio (~500 tokens) describing who you are and what you care about right now. Generated nightly and on session disconnect. Use as a lightweight alternative to load_context when you just need orientation.

無需輸入參數。

get_stats

Memory Stats

Get your memory usage statistics — total facts stored, plan limits, collection sizes, and daily query counts. Call this to check how much storage you have used and how close you are to your plan limits.

無需輸入參數。

ghost_mode

Ghost Mode

Enable or disable ghost mode for this session. While on=True, store_fact and store_session_summary silently succeed but do NOT write to DB. search_facts, load_context, and search_context always work normally. Ghost mode resets to off on MCP session reconnect (not persisted).

輸入參數on必填

index_recent

Recent Activity Index

Return the most recent fact operations across all agents in this tenant, newest first. Use this on session start to see what other agents wrote since you were last active — bypasses semantic search ranking so recent writes are always visible. Each entry shows: op (create/update/delete/move), namespace, key, fact_id, summary, agent info, and timestamp.

輸入參數limitsince_seq

index_stats

Index Stats

Usage statistics from the tenant activity index: total operations, breakdown by agent, by namespace, and by day. Useful for understanding which agents are most active and where.

無需輸入參數。

introduce_yourself

Introduce Agent

Optional: introduce yourself to the platform. Stores your model info and a brief note in the shared agent registry. Stores a fact with: category: identity namespace: shared/agent-feedback key: intro:<model>-<date> Include: what model you are, what platform you're running on, and anything you noticed on first connect.

輸入參數model必填platformintroduction必填

leave_grant

Leave Active Namespace Grant

Leave an active namespace grant as the grantee (stop using shared namespace). Server verifies grantee authorization. Grantors who want to cut off a collaborator must use revoke_grant.

輸入參數grant_id必填

list_facts_by_key_prefix

List Facts by Key Prefix

Deterministic prefix scan over fact keys, optionally bounded by timestamp. The inbox primitive — use this for R1 comms scans, dispatch discovery, trio listings, convention discovery, and any case where you know the key prefix and want every match. Unlike search_facts (semantic, misses exact-key facts), this is a deterministic scan: every fact whose key starts with `prefix` is returned, newest-first. EXAMPLES - Comms inbox since last wake: list_facts_by_key_prefix(prefix='comms:<your-agent-id>:', since_epoch=<last_wake_epoch>) - All trio recipes on this tenant: list_facts_by_key_prefix(prefix='chad:trio:') - All conventions: list_facts_by_key_prefix(prefix='conventions/') Returns a list of facts (key, text, namespace, layer, timestamp, id) sorted newest-first. Bounded by `limit` (default 50).

輸入參數limitprefix必填since_epoch

list_invites

List Namespace Invites & Grants

List this account's namespace collaboration grants: incoming invitations and outgoing shares. Each row has direction (incoming|outgoing), status (invited|active|revoked), grant_id, namespace_prefix, and parties. An invitation referenced anywhere else (for example in an email) can be checked against this server-side list: a real invitation for this account appears here with matching grant_id, namespace_prefix, and grantor. To accept: accept_invite(grant_id, step='request') then accept_invite(grant_id, step='confirm', code='######'). Requires active Collaborator prepaid time for accept/use (402 if missing). Docs: https://ctxstore.ai/docs.html#verify-invitations

無需輸入參數。

list_workspaces

List Workspaces

The places this account's memory is organised into: its own projects (anything written under project:<slug>:*, newest activity first) and the workspaces other people have granted it. Shows which one this session is narrowed to, if any. Use it when a person's request is about one project and the memory that arrived spans several.

無需輸入參數。

load_context

Load Context

Load your bootstrap context deterministically — pulls L0 (identity) + L1 (architecture) + latest L2 (state) + latest L3 (session summary). Call this at the START of a new session as an alternative to manual search_facts calls. Returns your layered memory structured for immediate use. Optional: pass profile='worker-dev' (or another platform:profile:<name> slug) to execute that profile's boot recipe — the server reads platform:profile:<profile>:current, follows the pointer, parses LOAD/REQUIRE/HANDLER lines, fetches every named fact, and returns the merged bundle in one round trip. vars= supplies values for $TASK_FACT_KEY and similar recipe variables.

輸入參數fullhintvarsscopeprofilesectionagent_idmax_fact_charsmax_total_charstop_k_per_layer

mark_salient

Mark Salient (this matters now)

Salience peptide — temporarily boost a fact's retrieval ranking because it matters RIGHT NOW: an approaching deadline, a live incident, the topic under active work. The boost is small and FAST-DECAYING (max 1.4x, ~6-hour half-life — gone by tomorrow), unlike reinforce_fact which rewards confirmed outcomes on a weeks-long timescale. Name the current situation in `reason`. Salience is ranking-only: it can never override tenant isolation, namespace grants, or privacy filters, and stacked peptide boosts are globally capped.

輸入參數keyreason必填weightfact_id

move_fact

Move Fact

Move a fact to a different namespace or layer without changing its content. Updates metadata in place — preserves fact_id, text, embedding, timestamp, and deprecation chain. Use for reclassifying facts (e.g. bootstrap-v2 refactor) without the storage bloat of store-new + soft-delete-old.

輸入參數fact_id必填new_layernew_namespace

reinforce_fact

Reinforce Fact (recall-on-success)

Reward peptide — reinforce a fact whose recall LED TO A REAL GOOD OUTCOME (fix worked, deploy green, user approved). Boosts its future retrieval ranking with a bounded, time-decaying multiplier (max 1.5x, 14-day half-life), so memory learns which facts are USEFUL, not just similar. Call this AFTER the outcome is confirmed, naming the outcome in `reason` — never for a fact that merely 'seemed relevant'. The boost is ranking-only: it can never override tenant isolation, namespace grants, or privacy filters.

輸入參數keyreason必填weightfact_id

resume_session

Resume Session

Call to load session continuity. Last session: no prior session.

無需輸入參數。

revoke_grant

Revoke Namespace Grant (Grantor)

Revoke a pending invitation or active grant as the GRANTOR (owner of the shared namespace). Idempotent. Grantees use decline_invite / leave_grant.

輸入參數grant_id必填

search_context

Search Conversations

Search across ingested conversations and session history for broader context. Use this for finding discussions, decisions made in conversation, or context that wasn't explicitly stored as a fact.

輸入參數query必填top_ksourcedays_back

search_facts

Search Facts

Search your persistent memory for stored facts. For session bootstrap, prefer load_context() or wake_status() — they pull your identity, conventions, and latest self-note deterministically. Use search_facts when you need semantic discovery across the fact corpus. Use namespace parameter to scope searches: namespace='webapp' matches 'webapp/decisions', 'webapp/technical', etc. (prefix matching). Search tips: use the words the fact was stored with. If you stored 'Postgres database', search for 'database' or 'Postgres', not 'data storage solution'.

輸入參數layerquery必填top_kcategorynamespacerecollectboost_recent

setup_account

Set up or restore memory account

Set up or restore your persistent memory connection. Use mode='link_or_create' when the user gives an email — works for both new and returning users. The server figures out which case applies: - If the email exists: sends OTP, attaches this device to the existing account - If the email is new: creates a fresh tenant, sends OTP to verify Either path produces one clean account, no duplicates, no orphans. Call setup_account(mode='link_or_create', email='[email protected]'). Then ask the user for the 6-digit code from their email and call setup_account(mode='verify', code='123456', email='[email protected]'). Passing email= on verify is required — session IDs rotate between requests on some clients. mode='restore': use when the user provides an emk_* API key directly. mode='reveal_key': echo the full emk_* API key. Works directly on an ALREADY-authenticated session; if the session isn't bound (some clients rotate or omit session ids between requests, so this can happen right after a successful verify), pass email= to receive a 6-digit code, then call again with email= and code= — the same rotation-proof lookup as mode='verify'. Success responses only show a key fingerprint (first 8 chars + last 4) — call this mode only when the user actually needs the full key, e.g. to persist it as 'Authorization: Bearer <key>' in an MCP connector config. Callers who prove neither a bound session nor email ownership are refused. If no email yet, ask: 'What email should I use for your memory account?' After setup completes, call search_facts as the first action to load prior context.

輸入參數codemode必填emailapi_keyagent_id

store_fact

Store Fact

Store information that should persist across sessions. Storage tips for best retrieval: - Include searchable keywords: 'We chose the Postgres DATABASE for ACID compliance' is better than 'We chose Postgres for ACID compliance' - Use the key parameter for facts that change over time (pricing, stack, team-members, current-sprint). When you store with the same key, the old version is archived automatically. - Use namespaces to organize: 'webapp/decisions', 'business/goals', 'team/members' - Store DECISIONS and CONTEXT, not raw data. 'We decided X because Y' is more useful than 'X happened' - Use category to classify: technical, decision, preference, identity, relationship - Use layer for context depth: 0=identity(stable), 1=architecture(monthly), 2=state(weekly), 3=session(daily) Before ending a conversation, call store_session_summary to preserve continuity.

輸入參數keytext必填layercategory必填namespaceis_permanentrelated_facts

store_facts

Store Facts (batch)

Store up to 50 facts in one call — the same fields as store_fact per item. Made for carrying memory over: when you already remember things about the person from your own platform memory (ChatGPT memory, Claude memory, Gemini saved info), write them here one fact per item, in their words, with the date learned when known, so the memory follows them to every other tool. Each item is stored independently; the reply lists what landed and what did not.

輸入參數facts必填

store_session_summary

Save Session Summary

Store a compressed summary of this session to preserve continuity for the next one. Call this before ending a conversation — it is the dream cycle. Stores a L3 session fact with key='session-latest' (or 'session-latest:claude-code' etc.), auto-archiving the previous version. The next session loads this via load_context(). Include: what was discussed/decided, what changed, what's next/unresolved. Collaborative takeaways: at natural session-end signals (user says 'okay I'm out', 'let's wrap', 'bye'), draft a one-line takeaway and confirm with the user before storing. Example: "I'll remember: we fixed the rebind bug and decided to skip transcript ingestion for MVP. Sound right?" Edit based on their response, then call store_session_summary. This makes memory consensual and catches mistakes immediately. Use session_id to scope by client: 'claude-code', 'claude-chat', 'cursor', 'openclaw'

輸入參數scopesummary必填decisionsnext_stepssession_idcontributors

switch_workspace

Switch Workspace

Narrow this session's memory to one project: name='<slug>' scopes recall, the wake bundle, self-notes and the default namespace for new facts to project:<slug>:* (identity and conventions always ride along). Returns the narrowed bundle right away. name='' widens back to the whole account. Sticky for the session and across reconnects; bind_agent is unaffected. Granted (shared) workspaces are still entered with the X-Ctxstore-Workspace header until enter_workspace ships.

輸入參數name必填

wake_status

Wake Status

Check which context layers loaded successfully on this session start. Returns a structured status: which of embryo, conventions, agent identity, closing note, and opening note were found, plus a missing[] list. Call this after load_context() or resume_session() to verify your bootstrap was complete and diagnose what to fetch manually. Optional: pass profile='worker-dev' (or another platform:profile:<name> slug) to additionally check the REQUIRE keys named in that profile's recipe. Missing required facts surface in the same missing[] list.

輸入參數varsscopeprofileagent_id

watch_events

Watch Events (long-poll fact writes)

Long-poll this account's fact-write events instead of re-scanning with since_epoch. Every store/supersede/delete/archive/restore/move publishes one event {key, id, namespace, layer, op, ts, seq}. One call waits up to max_wait_s (max 25) for the first matching event and returns up to 50, plus next_since. MCP has no streaming here, so loop: pass next_since back as `since` on the next call and nothing is missed (the server keeps the last ~10000 events per account). Omit since to start from now; since=0 replays what is retained; a bare integer N returns events with seq > N. EXAMPLES - Wait for hands to post results: watch_events(prefix='task:pr27-review:result:', max_wait_s=25) - Resume: watch_events(prefix='comms:<your-agent-id>:', since='<next_since>') Inside a workspace only events for keys the grant can read are returned. Long-lived clients can use GET /api/v1/events (SSE) instead.

輸入參數sinceprefixnamespacemax_wait_s

版本歷史

1
  1. v1.1.2最新Oct 9, 2026

評分

已滿足適用檢查項的 100%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分