Engineering documents from the cMCP pilot build (October 2026). Statuses here are engineering states, not product claims: see cMCP for what is available. All documents
Status 2026-10-11. Stages 1a–1t of Build Phase 1 are built and tested (1l–1s on 2026-10-11, M-109; 1t, M-111). The pilot company has not adopted cMCP, so its account is now a test account with its company data cleared. Next, on hold until the owner resumes it (M-112): the web console moves to cmcp.it-labs.in and the API, sign-in, database and local AI model to a GPU server, so the addresses on this page will change. See the build plan, section 15.

← cMCP home

Agent auto-mapping: Claude memory into cMCP

Q-35 · adopted in the build plan (M-106) · built in stages 1l–1t Research done · recommendation ready Extended to all AI tools 2026-10-05 Automatic saving + two-way sync 2026-10-08 Risk list 2026-10-08
Raised and analysed 2026-10-04; web research by four research agents the same day. Extended 2026-10-05 (all AI tools) and 2026-10-08 (automatic saving and two-way sync). When this was written nothing was built; it has since been built as stages 1l–1t (M-109, M-111), and the build plan records where the build differs.

The two questions
  1. A. A person uses Claude everywhere: the CLI on desktop and laptop (PowerShell), the CLI over SSH from a phone, the claude.ai web and mobile apps. They work on many projects: some linked to Jira, some only in Bitbucket, some in a personal GitHub account. How do they get all their Claude memory into cMCP?
  2. B. Can it happen automatically, even when the company has not created the project under Org → project → team? Could places be created from Bitbucket, GitHub or local folders?

In short: the recommendation

Update 2026-10-05: the same design now covers every AI tool, not only Claude: OpenAI Codex and ChatGPT, Gemini, GitHub Copilot, Cursor, Groq, local apps and more. The Claude plugin becomes one adapter of a small cmcp helper. See Every AI tool.

Update 2026-10-08: a third part answers two more questions. How does memory reach cMCP without anyone remembering to save it? How does any agent or bot tell cMCP who, where and in which conversation it is, so it gets the latest memory back? See Automatic saving and two-way sync. In short: identity from the sign-in, a small envelope for place and conversation, a cursor for "what changed", and saving at checkpoints by hooks and bot libraries, private first.

"Install once, sign in once, nothing to map by hand. cMCP asks only when it is unsure, and remembers the answer on every machine."
  1. One cMCP plugin for Claude Code. It bundles the cMCP connection, two small hooks and a /cmcp command. It is one install line on Windows, Linux and macOS, and the company can push it to everyone through managed settings.
  2. Automatic project fingerprint. At session start the hook reads the folder and collects several names for it: marker file, git remotes, first commit, Jira key from the branch, folder name. It sends them to cMCP, so the model no longer has to remember to pass place=.
  3. Private spaces. When the company has no project for that repo, cMCP quietly creates a space that only the person sees. Every machine with the same repo lands in the same space. Spaces do not count against the account's project limit.
  4. Ask once, then remember. When a space looks like a company project (same Bitbucket repo, same Jira key), cMCP suggests "link to project X?" in the console and in the next tool answer. One click links it. Its items move only after the project lead approves.
  5. Bring your old memory. /cmcp import reads the Claude memory already on that machine, removes secrets before upload and files everything privately for review.
  6. Your memory follows you. A space's memory comes back on every machine, even where Claude's own auto-memory is empty, because Claude Code keeps auto-memory per machine.
  7. Every Claude surface connects.
    • Laptops sign in in the browser.
    • SSH and PuTTY use claude mcp login cmcp --no-browser.
    • Cloud sessions and cron jobs use a personal device key: approved on the phone with a code, shown once, expiring.
    • claude.ai web, desktop and mobile use cMCP as a custom connector.

Beyond Claude: every AI tool (research 2026-10-05)

Revised recommendation: one cMCP core with thin adapters, not a Claude-only plugin.

Four more research agents looked at about 40 AI tools from OpenAI, Google, Microsoft / GitHub, JetBrains and Groq, IDE coding agents, chat apps, local model apps and automation tools. The Claude design holds, but the client part becomes a small cmcp helper shared by every tool:

  1. cmcp setup: one command that finds the AI tools installed on the machine (Claude Code, Codex, Gemini CLI, Cursor, VS Code / Copilot, Kiro, Cline, Windsurf, Zed, OpenCode …) and writes each one's cMCP settings. One sign-in serves them all.
  2. cmcp hook <tool>: one session-start / session-end script with a small adapter per tool. Claude Code, Codex, Gemini CLI, Cursor, Kiro / Amazon Q and Cline all have hooks with nearly the same shape: they get the folder, and can add context and save a summary.
  3. cmcp bridge: a local stdio MCP server that forwards to the remote cMCP. It sees the folder and adds the project fingerprint itself. It covers tools without hooks (Continue, Zed, Roo, Junie, Warp, Augment, Copilot in VS Code) and tools that can't sign in on their own.
  4. cmcp import: one importer for every tool's memory and rules files (list below), with the local secret scan and private-first review.
  5. REST + OpenAPI + plain CLI (cmcp search / save / context) for tools with no MCP at all (Ollama CLI, DeepSeek app, Aider, scripts). Open WebUI can use the OpenAPI description directly.

The five tool families and how each one connects

FamilyToolsConnects withKnows the project byGets updates by
1. Coding agents with hooksClaude Code, OpenAI Codex (CLI / IDE), Gemini CLI, Cursor (+ cursor-agent), Kiro / Amazon Q CLI, Cline, (Windsurf / Devin: hooks unverified)Remote MCP with OAuth on laptops; personal key in headless runsHook fingerprint (automatic)Session-start and prompt hooks pull changes; session-end saves a summary
2. Coding agents without hooksGitHub Copilot (VS Code, CLI, JetBrains), Continue, Zed, Roo Code, JetBrains AI / Junie, Warp, Augment, OpenCode, CrushRemote MCP (OAuth or key), or cmcp bridgeBridge fingerprint, or the open-folder list (VS Code and Cursor send it today), or a place header in the repo's committed MCP configmemory_refresh at task start (server instructions), list-changed notices
3. Cloud coding agentsClaude Code on the web, Copilot coding agent, Codex cloud, Cursor background agents, Warp Oz, DevinKey only. Copilot's cloud agent can't do OAuth to remote servers; others have no browserThe repo is known, so the place header goes in the repo's committed MCP configSetup / session-start script where allowed
4. Chat appsclaude.ai (web, desktop, mobile), ChatGPT (developer mode: Plus, Pro, Business, Enterprise), Mistral Le Chat, Perplexity, Microsoft Copilot Studio / M365, Gemini Enterprise, Open WebUI, LibreChat, LM Studio, Jan, AnythingLLMOAuth through Keycloak (dynamic registration now, client metadata documents later). ChatGPT takes OAuth only, no keyNo folder: per-connection default place, recent places, or the model asks; a place argument on every toolPull per question
5. Model APIs, frameworks, automationGroq, xAI Grok, OpenAI Responses API / Agents SDK, LangChain, LlamaIndex, Pydantic AI, CrewAI, n8n, Zapier / Make (via REST)Key in a header (Groq and xAI send headers on every call; no OAuth)Place header or argument set by the developerChange feed (/v1/changes?since=)

Tools with no remote MCP at all: Ollama (app / CLI), DeepSeek app, Meta AI, consumer Microsoft Copilot, and probably Aider. They use REST, the CLI or the bridge through another client.

What the research changed

  1. The MCP spec of 2026-07-28 makes "roots" (open folders) deprecated and removes protocol sessions. So cMCP must not rely on roots: they are used only when a client sends them, and the hook or bridge fingerprint is the main route. cMCP's /mcp must work without sessions under both the old and new spec versions. The new subscriptions/listen stream is the right base for live change updates in stage 1l.
  2. No AI tool pushes updates into a running model. Every tool pulls at session start, on a prompt or on a tool call. This confirms the 1l design: notices in tool answers, hooks and a change feed.
  3. Dynamic client registration is giving way to Client ID Metadata Documents (ChatGPT, claude.ai and the new spec prefer them; Keycloak supports them only as an experiment). Keep dynamic registration, limited to known redirect addresses, now, and add metadata documents when Keycloak makes them stable.
  4. Cloud-hosted tools put memory text into a cloud model. ChatGPT, Groq, xAI, Mistral, Perplexity, Copilot and Gemini all call cMCP from their own servers. OpenAI states that MCP data is outside its zero-retention promise. Real accounts follow "local models only", so cMCP needs an enforced per-account list of allowed AI apps, not just a guideline (decision 7).
  5. AGENTS.md is the shared rules file, used by 20+ tools (Codex, Cursor, Copilot, Gemini CLI, Junie, Zed, Warp, Windsurf, Roo, Augment, OpenCode, Aider …). The importer reads it, and it is the simplest way to tell any agent "use cMCP and pass the place". Optionally, cMCP could write a generated context file for tools with no hooks. It would always be git-ignored, never committed (decision 9).
  6. ChatGPT saved memories cannot be exported; the data export has conversations only. ChatGPT import is "paste your memory list", plus an optional review-first import of conversations.json. Copilot Memory has no export either.

What cmcp import reads, per tool

ToolFiles and stores
Claude Code~/.claude/CLAUDE.md, project CLAUDE.md, .claude/rules/, auto-memory ~/.claude/projects/*/memory/
OpenAI Codex~/.codex/AGENTS.md, repo AGENTS.md (Codex memories: to check)
Gemini CLI~/.gemini/GEMINI.md (where save_memory writes), project GEMINI.md
Cursor.cursor/rules/*.mdc, AGENTS.md
Windsurf / Devin.devin/rules/, .windsurf/rules/, memories in ~/.codeium/windsurf/memories/
GitHub Copilot.github/copilot-instructions.md, .github/instructions/*.instructions.md (Copilot Memory: no export)
Cline / Roo.clinerules, .roo/rules, memory-bank/
Kiro / Amazon Q.kiro/steering/*.md, .amazonq/rules
OthersContinue .continue/rules, Zed .rules, Junie .junie/guidelines.md, Augment .augment/rules, Aider CONVENTIONS.md
ChatGPTPasted "Manage memories" list; optional conversations.json from the data export

Company-wide rollout per tool

The user journey

Day 1, laptopThe ADMIN shares one line. The person runs it and signs in once in the browser (password + one-time code).
claude plugin install cmcp@company
First session in a repoThe hook recognises the folder. If the company has mapped it, the person simply works in that project. If not:
cMCP: new folder "shipping-api" saved privately as your space. It looks like company project "Shipping" (same Bitbucket repo). Link it? Type /cmcp link
Old memorycMCP offers once per machine:
Found 14 Claude memories on this machine (3 projects). Import privately? /cmcp import
Secrets are removed locally. The person reviews the items in My memory.
Second machineSame repo, different folder path (C:\src\… vs /home/…). The remote and first commit match, so it is the same space automatically, with the memory already there.
Personal GitHub repoBecomes a private space. If the company later imports that repo into Bitbucket, the first commit matches and cMCP suggests the link. (Or the work goes into a separate personal account; see decisions.)
On the phoneclaude.ai mobile with the cMCP connector: "what did I decide about shipping-api?" The model searches the person's spaces and projects. With no folder there, it uses recent places.

The solution in detail

1. How a folder is recognised: several names per project

The research confirmed that tools which recognise a project by its folder path break when the same project sits in a different folder on another machine or in a worktree. Claude Code has open issues about exactly that. The recommended approach copies WakaTime's ordered detection and keeps every name found as an alias of one place:

OrderSignalWhy
1.cmcp-place marker file in the folder or a parent folderExplicit choice. Works for folders without git and travels with the folder
2All git remotes, written in one standard form (cMCP already does this)The same repo on GitHub and Bitbucket gives two aliases of one place
3First commit id(s) of the repoThe same in every clone and machine, and links a mirror. Weak spots: shallow clones, rewritten history, forks. It is used as an alias and to make suggestions, never alone to grant shared access
4Host repo id (Bitbucket repo id, GitHub numeric id), learned from a connectorSurvives renames. A fork gets a new id, and a local clone cannot know the id without the host's API, so it is an extra alias
5Jira key from the branch name (ABC-123-…, key pattern [A-Z][A-Z0-9_]+)Jira's own convention. Jira has no API listing the repos linked to a project, so the branch is the practical source
6Folder name, plus a per-machine path aliasLast resort. Never the identity on its own

2. How cMCP chooses the place (extended)

  1. Place named in the call (only if the person belongs to it)
  2. The app's default place
  3. Company mapping (place_mappings, set by someone with the mappings power), now matched on any alias
  4. The person's own link: "this fingerprint → that project / space", made with one click and remembered on every machine
  5. The person's private space for that fingerprint, created automatically (capped, for example 20 a day)
  6. Home team, otherwise Org

The fingerprint arrives in two ways: in a header set by the plugin (X-CMCP-Place: auto:… through Claude Code's headersHelper), or by the session-start hook calling a new /v1/places/resolve. The hook also puts a short context pack into the session (additionalContext). A declared place still never widens access (DD-09).

3. Private spaces

4. Linking and promotion: ask once

5. Company repos in bulk (optional connector)

A read-only Bitbucket catalogue connector, set up by the ADMIN with a workspace access token or API token (Bitbucket app passwords are blocked from 9 June 2026):

For personal GitHub, the same works per person with a read-only token; it only links to that person's spaces.

6. Importing existing Claude memory

Source on the machineGoes toNote
Auto-memory ~/.claude/projects/<folder>/memory/*.md: types user and feedbackUser memoryAbout the person
Same, type projectThe space or project of that folder's repo (the folder name is matched back to the path, then fingerprinted)Pending until reviewed
Same, type referenceResource catalogue (resource_lookup)Locations only, never passwords
~/.claude/CLAUDE.md, .claude/rules, repo CLAUDE.mdFacts → memory. Working rules stay in the files; optionally "my preferences" (decision 5)cMCP keeps memory as data, not instructions

Secret scan and redaction run on the machine before upload. Duplicates found on several machines are merged on the server. In real company accounts, any processing on the server uses the local model only. A session-end hook keeps new local memories flowing in afterwards. Only changed files are sent.

Automatic saving and two-way sync (research 2026-10-08)

Why this part was added. On 2026-10-08 we checked what had actually reached cMCP from this server's own Claude. There were about 24 project items, all saved by hand in one batch on 2026-10-03, and nothing after that. Meanwhile Claude's own local memory files kept up with every decision. A model that is only asked to save does not save. Several cMCP items were also out of date already, and nothing flagged them.
The two questions
  1. C. How can any AI agent or bot save into cMCP without anyone having to remember to do it?
  2. D. How does an agent or bot tell cMCP who and where it is (org, project, team, user, place, app, session), so that cMCP can hand back the latest memory? In other words, a two-way loop.
In short: the recommendation
  1. Who you are comes from the sign-in, never from what you send. cMCP reads the org, the person or bot, the app and the "acting for" person from the token or key. If a caller names a different org or user, the call is refused. A July 2026 security advisory for Mem0's OpenMemory server shows the risk: anyone could read or change any user's memory just by sending that user's id.
  2. Where you are and which conversation it is travel with every call, in one small "envelope". It holds the place (project, team, client, space or a repo fingerprint), the conversation id, the run id, the tool and the model. These parts can only narrow what the caller sees, never widen it.
  3. cMCP answers every call with a cursor. The caller sends it back next time and gets only what changed since then, including removals. That is the two-way loop. Notices and webhooks only say "something changed, ask again".
  4. Saving happens at checkpoints, not when the model happens to remember. Coding tools have hooks that run at session start, before each prompt, after each answer, before the conversation is compacted and at session end. Bots call "checkpoint" at the end of each run, through a small client library.
  5. Start with memory that is already curated. That means the tools' own memory files (Claude Code's auto-memory, Gemini's GEMINI.md …) and short notes written by the tool's own model. Pulling facts out of raw transcripts comes later, for two reasons:
    • one user's audit of Mem0 found that 97.8% of about 10,000 automatically extracted entries were junk;
    • our CPU model is too weak for long transcripts.
  6. Automatic memory stays private until a person decides otherwise.
    • It lands in the person's own memory, the bot's own memory or the private space for that repo.
    • Every item is marked "auto-saved by <tool>".
    • Shared places get it only through the approval queue we already have.
    • Real accounts start in "review first" mode.
  7. Replace, don't pile up. A newer fact marks the older one as replaced, with a date. A duplicate adds a confirmation instead of a new row. Automatic items that are never used age out.
  8. Whole conversations can be kept too, if company policy allows it, always under the default rules (decided 2026-10-08). This is off by default and an ADMIN switches it on after a risk notice. People are told. Only the person reads their own conversations. Each one is kept for 30 days by default, and transcripts are never used directly as memory. See Whole conversations and Risk notices.

What the others do

Product or toolHow it savesWhat we copy
Mem0The app sends the messages and the server extracts facts in the background. Since 2026 it only adds, and marks older facts with time instead of overwriting them. Org and project come from the API key. The user, agent, app and run ids are only declared by the caller.Background extraction; the key decides the org; a run id per job
Zep / GraphitiMessages are added to a thread. Facts get "valid from" and "invalid from" dates instead of being deleted. One call returns a ready context block, and a save can return context in the same call.Replace with dates; "save and get what's new" in one call
LettaThe agent edits its own memory, and a background "sleep-time" agent tidies it up. An optional step lets someone review before changes apply.Background tidy-up; review step
Supermemory, Hindsight, Cognee, MemOSThe same document or session id means an update, not a new copy. Claude Code plugins recall memory on each prompt and save every few turns.A stable conversation id with update-in-place; hooks
LangMem (LangGraph)Extraction runs in the background with a delay. A new message cancels the waiting job and starts it again with the whole conversation.One delayed extraction per conversation
Claude CodeThe model decides what to save and writes local markdown files ("Saved 2 memories"). Memory is per repo and per machine.Copy these files into cMCP
ChatGPT, claude.ai, Gemini, Microsoft 365 CopilotBackground memory with a "Memory updated" notice. None has a memory export API. In Microsoft 365, admins can export memory through eDiscovery.Notice plus undo. Chat apps can only save through the cMCP connector
GitHub Copilot MemoryRepo facts carry citations that are checked against the current code. Unused facts are deleted after 28 days.Show where each item came from; ageing
Devin KnowledgeDevin suggests knowledge, and the person edits or dismisses each suggestion.Suggest, then approve, for shared memory

None of these products has an API that the others copy. The closest shared interface is LangGraph's memory store. Licences: Mem0, Graphiti, Letta, Cognee and MemOS are Apache-2.0; Supermemory, LangMem and Hindsight are MIT. Honcho is AGPL, so it can't be used in our core. Memory poisoning is real: published attacks in 2025 and 2026 planted lasting instructions through ordinary chats. So automatic memory needs to show where every item came from and must never act as instructions.

Where each tool lets cMCP save automatically

ToolEvents cMCP can useConversation id it givesCan ask the model for notesWatch out
Claude CodeSessionStart, UserPromptSubmit, Stop, PreCompact, SessionEnd, subagent eventssession_idYes: a Stop hook can "block" with a reason, and there are prompt and agent hooksHooks can call HTTP or an MCP tool directly. SessionEnd gets only 1.5 s, so hand the work to a background upload. Cloud sessions run only hooks committed in the repo
OpenAI CodexThe same set as Claude Codesession_idYes: Stop "block"Command hooks only, and SessionEnd gets 1 s. Codex's own memory may skip chats that used MCP tools
Gemini CLISessionStart, BeforeAgent, AfterAgent, PreCompress, SessionEndsession_idYes: AfterAgent "deny"Its save_memory writes to GEMINI.md, so we can copy that file
CursorsessionStart, beforeSubmitPrompt, afterAgentResponse, stop, preCompact, sessionEndconversation_id, plus the user's e-mail and open foldersYes: a follow-up message on stopIts built-in memories were removed in 2.1. Cloud agents have no session start or end events
GitHub Copilot (VS Code, CLI)SessionStart, UserPromptSubmit, Stop, PreCompactsessionIdYesThe CLI has HTTP hooks. In VS Code, hooks are still in preview
Cline, KiroTask, prompt and stop eventstaskId / session_idNot documentedFewer guarantees; the bridge is the fallback
claude.ai, ChatGPT, Gemini app, Microsoft 365 CopilotNo hooksNoneOnly when the model calls the connectorEnterprise routes for later: Claude inference hooks (beta) and the Compliance API, ChatGPT Compliance Logs, Microsoft 365 eDiscovery

The envelope: what a caller sends and what cMCP trusts

FieldMeaningComes fromTrusted?Standard it lines up with
Account / orgWhich companyThe token or bot keyYesNone (our own claim)
PrincipalThe person or the botThe token or bot keyYesOAuth sub
AppWhich AI app or keyThe registered client or key. The tool name the caller declares is a label onlyYes (the label: no)OAuth azp / client_id
Acting forThe person an app works forThe token, or a stored grantYesOAuth token exchange act
DeviceWhich machine or installA personal device key (stage 1n); otherwise declaredYes with a key, otherwise a labelNone
PlaceProject, team, client, space or repo fingerprintDeclared, or found by the hookNo. Used only if the caller belongs there, and it only narrowsNone (MCP "roots" are deprecated)
ConversationThis chat, session or threadThe tool's own id: Claude session_id, Cursor conversation_id, OpenAI conv_…, LangGraph thread_idNo. Kept apart per app, and never gives accessOpenTelemetry gen_ai.conversation.id, A2A contextId
RunOne run of a bot or jobDeclaredNoMem0 run_id, A2A taskId
Tool, version, modelWhat is callingDeclaredNo. Used for display and audit onlyOpenTelemetry gen_ai.agent.*
Cursor"What I already have"Issued by cMCP and sent back by the callerTied to the credentialMicrosoft Graph delta link, Kubernetes resourceVersion
Idempotency key"Same save again; don't make a copy"Declared, one per writePer requestIETF Idempotency-Key draft
TraceDebugging onlyDeclaredLogs onlyW3C traceparent

How it travels:

The OpenTelemetry names are still marked "development", so cMCP keeps its own names and maps them only in logs.

The two-way loop for a bot (proposed here; built with the bot library in stage 1q)

1. Start of a run POST /v1/conversations Authorization: Bearer cmcp_bot_… ← who: account, bot, sponsor (from the key) X-CMCP-Place: git_repo:bitbucket.org/pilot/shipping-api ← where (checked) X-CMCP-Conversation: nightly-report-2026-10-08 ← which run X-CMCP-Model: qwen3-4b → { conversation: "cv_…", place: "project Shipping", context: "…", cursor: "c_8812" } 2. While working: search and save as today, with the same headers and an Idempotency-Key on each save. 3. End of the run POST /v1/conversations/cv_…/checkpoint Idempotency-Key: nightly-report-2026-10-08-end { summary: "…", facts: ["…", "…"] } → { saved: 3, landed_in: "bot memory", changed_since_cursor: [ … ], cursor: "c_8830" } 4. Next run GET /v1/changes?cursor=c_8830 → { changed: [ … ], removed: [ ids ], cursor: "c_8901" } (cursor too old → 410: get the full context again)

The change list is worked out for that credential when it is read, so a cursor can never show rows the bot isn't allowed to see. A retry with the same idempotency key returns the first answer instead of saving twice. A long-running agent may keep a stream or a webhook open, but only as a wake-up call; after a gap it always pulls from its last cursor. Bots built on the Claude API can use the Claude memory tool with a handler that stores into cMCP. Python bots get a small client library: start → work → checkpoint.

The two-way loop for Claude Code and other tools with hooks

  1. Session start: the hook sends the repo fingerprint and the session id. cMCP returns the context and a cursor, and the hook puts the context into the session. Text that came from cMCP is marked, so it is never saved back as if it were new.
  2. Each prompt: the hook sends the cursor. If nothing changed, nothing is added (target under 20 ms). Otherwise only the change is added.
  3. After answers (at most about every 20 minutes) and before compaction: the hook may ask the model for 0–5 lasting notes, such as decisions, preferences and where things live. They are saved with the conversation id. This is optional per account, because it costs one short extra turn.
  4. Session end: there are only 1–1.5 seconds, so the hook hands everything to a background upload. Changed auto-memory files are copied into cMCP, and the checkpoint returns the newest cursor.
  5. Next session on any machine: it starts again at step 1, so the memory follows the person.

Rules we suggest for automatic saving

TopicSuggestion
Ways in ("lanes")
  1. Explicit saves (exist today).
  2. Copies of the tools' own memory files.
  3. Notes from the tool's model at checkpoints.
  4. Bot checkpoints through the client library.
  5. Connectors (exist today).
  6. Later: facts pulled from raw transcripts. Opt-in only, on the local model, with a GPU.
Where it landsThe person's User memory, the bot's own memory, or the private space for that repo. Never directly in a shared place: there it becomes a suggestion or a change request
ReviewSet per account:
  • off;
  • review first: a "To review" list and a daily digest. Default for real accounts;
  • automatic with undo: default for test accounts.
LabelsEvery item shows the tool, the model, the conversation and "auto-saved". It is never must-apply and never an instruction
Quality gateDrop:
  • copies of rules files and of cMCP's own context;
  • tool output;
  • short-lived task state;
  • secrets.
Each project can set what to keep.
UpdatesIn private memory, a newer fact that contradicts an older one replaces it, with a date. In shared memory it becomes a change request. A duplicate adds a confirmation instead of a copy
AgeingUnreviewed items are dropped after 14 days. Automatic items that are never used for 90 days are archived
PoisoningEvery item shows where it came from. The injection check (exists today) runs on every item. Nothing reaches shared memory without a person's approval
Cost and limitsOne checkpoint per conversation at a time, delayed so it covers the whole stretch. The per-prompt "anything new?" check gets its own small budget, so it doesn't use up a bot's 500 calls an hour
Real accountsExtraction only on the local model (M-46). Model notes only from AI apps on the account's allowed list (decision 7)

Can cMCP keep whole conversations? (asked and decided 2026-10-08)

Yes, if the company's policy allows it, and always under the default rules below (decided by the user on 2026-10-08). The technical part is easy: The real work is the rules around it. A conversation archive would be the most sensitive data cMCP holds: secrets pasted by mistake, personal talk and client details. Before an ADMIN switches it on, cMCP shows a risk notice (see Risk notices).
Where the conversation happensHow cMCP can get the whole conversationNeeds
Claude Code, Codex, Gemini CLI, Cursor, Copilot (VS Code and CLI)The hooks receive the transcript file path. The hook uploads only the new part at stop, before compaction and at session end, in the backgroundAny plan; our hook installed
claude.ai, Claude Desktop and mobile, Claude CodeClaude Compliance API (the company pulls chats and Claude Code sessions) or inference hooks (beta: each prompt with its conversation is sent to the company's address)Claude Enterprise; an admin sets it up
ChatGPTCompliance Logs: conversation exports by time windowChatGPT Enterprise
Microsoft 365 CopilotAn interaction export API for admins (not fully verified)An admin and a licence
Bots and our own agentsThey send their own messages with the conversation idNothing extra
Personal or Pro chat plansNo route. Only what the model saves through the cMCP connectorNot possible

Default rules (cMCP follows these unless noted): fixed means no switch can change it. ADMIN may change means changing it shows a risk notice first.

  1. Off by default. ADMIN may change Only an ADMIN can switch it on, in person, after a risk notice. It can be on for the whole account, or narrower: per place (project, client) or per AI app. The setting, who set it and when are all audited.
  2. People are told. fixed A line at the start of each session says, for example: "This conversation is kept in cMCP for 30 days (company policy)". The console says the same, and keeping starts only after people have been told.
  3. People may pause it. ADMIN may change By default a person can mark a conversation "off the record". Turning this off is a high-risk change, used only where the law or a legal hold requires it.
  4. Transcripts are not memory. fixed They are stored as source text. They never go into the context pack, never act as instructions and are never shared. Facts come out of them only through the normal extraction and review, and each fact can link back to the lines it came from.
  5. Only the person reads their own conversations. fixed For example, they can search "what did I discuss about X last week?" across all their tools and machines. The ADMIN, other people's apps and bots cannot read them. The company gets access only through a logged break-glass with a reason and a notice to the person (as M-33 plans), or through a legal hold.
  6. Stored like everything else, but stricter. fixed Conversations go in their own table with account row security and owner-only access. A conversation held at a client stays behind that client's wall.
  7. Cleaned before storing. fixed The secret scan runs on the machine before upload, and tool output such as file contents and command output is cut or capped. ADMIN may change Masking personal data is on by default.
  8. Kept only as long as the company sets. ADMIN may change The default is 30 days, with 90 or 365 as options; anything over 30 days shows a risk notice. Conversations are purged automatically, deleted when the person leaves (M-30) unless there is a legal hold, and the person can export their own.
  9. Real accounts: fixed they are processed only by the local model (M-46); cMCP never sends a transcript to a cloud model. The switch cannot be turned on for a real account until per-account encryption keys (OpenBao) are in place.
  10. Legal check first. fixed To switch it on, the ADMIN confirms that the company's legal or HR advisers approved it. Employment and privacy law, such as GDPR in the EU and UK, may require notice, a clear purpose, short retention and in some countries a staff or works-council agreement. This page is not legal advice.

What it gives: search across a person's past conversations in every tool, better extraction later (with a better model run again on the same text), facts that cite their source, and an archive for compliance. What it costs: little storage, because text compresses and tool output is capped. Extra model time is only needed if extraction runs on the transcripts. Build: a transcripts table (owner-only, retention, legal-hold flag), an append-only upload /v1/conversations/{id}/transcript (idempotent by position), the policy switches with risk notices, owner search, a purge job and a break-glass view. It fits stage 1m (the same hooks) if decided; the Enterprise routes belong in 1o.

What our code has today (code survey 2026-10-08)

Already thereMissing for this design
Identity from the token or key: account, person or bot, app, acting-for, sponsorAn app per tool and per machine. Claude Code and Claude Desktop share one "app" when they use the same sign-in
Declared place, model, purpose and token budget as X-CMCP-* headers on REST/mcp ignores these headers. memory_save over MCP takes no place or model, so the model is never recorded
Context pack with manifest and delta, must-apply notice, and the cmcp://context resource with subscriptions
  • No conversation, session or run id.
  • No idempotency key.
  • No change feed for bots: change events exist but stay internal.
  • Items in the pack carry no version or date.
  • Notices only for must-apply items.
  • Subscriptions work within one API process only.
memory_save_session_summary with the person's confirmationBug: a summary saved without the in-tool confirmation stays "unconfirmed" forever. There is no confirm button or endpoint; only connector imports have one
Source records keep the app and the modelThe context pack doesn't show which app or model wrote an item. There is no capture or hook switch per level, although DD-11 asks for one
Bot rate limit of 500 calls an hourEvery call counts, so a check on every prompt would use it up

Risk notices and the risk list (2026-10-08)

Rule decided by the user on 2026-10-08: cMCP follows the safe default rules. Before an ADMIN switches on anything that loosens a default, cMCP shows what the risk is: for the company and for the people affected. The list below covers the switches that exist today and the ones planned in this issue.

How a risk notice works

  1. Every switch has a safe default. Moving away from it counts as "loosening". Moving back to the safe side never needs a notice and takes effect at once.
  2. Loosening shows a risk card first. The card says what changes, who is affected, the risks, what stays protected and what to check first.
  3. Only an ADMIN can do it, in person. An AI app or bot never can, the same rule as named powers (M-104).
    • Every level: a reason is required.
    • Medium risk: the ADMIN also ticks "I have read the risks".
    • High risk: the ADMIN also needs a sign-in no more than 15 minutes old and must type the switch's name. If the account has a second ADMIN, that ADMIN approves too.
  4. The people affected are told in the console and in their AI tool's next answer, through the 1l notice channel. For switches that keep or share more of their data, they are told before it takes effect.
  5. Loosened switches stay visible. The ADMIN home page lists every loosened switch with its age, and a monthly reminder asks "still needed?". High-risk switches get an end date (90 days by default) and can be renewed.
  6. Everything is audited (this exists today for settings). The web-admin can never loosen an account's switch silently: the account's ADMINs are told.
Switch on: Keep whole conversations (project Shipping) HIGH RISK What changes: every Claude Code and Codex conversation in this project is kept for 30 days Who: 6 people, 2 AI apps Risks: secrets pasted by mistake are kept · personal talk is kept · a break-in would expose them · the law may require notice and staff agreement Still safe: only the person reads their own · never used as memory · secret scan · purge Check first: [ ] legal / HR approved Reason: ______________ Type "keep conversations" to confirm · second ADMIN: approval requested People: told in cMCP and in their next AI session before keeping starts

The risk list

exists means the switch is in cMCP today; planned means it is proposed in this issue. Levels: High means data leaves the company, much wider reading, or invasive access. Medium means wrong memory or standing access. Low means a small, contained effect.

1. Data leaves the company

SwitchLevelRisk for the company (ADMIN)What people should knowStays protected
Cloud model for fact extraction (Groq or any cloud API) exists, test accounts onlyHighMemory text goes to an outside AI provider: their retention, their staff and their country's law. Real accounts need company approval (M-46)Text you save is processed by an outside AI serviceServer operator setting only; real accounts are local-only and tested
Allowing a cloud-hosted AI app (ChatGPT, Gemini, Copilot, claude.ai …) on a real account planned (decision 7)HighCompany memory that the app reads goes into that vendor's cloud model. OpenAI says MCP data falls outside its zero-retention promiseThis app sends the company memory it reads to its vendorAllow-list per account; enforced at sign-in and on keys
Mailbox connector (IMAP) exists, offHigh
  • Personal e-mails, customer data and secrets flow in.
  • Mail credentials are stored.
  • Planted e-mails can inject text.
Mail from the connected box becomes suggestions that leads approveRead-only; approval queue; raw text purged 30 days after decisions; credentials in OpenBao
Database-view connector exists, offHighCustomer or personal data from business databases can enter memory; a view may expose more columns than intendedRows can become memory suggestionsRead-only views; approval queue; four eyes on client connections
Webhooks to bots' addresses plannedMediumCalls go to outside addresses: they leak ids and metadata, and could be abused to reach internal hostsNoneSigned; ids only, no memory text; address allow-list
Generated context file in repos planned (decision 9)MediumMemory text sits on disk in a repo and can be committed and pushed, even to a public repoDon't remove the git-ignore lineGit-ignored; off by default

2. Wider reading inside the company

SwitchLevelRisk for the company (ADMIN)What people should knowStays protected
Keep whole conversations plannedHighThe most sensitive store cMCP would hold, with secrets, personal talk and client details. Breach impact is high, and legal duties applyYour conversations are kept for the set period; only you can read themThe default rules above
Enterprise transcript routes (Claude Compliance API / inference hooks, ChatGPT Compliance Logs, Microsoft 365 export) plannedHighEvery employee's chats flow in, including ones unrelated to work and ones from tools without our hooksChats in company AI apps are archived, not only those in coding toolsThe same rules as whole conversations; owner-only
People can't pause conversation keeping ("off the record" disabled) plannedHighPeople lose control. Use it only for legal or regulatory needsYou can't pause keeping in this placeNotice on every session
Break-glass reading of a person's Personal memory or conversations planned (M-33)HighInvasive by design; a misuse risk from insidersYour private items can be read in a logged emergency, and you will be toldReason, audit, notice to the person; second ADMIN
Lateral synthesis exists, offMediumCombining several teams' memory can show a lead things across team boundariesYour team's items can feed a draft for another leadDrafts only; the lead decides; local model only
Promotion to team memory exists, onMediumA neutral rewrite may still reveal a personal detail when few people are involvedWhat three or more of you save may be suggested to the team, without namesAt least 3 people; the lead approves and sees only the count; Personal memory never promoted
Automatic link of a repo to a company project planned (decision 6)LowForks or mirrors can match the wrong projectCheck the suggested projectMembers only; items move only after approval

3. Wrong or poisoned memory

SwitchLevelRisk for the company (ADMIN)What people should knowStays protected
Automatic saving "automatic with undo" instead of "review first" planned (decision 11)MediumUnreviewed facts are used at once, so noise and planted text reach AI answers before anyone checksItems marked "auto-saved" weren't checked by a personPrivate memory only; labels; undo; ageing
Facts pulled from raw transcripts plannedMediumMuch more noise (97.8% junk in one Mem0 audit) and more model timeMore automatic items to reviewOpt-in; quality gate; review
AI apps write shared memory exists, on with a grantMediumText planted in a web page or repo can reach team or project memory through a person's AI appWhat your AI saves in shared places is visible to the team and shows your nameGrant of at most 8 hours; injection check; audit
Bots write shared memory exists, on with a grantMediumNo person in the loop: a faulty or hijacked bot writes wrong facts that everyone's AI usesItems from bots carry a bot badgeGrant of at most 90 days; sponsor; rate limit; kill switch
Bots send requests to Organization memory exists, offLowSpam or poisoned proposals in the ADMIN's queueNoneRequests only; the ADMIN decides
Longer context-pack age (pack_max_age_hours, up to 168) existsLowA removed or corrected fact keeps being used for longerUse Re-sync if something looks oldMust-apply items show a notice at once

4. Standing access (keys, grants, elevation)

SwitchLevelRisk for the company (ADMIN)What people should knowStays protected
People may elevate their own AI app exists, off in real accountsHighFor up to 90 days, an injected or hijacked app can change and delete memory as the personYour app acts with your memory powers; check Activity and end it any timeMemory only, never Org; 50 changes and 20 deletes an hour, then paused; audit
Personal device keys (more keys or longer life) plannedMediumA key leaked from a cloud sandbox or cron job works until it expires or is revokedTreat a key like a password; revoke unused onesExpiry of 30–90 days; ended after 14 days unused; at most 5; "last used" shown; never elevated
Longer grant limits (ai_grant_max_hours, bot_grant_max_days) existsMediumWrite access stays open for longer than the task needsGrants you give last longerNever more than the giver; revocable
Longer approval cover (approval_cover_max_days, up to 30) existsMediumDeciding rights sit with a colleague for longerA colleague may decide your requestsOne cover at a time; decisions only; ends at once
Web-admin full control of an account's switches exists, accepted risk for pilotHighThe platform operator can loosen any switch. This is not acceptable for SaaS customersNoneAudit; the account's ADMINs will be told (new rule)
Public access switch exists, server operatorHighThe login, console and MCP become reachable from the internetNoneOne-time codes; rate limits; firewall

5. Keeping more data, for longer

SwitchLevelRisk for the company (ADMIN)What people should knowStays protected
Conversation retention over 30 days plannedMediumMore data at risk and longer legal exposureYour conversations are kept longerA maximum of 365 days; legal hold separate
Saving free text exists, onLowRaw text with possible secrets is stored as source and processed by the modelThe text you ask to save is kept as its sourceLocal model for real accounts; private sources; injection check
Personal memory exists, onLowPeople may put company data where the company can't review itPersonal memory is yours; only a logged break-glass can read itNever promoted; never seen by apps without permission
Shorter client purge time (client_purge_days) existsLowA wrongly erased client can't be restored after the purgeNoneCancel possible until the purge

What every person should know (shown once in the console, and in the manual)

What every ADMIN should know

New decisions 20–22 (second ADMIN, end dates, telling people first) are in the Decisions table.

Every Claude surface

Where Claude runsHow it connectsProject detectionStatus
Claude Code CLI on laptop or desktop (Windows PowerShell, Linux, macOS)Plugin + browser sign-in (OAuth, exists)Automatic (hook)Plugin to build
Claude Code over SSH or PuTTYclaude mcp login cmcp --no-browser: the link is opened on another deviceAutomaticWorks with OAuth today; plugin to build
Claude Code on the web (cloud sandbox), claude -p, cronCommitted .mcp.json with header Authorization: Bearer ${CMCP_KEY}; key in the environment's secrets. Plugins from user settings do not load in cloud sessions, so the repo carries the configAutomatic (hook runs in cloud sessions too)Needs personal device keys
claude.ai web, Claude Desktop, mobile appscMCP added as a custom connector. On Team/Enterprise plans the org owner adds it once, then each person signs inNone (no folder): app default place, recent places, or the model asksNeeds a Keycloak connector setup + test

Personal device keys (for sessions without a browser)

  1. In the sandbox or on the server: cmcp login shows a code, a link and a QR code.
  2. The person opens it on the phone or laptop, signs in with password + one-time code and confirms the device name. They type the code; there is no blind click-through, which stops device-code phishing.
  3. cMCP issues cmcp_pat_…, shown once and stored only as a hash. This reuses the bot-key code from stage 1j.

Rules:

The same keys could replace the cron "automated bot" question asked earlier.

claude.ai connector checklist:

What changes in cMCP's code

AreaChange
Database
  • place_aliases: many aliases per place, any kind.
  • person_links: fingerprint → place, per person.
  • spaces + scope type space: owner-only row security, like User memory.
  • person_keys: hashed, expiring.
  • place_mappings extended to more alias kinds.
  • Limits: daily space cap, key cap.
API
  • /v1/places/resolve
  • /v1/spaces (list, rename, merge, delete)
  • /v1/links + suggestions
  • /v1/import/claude (pending items)
  • /v1/me/keys + device-flow endpoints
  • the MCP server reads the X-CMCP-Place header (today only the REST API does)
  • resolve_place gets steps 4 and 5
ClientNew clients/claude-code-plugin/:
  • plugin manifest;
  • MCP config;
  • hooks (session start, folder change, session end) in bash and PowerShell;
  • headersHelper;
  • /cmcp skill (link, import, status, login);
  • local secret scan;
  • a company marketplace file.
Web"My places" (spaces, links, suggestions), "My keys", a suggestions banner, ADMIN "Repo catalogue" screen
KeycloakDevice-flow client for key approval; connector registration policy for claude.ai
ManualOne page per surface (laptop, SSH, cloud, claude.ai/mobile), import guide
Automatic saving and sync (2026-10-08)
  • Database: conversations (account, app, the outside id, place, last cursor); idempotency keys; capture mode per level; origin and conversation on sources and memories; a change sequence for the feed.
  • API: one envelope reader shared by REST and /mcp; /v1/conversations (start, checkpoint, end); /v1/changes?cursor=; /v1/memories/{id}/confirm plus a review list; webhooks for bots.
  • Worker: one delayed extraction per conversation; the quality gate and echo filter; replace, de-duplicate and ageing.
  • Client: capture hooks per tool; copying of memory files; a background uploader; a Python bot library; a LangGraph store adapter; a Claude memory-tool handler.
  • Web: a "To review" list; capture-mode switches; an "auto-saved" label with tool and model.

Suggested stages (each with threat model, tests, reviews and approval)

StageContentWhy in this order
1l two-way sync (already next, widened 2026-10-08)Change notices in tool answers, subscriptions/listen (spec 2026-07-28), /mcp without sessions; plus the envelope (headers read on /mcp too, conversation and run ids, idempotency keys), the cursor change feed /v1/changes, the "To review" list (fixes stuck summaries), tool and model shown in the pack, first Claude Code hooks (start and prompt)Base for everything below. Every tool pulls, so the cursor and the envelope matter most
1m places that find themselvescmcp helper: login, fingerprint, setup, hooks for Claude Code / Codex / Gemini CLI / Cursor, bridge; server: aliases, private spaces, ask-once links, place header on /mcp; plus automatic saving for Claude Code: checkpoint hooks, copying of auto-memory, model notes, capture modes, quality gate, replace / de-duplicate / ageingSolves A and B for every coding agent on laptops and SSH, and C for Claude Code
1n every surfacePersonal device keys + device flow; chat-app connectors (claude.ai, ChatGPT, Le Chat, Copilot Studio) through Keycloak; per-account allowed-AI-apps list; cmcp import for all tools; plus bots and other tools: a Python bot library (start, checkpoint, changes), a LangGraph store adapter, a Claude memory-tool handler, capture adapters for Codex / Gemini CLI / Cursor / Copilot, signed webhooksCloud agents, cron, phones, chat apps, any bot (C and D everywhere), safe use with real accounts
1o laterMore hook adapters (Kiro, Cline, Windsurf), optional generated context file, Bitbucket / GitHub repo catalogue, MCP Registry listing, client metadata documents; facts from raw transcripts (needs a GPU or an approved cloud model); Enterprise transcript routes (Claude inference hooks / Compliance API, ChatGPT Compliance Logs, Microsoft 365 eDiscovery)Nice to have once the core works

Decisions needed when this is picked up

#QuestionSuggestion
1Spaces visible only to the person, or also to the ADMIN?Only the person (counts and names visible to the ADMIN, not contents)
2Personal GitHub work: a private space in the company account, or a separate personal account (a second sign-in; the plugin routes github.com/<you> to it)?A separate personal account for truly personal work; spaces for company work not yet set up
3Personal device keys for cloud sessions and cron?Yes, with the rules above
4May an import ever write to shared places directly?No: always private first, then reviewed or approved
5"My preferences" sync: may the plugin bring the person's own saved working rules into their own sessions on every machine?Yes, only from the person's User memory, written by them in person, never from shared memory or apps
6Automatic link when the first commit and remote both match a company mapping, or always ask?Automatic for reading, ask before moving any items
7Which AI apps may read a real account's memory? Cloud-hosted tools (ChatGPT, Groq, Copilot, Gemini, claude.ai …) put memory text into a cloud modelA per-account allow-list set by the ADMIN; real accounts start with only the apps the company has approved; enforced on sign-in and keys
8How is the cmcp helper shipped: Python (pipx / uv) first, or a single file per platform (Windows, Linux, macOS)?Python first (matches the server code), single file later
9May cMCP write a generated context file into repos for tools without hooks?Only into a git-ignored file, off by default
10Which tools get first-class support in 1m?Claude Code, Codex, Gemini CLI, Cursor, VS Code / Copilot (the ones in use); the rest through bridge
11Automatic saving default per account: off, review first, or automatic with undo?Review first for real accounts, automatic with undo for test accounts
12May automatic memory ever land directly in a shared place?No: only User memory, the bot's own memory or a private space; shared places get suggestions or change requests
13Who writes what is saved: copies of the tools' own memory files, short notes from the tool's own model, or cMCP's local model reading the raw transcript?Start with files and model notes (curated, low noise); raw transcripts later, opt-in, once there is a GPU or an approved cloud model
14Keep whole conversations (transcripts) in cMCP?Decided by the user 2026-10-08: yes, only as a company policy and always under the default rules in Whole conversations; the ADMIN sees a risk notice before switching it on (Risk notices)
15Accept the tool's own conversation id (Claude session_id, Cursor conversation_id, OpenAI conv_…, thread_id)?Yes, kept apart per app and never used to give access
16A caller names a different org or user than its sign-in: refuse or ignore?Refuse with an error; a place the caller doesn't belong to falls back with a notice, as today
17How do bots get changes?Cursor feed first; signed webhooks later; MCP subscriptions only as a wake-up
18Should the per-prompt "anything new?" check count against the hourly call limit?No: give it its own small budget
19Ageing of automatic itemsUnreviewed items dropped after 14 days; automatic items never used for 90 days archived
20Second ADMIN approval for High-risk switches?Yes when the account has two or more ADMINs; otherwise a fresh sign-in, typed confirmation and reason
21End dates on High-risk switches?Yes: 90 days by default, renewable, with a reminder 7 days before
22Tell people before a switch that keeps or shares more of their data takes effect?Yes: keeping or sharing starts only after people have been told

Research findings (2026-10-04, 2026-10-05 and 2026-10-08)

Automatic saving and two-way sync (2026-10-08): sources
All AI tools (2026-10-05): sources
How other products scope memory to a project

Patterns copied:

Pitfalls avoided:

Claude Code: memory, hooks, plugins, MCP
Sign-in for every surface
Repo and Jira data

First analysis (earlier the same day)

How cMCP chooses a place today, and the first suggestion

Today the first match wins:

  1. place named by the app (if the person belongs to it);
  2. the app's default place;
  3. a mapping (git_repo, jira_project, chat_channel, set by someone with the mappings power);
  4. home team, otherwise Org.

An unmapped repo falls back to the home team or Org for reading, and writes go to User memory. Nothing is created automatically, on purpose: the limits are projects 0 by default and at most 5 places a person may create.

The first suggestion already proposed private spaces, the first commit id as an identity, a marker file for folders without git, an import command with a local secret scan, and promotion through the approval queue. The research above refines it: several names per project instead of one, the plugin and headersHelper instead of relying on the model, ask-once suggestions, personal device keys, and the claude.ai connector checklist.

Problems to keep in mind: