global-memory
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@global-memoryRemember to always write commit messages in English."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
global-memory — cross-client global memory for AI instruction presets
English | 简体中文
Tell an AI a reusable requirement once ("always use a formal tone in emails", "write commit messages in English"), confirm it, and it is stored for the long term. From then on, every connected AI tool (Claude Code / Claude Desktop / Codex CLI / Gemini CLI) recalls it automatically by scope — and a trust curve decides whether to ask you again before applying it.
Unlike "fact memory" products such as OpenMemory, this stores behavioral constraints you place on the AI. The core promise is control: nothing is saved without your confirmation, presets can be confirmed before they apply, every action leaves a visible trace, and everything can be uninstalled in one command. The full design is in DESIGN.md (Chinese).
What it is: an MCP server (stdio) + a management CLI + a local web admin
Runtime: Node ESM, no build step; all dependencies are pinned inside the project directory (
./pixi+node_modules) — nothing is installed system-wideMemory data:
~/.global-memory/memories.json(outside the repo, shared by all clients)Platform: currently verified on macOS (Apple Silicon) only —
pixi.tomltargetsosx-arm64and consent dialogs useosascript; other platforms fall back to in-conversation confirmationLanguage: CLI output, dialogs, the web admin, and the generated SKILL.md are currently in Chinese
Quick start
git clone https://github.com/chy4pro/global-memory-mcp.git
cd global-memory-mcp
./pixi install && ./pixi run setup # project-local Node + npm deps (pixi bootstraps itself into ./.pixi-home on first run)
./bin/global-memory setup --dry-run # preview which files would be written
./bin/global-memory setup # connect every detected AI tool on this machine
./bin/global-memory status # show integration statussetup only touches clients it detects, and does four things (all backed up, marked, idempotent, and reversible):
MCP registration: writes each tool's config (Claude Code
~/.claude.json, Claude Desktopclaude_desktop_config.json, Codex~/.codex/config.toml, Gemini~/.gemini/settings.json), all pointing atbin/global-memory(a self-contained launcher that uses the project-local Node). An existing same-named entry written by someone else is skipped, never overwrittenSkill links: the canonical workflow SKILL.md lives only in
~/.global-memory/skills/global-memory/; each tool's skills directory gets a symlink — edit once, every tool picks it up (falls back to a version-marked copy if symlinks fail)L1 hook (Claude Code): a SessionStart hook in
~/.claude/settings.jsondeterministically injects applicable presetsL2 standing instructions (Codex/Gemini): a marked section appended to
AGENTS.md/GEMINI.md
Original files are backed up with timestamps to ~/.global-memory/backups/ before any change. Afterwards, whenever a client launches the server it self-heals: it restores a missing canonical skill / skill link, hook, or instruction section — but never touches MCP registration.
The configs store the launcher's absolute path. If you move the repository, run
uninstalland thensetupagain.
Related MCP server: House Rules
How it works
Recall: at the start of a task the AI calls
recall_presets(with the project name and task type). Presets not yet due for review apply directly; due ones go through the consent broker:Local macOS session: due presets are merged into one checklist dialog (all pre-selected, at most 8 per dialog; unchecking = rejecting that preset; "hand over to chat" = handle them one by one in the conversation; after 60 s of no input each preset is resolved by its
unattended_policy). If only one preset is due, a single confirm dialog with a 45 s countdown is used insteadNon-macOS, SSH sessions, or
GLOBAL_MEMORY_CONSENT=conversation: falls back to one-by-one confirmation in the conversation; the AI reports results viarecord_usageThe outcome is announced in a one-line
user_notice(composed by the server, relayed verbatim by the model); nothing is shown when there is nothing to report
Unattended:
mode=unattended(scheduled jobs, etc.) never shows dialogs and resolves byunattended_policy—apply/skip/by_trust(apply ifharmlessor trust ≥ L2, otherwise skip);always_askpresets are never auto-applied. Unattended decisions go into a pending re-confirmation backlogRisk tiers: each preset has a
risktier —harmless(preferences with no bad outcome, e.g. language/format: confirmed once when saved, never prompts again) /normal(default, follows the trust curve) /sensitive(destructive operations, security, credentials: never batched, always a single dedicated confirmation). The AI proposes the tier at save time and you approve it together with the saveTrust curve: a fixed, explainable ladder — L0 asks every time → L1 review after 1 auto-apply → L2 after 3 → L3 after 7 days → L4 after 30 days → L5 after 90 days (cap). An explicit confirmation moves up one level; a rejection or override halves the level; silence is not consent — unattended applications never advance the curve.
confirm_policycan pin a preset toalways_ask/always_autoSaving: the AI spots a durable requirement → proposes a scope (global / project / task type + free-form category) → you confirm → it is stored (on the dialog channel the server shows its own confirmation dialog as a guarantee; rejection or timeout means it is not saved). Duplicates are detected automatically, and existing presets in the same scope are returned so the AI can check for contradictions
Correction: when you override an applied preset on the spot, the AI must point it out and diagnose with one question — one-off exception / scope too broad / outdated / badly worded — and handle each case accordingly
Management: say "show / tidy up my memories" to the AI — browse, search, edit, disable, delete, and deep consolidation (semantic de-duplication / disabling stale presets / clustering presets into a dedicated skill)
SessionStart injection (Claude Code): the hook runs
global-memory recall-context, uses the current directory name as the project name, and lists applicable presets plus the pending re-confirmation count — informational only, no dialogs, no usage counting
MCP tools
Tool | Purpose |
| Recall and resolve applicable presets (applied / skipped / pending_confirmation / backlog / suggestions) |
| Report confirmation results gathered in conversation (confirmed / rejected / overridden) |
| Save a durable requirement the user has confirmed |
| Browse, edit, delete |
| Statistics and health checks |
| Deep consolidation: produce proposals → apply atomically after user approval |
Configuration (environment variables)
Variable | Effect |
|
|
| Max presets per checklist dialog (default 8 — an attention budget) |
| Disable self-healing on server start |
| Data directory (default |
| Pin the AI provider: |
| Output directory for |
| Fake HOME from which all client paths are derived (for tests) |
Memory migration and built-in AI features
The tool can call the AI CLIs already installed on your machine (claude / codex / gemini — auto-detected, falls back to the next on failure, no API key needed):
./bin/global-memory extract-raw [--clean] # collect memories from every local AI tool → raw-memories/ (with provenance)
./bin/global-memory distill # have an AI distill raw memories into presets, then review repeatedly until clean
./bin/global-memory web [port] # web admin, default http://127.0.0.1:7777extract-raw details:
Memory sources: Claude Code user-level
CLAUDE.mdand per-projectmemory/, CodexAGENTS.md, GeminiGEMINI.md(this tool's own marked sections stripped), and this tool's existing preset storeFull transcripts are copied verbatim (no provenance header, so the formats stay valid; they are not fed into distill or search): Claude Code session jsonl, Codex
sessions/rollouts +history.jsonl, Geminitmp/<project>/chats/session-*+logs.jsonCodex / Gemini sources are allow-listed, so credential files such as
auth.jsonandoauth_creds.jsonare not copied; however~/.hermesand~/.openclaw/memory(if present) are collected as whole directories — every md/txt/json file under 1 MB — without credential filteringClaude Desktop chats live in the cloud; there is no local plaintext to extract
⚠️
raw-memories/is a plaintext copy of your local AI memories and full conversation transcripts. It is excluded in.gitignore— never commit or share it.
Presets produced by distill always start at L0 trust — you are still asked the first time each one is used; AI consolidation never bypasses consent.
Web admin (zero-dependency node:http, listens on 127.0.0.1 only): statistics and health checks, search/filter, enable/disable/delete, risk-tier tags, plus AI management — give an instruction in natural language ("merge and tighten the communication presets"); the AI only produces proposals, and nothing runs until you approve them one by one or all at once. The Raw memories section at the bottom browses every extract-raw file read-only (grouped by source), with instant plain-text search (line excerpts + highlighting, no AI) and AI semantic search (relevant files + reasons; hallucinated paths are filtered out).
⚠️ The web admin has no login and no Origin/CSRF checks: while it is running, a malicious web page open in your browser could in theory send modifying requests to
127.0.0.1:7777. Stop it with Ctrl+C when you are done.
Command line
Install & maintain
global-memory setup [--dry-run] connect local AI tools
global-memory status show per-tool integration status
global-memory uninstall [--dry-run] [--purge] revert all writes (--purge also deletes memory data)
Manage the store (day to day, just tell the AI "manage memories")
global-memory list [--all] list presets (--all includes disabled/archived)
global-memory show <id> full JSON of one preset
global-memory enable|disable <id> enable / disable
global-memory rm <id> delete
global-memory stats | export | path stats & health / export whole store as JSON / storage path
Migration & AI consolidation
global-memory extract-raw [--clean] | distill | web [port]
Internal
global-memory start the MCP server (stdio)
global-memory recall-context called by the Claude Code SessionStart hookpixi tasks work too: ./pixi run serve, ./pixi run cli <subcommand>.
Client support
Client | MCP | Local skill | Recall guarantee |
Claude Code (CLI / Desktop Code / IDE) | ✓ | ✓ symlink | SessionStart hook (deterministic) |
Codex CLI | ✓ | ✓ symlink |
|
Gemini CLI | ✓ | ✓ symlink |
|
Claude Desktop (Chat mode) | ✓ | ✗ (platform limitation) | MCP server instructions as fallback |
Data & privacy
All personal data lives outside the repo (except raw-memories/, which is git-ignored):
Location | Contents |
| The preset store (JSON + file lock + atomic writes) |
| Canonical SKILL.md |
| Timestamped backups taken by setup / uninstall before editing configs |
Each client's config | MCP registration, skill symlink, hook, marked sections in |
|
|
Uninstall: ./bin/global-memory uninstall (removes only content marked as written by this tool; data is kept); --purge also deletes ~/.global-memory.
Development & testing
./pixi run test # 45 tests: trust / store / consent / setup (fake HOME) / ai-pipeline (stub) / server (real stdio end-to-end) / web APIAll tests use temporary directories (GLOBAL_MEMORY_DIR / GLOBAL_MEMORY_HOME / GLOBAL_MEMORY_RAW_DIR), and dialogs and AI calls are stubbed, so your real environment is never touched.
Design document (Chinese): DESIGN.md
Source map
File | Responsibility |
Entry point; no args = start the MCP server, subcommands = install / manage / migrate / web | |
MCP server + the 9 tool definitions; triggers self-heal on start | |
Storage: JSON + file lock + v1→v2 migration + scope matching + health heuristics + atomic consolidation | |
Trust curve: ladder scheduling, confirm-to-promote / reject-to-halve, unattended resolution, system suggestions | |
Consent broker: osascript single/checklist dialogs / conversation fallback / direct resolution | |
| |
Client adapter matrix (detection / config / skills / hook paths) | |
setup / status / uninstall / self-heal; backup-and-merge, no clobbering, idempotent | |
Canonical SKILL.md content (four-duty skeleton + red lines) + version marker | |
Enumerates local memory sources and extracts them into | |
AI provider layer: detect/invoke local claude/codex/gemini CLIs, fallback, JSON parsing | |
Consolidation engine: raw → AI distillation into the store → iterative review | |
Zero-dependency web admin ( | |
Self-contained launcher: runs the CLI with the project-local pixi Node | |
Unit tests + fake-HOME install flow + AI pipeline stubs + real stdio end-to-end + web API |
Roadmap (Phase 2+, not implemented yet)
npm release (configs switch to npx -y) | Linux/Windows dialogs | MCP sampling enhancements | guided graduation of presets into skills | BYOK scheduled consolidation | cloud sync / team sharing. See DESIGN.md §12.
License
Available Tools
9 toolsapply_consolidation落地整理提案A
原子地执行用户已确认的整理操作清单。仅限用户主导的管理场景。op: update(带 fields)/ delete / disable / archive(可带 note 注明去向)/ create(带 fields)。Atomically apply user-approved consolidation operations.
| Name | Required | Description | Default |
|---|---|---|---|
| operations | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does disclose atomicity ('原子地'/'Atomically') and enumerates the operation types (update/delete/disable/archive/create), which is meaningful. But it does not disclose the consequences of destructive ops (e.g., whether delete is irreversible or archive is restorable), error handling on partial failure, or response behavior—significant gaps for a mutation tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact but redundant: the first Chinese clause ('原子地执行用户已确认的整理操作清单') and the final English sentence ('Atomically apply user-approved consolidation operations') convey the same message twice, which wastes space. The op-semantics clause earns its place, but the bilingual duplication could be trimmed to a single canonical sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a batch mutation tool with five operation types, no output schema, and no annotations, the description covers purpose, atomicity, and op semantics but omits what happens on success or failure—particularly since the atomic guarantee makes rollback behavior relevant. A note on return values or error semantics would substantially improve completeness, though the essential usage contract is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does meaningfully. 'op: update(带 fields)/ delete / disable / archive(可带 note 注明去向)/ create(带 fields)' maps each op enum value to its associated parameters, clarifying that update and create require fields and archive accepts a note for destination. The id parameter and the structure of fields are left unexplained, but the op-to-parameter mapping adds real value beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Atomically apply user-approved consolidation operations' / '原子地执行用户已确认的整理操作清单' (atomically execute the user-confirmed consolidation operations list). The 'user-approved' qualifier hints at a distinction from the sibling start_consolidation, but it never names the sibling explicitly, so the differentiation is implicit rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase '仅限用户主导的管理场景' (only for user-led management scenarios) plus '用户已确认' (user-confirmed) provides clear context about when the tool is appropriate: after the user has approved the operations. However, it does not explicitly name alternatives such as start_consolidation or state when-not-to-use conditions beyond the 'user-led only' constraint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_memory删除记忆A
永久删除一条预设。必须先向用户复述内容并获明确确认;临时不用应改为 status=disabled。Permanently delete (confirm with user first; prefer disabling).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly warns that the action is permanent and requires explicit user confirmation first, which covers the most critical safety aspects of a destructive operation. It does not detail side effects or error behavior, but for a simple one-parameter delete this is acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with the core action and safety requirement. The bilingual repetition is redundant but still compact, and the key usage guidance is easy to parse. It earns a high score for efficiency, with minor points off for duplicated content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity of a one-parameter delete with no output schema, the description covers the essential context: what the tool does, when to use it, and the critical confirmation requirement. It is complete enough for an agent to invoke it correctly, though it omits details about response or failure handling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage for the only parameter, id, so the description must compensate. It provides context by identifying the target as a '预设/preset', allowing the agent to infer that id identifies the preset to delete. However, it does not explicitly document the id parameter or any constraints, so compensation is only partial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('永久删除/Permanently delete') on a specific resource ('预设/preset') and distinguishes itself from mere updates by emphasizing permanence. It also implicitly separates this tool from update_memory by mentioning disabling as an alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use and when-not-to-use guidance: permanent deletion only after user confirmation, and temporary disuse should be handled by setting status=disabled. This is actionable and points toward the alternative behavior without ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_memories查看/搜索记忆B
列出或搜索已保存的预设。所有过滤条件可选。List/search saved presets.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | 在内容和分类中做关键词搜索 | |
| status | No | ||
| project | No | ||
| category | No | ||
| task_type | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It communicates a non-mutating list/search action and notes that all filters are optional, but it does not state the default result when no filters are given, the scope of the search, or output/pagination behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and starts with the core action, but the Chinese and English halves largely restate each other ('列出或搜索已保存的预设' vs 'List/search saved presets'). It is minimal and not overly verbose, yet the duplication slightly undermines conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with five optional parameters, no annotations, and no output schema, the description is too thin. It does not clarify how memories relate to presets, what each filter selects, or what the tool returns, leaving an agent with incomplete context for invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 20%: only query is documented in the schema. The description adds only 'all filters optional' and does not explain project, category, task_type, or status semantics, so it fails to compensate for the low schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'list/search saved presets,' which clearly names the operation. It is weakened by a terminological mismatch: the tool name and title say 'memories' (记忆) while the description says 'presets' (预设), and it does not explicitly contrast itself with siblings like recall_presets or memory_overview.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'all filter conditions are optional' gives clear calling context (no required parameters), but there is no guidance on when to choose this tool over recall_presets or memory_overview. Usage is implied rather than explicitly scoped.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_overview记忆库总览A
统计 + 体检指标(疑似重复/陈旧候选/毕业候选簇/待补确认/上次整理时间)。用户说"看看我的记忆"时先调这个。Overview with health checks.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the behavioral burden. It implies a read-only diagnostic via 'Overview with health checks' and enumerates returned metrics, but it never explicitly states that the tool has no side effects or will not mutate the memory store.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the core statistics/health-check purpose comes first, followed by a clear invocation trigger and a concise English summary. Every part earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter overview tool with no output schema, the description is complete: it provides the trigger phrase, states the tool's scope, and enumerates the returned health-check categories. An agent has what it needs to invoke and interpret the call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema is already 100% covered by an empty properties object. There is no parameter information for the description to add, so the 0-parameter baseline of 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a diagnostic overview of the memory store: '统计 + 体检指标' and lists the health dimensions (suspect duplicates, stale candidates, graduated candidate clusters, pending confirmation, last organization time). This distinguishes it from list_memories and other sibling tools, making the resource and purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly sets the trigger condition: '用户说"看看我的记忆"时先调这个', so an agent knows when to call it first. It does not state negative conditions or compare to siblings by name, but the provided context is enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recall_presets召回适用预设A
开始任务时调用,召回适用于当前上下文的预设并完成确认(服务器可能向用户弹系统确认框,等待返回即可)。返回终态:applied=已应用(照单执行)、skipped=不要应用、pending_confirmation=请在对话中逐条向用户确认(结果用 record_usage 回报)、backlog=待补确认(方便时向用户提及)、suggestions=单条转达的系统建议。返回的 user_notice 必须原样转述给用户。Recall and resolve applicable presets; relay user_notice verbatim.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | interactive=用户在场(默认);unattended=无人值守任务(不弹框,直接按各预设 unattended_policy 裁决) | |
| project | No | 当前项目名(目录/仓库名) | |
| task_type | No | 当前任务类型(自由文本,如 "开发"、"通讯");不明确则省略,明确后再补调 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does so well: it discloses that the server may pop a confirmation dialog, enumerates the terminal states, and mandates verbatim relay of user_notice. This gives an agent clear behavioral expectations beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core call timing and purpose, then lists terminal states and follow-up actions efficiently. The English summary at the end repeats the Chinese content, adding slight redundancy, but there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description enumerates the return terminal states and their required actions, which is nearly complete. It does not specify the exact JSON response shape beyond those states, but for a tool with three optional parameters this is a strong definition.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameter descriptions already explain mode, project, and task_type. The tool description itself adds no parameter-specific detail beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: '开始任务时调用,召回适用于当前上下文的预设并完成确认'. It clearly distinguishes what the tool does from the sibling memory-management tools, and the terminal-state list plus the record_usage handoff further clarify its role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to call it ('开始任务时调用') and gives handling guidance for each terminal state, including reporting pending_confirmation results via record_usage. It also distinguishes interactive vs unattended mode, but it does not explicitly say when not to use it or contrast it with list_memories/memory_overview.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record_usage回报确认结果A
回报对话中完成的预设确认结果(pending_confirmation 的逐条答复、backlog 补确认、纠正流程的推翻)。confirmed=用户确认沿用;rejected=用户拒绝;overridden=应用后被用户当场推翻。Report per-preset consent outcomes resolved in conversation.
| Name | Required | Description | Default |
|---|---|---|---|
| outcomes | Yes | 各预设的确认结果 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full burden. It explains three enum values (confirmed, rejected, overridden) but omits unattended_applied and unattended_skipped, which are in the schema. It also fails to disclose side effects, required permissions, or response behavior, leaving significant behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, front-loading the purpose and defining key result values. It mixes Chinese and English, but that is not a major flaw. It could be slightly more structured, but it is appropriately sized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has one parameter, no output schema, and no annotations. The description leaves out two enum values and domain-specific terms (pending_confirmation, backlog, correction flow) without explanation. It also does not cover when to use it relative to alternatives, making it incomplete for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds value by explaining the meaning of three result values and the context of pending_confirmation, but it does not explain the two unattended enum values, leaving the parameter semantics incomplete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reports per-preset consent outcomes resolved in conversation, with a specific verb ('report') and resource. The Chinese text adds precision by specifying '预设确认结果' (preset confirmation results) and enumerating three result semantics, making it distinct from sibling memory-management tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: it is used when reporting confirmation results from conversation, including pending_confirmation replies, backlog re-confirmation, and overrides. It does not explicitly name alternatives or exclusions, but the context is unambiguous given the sibling tools' focus on memory operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_requirement保存用户要求为预设A
把用户确认过的可复用要求保存为预设。调用前必须已向用户展示提炼表述+建议分类并获明确同意(弹框通道下服务器会再次弹框担保,超时不保存)。单次指令不入库。返回 potential_conflicts=同作用域/分类的既有预设——检查语义矛盾,矛盾则提议更新旧预设而非新增。user_notice 原样转述。Save a user-confirmed durable requirement.
| Name | Required | Description | Default |
|---|---|---|---|
| risk | No | 风险档(由你提议,随保存确认一并经用户认可):harmless=无坏后果的偏好(语言/格式类),保存确认一次后免复核弹框;normal=默认,走信任曲线+批量勾选框复核;sensitive=涉及破坏性操作/安全/凭据等,始终单条强确认框 | |
| content | Yes | 要求内容,简洁的指令式表述 | |
| project | No | 限定项目名;不传 = 不限 | |
| category | No | 自由分类标签 | |
| task_type | No | 限定任务类型(自由文本);不传 = 不限 | |
| confirm_policy | No | smart=信任曲线调度复核(默认);always_ask=每次都问;always_auto=永不复核(仅用户明确要求时) | |
| unattended_policy | No | 无人值守裁决:by_trust=按信任值(默认);apply=保护性约束建议用(跳过比应用更危险时);skip=保守跳过 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses important traits: the dialog channel triggers another server-side confirmation, timeout means no save, and the tool returns potential_conflicts while passing through user_notice verbatim. It also clarifies that semantic conflicts should be handled by proposing an update to the old preset rather than creating a new one.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description front-loads the core purpose and the required precondition, then adds output semantics in compact clauses. The final English sentence is slightly redundant with the opening Chinese sentence, but it does not bloat the description. Overall it is appropriately sized and structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Because there is no output schema, the description explicitly explains the return value potential_conflicts and the user_notice passthrough, which an agent needs to decide how to handle conflicts. It also covers timeout/no-save behavior and the single-instruction exclusion. For a 7-parameter tool with no annotations, this is sufficient to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning to content and category by requiring that they be the refined expression and suggested category shown to and agreed by the user. It also reinforces how consent and risk/confirmation policies interlock. This is genuine extra semantics beyond the schema's field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a concrete action—"把用户确认过的可复用要求保存为预设"—and clearly identifies the resource as a user-confirmed durable requirement. It also adds a scope exclusion: single-use instructions are not stored. It does not explicitly name sibling tools, so differentiation relies on the preset concept rather than an explicit pointer.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states a hard precondition: the user must have seen the refined wording and suggested category and explicitly agreed, with a timeout causing no save. The "单次指令不入库" sentence signals a when-not condition. It does not recommend a specific alternative for single-use instructions, so it stops short of full alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_consolidation开始记忆整理A
仅在用户主动要求整理记忆时调用。返回全库与体检指标。你的任务:产出整理提案清单(合并语义重复、解决矛盾、提炼表述、陈旧停用、聚类毕业成 skill),以清单呈现、由用户驱动决定,再用 apply_consolidation 落地。Start a user-initiated consolidation pass.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It discloses that the call returns the full library and health metrics, that the agent should produce a proposal list, and that changes are applied later via apply_consolidation rather than automatically. It does not explicitly state whether any internal state is modified, but the 'user-driven, then apply' framing strongly implies this call itself does not apply changes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and front-loaded, starting with the key call condition. The Chinese portion carries detailed actionable guidance, while the trailing English sentence 'Start a user-initiated consolidation pass' is somewhat redundant with the title and opening clause, but the overall text remains focused and every other sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of an output schema, the description adequately explains return values (full library and health metrics) and the expected deliverable (a proposal list covering deduplication, contradiction resolution, refinement, retirement, and skill clustering). It also specifies the user-driven decision flow. A more complete description could outline the exact proposal-list format, but the current text gives enough context for correct invocation and downstream behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters)Skip? Actually the schema has no properties, so there is no parameter semantics burden. The baseline for a 0-parameter tool is 4, and the description appropriately uses the space to explain the intended workflow rather than inventing parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb+resource: starting a memory consolidation pass only on user request. It also differentiates itself from the sibling apply_consolidation by explicitly saying that the proposal list is landed via apply_consolidation, so the agent can tell the two tools apart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description opens with an explicit usage condition: '仅在用户主动要求整理记忆时调用' (only call when the user actively requests memory consolidation). It further clarifies that the process is user-driven and that apply_consolidation is the tool that applies the changes, making the division of labor between sibling tools explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_memory修改记忆A
修改预设:内容、作用域、分类、策略、启用/停用/归档。需用户已确认该修改。未传字段不变;project/task_type/category 传 "" 清除。内容实质改写会重置信任(新表述=未验证的新承诺)。user_notice 原样转述。Update a preset (user-approved).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| risk | No | 风险档:harmless=免复核弹框;normal=信任曲线+批量勾选框;sensitive=始终单条强确认 | |
| status | No | ||
| content | No | ||
| project | No | ||
| category | No | ||
| task_type | No | ||
| confirm_policy | No | ||
| unattended_policy | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations available, the description carries the burden of behavioral disclosure and does so well: it explains partial-update semantics (unspecified fields stay unchanged), clearing semantics for project/task_type/category, and the trust-reset side effect of substantive content rewrites. The mention of 'user_notice 原样转述' is problematic because user_notice is not a schema property and additionalProperties is false, creating confusion.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: a quick list of what can be updated followed by three high-value behavioral caveats. The user_notice sentence is tangential and slightly dilutes focus, but otherwise every sentence contributes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description covers the key operational context: user approval, field-unchanged behavior, clear semantics, and trust reset. It omits explicit explanations of the two policy enums and does not describe the return/confirmation payload, leaving some gaps but overall enough for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 11%, so the description must compensate; it does add useful meaning for partial updates, clearing, and trust reset. However, it does not explain the semantics of risk, confirm_policy, or unattended_policy beyond what the enum values imply, and the user_notice comment references a non-existent parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the action ('Update/修改') and resource ('a preset'), and enumerates the categories of changes (content, scope, classification, policy, status). This distinguishes it from the sibling tools that list, recall, delete, or consolidate memories, though the Chinese title '修改记忆' could be slightly ambiguous until the description clarifies 'preset'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states an important precondition: the modification must already be user-confirmed ('需用户已确认该修改'), which helps an agent know when it is appropriate to call the tool. However, it does not explicitly name alternatives or exclusion conditions, so an agent must infer when to prefer recall_presets, save_requirement, or delete_memory instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
9 tool updates
v2.0.0- First observed
apply_consolidation - First observed
delete_memory - First observed
list_memories - First observed
memory_overview - First observed
recall_presets - First observed
record_usage - First observed
save_requirement - First observed
start_consolidation - First observed
update_memory
TDQS
Scored across 9 tools
Most tools have clearly distinct roles: recall/record_usage, list/overview, and start_consolidation/apply_consolidation are well separated. The only potential confusion is between update_memory and apply_consolidation (both can modify presets) and between delete_memory and apply_consolidation's delete, but the usage context (direct user action vs. consolidation workflow) disambiguates them.
Eight of nine tools follow a consistent verb_noun pattern (record_usage, list_memories, update_memory, start_consolidation, apply_consolidation, recall_presets, save_requirement, delete_memory). memory_overview breaks the pattern by being noun_noun, but it is still readable and clearly the odd one out.
Nine tools is a well-scoped size for a memory/preset management server. Each tool covers a distinct operation or workflow stage—CRUD, recall, usage reporting, and consolidation—without redundancy or bloat.
The tool surface covers the full lifecycle: save_requirement creates presets, list_memories/memory_overview/recall_presets read them, update_memory plus apply_consolidation handle updates/disable/archive, and delete_memory covers deletion. The two-phase consolidation workflow and record_usage for outcome tracking round out the domain with no obvious gaps.
Maintenance
Related MCP Connectors
Persistent memory for Claude Code and Cursor. Stop re-explaining your project every session.
Gives your AI assistant persistent memory and intelligence about your work patterns.
Persistent cross-session memory shared by Codex, Claude Code, ChatGPT, and other AI agents.
- mcpOAuthai.butlerbrain
Persistent memory for AI assistants. Save once; recall from Claude, ChatGPT, or any MCP client.
Related MCP Servers
- -licenseNot gradedqualityNot gradedmaintenanceEnables AI assistants to maintain persistent conversations and context between sessions through automated saving and global installation across projects. Provides zero-configuration memory persistence with automatic conversation history preservation.-
- FlicenseBqualityDmaintenanceProvides reusable AI assistant behavior rules as prompts and automatic git repository context (branch, commits, diffstat) to eliminate repetitive explanations across sessions and clients.1-
- AlicenseNot gradedqualityAmaintenanceSelf-learning memory for AI tools. Remembers user preferences and context across Claude, Cursor, and Codex with multi-parameter forgetting and cross-tool identity.14MIT

pūrmemoofficial
AlicenseAqualityAmaintenanceProvides persistent memory for AI assistants like Claude, enabling them to remember user identity, projects, and conversations across sessions and platforms via natural language commands.29408 npm2MIT