Engram
The Engram server provides persistent, local-first memory for AI tools, storing your identity, preferences, lessons, decisions, and playbooks — and sharing them across every MCP-compatible AI tool so you never have to re-introduce yourself. All data is stored locally in JSON files for privacy and direct control.
User Identity & Context
get_user_context— Load your full identity, preferences, quality standards, and relevant knowledge at session start (supportsquick,standard, andfulltiers with optional token budget control)update_identity— Modify your profile, communication preferences, work style, quality standards, or trust/privacy boundariesget_identity_card— Export a portable Markdown identity card for tools without MCP support (e.g., paste into ChatGPT)
Project Context
get_project_context— Read a saved snapshot for a specific project (tech stack, known issues, notes)save_project_snapshot— Persist a project's current state for future sessionsget_relevant_knowledge— Automatically recommend applicable lessons and decisions based on the current project path and tech stack
Knowledge Storage & Retrieval
search_knowledge— Search lessons, decisions, and playbooks by keyword, with optional filters for domain, tier, and datememory_store— Unified write endpoint that routes to the correct type (lesson,decision, orplaybook) based on akindparameteradd_lesson— Save a reusable lesson or technical finding, tagged with domain and source tooladd_decision— Save an explicit decision (question, choice, reasoning) tied to a project or domainadd_playbook— Save a structured multi-step procedure with trigger keywords, steps, pitfalls, and expected outcomes
Session Management
wrap_up_session— End a session in one call: extracts lessons and decisions from a summary, detects and drafts playbooks from multi-step workflows, and optionally saves a project snapshotget_recent_context— Recover recent conversation context after a tool restart or disconnect
Additional advanced tools (when fully enabled) include knowledge review, merging, health scoring, import/export, audit logging, and a tools registry.
Click on "Install 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., "@EngramLoad my user context"
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.
Piia Engram
Local-first AI work identity you can see, edit, and override — portable across your MCP coding tools.
Tell AI once who you are, how you work, and what "good" means. Claude Code, Codex, Cursor, Windsurf, and other MCP-compatible tools can start from the same AI work identity layer — local files you own, no cloud account, no hidden memory you cannot inspect.
Install · See It in Action · Supported Tools · MCP Tools · FAQ
Listed in:
Also listed in: awesome-agents · Awesome-MCP-ZH · mcpservers.org · Cursor Directory · ModelScope · PulseMCP
TL;DR: piia-engram is a local-first personal AI identity layer. It helps multiple coding agents start from the same understanding of you: your preferences, quality bar, lessons learned, decisions, and project context. It is not an agent memory database; it is the user-owned layer above your tools.
Why not just use native memory? Claude Code, Codex, Cursor, and Windsurf are adding their own memories and rules. Those are useful, but they are scoped to one tool or workspace. piia-engram gives you one portable identity layer above them: local files you own, AI-proposed knowledge you review, and context that can follow you across tools.
Trust model in four lines:
No cloud account: install with
pip, keep the core store on your machine.Local files: identity and knowledge live under
~/.engram/as JSON/Markdown.User approval: AI writes locally; high-risk items (credentials, shell commands, MCP config, permission rules) wait for your review, while low/medium writes are auto-absorbed but fully auditable and reversible. Set
ENGRAM_APPROVAL=strictto gate every write.Documented boundaries: see Trust model, Privacy, and Security.
Want proof? See the live cross-tool continuity proof — a memory written by Claude Code, read back by Codex through one local store — or the one-command reproducible code demo.
See It in Action
You → "Help me refactor this auth module"
# WITHOUT piia-engram: AI starts from scratch
AI → "What language? What framework? What's your testing preference?"
# WITH piia-engram: AI can load your approved context
AI → "Based on your preference for pytest + 90% coverage, and your
lesson about always separating auth middleware from business
logic (from the March incident), here's my approach..."And you never have to take that on faith — Memory Lens (engram preview --html) shows exactly what any AI caller would receive, and what governance withheld, before anything is sent:
Above: a real report from a demo store — 4 items exposed; an unreviewed staging note and a lesson containing a credential are withheld, with the secret shown as [REDACTED].
Related MCP server: Mem0 MCP Server
Install
pip install piia-engram && engram setupThe wizard auto-detects your AI tools — Claude Code, Cursor, Codex, Claude Desktop — lists the exact config files it will touch, and writes the MCP connection after a one-keystroke confirm (every write is backed up first; decline and nothing changes). It previews your identity card, then you restart your configured tool; the first conversation can load your approved context through startup or search tools. (full walkthrough ↓)
Supported Tools
Evidence levels follow the agent client validation runbook: L0 = untested, L1 = installed, L2 = read/search observed, L3 = static file bridge, L4 = cross-client continuity.
Tool | Integration | Evidence status |
Claude Code | MCP over stdio | L4 partial continuity proof (Claude Code -> Codex) |
Codex | MCP over stdio | L4 partial continuity proof (Claude Code -> Codex) |
Cursor | MCP over stdio | L2 setup/read-search evidence path |
Claude Desktop | MCP over stdio | L1/L2 setup path; client-specific evidence pending |
Hermes | MCP over stdio | L2 end-to-end verified (hermes-agent 0.15.2, 2026-06-03) |
OpenClaw | SOUL.md / MEMORY.md / USER.md import and export | L3 static file-bridge evidence |
ChatGPT / Gemini / Kimi | Markdown identity card fallback | Usable |
Windsurf | MCP over stdio | Expected to work |
GitHub Copilot | MCP over stdio | Expected to work |
Cline | MCP over stdio | Expected to work |
Roo Code | MCP over stdio | Expected to work |
Amazon Q | MCP over stdio | Expected to work |
Augment | MCP over stdio | Expected to work |
Zed | MCP over stdio | Expected to work |
Trae | MCP over stdio | Expected to work |
Tencent CodeBuddy | MCP over stdio | Expected to work |
By the numbers
These are current repository facts from docs/public-facts.json. Public registries and package badges update only during release/publish.
Current repo / development facts | |
Version frame | v4.20.0 (verified 2026-09-01; check PyPI and GitHub Releases for the latest published package) |
Supported AI tools | 16 (evidence level varies by client; see Supported Tools and the validation runbook) |
MCP tools | 19 Core (loaded by default) + 40 Advanced (opt-in via |
Knowledge types | 3 (lessons, decisions, playbooks) |
Test suite | Unit + integration; run |
Lines in | 1770 (facade; domain logic now lives in focused mixins — see architecture.md) |
PBKDF2 iterations | 600,000 (OWASP 2023+ floor; legacy 100k still decrypts) |
Encryption | Optional field-level AES-256-GCM for supported profile fields; local files are plaintext JSON/Markdown by default |
Cold-start time | < 100 ms typical (local JSON, no network) |
Network calls by default | 0 for identity and knowledge tools — except optional |
Your AI forgets you every time you switch tools or start a new chat. piia-engram fixes the handoff.
Every time you open a new chat window, switch from Claude Code to Codex, update your AI tool, or move into a different project, you're back to zero:
your communication preferences — gone
your code standards and quality bar — forgotten
which mistakes you've already learned from — lost
why you made that architecture decision last month — erased
This happens because AI memory today is locked inside each platform. It belongs to the tool, not to you. The tool updates, resets, or gets replaced — and your context disappears with it.
piia-engram gives you a personal identity layer that lives on your machine, independent of any AI tool. You tell it once who you are, how you work, and what you've learned. MCP-compatible tools can read the same approved context. New chat, new tool, new version — your identity stays portable.
piia-engram is not an agent memory database. Tools like Mem0, Zep, and Letta store task context and session history for AI agents. piia-engram stores who you are as a person — your identity, preferences, hard-won lessons, and key decisions. It's a different layer: not what happened in a task, but who is behind every task.
Why piia-engram?
Without piia-engram | With piia-engram |
New chat window = start from zero | Configured conversations can load your approved context |
AI tool updates and your preferences vanish | Your identity lives on your machine, survives any update |
Switching tools loses accumulated context | Claude Code, Codex, and Cursor read the same memory |
Past mistakes get repeated | Lessons learned follow you across tools and sessions |
Memory is locked inside one product | Data stays local, editable, and portable |
Who Uses piia-engram
piia-engram is built for developers who use multiple AI coding tools and are tired of re-explaining themselves.
If you switch between Claude Code, Codex, and Cursor — your code standards, architecture decisions, and hard-won lessons reset every time. piia-engram makes every tool start from the same understanding of who you are.
If you open 10+ AI chat windows a week — each one starts from zero. piia-engram lets each conversation start from the same approved identity and knowledge context.
If you've lost preferences after a tool update — your identity lives on your machine, not inside any platform. Updates, resets, and migrations don't touch your memory.
Investment analysts Decisions get made but reasoning gets lost. piia-engram stores the full reasoning chain so six months later, "why did I pass on that?" has a real answer — and your analytical framework travels with you across every new analysis.
System architects Architecture decisions need context: what you chose, what you ruled out, and why. piia-engram keeps living Architecture Decision Records that travel with you across companies and projects, queryable by any AI tool.
Backend developers API quirks, integration gotchas, performance trade-offs — tacit knowledge that normally lives in your head and resets when you change jobs. piia-engram turns it into a searchable library that persists across everything.
Frontend and design Design philosophy rarely gets documented in a way AI tools can use. piia-engram stores your real standards, UX lessons from real users, and the reasoning behind component decisions — so every project starts where your last one ended.
Vibe coders You build with AI and move fast. The problem: every new session your AI starts from scratch — different style choices, inconsistent patterns, re-explaining the same preferences. piia-engram makes every tool consistent from session one: your stack, your patterns, your voice, already there.
What piia-engram Stores
All data lives under ~/.engram/ as plain JSON and Markdown files you can open, edit, back up, or migrate yourself.
Identity: who you are, how you communicate, what languages you prefer
Quality standards: your code review bar, test coverage expectations, what you refuse to ship
Preferences: coding style, AI behavior, how you like explanations
Trust boundaries: which fields to keep private, what tools can access
Project snapshots: context for ongoing work, captured and reloadable
Lessons learned: mistakes, surprises, things that worked and didn't
Key decisions: what you chose, what you ruled out, and why
Domain knowledge: reusable insights across projects and tools
What piia-engram Does (Beyond Storage)
Most memory tools are passive — you put things in, they give them back. piia-engram is also active.
Knowledge inheritance across projects
Describe a new project in plain text. get_knowledge_inheritance returns a curated starter pack of the most relevant lessons and decisions from everything you have ever worked on. Your tenth project benefits from all nine before it — one tool call away.
Passive knowledge capture
Paste a session summary into extract_session_insights and piia-engram extracts and stores the lessons and decisions. No manual note-taking. Knowledge accumulates through normal AI conversations.
Works with tools that do not support MCP
ChatGPT, Gemini, Kimi — get_identity_card exports a ready-to-paste Markdown identity card. Your context travels even to tools that cannot connect directly.
Automatic playbook extraction
Finish a multi-step workflow — release to PyPI, deploy to Cloudflare, publish to MCP Registry — and piia-engram detects it at session end. It generates a structured draft playbook (steps, pitfalls, trigger keywords) and saves it to a staging area. Next time you do the same task, the AI can retrieve the confirmed playbook as a passive reference, walk through the steps with you, and record the outcome. No manual recording required — Engram starts the draft, you confirm, the host AI stays accountable. See Playbook Auto-Extraction below.
Local tools registry
AI tools constantly search for local programs, runtimes, and CLIs. register_tool records what's installed and where; find_tool retrieves it instantly. No more which python every session — the environment map persists across tools and conversations.
Knowledge health and discoveryget_knowledge_overview surfaces stale lessons (not reviewed in 30+ days), computes a 0–100 health score across four dimensions (freshness, quality, coverage, cleanliness), and flags gaps worth revisiting. explore_knowledge scans your knowledge base for near-duplicates (and walks related/similar items) with actionable merge commands. manage_relation connects related lessons and decisions into a navigable knowledge graph.
Hybrid search (optional, off by default)
The default keyword search stays unchanged. Opt in to hybrid retrieval — FTS5 full-text plus a semantic vector layer — for cross-lingual recall, e.g. an English query finding a Chinese note: pip install "piia-engram[vector]" and set ENGRAM_SEARCH=hybrid, or let engram setup enable it with one keystroke. The index is a rebuildable SQLite file; your JSON store remains the single source of truth. See docs/hybrid-search.md.
Quick Start
pip install piia-engram
engram setupNew to piia-engram? See the fuller first-value quickstart for the install -> first memory -> fresh-session recall path using only the default 19 core tools, or the complete User Guide covering install -> first value -> cross-tool continuity -> governance -> privacy -> FAQ. Host-specific setup cards are available for Claude Code, Codex, and Cursor. For proposal-only safe-context, replay, freshness/conflict, and evidence drafts, see Context governance.
The setup wizard will:
Detect your Python environment
Let you choose the Engram data folder (
~/.engram, another drive, or a custom path)Detect your AI tools, list the exact config files it will touch, and write the MCP connection after a one-keystroke confirm (backed up first; decline leaves them untouched)
Walk you through seed knowledge (role, tech stack, language)
Smart-import rules from your existing
CLAUDE.md/.cursorrulesfilesIn advanced mode (
engram setup --advanced), show your optional privacy preferences (cross-tool sync, anonymous statistics)Preview your AI identity card — immediate proof of value
After setup writes the MCP connection (you confirm at the prompt first), restart your AI tool. Many clients can call get_user_context at startup; when a host does not do that proactively, an explicit search_knowledge or get_resume_brief call is still the expected L2 path.
For non-interactive or CI runs, skip the confirmation prompt and write directly:
engram setup --apply-external-configEither way, every external config write is backed up under the selected Engram data folder, and declining the prompt leaves every external config untouched.
Check health anytime:
engram status # redacted install + memory health summary
engram status --html # write a local redacted status page
engram preview --as automation # see exactly what a given AI caller would receive (read-only)
engram continuity # metadata-only proof that cross-tool handoff is ready
engram management # metadata-only review/playbook management view
engram doctor # diagnose all tools
engram doctor --fix # auto-repair issues + inject missing instructions
engram repair-encoding # dry-run scan for garbled / mojibake text
engram repair-encoding --apply # repair reversible cases with a backupengram continuity is metadata-only: it reports saved-session counts, contributing tools, resume-brief readiness, and aggregate context-load / wrap-up signals without printing memory bodies, raw telemetry events, session IDs, or local paths.
For a machine-readable synthetic loop proof, run:
python demos/cross_tool_continuity_demo.py --jsonengram continuity reports readiness metadata. The demo JSON proves an isolated write -> resume -> search -> provenance loop using synthetic data only.
For broader release evidence, run the synthetic MCIC benchmark:
python demos/mcic_benchmark.py --jsonMCIC v1 contains 10 purpose-labeled continuity scenarios covering explicit recall, implicit personalization signals, false-premise guard signals, public action boundaries, version-chain HEAD selection, negative control, and provenance. Its claim is narrow: Engram makes the right signal available to the next client; live model compliance still needs separate A/B testing.
Trust & Evidence
piia-engram treats trust claims as release artifacts, not marketing copy:
Claim | Public evidence | What it proves | Boundary |
Memory retrieval stays measurable |
| Recall/admission fixtures pass deterministic, knowledge-ID-scored checks with no LLM judge | Synthetic regression floor, not a broad live-agent benchmark |
Public numbers do not drift silently |
| README / registry / architecture facts match | Historical CHANGELOG keeps old release facts |
Product boundaries stay explicit |
| Package modules/imports, public facts/tool surface, public docs, exports, release surface, and allowlist stay inside the public contract | Metadata-only guard, not a review of private repositories or untracked branches |
Security and privacy wording stays consistent |
| Network, telemetry, endpoint, plaintext, and optional-encryption statements stay aligned across public docs | Prose consistency guard, not a third-party security audit |
Releases cannot skip evidence |
| Each release carries structured evidence that required checks passed | Evidence records are maintainer-internal |
Verify it yourself (5 minutes)
Don't take the table above on faith — run the checks on your own machine:
Check your setup —
engram doctorreports detected tools, store health, and the active capability mode.See what AI sees —
engram preview --as automationrenders the exact context a caller would receive (read-only, nothing sent).Control the surface — set
ENGRAM_TOOLS=core(or compose groups) and re-runengram doctorto confirm it reports the expected core surface. See capability modes.Audit your data — follow the data sovereignty audit runbook to confirm identity and knowledge data stays under your Engram root, with external writes explicit and audited.
Check the claims — each trust claim in trust evidence maps to a deterministic check or inspection path you can run locally.
Configure for Your AI Tool
# Guided setup; confirms before writing external client configs (backed up first)
engram setup
# Skip the confirmation prompt for non-interactive/CI runs
engram setup --apply-external-config
# Or manual:
claude mcp add piia-engram -- piia-engram-mcpAdd to ~/.cursor/mcp.json:
{
"mcpServers": {
"piia-engram": {
"command": "piia-engram-mcp",
"args": ["--transport", "stdio"]
}
}
}Compatible fallback if console scripts are not on PATH:
{
"command": "python",
"args": ["-m", "piia_engram.mcp_server"]
}Add to ~/.codex/mcp.json:
{
"mcpServers": {
"piia-engram": {
"command": "python",
"args": ["-m", "piia_engram.mcp_server"]
}
}
}Plugin manifest note (Codex CLI 0.130.0+): piia-engram ships a
.claude-plugin/plugin.jsonwhose schema is also recognized by Codex CLI. Native one-command plugin install via Codex's marketplace flow isn't supported yet (Codex expects a multi-plugin marketplace manifest at the repo root, which would conflict with the single-plugin manifest used by other tools). For now, configure Codex via the~/.codex/mcp.jsonsnippet above — it's the supported path and works on every Codex version.
Add to claude_desktop_config.json:
{
"mcpServers": {
"piia-engram": {
"command": "python",
"args": ["-m", "piia_engram.mcp_server"]
}
}
}Any tool that supports MCP over stdio works. Use this config:
{
"mcpServers": {
"piia-engram": {
"command": "python",
"args": ["-m", "piia_engram.mcp_server"]
}
}
}For tools without MCP support (ChatGPT, Gemini, Kimi): run get_identity_card in any MCP tool and paste the exported Markdown card into your chat.
engram setup detects Trae (~/.trae/mcp.json) and Tencent CodeBuddy (~/.codebuddy/mcp.json) without changing those files by default. To let Engram write those standard mcpServers files for you, run engram setup --apply-external-config; the previous file is backed up under your selected Engram data folder first.
Tongyi Lingma (通义灵码), Baidu Comate (文心快码), and Qoder manage MCP servers through their in-app MCP panel (or a project-level config), so the wizard can't write them for you. Open the tool's MCP settings and paste:
{
"mcpServers": {
"piia-engram": {
"command": "python",
"args": ["-m", "piia_engram.mcp_server"]
}
}
}Zero-install alternative (no prior pip install needed) — set "command": "uvx" and "args": ["--from", "piia-engram", "piia-engram-mcp"]. They all speak the same standard MCP-over-stdio protocol.
Verify your setup
After setup, run engram doctor to verify everything is connected:
$ engram doctor
Detected 3 AI tool(s):
[ok] Claude Code — Engram configured
[ok] Cursor — Engram configured
[ok] Codex — Engram configured
[ok] All configured tools look healthy.
── Functional Checks ──
[ok] piia_engram.core importable
[ok] Engram initialized (~/.engram)
[ok] Identity loaded (role: Senior Backend Developer)
[ok] quick_context.md ready (4096 bytes)
[ok] MCP server: 18 tools registered
-- Terminal encoding --
[ok] stdout/stderr: utf-8 / utf-8
[ok] PYTHONIOENCODING not set (stdout/stderr already UTF-8)
[ok] Runtime encodings: preferred=UTF-8, filesystem=utf-8
-- Config Integrity --
[ok] MCP configs: 3/13 files found, 3 configured
[ok] Instruction files: 3/4 found, 3 fresh
[ok] Project rule files: 1 found
[ok] Shared instructions: 1 found
[ok] Claude hooks: 4/4 registered
[ok] Report is metadata-only (hashes + counts; no rule bodies)
-- Continuity --
[--] No saved agent sessions yet
Run an AI session, then wrap up or stop the tool to create one.
[ok] Resume brief builds (2 section(s))For machine-readable compatibility checks, run engram capabilities --json.
It reports stable capability codes and contract versions without reading user
memory or project content; MCP doctor(output_format="json") includes the same
fingerprint.
Upgrading
pip install --upgrade piia-engramAfter upgrading, piia-engram automatically migrates any stale MCP configs the next time its server starts (stdio mode). If your AI tool still shows an "MCP disconnected" error after restarting, run:
piia-engram doctor # show what's wrong
piia-engram doctor --fix # auto-repair and fix in one stepThen restart the affected AI tool. The doctor command checks Claude Code, Cursor, Codex, Windsurf, Claude Desktop, and community-supported MCP config locations, removes outdated server entries, and prints a metadata-only config integrity summary.
Remote Deployment
Run piia-engram on your own server and connect from anywhere.
Server Setup
# Install with remote support
pip install piia-engram[remote]
# Generate an auth token
python -c "import secrets; print(secrets.token_urlsafe(32))"
# Save the output, e.g. "abc123..."
# Start in SSE mode
ENGRAM_AUTH_TOKEN=abc123... python -m piia_engram.mcp_server --transport sse --host 0.0.0.0 --port 8767Client Config (Claude Code)
{
"mcpServers": {
"piia-engram": {
"url": "http://your-server:8767/sse",
"headers": {
"Authorization": "Bearer abc123..."
}
}
}
}Client Config (Cursor)
{
"mcpServers": {
"piia-engram": {
"url": "http://your-server:8767/sse",
"headers": {
"Authorization": "Bearer abc123..."
}
}
}
}Security notes:
Always use HTTPS in production, behind nginx or caddy with TLS.
The auth token protects your identity data. Keep it secret.
Default bind is
127.0.0.1for localhost only. Use0.0.0.0only behind a reverse proxy.Set
ENGRAM_CORS_ORIGINSto restrict cross-origin access (e.g.https://your-domain.com).Data stays on your server and never touches third-party clouds.
MCP Tools
piia-engram ships 59 MCP tools. By default, only the 19 Tier-1 Core tools are loaded to keep the AI's context clean. Core means "used in most sessions", not "read-only": some core tools write local memory or owner-gated export files, and the governance layer still gates those side effects. For the short operator view, see the MCP cheatsheet. To unlock all 59 tools, add ENGRAM_TOOLS=all to your MCP config:
You can also expose composable capability modes such as knowledge management, governance, admin, or integrations; see the capability modes guide.
{
"mcpServers": {
"piia-engram": {
"command": "python",
"args": ["-m", "piia_engram.mcp_server"],
"env": { "ENGRAM_TOOLS": "all" }
}
}
}Startup sync: Engram reconciles memories/config snippets from local AI tools when an MCP server starts. By default this runs in the background so stdio clients can initialize quickly. Set ENGRAM_MCP_STARTUP_SYNC=eager to restore synchronous startup sync, or ENGRAM_MCP_STARTUP_SYNC=off to skip startup sync for latency-sensitive test arms. ENGRAM_EPHEMERAL=1 also skips startup sync and migration work in container/ephemeral clients.
Tier-1 Core (18 tools — daily workflow)
Tool | Purpose |
| Startup — Load identity + knowledge at session start (supports |
| Session end — Save insights + sync at session end |
| Writeback — Unified write endpoint: routes to add_lesson / add_decision / add_playbook by |
| Store a reusable lesson learned |
| Record a key decision with reasoning |
| Record an operational playbook (multi-step procedure with trigger keywords) |
| Retrieval — Search lessons, decisions, and playbooks (supports |
| Find knowledge relevant to current project |
| Return one structured identity + recent activity + relevant knowledge recall payload |
| Read one item's revision history (superseded snapshots; exact by-version lookup) |
| Owner-gated export: write and return a Markdown identity card for non-MCP tools |
| Update profile, preferences, or quality standards |
| Read a saved project snapshot |
| Persist project state for future sessions |
| Recover lost session context after restart |
| Read a human-friendly project timeline for a day |
| Build a cross-session/cross-tool resume brief |
| Run memory system self-diagnosis |
Tier-2 Advanced (40 tools — knowledge management, review, governance, import/export)
Advanced tools include optional local integrations, owner/admin surfaces, and maintenance helpers. Tools that export files, import whole stores, generate review pages, or mutate caller trust are owner/admin/export surfaces even when they are broadly useful product capabilities. Related operations are consolidated into single tools with a mode/action selector (v4.0).
Tool | Purpose |
| Optional local integration governed write: register a local tool, runtime, or CLI to the environment map |
| Optional local integration: look up a registered local tool by name |
| Optional local integration: list registered local tools (optionally filter by category) |
| Save AI session checkpoint (also runs automatically) |
| Browse saved session records across tools |
| Refresh local |
| Read identity facets via |
|
|
| Advanced owner-gated preview: build safe-context, freshness/conflict, replay, or evidence proposals without applying changes |
| Playbook reads via |
| Playbook lifecycle via |
| Guided execution via |
| List reusable lessons learned |
| List key decisions; |
| Build cross-project knowledge starter pack |
| List saved project snapshots |
| Extract lessons and decisions from session text |
| Parse free-form notes into structured knowledge |
| Update a lesson or decision by ID |
| Archive a lesson or decision by ID |
| Owner-only confirmation stamp via human, test, or anchor provenance |
| Owner-only repo scan: create staging repo-fact candidates from anchors |
| Owner-only accept: validate a candidate anchor and promote it to verified |
| Owner-only revalidation for existing anchor-backed facts |
| Merge a duplicate into the primary item |
|
|
| Knowledge graph exploration via |
| Knowledge digest, health report, stale checks |
| List items that need review |
| Staging review hub via |
| Owner-gated export: write a readable Markdown knowledge report |
| Owner-gated export: generate an interactive local HTML review page |
| Owner-gated export: write a full backup ( |
| Owner/admin import: use |
| Fetch a user-provided URL: prefers a local sidecar if running, otherwise uses the self-contained built-in reader ( |
| Get recent audit log entries |
| Start a project with inherited knowledge |
| View all callers' trust levels and access boundaries |
| Owner/admin |
| Maintainer feedback: generate an anonymous aggregate feedback report |
Legacy Playbook scope migration (classify / apply / rollback / review queue) moved out of the MCP surface into the owner-only local CLI: engram playbook scope classify|apply|rollback|queue|resolve (previews by default; writes require --apply --yes).
Playbook Auto-Extraction
piia-engram can detect multi-step workflows you complete during a session and automatically draft structured playbooks — no manual recording required.
How It Works
Detection — When you call
wrap_up_sessionorsave_agent_context, piia-engram scans for procedural workflow signals: checkpoint steps, action verbs, and trigger keywords.Draft generation — If a workflow is detected, a playbook draft is created with steps, pitfalls, trigger keywords, and preconditions. Sensitive information (API keys, tokens, absolute paths) is automatically redacted before storage.
Staging — The draft is saved to a staging area, never auto-promoted to verified. You review and confirm before it becomes a trusted playbook.
Schema contract — Stored playbooks are normalized into a versioned contract: trigger keywords, preconditions, pitfalls, structured steps, and optional
required_toolsdeclarations. Thin drafts remain reviewable, but carry machine-readable quality warnings.Tool resolution — Playbooks declare tool needs by name or purpose, while local paths stay in the tools registry.
playbook_execution(actionprepare) returnsresolved_tools,tools_ready, andmissing_toolsat runtime so the host AI can see which local tools are available without storing resolved paths in the Playbook.Reuse and outcome — Next time an AI tool encounters a similar task,
search_knowledgematches the trigger keywords and returns the playbook as a passive reference. The host AI walks through the steps with you andplaybook_execution(actionstatus) reports an outcome rollup (pending,partial,succeeded, orfailed) instead of treating skipped steps as silent success.
Design Philosophy: Engram Starts, You Confirm, AI Applies
Playbook auto-extraction is not fully automatic. piia-engram detects the workflow and generates a rough draft — but the draft stays in staging until you explicitly confirm it. Once confirmed, AI tools can use the playbook as a governed, passive reference and record step outcomes; Engram does not silently execute the workflow for them. This keeps humans in the loop for quality control while eliminating the manual work of writing operational procedures.
Confidence Levels
Level | Signal | AI Behavior |
high | 3+ checkpoint steps from | AI notifies you: "Detected a reusable workflow, draft playbook generated." |
medium | Text-based detection (trigger keywords + action verbs) | AI saves silently to staging, no notification. |
Sensitive Info Redaction
Before any draft is stored, piia-engram automatically redacts:
API keys and tokens (
Bearer,sk-,ghp_, etc.)Absolute file paths (Windows and Unix)
Email addresses
Environment variable secrets
Kill Switch
Users can disable or re-enable playbook auto-extraction at any time:
Disable: Tell your AI "关闭 playbook" / "stop playbook" / "disable playbook auto-extraction"
Enable: Tell your AI "开启 playbook" / "start playbook" / "enable playbook auto-extraction"
The AI calls update_identity(field="preferences", ...) to toggle playbook_auto_extract. Default is enabled.
Manual Playbook Creation
You can always create playbooks manually with add_playbook, regardless of the auto-extraction setting. The kill switch only affects automatic detection during wrap_up_session.
Data Layout
~/.engram/
|-- schema_version.json
|-- identity/
| |-- profile.json
| |-- preferences.json
| |-- quality_standards.json
| `-- trust_boundaries.json
|-- knowledge/
| |-- lessons.json
| |-- decisions.json
| `-- domains.json
|-- playbooks/
| |-- _index.json
| `-- {playbook_id}.json
|-- tools/
| `-- registry.json
|-- projects/
| `-- {project_id}.json
|-- contexts/
| `-- {tool_name}/
| `-- {session_id}.md
|-- exports/
`-- compat/
`-- openclaw/Own & export your data
Everything lives in local JSON you own — inspect, edit, back up, or delete it directly. Three explicit export paths, each with a different boundary:
Want | Tool | What it includes |
A portable card to paste into ChatGPT/Gemini/Kimi |
| Curated Markdown: who you are, how you work, recent verified lessons/decisions. Excludes raw config-file knowledge and caps recent items. |
A readable knowledge report |
| Active lessons/decisions grouped by domain/month (Markdown). |
A full local backup |
| The whole store as JSON. Treat the file as sensitive — it is a complete backup, including staging and labelled items. Preview imports first to see add/skip/conflict counts without writing data. |
OpenClaw files |
| SOUL.md / MEMORY.md / USER.md. |
A committable AGENTS.md/CLAUDE.md digest |
| Verified, non-sensitive lessons/decisions only, as a summary block. Staging and sensitive items are excluded by construction; refuses to overwrite an existing file. |
Exports are owner-gated when ENGRAM_GOVERNANCE=1 (see
docs/governance.md). There is no cloud copy and no hidden memory:
what you export is exactly what is on your disk.
Local data sovereignty. Backup and restore cover only the Engram directory
— engram backup-plan prints a metadata-only list of what to copy before an
upgrade (it reads no stored knowledge bodies and never reaches outside the
Engram root). For JSON backups, import_engram(..., dry_run=True) or
engram import <backup.json> returns a metadata-only merge plan with
add/skip/conflict counts before any write; --apply --yes is required to mutate
the local store. Same-summary lessons and same-question decisions with divergent
semantic fields are previewed as version-chain candidates; they are materialized
only when the owner explicitly runs
engram import <backup.json> --apply --yes --materialize-version-chain. Engram
never backs up, modifies, or deletes files in your project folders.
See docs/runbooks/setup-upgrade-safety.md.
Comparison
Feature | piia-engram | Claude Memory | Manual | Mem0 | Letta (MemGPT) |
Primary purpose | User identity across tools | Per-conversation memory | Per-project notes | Agent vector memory | Agent self-editing memory |
Cross-tool by design | ✅ MCP-native (19 core tools) | ❌ Claude only | ❌ tool-specific | ⚠ requires per-tool wiring | ⚠ requires per-tool wiring |
Storage | Local JSON in | Cloud | Local | Vector DB + Mem0 Cloud | Postgres or Letta Cloud |
Local-first by default | ✅ | ❌ | ✅ | ⚠ Cloud is the default | ⚠ Cloud is the default |
Encryption at rest | ✅ AES-256-GCM, PBKDF2 600k (opt-in) | depends on Cloud | ❌ plain Markdown | depends on store config | depends on Postgres config |
Knowledge tiers | ✅ high-risk staged; strict-mode gates all | ❌ | ❌ | ❌ | ❌ |
Conflict detection | ✅ | ❌ | ❌ | ❌ | ❌ |
MCP-native | ✅ | n/a | n/a | ⚠ third-party | ⚠ third-party |
Price | Free, AGPL-3.0 | Subscription-bundled | Free | Free / Cloud tiers | Free / Cloud tiers |
📊 For the full side-by-side, including when to choose a competitor over piia-engram, see docs/comparison.md.
Built With
piia-engram is a human-directed, AI-assisted open-source project.
Contributor | Role |
Creator, product direction, strategy, ownership | |
Claude Code | Architecture, task planning, code review assistance |
Codex | Implementation, testing, documentation assistance |
FAQ
What MCP server lets me share memory between Claude Code and Cursor?
piia-engram. Install with pip install piia-engram && engram setup, and both tools read the same identity, preferences, and lessons from ~/.engram/. No cloud, no sync service — they both read local JSON files through MCP.
What is piia-engram? piia-engram is a local-first AI work identity layer for MCP-compatible coding tools. It stores your identity, preferences, code standards, lessons learned, and key decisions as local JSON files on your machine. Configured tools (Claude Code, Codex, Cursor, Windsurf, Claude Desktop) can read the same user-owned context, so new chats and tool switches can start from the same governed memory and identity base.
How is piia-engram different from the official MCP memory server?
The official @modelcontextprotocol/server-memory stores a generic knowledge graph of entities and relations. piia-engram is specialized for developer identity: it has structured fields for your profile, code standards, quality bar, lessons learned, and key decisions — plus 59 tools for knowledge lifecycle management (search, review, merge, inherit across projects). If you need general-purpose entity memory, use the official server. If you want MCP-compatible coding tools to start from the same approved understanding of your preferences and past mistakes, use piia-engram.
How is piia-engram different from agent memory tools like Mem0, Zep, or Letta? Those tools store task context and session history for AI agents — what happened during a workflow. piia-engram stores who you are as a person — your identity, preferences, hard-won lessons, and key decisions. It's a different layer: identity persists across tools, sessions, and projects, while task memory is scoped to a single agent run. Your data is local JSON files you own and can edit directly.
Why not just use AGENTS.md / CLAUDE.md / .cursorrules? Those config files are great for repo-specific rules (build steps, coding conventions). piia-engram is for you — your preferences, lessons, and decisions that can follow you across repos and configured MCP-compatible tools. They complement each other: use AGENTS.md for the project, piia-engram for the person. See the full comparison in docs/comparison.md.
Can I use piia-engram with multiple AI tools at once?
Yes. That's the primary use case. piia-engram uses local file storage (~/.engram/) with atomic writes and file locking. Claude Code, Cursor, Codex, and any other MCP client can connect simultaneously. A lesson recorded in Claude Code is immediately available in Cursor.
Which AI tools does piia-engram support?
Any MCP-compatible tool: Claude Code, OpenAI Codex, Cursor, Claude Desktop, Windsurf, GitHub Copilot, Cline, Roo Code, Amazon Q, Augment, Zed, and more. For tools without MCP support (ChatGPT, Gemini, Kimi), export a Markdown identity card with get_identity_card and paste it in.
Where is my data stored?
All data lives in ~/.engram/ on your local machine as plain JSON and Markdown files. No cloud, no account, no subscription. You can open, edit, back up, or migrate the files yourself. Optional AES-256-GCM encryption is available via pip install piia-engram[secure].
How do I install piia-engram?
pip install piia-engram
engram setupThe setup wizard detects your AI tools without changing their config files by default. To auto-configure MCP entries with backups, run engram setup --apply-external-config, then restart your AI tool. The AI will call get_user_context at the start of each session.
After upgrading, my AI tool shows "MCP server disconnected". How do I fix it?
Run engram doctor --fix in a terminal, then restart your AI tool. This command scans all known MCP config files, removes outdated server entries, and repairs broken paths in one step.
Does piia-engram send data to the cloud?
Not by default. Identity and knowledge tools use local files, and telemetry is off by default. Optional anonymous usage statistics can be enabled as a local log; remote telemetry and weekly feedback reports require separate explicit opt-in and send counts only, never knowledge content. You can inspect the next payload with engram telemetry preview, disable anytime with engram telemetry off, and turn remote sending off with engram telemetry remote off. See PRIVACY.md for the full data flow diagram, what is and isn't collected, and your data rights.
How many MCP tools does piia-engram provide? Two tiers, designed so most users only see 18 tools:
Tier | Tools | What they do | Loaded by |
Core | 18 | Identity, knowledge read/write, project context, session recovery, diagnostics | Default |
Advanced | 40 | Knowledge review, merge, decision threads, permission management, tools registry, import/export, audit |
|
Most users never need to enable Advanced tools — Core covers everyday use.
Is piia-engram free? Yes. The open-source core is free software under AGPL-3.0. Personal/local use has no subscription, cloud tier, or vendor lock-in. If you plan closed-source embedding, hosted redistribution, or enterprise packaging, review the AGPL obligations first; piia-engram does not currently ship a separate commercial license.
Limitations
piia-engram is functional and actively used, but some things it intentionally does not do yet:
Area | Current State | Planned |
File safety | Atomic JSON writes with a shared portalocker file lock | Broader stress testing |
Access control |
| Stronger caller identity binding requires MCP/client support |
Encryption | Optional field-level AES-256-GCM encryption via | Full-disk encryption for all files (v4.0) |
Audit logging | Local access audit log on by default at | Per-caller audit (blocked by MCP spec) |
Caller identity | MCP protocol doesn't pass tool identity | Blocked by MCP spec |
Concurrent writes | Protected by file lock + atomic replace for piia-engram JSON writes | Network-filesystem edge cases not guaranteed |
What this means in practice:
Don't store passwords, API keys, or client PII in piia-engram
Any process with read access to
~/.engram/can read your datarestricted_fieldsreduces what piia-engram emits in cold-start context, but it is not encryption or a true ACL
This is not a warning to avoid piia-engram — it's an honest description of what it is: a local memory layer for personal AI context. For personal use, it works well today.
Security Configuration
Field-level encryption (optional)
Encrypt sensitive profile fields (email, phone, location, etc.) at rest:
pip install piia-engram[secure]
export ENGRAM_SECRET="your-strong-passphrase"Encrypted fields are stored as enc:v2:... in JSON files; legacy enc:v1:... values still decrypt. Without ENGRAM_SECRET, piia-engram works normally with plaintext (backward compatible).
Audit logging (on by default)
A local audit log records all read/write operations to ~/.engram/audit.log in JSON-lines format. It is a local file only — never sent anywhere. Query it with the get_audit_log tool or grep.
To opt out:
export ENGRAM_AUDIT=0Agent governance (advanced, optional)
Enable per-caller trust levels and disclosure receipts:
export ENGRAM_GOVERNANCE=1
export ENGRAM_CLIENT_TYPE=claude_codeGovernance is off by default. When enabled, known local coding agents are
filtered to public/work knowledge, unknown callers fail closed to public-only,
and owner-only exports/imports/grant changes require private-self. See
docs/governance.md for the exact trust levels, gates,
honest boundaries, and ledger commands.
Recommended rollout: keep the global default compatible, but enable governance
in each MCP client env when you use Engram across multiple AI tools, automation,
or any remote-facing bridge. engram status and engram doctor report whether
this layer is on. Caller identity is still supplied by MCP environment
variables, not cryptographic authentication, so governance is a practical local
policy boundary rather than a hardened sandbox.
CLI Commands
engram setup # Interactive install wizard (confirms before writing client configs)
engram setup --apply-external-config # Skip the confirm prompt (non-interactive/CI); writes with backups
piia-engram doctor # Check config health + governance state
piia-engram status # Redacted install + memory/governance summary
piia-engram status --html # Write a local redacted status page
piia-engram preview # Show what a simulated AI caller would receive (--as ROLE, --level, --html)
piia-engram continuity # Prove cross-tool handoff readiness (metadata only)
piia-engram management # Show a metadata-only review/playbook management view
piia-engram doctor --fix # Auto-repair any issues found
piia-engram sessions # List saved cross-tool agent sessions
piia-engram sessions show <id> # Print one saved session
piia-engram review # List staging knowledge awaiting review
piia-engram review show <id> # Inspect one review item
piia-engram review approve <id> --yes # Promote a staging item
piia-engram review archive <id> --yes # Archive a review item
piia-engram management action review approve <id> --yes --json # Structured metadata-only action receipt
piia-engram management action playbook delete <id> --yes --json # Soft-delete a Playbook without body echo
piia-engram management action playbook_scope accept_project <id> --project . --yes --json # Resolve ambiguous Playbook scope
piia-engram management action playbook_scope accept_shared <id> --project ./app-a --project ./app-b --yes --json # Share one Playbook with selected projects
piia-engram dock-status # Zero-write Dock owner-console status (--json)
piia-engram repair-encoding # Dry-run scan for garbled / mojibake text
piia-engram repair-encoding --apply # Repair reversible cases with a backup
piia-engram backup-plan # Metadata-only plan of what to copy before upgrading (local-only)
piia-engram export-agents-md # Export verified, non-sensitive knowledge as an AGENTS.md/CLAUDE.md block
piia-engram stats # Show project growth metrics (GitHub + PyPI)
piia-engram stats --log # Append stats snapshot to local log
engram telemetry # Manage anonymous usage statistics
engram privacy # Show what data piia-engram stores and whereContributing
Contributions, issues, and feedback are welcome.
See CONTRIBUTING.md.
License
AGPL-3.0. piia-engram is free software. Your AI work identity and memory belong to you.
Available Tools
19 toolsadd_decisionA
记录单条关键决策(用户明确选了某个方案)。 / Record one key decision when the user explicitly chose an option.
**Lifecycle: writeback** — 对话中做出明确决策时调用。
Lifecycle: writeback — call when an explicit decision is made during conversation.
用途:用户说"我们决定用 X"或"以后都用 Y"时调用。
Purpose: Call when the user says they decided to use X or will use Y going forward.
注意:如果用户给了一段会话摘要让你自动提取,请用 extract_session_insights 而不是本工具。
Note: If the user gives a session summary for automatic extraction, use extract_session_insights instead.
决策链(Decision Thread):同一问题改选方案时,会自动在决策链中标记旧决策为 superseded。
也可显式传 supersedes 参数指定被取代的旧决策 ID。
Decision thread: when the same question gets a different choice, the old decision is
automatically marked superseded. You may also explicitly pass supersedes with the old ID.
Args:
question: 决策的问题,如"数据库选型"。 / Decision question, such as 'database choice'.
choice: 做出的选择,如"PostgreSQL"。 / Chosen option, such as 'PostgreSQL'.
reasoning: 选择的理由(可选)。 / Reasoning for the choice (optional).
source_tool: 记录来源工具,如 'claude_code', 'codex'(可选,建议填写)。 / Source tool, such as 'claude_code' or 'codex' (optional but recommended).
project: 关联项目(可选)。 / Related project (optional).
domain: 技术领域(可选),可填多个,逗号分隔,如 'architecture,database'。 / Technical domain (optional); may contain multiple comma-separated labels such as 'architecture,database'.
supersedes: 被本决策取代的旧决策 ID(可选)。填写后自动在决策链中建立 supersedes 关系。 / ID of the old decision this one replaces (optional). Creates a supersedes edge in the decision thread.
source_agent: 产生/校验此决策的 agent 身份(可选)。 / Agent identity that produced or validated this decision (optional).
run_id: 产生此决策的工作流/会话运行 ID(可选)。 / Workflow/session run id that produced this decision (optional).
last_validated_at: 最近确认此决策仍然成立的 ISO-8601 时间(可选)。 / ISO-8601 time this decision was last confirmed to still hold (optional).
| Name | Required | Description | Default |
|---|---|---|---|
| choice | Yes | ||
| domain | No | ||
| run_id | No | ||
| project | No | ||
| question | Yes | ||
| reasoning | No | ||
| supersedes | No | ||
| source_tool | No | ||
| source_agent | No | ||
| project_folder | No | ||
| user_confirmed | No | ||
| last_validated_at | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses that old decisions are automatically superseded when the same question gets a different choice, and allows explicit supersedes. It also mentions lifecycle: writeback. However, it does not discuss any side effects, authorization, or persistence, though these may be implicit.
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 well-structured with headers and bullet points, but it is somewhat verbose, repeating lifecycle information and using two languages. Every sentence adds value, but it could be slightly more concise without losing clarity.
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 12 parameters (2 required), no enums, no nested objects, and an output schema exists, the description thoroughly explains each parameter, the decision thread, and usage context. It is complete and leaves no significant gaps.
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. It provides a thorough 'Args' section documenting all 12 parameters with clear explanations in both Chinese and English, including defaults and optionality.
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 records a key decision when the user explicitly chooses an option, with examples like 'we decided to use X'. It distinguishes the tool from extract_session_insights and explains the decision thread behavior, providing a specific verb ('record') and resource ('key decision').
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 explicitly says when to call: when the user explicitly makes a decision. It also provides a clear exclusion: if the user gives a session summary for automatic extraction, use extract_session_insights instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_lessonA
记录单条经验教训(你已经知道要记什么)。 / Record one lesson learned when you already know what to save.
**Lifecycle: writeback** — 对话中学到可复用的经验时调用。
Lifecycle: writeback — call when reusable experience is learned during conversation.
用途:用户明确说出一条踩坑经验或技术发现时调用。
Purpose: Call when the user explicitly states a lesson, pitfall, or technical finding.
注意:如果用户给了一段会话摘要让你自动提取,请用 extract_session_insights 而不是本工具。
Note: If the user gives a session summary for automatic extraction, use extract_session_insights instead.
Args:
summary: 教训的一行摘要。 / One-line lesson summary.
detail: 详细说明(可选)。 / Detailed explanation (optional).
domain: 技术领域(可选),可填多个,逗号分隔,如 'python,testing'。 / Technical domain (optional); may contain multiple comma-separated labels such as 'python,testing'.
source_tool: 记录来源工具,如 'claude_code', 'codex'(可选,建议填写)。 / Source tool, such as 'claude_code' or 'codex' (optional but recommended).
source_url: 如果教训来自外部内容,填写来源 URL(可选)。 / Source URL when the lesson comes from external content (optional).
source_agent: 产生/校验此条目的 agent 身份(可选,如 'claude_code',比 source_tool 更细)。 / Agent identity that produced or validated this entry (optional; finer-grained than source_tool).
run_id: 产生此条目的工作流/会话运行 ID(可选)。 / Workflow/session id that produced this entry (optional).
last_validated_at: 人/agent 最近确认此条目仍然成立的 ISO-8601 时间(可选)。 / ISO-8601 time this entry was last confirmed to still hold (optional).
allow_similar_new: 相似摘要但确属新条目时,显式绕过去重门存为新条目并互链(可选,默认 false;同摘要不同正文时去重拒绝会带修订指引)。 / When the similar summary is genuinely a NEW fact, explicitly bypass the duplicate gate and store it linked as related (optional, default false; same-summary-different-body rejections carry revision guidance).
| Name | Required | Description | Default |
|---|---|---|---|
| detail | No | ||
| domain | No | ||
| run_id | No | ||
| summary | Yes | ||
| source_url | No | ||
| source_tool | No | ||
| source_agent | No | ||
| project_folder | No | ||
| user_confirmed | No | ||
| allow_similar_new | No | ||
| last_validated_at | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and mostly meets it: it labels the lifecycle as writeback, implies persistence through 'Record', and discloses the duplicate gate plus the allow_similar_new bypass and the revision-guidance rejection behavior. It does not mention confirmation or project-folder scoping, but the core write and dedub behaviors are made explicit.
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: purpose, lifecycle, trigger condition, and alternative all appear near the top. The Args block uses a compact one-line-per-parameter format, and the bilingual duplication is functional for clarity. It is long but every section earns its place; no filler is present.
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 an 11-parameter tool with no annotations and no schema descriptions, the description is remarkably complete: it covers usage boundary, alternative routing, dedub behavior, and most parameter semantics. The main gaps are project_folder and user_confirmed semantics and a description of side effects beyond 'writeback', but the output schema covers return-value expectations.
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. It provides meaningful semantics for 9 of 11 parameters, with concrete examples ('python,testing', 'claude_code'), optionality/defaults, and the relationship between source_tool and source_agent. The omissions are project_folder and user_confirmed, which are present in the schema but not explained.
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 clear verb and object: 'Record one lesson learned' / '记录单条经验教训', and immediately states the precondition 'when you already know what to save'. It also names the sibling alternative extract_session_insights, making the distinction visible without inspecting other 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?
It explicitly says when to call: 'when reusable experience is learned during conversation' and 'when the user explicitly states a lesson, pitfall, or technical finding'. It also gives an explicit exclusion: if the user provides a session summary for automatic extraction, use extract_session_insights instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_playbookA
记录操作手册(Playbook)— 结构化的多步骤流程。 / Record an operational playbook — a structured multi-step procedure.
用途:完成一个多步骤操作流程后(如发布到 Registry、上架应用等),将步骤和经验记录为 Playbook,
方便日后调取复用,避免重复摸索。
Purpose: After completing a multi-step operational process (publishing to a registry, app deployment, etc.),
record the steps as a Playbook for future retrieval.
每条 Playbook 独立存储为单个文件,通过 triggers(记忆点关键词)快速调取。
Each Playbook is stored as an individual file, quickly retrievable via trigger keywords.
Args:
title: 流程名称,如 'MCP Registry 发布流程'。 / Playbook name, e.g., 'MCP Registry publish workflow'.
triggers: 记忆点关键词,逗号分隔,如 '发布,registry,上架'。 / Trigger keywords (comma-separated) for quick retrieval.
steps_json: 步骤 JSON 数组,每个元素含 order/action/detail。 / Steps as a JSON array, each with order/action/detail.
required_tools_json: 工具依赖 JSON 数组(可选),只声明工具名/用途,不写本机路径。 / Tool dependencies JSON array (optional); declares names/purposes, not local paths.
tool_refs: 简写工具名,逗号分隔(可选)。 / Shorthand tool names, comma-separated (optional).
description: 流程概述(可选)。 / Brief description (optional).
domain: 技术领域,逗号分隔(可选)。 / Domain labels, comma-separated (optional).
preconditions: 前提条件,逗号分隔(可选)。 / Preconditions, comma-separated (optional).
pitfalls: 常见陷阱,逗号分隔(可选)。 / Common pitfalls, comma-separated (optional).
outcome: 预期结果(可选)。 / Expected outcome (optional).
source_tool: 来源工具(可选)。 / Source tool (optional).
allow_similar_new: 标题相似但确属另一份手册时,显式绕过相似度门存为新条目(可选,默认 false;同标题不同正文的去重拒绝会带修订指引)。 / When the similar title is genuinely a DIFFERENT playbook, explicitly bypass the similarity gate (optional, default false; same-title-different-body rejections carry revision guidance).
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | ||
| domain | No | ||
| run_id | No | ||
| outcome | No | ||
| pitfalls | No | ||
| triggers | Yes | ||
| tool_refs | No | ||
| scope_type | No | global | |
| steps_json | No | [] | |
| description | No | ||
| source_tool | No | ||
| source_agent | No | ||
| preconditions | No | ||
| project_folder | No | ||
| user_confirmed | No | ||
| allow_similar_new | No | ||
| last_validated_at | No | ||
| required_tools_json | No | [] |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 of behavioral disclosure. It explains that each playbook is stored as an individual file, is retrievable via trigger keywords, and that similar-title handling includes a bypass flag and deduplication guidance. It does not mention permissions, overwriting behavior, or other side effects, but the core write behavior and uniqueness constraints are clearly described.
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 well-structured: purpose first, storage model second, then parameter explanations. It is bilingual, which adds length and some redundancy, but each section carries meaningful content and the core information is front-loaded.
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 an 18-parameter write tool with no annotations and no schema descriptions, the description covers the main usage, storage model, and deduplication behavior well. However, six schema parameters are left unexplained, including non-obvious ones like scope_type and user_confirmed, which could lead an agent to make incorrect calls or omit important context. The presence of an output schema reduces concern about return-value documentation.
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 across 18 parameters, so the description must compensate. It does so for 12 parameters, adding valuable semantics such as the steps_json element structure (order/action/detail), required_tools_json's no-local-paths rule, and allow_similar_new's nuanced bypass condition. Six parameters (run_id, scope_type, source_agent, project_folder, user_confirmed, last_validated_at) remain undocumented, though some are partially inferable from their names.
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: 'Record an operational playbook — a structured multi-step procedure.' It also gives concrete use cases (publishing to a registry, app deployment) and describes the storage/retrieval model, which helps distinguish it from generic memory or lesson tools. It does not explicitly name sibling alternatives, so it falls short of a 5.
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 clearly says when to use the tool: after completing a multi-step operational process, to preserve steps and experience for future reuse. It does not, however, state when not to use it or explicitly compare it with sibling tools like memory_store, add_lesson, or add_decision.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doctorA
记忆系统自诊断。 / Memory system self-diagnosis.
用途:检查 Engram 记忆系统健康状态,发现潜在问题(数据碎片、过期知识、冲突决策、
身份层异常等)。这是 MCP doctor;CLI 冲突视图请用 ``engram conflicts list``。
Purpose: Run a comprehensive health check on the Engram memory system —
detects data fragmentation, stale knowledge, conflicting decisions, identity
issues, and more.
Args:
output_format: "markdown" 或 "json"。 / "markdown" or "json".
| Name | Required | Description | Default |
|---|---|---|---|
| output_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description discloses types of issues detected (fragmentation, stale knowledge, etc.) but does not explicitly state read-only nature or other behavioral traits like side effects or auth requirements.
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?
Bilingual structure is clear: purpose, detection list, alternative mention. Slightly redundant between languages but front-loaded and efficient overall.
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 simple tool (one param, no required, has output schema), description covers purpose and parameter. Could add example or mention non-destructiveness, but adequate for context.
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?
Only parameter 'output_format' with default 'markdown'. Description lists allowed values ('markdown' or 'json'), which the schema (only title, type, default) lacks. Adds meaningful semantic choice.
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?
Clearly states verb 'check' (implied) and resource 'Engram memory system health'. Lists specific issues detected. Distinguishes from sibling CLI command via explicit 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?
Describes when to use (health check, detect issues) and provides alternative for CLI conflict view. Lacks explicit exclusion of other sibling tools but context implies diagnostic vs retrieval.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_daily_logA
读取项目的每日日志(人类可读的会话时间线)。 / Read a project's daily log (human-readable session timeline).
用途:v3.30 新增——每次 wrap_up_session 会在 ``~/.engram/daily/<pid>/<YYYY-MM-DD>.md``
追加一条带时间戳的条目(含 lesson/decision/playbook 计数 + 摘要前 600 字符)。
新会话需要"上次到底干了什么"的快速概览时调本工具,比 search_knowledge 更直观。
Purpose (v3.30): every wrap_up_session appends a timestamped entry to
``~/.engram/daily/<pid>/<YYYY-MM-DD>.md`` with a lesson/decision tally
and the first ~600 chars of the summary. Call this when a new session
needs a glance-able "what happened today" timeline — faster than
search_knowledge for recall.
Args:
project_folder: 项目文件夹路径。 / Project folder path.
date: ISO 日期 ``YYYY-MM-DD``(可选,默认今天)。 / ISO date (optional, defaults to today).
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | ||
| project_folder | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It discloses that the tool reads a file, specifies the exact file path, and describes the content structure (timestamped entry with lesson/decision counts and summary). It implicitly assures read-only behavior, though an explicit statement about lack of side effects would push it to 5.
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 structured with a purpose statement, background, usage guidance, and parameter list. It is front-loaded and each sentence serves a purpose. The bilingual duplication is slightly redundant but acceptable; overall it's efficient.
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 simple two-parameter schema and the presence of an output schema (not shown), the description covers all needed aspects: what the tool does, how it works, when to use it, and what the file contains. It complements the sibling 'wrap_up_session' well. No gaps identified.
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 0%, but the description provides clear meanings for both parameters: project_folder (folder path) and date (ISO format, optional, defaults to today). This adds value beyond the bare schema. A minor improvement would be to include an example or constraints, but it's already sufficient.
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 verb 'read', the resource 'project daily log', and distinguishes it from sibling 'search_knowledge' by noting it provides a faster, glance-able timeline. The bilingual text reinforces the purpose.
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?
Explicitly states when to call ('when a new session needs a quick overview'), provides a comparison to an alternative ('faster than search_knowledge'), and explains the file location and content format, leaving no ambiguity about appropriate use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_identity_cardA
导出用户的可携带 AI 身份卡(Markdown 格式)。 / Export the user's portable AI identity card as Markdown.
Owner/export surface: writes exports/identity_card.md and is refused for non-owner callers when governance is enabled.
用途:需要把用户身份、工作方式、质量标准、经验教训分享给其它 AI 工具时调用。
Purpose: Call when another AI tool needs a self-contained summary of the user's identity, work style, quality standards, and lessons.
注意:如果本会话只需要运行时上下文,用 get_user_context 更合适。
Note: If the current session only needs runtime context, get_user_context is usually the better choice.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses file writing (exports/identity_card.md) and authorization (refused for non-owners when governance enabled). No annotations provided, so description carries full burden; it does well but could mention side effects or idempotency.
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?
Two sentences in English and Chinese, plus a note. Front-loaded with action and purpose, no wasted words.
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?
Describes what is exported (identity, work style, quality standards, lessons), conditions, and alternative. Output schema exists for return format. Complete for a simple tool.
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?
No parameters exist, schema coverage is 100%. Description correctly omits parameter details; baseline 4 for zero-parameter tools.
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 it exports a portable AI identity card as Markdown, specifies the file path, and distinguishes from get_user_context for runtime context. The verb 'Export' and resource 'portable AI identity card' are specific and unique among siblings.
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?
Explicitly tells when to use (when another AI tool needs a self-contained summary) and when not (for runtime context, use get_user_context). Provides clear alternatives and conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_knowledge_historyA
查看一个知识条目(lesson/decision/playbook)的修订历史。 / Return the revision history (superseded snapshots) of one knowledge item.
**Lifecycle: retrieval** — 需要追溯某条知识改过什么、何时改的、改前长什么样时调用。
Lifecycle: retrieval — call when you need what changed on an item, when, and what the prior body looked like.
用途:修订后核对旧行为、审计版本链、或找回被改掉的内容。
Purpose: verify prior behavior after a revision, audit a version chain, or recover replaced content.
Args:
item_id: 条目 ID(稳定 HEAD id,不是快照 id)。 / Item id (the stable HEAD id, not a snapshot id).
include_bodies: 是否在结果里带快照正文(默认 false 只给元数据)。 / Include snapshot bodies in the result (default false returns metadata only).
version: 精确按版本号取一个快照(可选);不存在时返回 version_not_found 而不是近似值。 / Exact by-version snapshot lookup (optional); a miss returns version_not_found, never a nearest match.
| Name | Required | Description | Default |
|---|---|---|---|
| item_id | Yes | ||
| version | No | ||
| include_bodies | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well. It discloses the retrieval lifecycle, the default metadata-only behavior when include_bodies is false, exact-version semantics, and the error behavior for missing versions. This gives the agent a clear picture of what calling the tool will and will not do.
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 bilingual structure doubles the length, but it is organized with clear labels (Lifecycle, Purpose, Args) and front-loaded with the core definition. A slightly leaner single-language version would be more concise, but the structure is easy to scan and every section 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 tool's moderate complexity and the absence of annotations, the description covers the essential context: lifecycle, intended use cases, parameter semantics, defaults, and edge-case behavior. An output schema exists, so explicit return-value documentation is not necessary here. Nothing critical is missing for correct 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 0%, but the Args section fully compensates. It explains that item_id is the stable HEAD id not a snapshot id, that include_bodies defaults to false and controls body inclusion, and that version is an exact optional lookup with defined miss behavior. This is exactly the semantic depth the bare schema lacks.
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 returns the revision history of one knowledge item with a specific verb ('Return the revision history') and resource ('one knowledge item'). It distinguishes itself from sibling tools like search_knowledge and get_relevant_knowledge by focusing on historical snapshots rather than current content.
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?
Provides explicit when-to-use guidance: 'call when you need what changed on an item, when, and what the prior body looked like', plus concrete use cases (audit, recover replaced content). It also gives a when-not nuance: a version miss returns version_not_found, never a nearest match, which prevents misuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_project_contextA
读取特定项目的知识快照(项目级,只含该项目的历史)。 / Read the knowledge snapshot for a specific project, containing only that project's history.
用途:想了解某个项目之前的技术栈、已知问题、协作次数时调用。
Purpose: Call when you need a project's previous tech stack, known issues, notes, or collaboration history.
注意:如果想获取用户级完整身份上下文,用 get_user_context;如果想写入项目快照,用 save_project_snapshot。
Note: Use get_user_context for full user-level context; use save_project_snapshot to write a project snapshot.
Args:
project_folder: 项目文件夹路径。 / Project folder path.
| Name | Required | Description | Default |
|---|---|---|---|
| project_folder | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It clearly states the tool is read-only ('读取', 'Read'), and specifies the scope ('只含该项目的历史'), implying no side effects. Missing details like authentication or rate limits, but these are minor for a read operation. The description is transparent enough for safe selection.
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 well-structured with bilingual sections and clear headings (用途/目的, 注意/Note). It is concise (~100 words) and front-loads the purpose. A small improvement could be removing redundant phrasing, but overall it is efficient and easy to scan.
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 tool has only one parameter, no annotations, but an output schema exists, the description adequately covers purpose, usage guidelines, parameter semantics (minimally), and behavioral traits. It mentions what the tool contains (history of that project) but does not describe return structure, which output schema likely provides. It is sufficiently complete for agent selection.
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. The description only says '项目文件夹路径。 / Project folder path.' which adds minimal meaning beyond the schema's type string. It does not clarify expected format (absolute/relative), or provide examples. This is insufficient for a parameter-rich tool.
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 explicitly states the tool reads a knowledge snapshot for a specific project and contains only that project's history, using specific verbs and resource. It also distinguishes from siblings like get_user_context and save_project_snapshot, clarifying its scope.
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?
Provides clear when-to-use guidance: '想了解某个项目之前的技术栈、已知问题、协作次数时调用' (Call when you need a project's previous tech stack, known issues, notes, or collaboration history). It also explicitly mentions two alternatives: get_user_context for user-level context and save_project_snapshot for writing, making the usage context unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recallA
获取结构化 Recall Surface v1 载荷。 / Get a structured Recall Surface v1 payload.
用途:在新任务、跨工具接续或需要"一次拿到可执行记忆包"时调用。
返回身份摘要、最近活动、项目/查询相关知识和治理元数据。
Purpose: Call when a new task or cross-tool handoff needs one structured,
actionable memory bundle: identity slice, recent activity, relevant
knowledge, and governance metadata.
注意:该聚合视图可能组合多类知识和最近上下文,因此治理开启时仅 owner
(private-self) 可读;非 owner 会在读取前被拒绝,不触发搜索或遥测写入。
Note: Because this aggregate view can combine multiple knowledge classes and
recent context, it is owner-only when governance is enabled. Non-owners are
refused before any search or telemetry side effect runs.
Args:
project_folder: 项目文件夹路径(可选)。 / Project folder path (optional).
query: 可选搜索焦点。 / Optional search focus.
limit: 最多返回多少条知识(默认 8,上限 20)。 / Max knowledge items (default 8, max 20).
token_budget: 知识片段的粗略 token 预算(默认 2000)。 / Rough token budget for knowledge items.
include_freshness: 是否附加 freshness 提示。 / Attach freshness hints.
collapse_versions: 是否折叠版本链到当前 HEAD。 / Collapse version chains to current heads.
include_playbooks: 是否附带 playbook 指针桶(v4.20,默认 False;元数据+240 字描述预览,完整步骤永不入召回,最多 2 条且 ≤25% 知识预算)。 / Attach the playbook pointer bucket (v4.20, default False; metadata + 240-char description preview, full steps never enter recall, max 2 items and <=25% of the knowledge budget).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | ||
| token_budget | No | ||
| project_folder | No | ||
| collapse_versions | No | ||
| include_freshness | No | ||
| include_playbooks | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | 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, and it delivers substantial behavioral detail. It discloses owner-only access when governance is enabled, explains that non-owners are refused before any search or telemetry side effect occurs, and details playbook pointer bucket constraints including max items and budget share.
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 well structured and front-loaded: purpose, usage, behavioral notes, then args. The bilingual duplication makes it longer than strictly necessary, but every substantive point earns its place given the absence of schema descriptions and annotations.
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 description is complete for a 7-parameter tool with no annotations: it covers purpose, invocation context, access control, side-effect behavior, and each parameter. Since an output schema exists, the return value does not need explanation, and nothing critical appears missing for correct 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?
The input schema has zero description coverage for all seven parameters, and the description fully compensates by documenting each argument with defaults, types, constraints, and behavior. It even adds important detail such as limit max 20, token_budget default 2000, and the precise playbook inclusion rules for include_playbooks.
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 tool as returning a structured Recall Surface v1 payload: a memory bundle containing identity, recent activity, relevant knowledge, and governance metadata. It positions the tool as an aggregate view, which distinguishes it from narrower siblings like get_identity_card, get_relevant_knowledge, and get_recent_context.
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 explicitly states when to call it: on new tasks, cross-tool handoffs, or when a single executable memory bundle is needed. It gives clear context but does not explicitly name alternatives or state when not to use it, so it misses the full when-not/alternative guidance required for a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recent_contextA
找回最近的 AI 对话上下文。 / Retrieve the most recent AI conversation context.
用途:上下文丢失时(工具重启、会话断开)调用,找回之前的工作状态。
Purpose: Call after context loss (tool restart, session disconnect) to recover previous work state.
不会自动加载到新会话 — 只在你需要时才读取。
Does NOT auto-load into new sessions — only reads when you ask.
Args:
tool: 工具名(可选)。留空则搜索所有工具的上下文。 / Tool name (optional). Empty searches all tools.
limit: 最多返回几个会话(默认 1 = 最近一次)。 / Max sessions to return (default 1 = most recent).
| Name | Required | Description | Default |
|---|---|---|---|
| tool | No | ||
| limit | No | ||
| project_folder | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It discloses that the tool only reads data and does not auto-load into new sessions, which is key behavioral information. It does not mention side effects, but as a read operation, that is sufficient.
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 structured with purpose and usage sections and is reasonably concise. The bilingual text adds length but each sentence provides value. It could be slightly more compact by dropping repetition.
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 an output schema, the description does not explain the return format. It misses documenting the 'project_folder' parameter. For a tool that recovers context, the description covers the main use case but lacks completeness on parameters and return.
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 description adds meaning for the 'tool' and 'limit' parameters (with defaults and purpose), but the 'project_folder' parameter in the input schema is completely undocumented. Given 0% schema description coverage, the description partially compensates but misses one 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 states the verb 'retrieve' and resource 'most recent conversation context', and specifies the scenario of context loss after tool restart or session disconnect. It distinguishes purpose from sibling tools like get_recall or get_user_context by focusing on recent context recovery.
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 explicitly tells when to use the tool (after context loss) and clarifies it does not auto-load. However, it does not mention when not to use it or reference specific sibling alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_relevant_knowledgeA
按项目路径自动推荐最相关的经验教训(无需搜索词)。 / Automatically recommend the most relevant lessons for a project path, without search keywords.
**Lifecycle: retrieval** — 在对话中需要项目相关的历史知识时调用。
Lifecycle: retrieval — call mid-conversation when project-relevant past knowledge is needed.
用途:你知道当前项目路径但不知道该搜什么词时调用,Engram 根据项目技术栈自动筛选。
Purpose: Call when you know the current project path but not the right search terms; Engram filters by project tech stack.
注意:如果用户给了明确搜索词,用 search_knowledge 更直接。
Note: If the user provides explicit search keywords, search_knowledge is more direct.
Args:
project_folder: 当前项目文件夹路径。 / Current project folder path.
limit: 最多返回多少条(默认 8)。 / Maximum number of items to return (default 8).
include_freshness: 为每条结果附加 freshness/新鲜度提示(默认 False,保持旧输出不变)。 / Attach a per-item freshness hint (default False; output is unchanged when omitted).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| project_folder | Yes | ||
| include_freshness | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 that the tool follows lifecycle 'retrieval', filters by tech stack, and includes a parameter include_freshness that attaches a freshness hint. It does not mention side effects, but as a retrieval tool this is acceptable. The response format is covered by the output 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 clear and well-structured, using bilingual text and bullet points for parameters. While it could be slightly more concise by removing redundant phrasing, it remains efficient and front-loads key information.
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 tool has 3 parameters, an output schema, and no nested objects, the description provides sufficient context: purpose, usage, lifecycle, and parameter details. It could mention handling of invalid project paths, but that is not critical for selection and 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 0%, so the description must compensate. It explains all three parameters: project_folder (current project path), limit (max items, default 8), and include_freshness (attach freshness hint, default false). This adds meaning beyond the schema's type and default values.
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's purpose: automatically recommend relevant lessons for a project path without search keywords. It provides both Chinese and English explanations and distinguishes from the sibling tool search_knowledge by noting it's for when the project path is known but search terms are not.
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 explicitly provides usage guidelines: call when you know the project path but not search terms, and if the user provides explicit keywords, use search_knowledge instead. This helps the agent decide when to invoke this tool vs alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_resume_briefA
跨会话/跨工具接续简报(v3.30 新增)。 / Cross-session, cross-tool resume brief.
**用途:v3.30 行业首家"一次调用拿到完整接续简报"的高层 API。**
用户切换工具(Claude Code → Codex/Cursor)或开新对话时,AI 调用本工具
一次即可拿到:用户身份 + 当前项目状态 + 今日日志 + 最近会话上下文 +
最近经验/决策 + 建议阅读的项目文档清单。结果用
``<engram-resume priority="high">`` XML 标签包裹,提示客户端 AI 优先遵守。
Purpose (v3.30): the "what does the next AI need to know in 30 seconds"
high-level endpoint. When users switch tools or open a new chat,
calling this once returns identity + project state + today's daily log
+ recent context + top lessons/decisions + suggested project docs to
read. Result is wrapped in ``<engram-resume priority="high">`` so client
AIs (Claude Code additionalContext, Codex system prompt, etc.) treat
it as high-priority reference context.
Lifecycle: **session start** — call before the first user message in a
new session when continuing prior work, or whenever the user says
things like "接着上次", "继续之前", "what were we doing".
Args:
project_folder: 项目文件夹路径(可选)。留空只返回身份卡。 /
Project folder (optional). Empty returns identity-only.
token_budget: 输出 token 软上限(默认 2000,约 8000 字符)。 /
Soft cap for output tokens (default 2000 ≈ 8000 chars).
include_resume_pack: Include structured ``project_resume_pack.v1`` in
the JSON response. Defaults to false to preserve existing output.
include_agent_context_pack: Include structured
``agent_context_pack.v1`` for delegated sub-agent briefing.
Defaults to false to preserve existing output.
agent_role: Role used to shape the optional agent context pack.
task_summary: Current delegated task summary for agent-pack selection.
| Name | Required | Description | Default |
|---|---|---|---|
| agent_role | No | orchestrator | |
| task_summary | No | ||
| token_budget | No | ||
| project_folder | No | ||
| include_resume_pack | No | ||
| include_agent_context_pack | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | 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. It discloses the output format (wrapped in <engram-resume priority='high'>), lifecycle (session start), and optional structured packs. It could be more explicit about read-only nature and potential side effects, but overall provides good behavioral context.
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 well-structured with sections for purpose, lifecycle, and arguments. Key information is front-loaded. It is slightly long but each section serves a purpose. Minor redundancies in bilingual text could be trimmed.
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 tool's complexity (6 params, output schema exists), the description covers the main use cases, parameter details, lifecycle, and output format. It lacks mention of error handling or behavior for invalid project_folder, but overall provides sufficient context for correct 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 coverage is 0% with no descriptions in the schema. The description fully explains each of the 6 parameters, including defaults, behavior (e.g., token_budget as soft cap), and the effect of include_resume_pack and include_agent_context_pack. This fully compensates for the schema's lack of 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 clearly states it returns a cross-session, cross-tool resume brief including identity, project state, daily log, recent context, lessons/decisions, and suggested docs. This specific verb-resource combination distinguishes it from sibling tools like get_recent_context or get_daily_log.
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 explicit usage context: call at session start, before first user message, or when user indicates continuing prior work. It gives example user phrases. However, it lacks explicit when-not-to-use or alternatives for different scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_contextA
获取用户的个性化上下文(冷启动,分层延迟可控)。 / Get tiered cold-start user context with latency control.
**Lifecycle: startup** — 对话开始时调用,为 AI 注入用户身份和上下文。
Lifecycle: startup — call at conversation start to inject user identity and context.
用途:在每次新对话开始时调用,了解用户是谁、如何工作、学到了什么、质量标准是什么。
Purpose: Call at the start of each new conversation to understand who the user is, how they work, what they have learned, and their quality bar.
分层说明 / Tiered behaviour:
- "quick": 仅身份画像 + 工作偏好(纯 JSON 读取,无文件扫描,最低延迟)。
Profile + preferences only — pure JSON reads, no filesystem scans. Lowest latency.
- "standard"(默认): 加上质量标准、经验领域、相关教训/决策、项目快照。跳过昂贵的 reconcile。
Default. Adds quality, domains, top lessons/decisions, project snapshot. Skips expensive reconciliation.
- "full": 完整上下文,含冲突检测、过期/暂存提醒、自动同步副作用。仅在用户明确要求"全量回顾"时使用。
Full context including conflict detection, stale/staging warnings, auto-sync side effects. Use only when the user explicitly asks for a comprehensive memory review.
注意:默认 "standard" 已覆盖绝大多数冷启动需求;只有用户问"我们之前所有决定/经验"或要做记忆健康检查时才用 "full"。
Note: "standard" covers most cold-start needs. Use "full" only when the user asks for a comprehensive memory review.
Args:
project_folder: 当前项目文件夹路径(可选)。 / Current project folder path (optional).
level: "quick" | "standard" | "full",默认 "standard"。 / Tier — defaults to "standard".
token_budget: 上下文 token 预算(可选)。设定后按优先级裁剪 section,低优先级 section 先丢弃。不设则返回全量。
Optional token budget. When set, sections are included by priority until budget is exhausted.
user_prompt: 用户当前提问(可选)。传入后会追加到上下文末尾,并与已存 Playbook 的
triggers 关键词匹配,命中时浮现「相关 Playbook」小节(标题 + ID;用 get_playbooks(mode="get") 查看完整步骤)。
Optional current user prompt. Appended to the context and matched against stored
playbook trigger keywords; hits surface a "Matched Playbooks" section (title + id;
call get_playbooks(mode="get") for the full steps).
| Name | Required | Description | Default |
|---|---|---|---|
| level | No | standard | |
| user_prompt | No | ||
| token_budget | No | ||
| project_folder | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: quick tier is pure JSON reads (low latency), standard adds quality/domains/lessons, full includes conflict detection and auto-sync side effects. It also notes that standard skips expensive reconciliation.
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 well-structured with bilingual text, bullet points, and clear sections. It is slightly lengthy but every sentence adds value; could trim some repetition but overall effective.
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 four parameters, no annotations, and the presence of an output schema, the description covers all necessary aspects: purpose, usage context, parameter details, tier behavior, and side effects. It is complete for an AI agent to correctly select and invoke the tool.
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 0%, but the description explains all four parameters in detail: project_folder (optional), level (tiers and defaults), token_budget (priority-based clipping), and user_prompt (playbook matching). This adds significant meaning 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 clearly states the tool retrieves user context at conversation start, with three tiers (quick/standard/full) each detailed. It distinguishes from sibling tools like get_identity_card or get_project_context by specifying it provides comprehensive context including preferences, quality, lessons, etc.
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 explicitly says to call at the start of each conversation and notes the standard tier suffices for most cases, with full tier reserved for explicit user requests. However, it does not directly compare with sibling tools or state when to use them instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_wrap_up_session_statusA
读取 wrap_up_session 的阶段状态。 / Read metadata-only stage status for a wrap_up_session operation.
用途:当 MCP 客户端在会话收尾时遇到 transport timeout,可用调用前已知的
idempotency_key,或成功返回过的 operation_id,查询最后阶段和终态。长期未更新的
running 会只读标记为 stale_running。该工具不返回会话摘要正文或项目本地路径。
Purpose: after a session-closeout transport timeout, query metadata-only
state by the caller-known idempotency_key or a returned operation_id.
Long-unupdated running records are projected as stale_running without
mutating the record. No summary text or local project path is returned.
| Name | Required | Description | Default |
|---|---|---|---|
| operation_id | No | ||
| idempotency_key | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 and meets it well. It discloses that the operation is metadata-only, read-only, that long-unupdated running records are projected as stale_running without mutating the record, and that no summary text or local path is returned. These are meaningful side-effect guarantees beyond a generic 'get'.
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 bilingual format doubles the length, but each language block is compact and purposeful, with key facts front-loaded: metadata-only, read-only, stale_running, and non-return of summary/path. There is no filler; the repetition is acceptable for multilingual tooling.
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 annotations and a bare schema, the description delivers a complete operational picture: when to use it, which inputs are valid, what behavior to expect around stale states, and what is deliberately excluded. An output schema exists to define return fields, so nothing essential is missing for an agent to select and invoke this tool.
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. It explains both parameters' roles: idempotency_key is caller-known and operation_id was returned by a prior call, and either can be used to query. It does not specify precedence or validation when both are supplied, but it provides enough context for correct invocation.
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?
Description uses a specific verb ('读取/read metadata-only stage status') tied to a concrete resource (wrap_up_session), and clearly distinguishes itself from the mutation-oriented sibling wrap_up_session by stating it is read-only and metadata-only. It also states what it does not return (summary text or local project path), which further disambiguates it from retrieval tools like get_resume_brief.
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 explicitly names the triggering scenario: after a session-closeout transport timeout, using a caller-known idempotency_key or a returned operation_id. It also includes a clear when-not by excluding summary text and local path retrieval, so an agent knows this tool is for status checking, not content retrieval.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_storeA
统一知识写入入口 — 根据 kind 自动路由到 add_lesson / add_decision / add_playbook。 Unified knowledge write endpoint — routes to add_lesson / add_decision / add_playbook based on kind.
**Lifecycle: writeback** — 对话中产生值得长期保留的知识时调用。
Lifecycle: writeback — call when the conversation produces knowledge worth persisting.
这是 Provider 兼容的统一写入接口。如果你已经明确知道要写 lesson/decision/playbook,
也可以直接调用对应的专用工具。本工具的优势在于:调用方不需要知道 Engram 内部的分类体系。
This is a provider-compatible unified write interface. You may also call the specialized
tools directly. The advantage here: callers don't need to know Engram's internal taxonomy.
Args:
kind: 知识类型 — 'lesson' | 'decision' | 'playbook'。批量模式下作为各条目的类型(playbook 不支持批量)。 / Knowledge type; in batch mode, the item type for every item (playbook not supported in batch).
content_json: 知识内容 JSON 字符串(单条模式必填)。格式因 kind 而异:
- lesson: {"summary": "...", "detail": "...", "domain": "..."}
- decision: {"question": "...", "choice": "...", "reasoning": "..."}
- playbook: {"title": "...", "triggers": "...", "steps_json": "[...]"}
Content JSON string (required in single mode). Schema varies by kind (see above).
source_tool: 调用来源工具(可选),如 'claude_code', 'cursor'。 / Source tool (optional).
items_json: 条目 JSON 数组;给了就走批量写入(一次导入多条 lesson/decision)。 / JSON array of items; when provided, batch-writes multiple lessons/decisions in one call.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | ||
| items_json | No | ||
| source_tool | No | ||
| content_json | No | ||
| project_folder | No | ||
| user_confirmed | No | ||
| allow_similar_new | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does dislose routing behavior, batch semantics ('playbook not supported in batch'), per-kind content formats, and the writeback lifecycle. However, it says nothing about the likely write-gating behaviors implied by the undocumented booleans — user_confirmed (confirmation?) and allow_similar_new (duplicate similarity check?) — nor what happens to existing knowledge on overwrite. For a write tool, these are material behavioral facts.
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 bilingual text doubles length, but each block earns its place: purpose line, lifecycle line, routing guidance, then a well-structured Args section with high-value per-kind format examples. The only real inefficiency is the intentional bilingual duplication; otherwise 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?
Complexity is high — 7 params, single/batch dual modes, and 3 kinds with different content shapes — and the description handles routing, mode selection, and formats well, while the presence of an output schema relieves it of return-value duty. The three unaddressed params and the absence of explicit guidance on when to choose batch vs single mode (only the trigger 'items_json provided' is stated) leave real gaps for correct 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 0%, so the description must compensate — and it does richly for 4 of 7 params: kind's allowed values, content_json's per-kind JSON schemas (lesson / decision / playbook examples), items_json's batch trigger and playbook restriction, and source_tool examples. But project_folder, user_confirmed, and allow_similar_new appear in neither the schema nor the description, leaving critical control knobs completely unexplained.
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?
States a specific verb and resource with precision: 'Unified knowledge write endpoint — routes to add_lesson / add_decision / add_playbook based on kind.' The routing behavior differentiates it from the specialized add_* siblings and scopes the tool's exact job in the first line.
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?
Explicitly ties invocation to lifecycle: 'writeback — call when the conversation produces knowledge worth persisting.' It also names the alternates and the selection condition: call add_lesson / add_decision / add_playbook directly when the kind is already known, and use this unified entry when the caller wants to avoid Engram's internal taxonomy.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_project_snapshotA
写入或更新项目的知识快照(写操作,不是读取)。 / Write or update a project's knowledge snapshot; this is a write operation, not a read.
用途:保存或更新当前项目的技术栈、已知问题、注释等信息。
Purpose: Call to save or update a project's tech stack, known issues, notes, and related metadata.
注意:读取项目快照用 get_project_context,不是本工具。
Note: Use get_project_context to read a project snapshot; this tool writes one.
Args:
project_folder: 项目文件夹路径。 / Project folder path.
data_json: JSON 字符串,支持字段 title、tech_stack、known_issues、notes。 / JSON string supporting fields: title, tech_stack, known_issues, and notes.
| Name | Required | Description | Default |
|---|---|---|---|
| data_json | Yes | ||
| project_folder | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes as a write operation but lacks details on side effects, permissions, or update vs. overwrite behavior. With no annotations, more transparency would be beneficial.
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?
Bilingual but each sentence adds value; no fluff, but slightly redundant in both languages. Efficient overall.
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?
Covers purpose, usage, and parameters. With output schema present, return value not needed. Lacks potential error handling or prerequisites, but adequate for a simple write tool.
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 has 0% description coverage, but description adds meaning for both parameters: project_folder path and data_json fields (title, tech_stack, known_issues, notes).
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?
Clearly states it writes or updates a project snapshot, distinguishes from read operation get_project_context.
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?
Explicitly says when to use (save/update) and when not (use get_project_context for reading), providing clear direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_knowledgeA
搜索知识库(lessons/decisions/playbooks)。 / Search lessons, decisions, and playbooks by keyword.
**Lifecycle: retrieval** — 在对话中需要检索历史知识时调用。
Lifecycle: retrieval — call during conversation when past knowledge is needed.
Call when the user asks to find knowledge about a specific topic,
or recalls a procedure ('X how to' / 'X steps').
If you only have a project path and no query, use get_relevant_knowledge;
if you have an existing knowledge ID, use explore_knowledge(mode="similar").
Args:
query: Search query keywords.
scope: Search scope: 'all', 'lessons', 'decisions', or 'playbooks'.
limit: Maximum number of items to return (default 10).
filters_json: Optional JSON string with filter criteria. Supported keys:
- "domain": str — only items whose domain contains this value
- "tier": str — only items matching this tier ('staging' or 'verified')
- "date_after": str — ISO date string, only items created after this date
Example: '{"tier": "verified", "domain": "python"}'
include_freshness: Attach a per-item freshness hint (fresh/aging/stale)
to each returned item. Default False keeps the response unchanged.
max_field_chars: Per-field size cap. Every string field in each returned
item (detail/reasoning/description/steps/...) longer than this is
clipped with a "[+N chars truncated]" marker so a few large bodies
cannot blow up the client. Item shape, ids, and headlines are kept.
Set 0 for full untruncated bodies (default 400).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| scope | No | all | |
| filters_json | No | ||
| project_folder | No | ||
| max_field_chars | No | ||
| include_freshness | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility. It discloses the lifecycle as retrieval (read-only), explains parameter effects (e.g., truncation with max_field_chars, freshness hints), and implies non-destructive behavior. It does not explicitly state auth or rate limits, but for a search tool the transparency is good.
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 a summary and lifecycle, then usage guidance, then parameter details. It is well-structured but somewhat verbose due to bilingual text. Every sentence is useful, but conciseness could be slightly improved.
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 tool's complexity (7 parameters, no annotations, output schema exists), the description covers key behaviors: parameter explanations, truncation, freshness hints. It lacks error handling details but is sufficient for an AI agent to use 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 0%, so the description must explain parameters. It does so for most (query, scope, limit, filters_json with example, include_freshness, max_field_chars) but omits project_folder, leaving a gap. The explanations add value beyond the schema (e.g., filters_json keys).
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 searches a knowledge base of lessons, decisions, and playbooks by keyword. It distinguishes from siblings like get_relevant_knowledge (for project path without query) and explore_knowledge (for existing ID), making the 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?
The description explicitly says when to call this tool (when user asks to find knowledge or recalls a procedure) and when not to, providing alternative tools (get_relevant_knowledge, explore_knowledge). This gives clear usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_identityA
更新一个身份字段。 / Update one identity field.
用途:需要修改 profile、preferences、trust_boundaries、work_style 或 quality_standards 时调用。
Purpose: Call when changing profile, preferences, trust_boundaries, work_style, or quality_standards.
注意:updates_json 必须只包含该字段允许的键;敏感字段边界应通过 trust_boundaries 管理。
Note: updates_json should contain only keys valid for that field; manage sensitive-field boundaries through trust_boundaries.
Args:
field: 字段名:profile、preferences、trust_boundaries、work_style 或 quality_standards。 / Field name: profile, preferences, trust_boundaries, work_style, or quality_standards.
updates_json: 包含要更新字段的 JSON 字符串。 / JSON string containing the fields to update.
source_tool: 调用来源工具(如 'claude_code', 'codex', 'cursor'),用于字段级溯源。 / Source tool for field-level provenance tracking.
Field-specific keys / 字段专用键:
profile: role, language, technical_level, description / role、language、technical_level、description。
preferences: work_patterns (dict), communication (str), tool_preferences (dict), playbook_auto_extract (bool, default true) / work_patterns(字典)、communication(字符串)、tool_preferences(字典)、playbook_auto_extract(布尔,默认 true)。
trust_boundaries: default_sharing, tool_access, private_fields, restricted_fields / default_sharing、tool_access、private_fields、restricted_fields。
work_style: preferences (dict), communication (str) / preferences(字典)、communication(字符串)。
quality_standards: acceptance_threshold (1-5), rules (list) / acceptance_threshold(1-5)、rules(列表)。
| Name | Required | Description | Default |
|---|---|---|---|
| field | Yes | ||
| source_tool | No | ||
| updates_json | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses that the tool updates identity fields, details field-specific keys, and mentions source_tool for provenance. It does not discuss idempotency, auth, or side effects, but the mutation behavior is evident. The level of detail compensates for the lack of annotations.
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 purpose and structured into clear sections. However, bilingual text (Chinese and English) doubles the length. Every sentence adds value, but it could be more concise if it used only one language.
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 three parameters and no annotations, the description covers the input thoroughly. An output schema exists (according to context signals), so the description need not explain return values. It adequately addresses the complexities of field management.
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%, but the description thoroughly explains each parameter: field lists valid values, updates_json is described as a JSON string, and source_tool is for provenance. Additionally, it provides exhaustive field-specific keys for each valid field value, which adds immense meaning beyond the 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 clearly states that the tool updates one identity field, listing the specific fields (profile, preferences, trust_boundaries, work_style, quality_standards) and their sub-keys. It distinguishes the tool from siblings like add_decision, add_lesson, etc., which have different purposes.
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 explicitly states when to call: 'Call when changing profile, preferences, trust_boundaries, work_style, or quality_standards.' It also provides a note about valid keys and managing sensitive-field boundaries. Missing explicit when-not-to-use or alternatives, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wrap_up_sessionA
会话结束一键收尾:自动提取知识、操作流程并保存项目快照。 / Wrap up a session in one step: extract knowledge, detect playbooks, and save a project snapshot.
**Lifecycle: session-end** — 对话结束时调用,完成知识提取和上下文保存。
Lifecycle: session-end — call at conversation end to extract knowledge and persist session context.
用途:一次对话结束时调用,把会话摘要交给 Engram 自动提取 lessons、decisions 和 Playbook 草稿,并可选更新项目快照。
Purpose: Call at the end of a conversation to let Engram extract lessons, decisions, and playbook drafts from the summary and optionally update the project snapshot.
Playbook 自动提取:如果摘要描述了一个多步骤操作流程(3+ 步骤,含顺序标记和操作动词),会自动生成 Playbook 草稿存入 staging。返回值中会包含 playbook_draft 字段(含 confidence: high/medium),AI 工具应根据 confidence 决定是否提示用户。可通过 update_preferences(playbook_auto_extract=false) 关闭此功能。
Playbook auto-extraction: If the summary describes a multi-step operational workflow (3+ steps with sequential markers and action verbs), a Playbook draft is auto-generated into staging. The return value includes a playbook_draft field (with confidence: high/medium); AI tools should decide whether to notify the user based on confidence. Disable via update_preferences(playbook_auto_extract=false).
注意:如果只想提取知识不用保存项目,用 extract_session_insights;如果只想保存项目快照,用 save_project_snapshot。
Note: Use extract_session_insights when you only want extraction, and save_project_snapshot when you only want to save a project snapshot.
Args:
summary: 会话摘要(自由文本,段落或要点列表均可)。 / Session summary in free text; paragraphs or bullet lists both work.
project_folder: 项目文件夹路径(可选,不填则只提取知识不保存快照)。 / Project folder path (optional; omit it to extract knowledge without saving a snapshot).
source_tool: 调用来源工具,如 'claude_code', 'codex'。 / Calling source tool, such as 'claude_code' or 'codex'.
project_title: 项目名称(可选,仅在首次保存快照时需要)。 / Project title (optional; mainly needed when first saving a snapshot).
tech_stack: 技术栈(可选,逗号分隔)。 / Tech stack (optional, comma-separated).
known_issues: 已知问题(可选,逗号分隔)。 / Known issues (optional, comma-separated).
idempotency_key: 可选幂等键;重试同一键只返回既有 operation 状态,不重复写入。 / Optional idempotency key; retrying the same key returns the existing operation status without duplicate writes.
reconcile_scope: "project"(有项目路径时默认精确项目隔离)或显式 "global"。 / "project" for exact project isolation when a project path is present, or explicit "global".
| Name | Required | Description | Default |
|---|---|---|---|
| summary | Yes | ||
| tech_stack | No | ||
| source_tool | No | ||
| known_issues | No | ||
| project_title | No | ||
| run_reconcile | No | ||
| project_folder | No | ||
| user_confirmed | No | ||
| idempotency_key | No | ||
| reconcile_scope | No | project |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It discloses the automatic Playbook side effect, writes to staging, the configuration toggle via `update_preferences`, idempotency/retry behavior, and reconcile scoping. It even instructs AI tools on how to handle the returned `confidence` field. This is thorough behavioral disclosure.
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 bilingual description is long but front-loaded with a clear purpose and sibling differentiation, then organized into behavior and Args sections. The Lifecycle sentence partly repeats the Purpose sentence, and dual-language blocks double length, but every paragraph still contributes useful content and the structure is easy to scan.
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?
It covers lifecycle, sibling differentiation, auto-extraction side effects, optional snapshot behavior, config toggle, and idempotency. An output schema exists, so not detailing return values is fine. The main omission is the undocumented `run_reconcile` and `user_confirmed` parameters, which prevents the description from being fully complete for a complex write operation.
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. It gives rich semantics for 8 of 10 parameters, including idempotency retry behavior and `reconcile_scope` values. However, `run_reconcile` and `user_confirmed` are never mentioned, leaving ambiguity about their purpose and effect, which is a significant gap for a 10-parameter tool.
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 clear verb-resource-scope sentence: 'Wrap up a session in one step: extract knowledge, detect playbooks, and save a project snapshot.' It also distinguishes itself from siblings by separately naming `extract_session_insights` and `save_project_snapshot`, making the combined nature of this tool obvious.
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 the lifecycle ('call at conversation end') and provides direct when/when-not guidance: use `extract_session_insights` when you only want extraction, and `save_project_snapshot` when you only want a snapshot. This is explicit sibling routing with no inference required.
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. Dates show when Glama detected each change.
1 tool update
v4.20.0- Changed
get_recall1 field changed- added
Input schema / properties / include_playbooksAdded value: +{ + "default": false, + "title": "Include Playbooks", + "type": "boolean" +}
6 tool updates
v4.19.1- Changed
add_lesson1 field changed- added
Input schema / properties / allow_similar_newAdded value: +{ + "default": false, + "title": "Allow Similar New", + "type": "boolean" +}
- Changed
add_playbook1 field changed- added
Input schema / properties / allow_similar_newAdded value: +{ + "default": false, + "title": "Allow Similar New", + "type": "boolean" +}
- Added
get_knowledge_history - Added
get_wrap_up_session_status - Changed
memory_store1 field changed- added
Input schema / properties / allow_similar_newAdded value: +{ + "default": false, + "title": "Allow Similar New", + "type": "boolean" +}
- Changed
wrap_up_session2 fields changed- added
Input schema / properties / idempotency_keyAdded value: +{ + "default": "", + "title": "Idempotency Key", + "type": "string" +} - added
Input schema / properties / reconcile_scopeAdded value: +{ + "default": "project", + "title": "Reconcile Scope", + "type": "string" +}
7 tool updates
v4.13.0- Changed
add_decision2 fields changed- added
Input schema / properties / project_folderAdded value: +{ + "default": "", + "title": "Project Folder", + "type": "string" +} - added
Input schema / properties / user_confirmedAdded value: +{ + "default": false, + "title": "User Confirmed", + "type": "boolean" +}
- Changed
add_lesson2 fields changed- added
Input schema / properties / project_folderAdded value: +{ + "default": "", + "title": "Project Folder", + "type": "string" +} - added
Input schema / properties / user_confirmedAdded value: +{ + "default": false, + "title": "User Confirmed", + "type": "boolean" +}
- Changed
add_playbook1 field changed- added
Input schema / properties / user_confirmedAdded value: +{ + "default": false, + "title": "User Confirmed", + "type": "boolean" +}
- Changed
get_recent_context1 field changed- added
Input schema / properties / project_folderAdded value: +{ + "default": "", + "title": "Project Folder", + "type": "string" +}
- Changed
get_resume_brief4 fields changed- added
Input schema / properties / agent_roleAdded value: +{ + "default": "orchestrator", + "title": "Agent Role", + "type": "string" +} - added
Input schema / properties / include_agent_context_packAdded value: +{ + "default": false, + "title": "Include Agent Context Pack", + "type": "boolean" +} - added
Input schema / properties / include_resume_packAdded value: +{ + "default": false, + "title": "Include Resume Pack", + "type": "boolean" +} - added
Input schema / properties / task_summaryAdded value: +{ + "default": "", + "title": "Task Summary", + "type": "string" +}
- Changed
memory_store2 fields changed- added
Input schema / properties / project_folderAdded value: +{ + "default": "", + "title": "Project Folder", + "type": "string" +} - added
Input schema / properties / user_confirmedAdded value: +{ + "default": false, + "title": "User Confirmed", + "type": "boolean" +}
- Changed
wrap_up_session2 fields changed- added
Input schema / properties / run_reconcileAdded value: +{ + "default": false, + "title": "Run Reconcile", + "type": "boolean" +} - added
Input schema / properties / user_confirmedAdded value: +{ + "default": false, + "title": "User Confirmed", + "type": "boolean" +}
1 tool update
v4.11.0- Changed
search_knowledge1 field changed- added
Input schema / properties / max_field_charsAdded value: +{ + "default": 400, + "title": "Max Field Chars", + "type": "integer" +}
5 tool updates
v4.6.2- Added
get_identity_card - Added
get_project_context - Added
get_relevant_knowledge - Added
get_user_context - Added
search_knowledge
5 tool updates
v4.6.1- Removed
get_identity_card - Removed
get_project_context - Removed
get_relevant_knowledge - Removed
get_user_context - Removed
search_knowledge
1 tool update
v4.1.0- Changed
memory_store3 fields changed- added
Input schema / properties / content_json / defaultAdded value: +"" - added
Input schema / properties / items_jsonAdded value: +{ + "default": "", + "title": "Items Json", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "kind", - "content_json" -]New value: +[ + "kind" +]
2 tool updates
v3.55.0- Changed
add_playbook2 fields changed- added
Input schema / properties / required_tools_jsonAdded value: +{ + "default": "[]", + "title": "Required Tools Json", + "type": "string" +} - added
Input schema / properties / tool_refsAdded value: +{ + "default": "", + "title": "Tool Refs", + "type": "string" +}
- Added
get_recall
TDQS
The retrieval surface is heavily overloaded: get_user_context, get_recall, get_resume_brief, get_recent_context, get_project_context, get_daily_log, and get_relevant_knowledge all return overlapping context/knowledge slices with only subtle lifecycle distinctions. Additionally, memory_store duplicates the specialized add_lesson/add_decision/add_playbook tools, creating two parallel write paths that an agent must choose between.
Most tools follow a clear snake_case verb_noun pattern (get_*, add_*, save_*, update_*), and the get_-prefix for retrieval and add_-prefix for knowledge writes is consistent. Minor outliers like memory_store and doctor break the pattern but are still readable and predictable.
19 tools is on the heavy side for an MCP server, and several retrieval tools could plausibly be consolidated into fewer endpoints. However, the broad scope (identity, lessons, decisions, playbooks, projects, sessions, diagnostics) mostly justifies the count; it is not extreme.
Core workflows are covered: write knowledge (add_*/memory_store), retrieve knowledge (search/relevant/history), manage identity, project snapshots, and session wrap-up with status polling. Notable gaps include no explicit update or delete tool for individual knowledge items, and no list-all or project enumeration capability, limiting corrective and administrative operations.
Maintenance
Related MCP Connectors
Persistent memory and cross-session learning for AI coding assistants (hosted remote MCP).
Person-owned AI memory that learns, not just stores — portable context for any MCP client.
Your versioned memory across every AI tool — context maps, personal memory, and tasks over MCP.
Persistent AI memory shared across Claude, ChatGPT, coding agents, and compatible MCP clients.
Related MCP Servers
- AlicenseAqualityDmaintenanceThis MCP server provides persistent memory integration for chat applications by utilizing a local knowledge graph to remember user information across interactions.9152,0876-

Mem0 MCP Serverofficial
AlicenseAqualityFmaintenanceAn MCP server that integrates with mem0.ai to help users store, retrieve, and search coding preferences for more consistent programming practices.29659Apache 2.0- AlicenseNot gradedqualityBmaintenanceLocal persistent memory for AI coding tools. Stores project context and conversation recall locally via MCP.1114MIT
- AlicenseBqualityAmaintenancePersistent, local memory for AI coding agents that learns how you work, not just what you said. Supports Claude Code, Codex CLI, Cursor, and any MCP client.7467MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Patdolitse/piia-engram'
If you have feedback or need assistance with the MCP directory API, please join our Discord server