memento-mcp
Enables team-scoped memory synchronization through a git repository, allowing memories to be committed, pushed, and pulled.
Allows importing curated Markdown knowledge from an Obsidian vault as persistent memories.
Provides optional embeddings for semantic search and LLM-assisted session summaries using OpenAI's API.
memento-mcp
Persistent memory for AI coding agents.
A local-first MCP server that gives Claude Code, Codex, Cursor, and any stdio-MCP client durable project memory: facts, decisions, patterns, architecture notes, pitfalls, session summaries, and team-shared knowledge — while cutting thousands of tokens of repeated context out of every single session.
AI coding agents are powerful, but they forget. They forget why a decision was made, which migration broke production, which convention your project follows, and which workaround saved you three hours last week.
memento-mcp fixes that — and stops your agent burning thousands of tokens re-reading the same context every session.
It stores structured memories locally in SQLite, retrieves the right context when your agent needs it, and can sync selected team memories through git. No hosted vector database. No mandatory cloud account. No mystery SaaS quietly eating your project history.
Quick start
npm install -g @luispmonteiro/memento-memory-mcp
memento-mcp install
memento-mcp import auto # detects CLAUDE.md, AGENTS.md, .cursor/rules, .github/copilot-instructions, …
memento-mcp uiRelated MCP server: Mono Memory MCP
Table of contents
Documentation
Getting started
Importing existing project memory — CLAUDE.md, AGENTS.md, Cursor, Copilot, Gemini, Windsurf, Cline, Roo
Features
Reference
Requirements
Node.js 20 or newer (20.x, 22.x, 24.x — Node 18 is EOL and no longer supported)
npm
An MCP-compatible client, such as Claude Code, Codex, Cursor, or another stdio-MCP client
Obsidian vault for curated Markdown knowledge
OpenAI key for semantic embeddings
Anthropic or OpenAI key for LLM-assisted session summaries
git repo for team memory sync
Package
Published on npm as:
@luispmonteiro/memento-memory-mcpInstall globally:
npm install -g @luispmonteiro/memento-memory-mcpWhat it does
memento-mcp gives your AI coding tools a memory layer that survives across sessions, machines, and teammates.
It can remember:
Architectural decisions | Project conventions |
Known pitfalls | Implementation patterns |
Debugging notes | User/team preferences |
Session summaries | Reusable context from |
Curated notes from an Obsidian vault |
Then it injects the relevant context back into your agent at the right time, without forcing you to paste the same project explanation into every new chat like a medieval scribe with npm installed.
Why use it
Save tokens. A lot of them.
Without persistent memory, every new session starts blind:
CLAUDE.md/AGENTS.md/.cursor/rules// Copilot instructions get re-pasted or stuffed into the system promptArchitectural decisions are re-explained mid-conversation
Last week's pitfall is re-discovered the hard way
"What were we doing yesterday?" eats hundreds of tokens before any actual work happens
memento-mcp imports that context once — from any of the major LLM instruction files — and serves back only the slice the current prompt needs, using progressive disclosure that prefers cheap index/summary layers over full bodies.
memento-mcp import auto # detects every known LLM memory file in the projectConservative per-session savings
Where the tokens go | Without memento | With memento | Saved |
| ~1,500 t | imported once → 0 t | ~1,500 t |
Architecture re-explained mid-chat | ~500 t | 1 retrieved decision (~80 t) | ~420 t |
Pitfall re-discovered | ~300 t | 1 retrieved pitfall (~80 t) | ~220 t |
"What were we doing?" recap | ~400 t | 1 session summary (~200 t) | ~200 t |
Total prelude per session | ~2,700 t | ~360 t | ~2,340 t |
Numbers are deliberately conservative. Real-worldCLAUDE.md / AGENTS.md / .cursor/rules/ trees routinely reach 3-5k tokens (often more once a team accumulates files across multiple tools), and longer-running projects accumulate dozens of decisions and pitfalls. Savings scale with project age.
Scaled out
Cadence | Sessions / month | Tokens saved (conservative) |
Solo dev, ~4 sessions/day | ~80 | ~190,000 |
5-person team, same cadence | ~400 | ~940,000 |
Three things you get back, for free:
Latency — the agent stops chewing through thousands of prelude tokens before responding.
Context budget — that ~2,300 tokens of saved prelude is ~2,300 tokens you can spend on actual code, longer files, or richer reasoning.
Cost — every saved token is one you don't pay for, on every session, on every machine, on every teammate.
Compounding effect: when embeddings are enabled,write-time dedup keeps the memory store lean, and adaptive ranking surfaces only high-utility memories — so the retrieved tokens are higher-signal too.
Keep decisions close to the code
Log decisions, pitfalls, patterns, and architecture notes as structured memories instead of burying them in old chats, random Markdown files, or the cursed archaeology layer known as “Slack search”.
Share memory with your team
Team-scoped memories are serialized into your repo under:
.memento/memories/Commit them, push them, and teammates can pull the same operational knowledge.
memento-mcp sync init
memento-mcp sync pullStay local by default
The default setup uses:
local SQLite
SQLite FTS5 search
local config
local web inspector
no required cloud account
no hosted database
Optional embeddings are available, but they areopt-in.
Keep private text private
<private>...</private> regions are excluded from search indexes, injection, embeddings, LLM calls, and sync paths. Secret scrubbing is applied at write time for common credentials such as env-var values, JWTs, GitHub tokens, URL credentials, and authorization headers.
See and control what the agent knows
Run the local inspector:
memento-mcp uiBrowse memories, sessions, projects, sync state, analytics, and drift without opening yet another SaaS dashboard pretending to be “simple”.
Installation
1. Install from npm:
npm install -g @luispmonteiro/memento-memory-mcp2. Wire it into your MCP client:
memento-mcp installThis configures supported local clients such as Claude Code, Codex, Cursor, or other stdio-MCP clients.
3. Verify the install:
memento-mcp --help4. Open the local web UI:
memento-mcp ui60-second tour
# 1. Install from npm
npm install -g @luispmonteiro/memento-memory-mcp
# 2. Wire your MCP client
memento-mcp install
# 3. Import existing project memory (CLAUDE.md, AGENTS.md, .cursor/rules, copilot-instructions, …)
memento-mcp import auto --dry-run
memento-mcp import auto --no-confirm
# 4. Open the local inspector
memento-mcp ui
# 5. Share team memory through git
memento-mcp sync init
memento-mcp sync pullCore features
Typed memories
Store different kinds of project knowledge with different ranking weights and retrieval behavior:
fact · decision · preference · pattern · architecture · pitfall
Dedicated tools such as decisions_log and pitfalls_log make high-signal memory capture easier.
Read more: MCP tools reference
Team memory via git
Team-scoped memories are written as JSON files under:
.memento/memories/<id>.jsonThat means your team can review, commit, diff, and sync shared agent memory like normal project files.
Read more: Team-scoped memories with git sync
Per-project policy
Use .memento/policy.toml to control project-specific behavior:
required tags
banned content patterns
retention rules
vault promotion rules
memory constraints
The policy lives in the repo, not hidden somewhere on one developer’s machine, because apparently “works on my machine” needed a memory layer too.
Read more: Per-project policy
Local-first search
By default, memento-mcp uses:
SQLite
FTS5
typed scoring
token-aware result ranking
adaptive utility feedback
No vector database is required.
Read more: Token-aware search
Optional semantic search
If you want semantic retrieval, enable embeddings. FTS5 and vector results are merged through an adaptive ranker.
Embeddings are opt-in and use your own provider key.
Read more: Optional embeddings
Smart write-time deduplication
When embeddings are enabled, near-duplicate memories can be detected at write time, before your memory store becomes a landfill of almost-identical “important notes”.
Read more: Smart write-time dedup
Session summaries
Capture useful session context at the end of a coding session.
Supported modes:
deterministic summaries by default
optional LLM-assisted summaries using Anthropic or OpenAI
Read more: End-of-session summaries
Obsidian vault integration
Index a curated Obsidian vault and route context through:
me.md · vault.md · maps · skills · playbooks · long-form project notes
The vault layer is indexed and searched, but not auto-written by the agent unless explicitly promoted.
Read more: Vault integration
Privacy controls
Privacy features include:
<private>...</private>redactionFTS exclusion for private regions
embedding exclusion for private regions
sync exclusion for private content
secret scrubbing at write time
title and body sanitization
Read more: Privacy
Mode profiles
Switch stop-words and trivial-prompt classifiers by profile:
English
Portuguese
Spanish
Use config or environment variables:
MEMENTO_PROFILE=portugueseRead more: Mode profiles
Automatic context injection and capture
Memory tools (memory_store, memory_search, decisions_log, …) work in any stdio-MCP client. Automatic injection and capture use whatever extension mechanism the client provides — most major clients now expose lifecycle hooks.
Client | MCP tools | Hooks | Hooks since |
Claude Code | yes | yes (native) | shipped with Claude Code |
Cursor | yes | yes (native) | 1.7 (Oct 2025) |
Codex | yes | yes (native, opt-in flag) | 0.114.0 (Mar 2026) |
Gemini CLI | yes | yes (native) | 0.26.0 (Jan 2026) |
Cline | yes | yes (native) | 3.36.0 (late 2025) |
Aider | yes | no — rule-file fallback only | — |
Other stdio-MCP | yes | depends on client | — |
Each client's hook event names and config format differ (e.g. Claude Code uses UserPromptSubmit, Cursor uses beforeSubmitPrompt, Cline filenames the events). The four memento-hook-* binaries were built for Claude Code's stdin payload shape; they work directly on Codex (very similar payload), and may need a light adapter on Cursor, Gemini CLI, and Cline. For clients without hooks, fall back to a rule file (AGENTS.md, .cursor/rules/*.mdc, system prompt) telling the agent to call the memory tools itself.
Read more: Installation & client setup
Web inspector
Launch a local browser UI:
memento-mcp uiInspect:
memories · sessions · projects · sync drift · analytics · memory health
Read more: Web inspector
Knowledge model
memento-mcp separates fast operational memory from curated long-form knowledge.
SQLite memory layer
Fast, typed, agent-written memory.
Use it for:
decisions
facts
patterns
bugs
pitfalls
preferences
session-derived notes
Vault knowledge layer
Curated Markdown knowledge from an Obsidian vault.
Use it for:
long-form docs
project maps
personal/team playbooks
technical notes
stable reference material
Search and hooks can combine both layers.
Example use cases
Remember project decisions
Decision: We use repository classes for complex SQL access instead of putting queries in controllers.
Reason: Keeps business logic separate from persistence and makes performance tuning easier.
Scope: project · Tags:
architecture,backend
Remember pitfalls
Pitfall: The quality scheduling query becomes expensive when paginating after loading all rows.
Fix: Use database-level pagination and a separate count query.
Scope: project · Tags:
performance,sql
Remember team conventions
Preference: In this project, bug fixes and improvements are tracked separately in release notes.
Scope: team · Tags:
process,release-notes
Testing
memento-mcp ships with 1,352 tests across 121 test files, covering 91% of lines and 85% of branches. The suite runs on Node 20, 22, and 24 in CI on every push and pull request.
Run the tests
npm install
npm test # full suite, ~40s
npm run test:watch # watch mode for development
npx vitest run --coverage # generate the v8 coverage reportWhat the suite covers
Layer | What's tested |
MCP server | Spawns the built server, performs an MCP handshake over stdio, asserts every registered tool is callable end-to-end ( |
Memory lifecycle | Chained |
Privacy | Pins the |
Vault | Promotion → file write → re-index → vault search → |
Tools | Per-tool unit tests for |
Hooks |
|
Database | Repos, migrations, FTS triggers, edges, sessions ( |
Engine | Classifier, compressor, adaptive ranker, embeddings, vault parser/router/index, similarity, token estimator ( |
Sync | Canonical JSON serializer round-trips, push/pull, schema migration, secret scrubbing on the wire ( |
Web inspector | Every API route, edit-mode auth, pagination, security headers ( |
CLI | Installer, uninstaller, all import formats ( |
Regression | v1-behavior compatibility for legacy users ( |
Coverage exclusions
Process entry points (src/index.ts, src/cli/main.ts, the hook bin scripts) are excluded from the coverage denominator: they are exercised by integration tests via spawnSync, but v8 cannot track child-process coverage. The handlers and helpers they invoke are fully covered. See vitest.config.ts for the full list.
License
Built with care for AI coding agents that deserve to remember.
Available Tools
19 toolsdecisions_logArchitectural decision logA
Multi-action ADR log. Pick one via action: • store — record a new decision (title + body required; supersedes_id optional). Writes a row. • list — list recent decisions (read-only). • search — FTS over decisions (query required, read-only). Decisions outrank free-form memories by default and survive pruning longer. Use pitfalls_log for recurring problems.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Which sub-operation to perform: `store`, `list`, or `search`. | |
| project_path | Yes | Absolute project path the decision belongs to (or to scope `list`/`search`). Required. | |
| title | No | Decision title (required for `store`, ignored otherwise). One short line — e.g. `"Use Postgres over MySQL"`. | |
| body | No | Decision body in markdown (required for `store`). Should explain context, options considered, and rationale. | |
| category | No | Free-form category tag for filtering, e.g. `architecture`, `infra`, `process`. Default `general`. | general |
| importance | No | Importance score in [0, 1] for `store`. Default 0.7 — decisions outrank typical facts (0.5). | |
| supersedes_id | No | For `store`: optional id of an earlier decision this one replaces. The older decision is marked superseded. | |
| query | No | Search text (required for `action="search"`). Tokenised by FTS5. | |
| limit | No | Maximum rows to return for `list`/`search` (1-50). Default 10. |
Output Schema
| Name | Required | Description |
|---|---|---|
| message | Yes | For `store`: `Decision stored with ID: <id>`. For `list`/`search`: markdown bullet list of decisions or `No decisions found.` Returns `Invalid action: ...` when `action` is unsupported. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are present and the description adds significant behavioral context beyond them: it explains that store writes a row, list and search are read-only, decisions outrank memories and survive pruning longer. There is no contradiction with 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 well-structured with a clear header and bullet-pointed actions, but it is slightly verbose. However, every sentence adds value, and it is front-loaded with the core concept.
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 multi-action complexity and 9 parameters, the description covers all necessary aspects: action selection, parameter requirements per action, and behavioral notes. An output schema exists, so return values do not need to be described.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description adds extra meaning with examples (e.g., 'Use Postgres over MySQL'), clarification of parameter scoping (e.g., 'required for store', 'ignored otherwise'), and default values with rationale (importance default 0.7 since decisions outrank typical facts).
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 is a 'Multi-action ADR log' and lists three specific actions (store, list, search) with brief explanations. It distinguishes itself from siblings by noting that decisions outrank free-form memories and pointing to pitfalls_log for recurring problems.
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 guides when to use each action (e.g., 'record a new decision' for store, 'list recent decisions' for list) and when not to use ('Use pitfalls_log for recurring problems'). Also provides context on parameter requirements per action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_analyticsMemory effectiveness analyticsARead-onlyIdempotent
Reports utility rates of injected memories, token costs per search layer, auto-capture stats, compression activity, and prune suggestions. Read-only. Use to tune importance thresholds, find dead memories worth pruning, and verify that auto-capture/compression are earning their keep. Returns a no-op message when analytics are disabled.
| Name | Required | Description | Default |
|---|---|---|---|
| period | No | Time window to summarise. `all` covers the full retention period configured in `analytics.retentionDays`. | last_7d |
| section | No | Which sub-report to render — `injections` (utility), `captures` (auto-capture), `compression`, `memories` (prune suggestions), or `all` (default). | all |
| project_path | No | Optional absolute project path to scope the report. Empty string aggregates across all projects. |
Output Schema
| Name | Required | Description |
|---|---|---|
| message | Yes | Markdown report grouped by `section` (`injections` / `captures` / `compression` / `memories`) with totals, percentages, and prune candidates. Returns a no-op message when analytics are disabled in config. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, and idempotentHint. The description adds that it returns a no-op message when analytics are disabled, which supplements the annotations with a useful edge-case behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise sentences, front-loaded with the main output, followed by usage guidance and an edge case. No unnecessary 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?
With an output schema present, the description does not need to detail return values. It covers the main use cases and the disabled-analytics edge case, which is sufficient for a read-only analytics 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 100%, so the baseline is 3. The description does not add additional parameter-specific details beyond what the schema already provides for period, section, and project_path.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reports analytics on injected memories, token costs, auto-capture stats, compression, and prune suggestions, which is specific and distinct from sibling tools like memory_store or memory_delete.
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 use for tuning importance thresholds, finding dead memories, and verifying auto-capture/compression effectiveness, and notes it is read-only. It provides clear context but does not explicitly mention when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_compressRun the compression pipeline nowA
Force one compression cycle now: cluster similar memories by embedding similarity, merge each cluster into a canonical memory, and mark originals as compressed. Use after a bulk import or to sanity-check compression. Compression normally runs on the maintenance schedule. Side effects: writes merged memories, updates originals' compressed_into pointer, may call embeddings + LLM providers. Requires compression.enabled=true; otherwise returns a no-op message.
| Name | Required | Description | Default |
|---|---|---|---|
| project_path | No | Absolute project path to compress. Empty string (default) compresses every project. |
Output Schema
| Name | Required | Description |
|---|---|---|
| message | Yes | Summary line per project, e.g. `Compressed 3 cluster(s) in project <id>`, or `No clusters to compress.` Returns a no-op message when `compression.enabled=false`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses side effects (writes merged memories, updates pointers, may call external providers) and the config requirement, adding valuable context beyond the annotations. There is no contradiction with 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 three concise sentences, front-loading the core action and usage. Every sentence adds value without redundancy.
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 presence of an output schema, return values need not be described. The description covers purpose, usage, side effects, and prerequisites. It lacks details on performance or data volume but is otherwise complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single parameter, and the description repeats the schema's description. No additional meaning is added, so baseline of 3 is appropriate.
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 action: forcing a compression cycle with specific steps (cluster, merge, mark). It identifies the resource (memories) and distinguishes from the maintenance schedule, which is a sibling 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 suggests using the tool after bulk import or to sanity-check compression, and notes that compression normally runs via schedule. It also mentions the prerequisite config flag. However, it does not explicitly state when not to use or suggest alternative sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_dedup_checkCheck for near-duplicate memoriesARead-onlyIdempotent
Cheap pre-flight (~50 tok/match): "would storing this content duplicate something I already have?" Read-only. Use before memory_store when overlap is likely, or before bulk imports. Returns up to limit existing memories with cosine similarity above the threshold (highest first). Computing the candidate embedding may make an outbound call to the configured provider (OpenAI, Ollama, etc.). If embeddings are disabled, returns a clear no-op message rather than silently passing.
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | Candidate memory body to check, exactly as you would pass to `memory_store`. | |
| title | No | Optional candidate title; concatenated with `content` to match how `memory_store` builds its embedding. | |
| project_path | No | Optional absolute project path to scope the search to a single project's memories. | |
| threshold | No | Cosine similarity threshold in [0, 1]. Defaults to `search.embeddings.dedupThreshold` from config (typically ~0.85). | |
| limit | No | Maximum number of matches to return (1-20). Default 5. |
Output Schema
| Name | Required | Description |
|---|---|---|
| message | Yes | Markdown list of near-duplicate matches with similarity scores, or `No near-duplicates found above threshold.` Returns a no-op message when embeddings are disabled in config. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses key traits beyond annotations: cheap (~50 tok/match), read-only, returns sorted matches, outbound call for embedding, and clear no-op when embeddings disabled. Annotations already indicate read-only and idempotent; description adds valuable 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?
Description is concise (three sentences), front-loaded with the key purpose and cost estimate, and every sentence adds value. No redundancy.
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 existence of an output schema and comprehensive annotations, the description covers all necessary aspects: purpose, when to use, behavior details, and edge cases (embeddings disabled). No 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 has 100% coverage with detailed descriptions for each parameter. The tool description does not add new parameter info beyond the schema, so baseline of 3 is appropriate.
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 checks for near-duplicate memories before storing. It uses specific verbs ('check', 'duplicate') and distinguishes from siblings like memory_store by calling it a 'pre-flight' check.
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 advises using it before memory_store when overlap is likely or before bulk imports. Does not mention when not to use it, 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.
memory_deleteDelete a memory (soft)ADestructiveIdempotent
Soft-delete a memory by id — the row is hidden from search/list/get but retained for audit. Idempotent. Use for accidental or obsolete memories. To replace one with a corrected version, prefer memory_store(supersedes_id=...) so history is linked.
| Name | Required | Description | Default |
|---|---|---|---|
| memory_id | Yes | Id of the memory to soft-delete (e.g. `mem_01HXYZ...`). |
Output Schema
| Name | Required | Description |
|---|---|---|
| message | Yes | `Memory <id> deleted.` on success, `Memory <id> not found.` when the id is missing. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint and idempotentHint. Description adds specifics of soft-delete behavior (hidden but retained) and idempotency, adding value beyond 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?
Two concise sentences with no waste. Front-loaded with the core action, followed by usage and alternative. 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?
For a simple 1-param soft-delete tool, description covers purpose, usage, behavioral details, and alternative. Output schema exists, so return values are unnecessary. Complete.
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 covers 100% with a description for memory_id. Description does not add meaningful new info beyond the schema. Baseline 3 is appropriate.
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 'Soft-delete a memory by id' — specific verb and resource. Distinguishes from sibling memory_store by advising when to use supersedes_id instead.
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 'Use for accidental or obsolete memories' and provides alternative 'prefer memory_store(supersedes_id=...)' for replacements, giving clear when-to and when-not-to guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_exportExport memories as JSONARead-onlyIdempotent
Export memories, decisions, and pitfalls as a portable JSON document. Read-only. Use before destructive maintenance (bulk delete, schema migration) so you have a clean restore point, or to transfer state to another memento-mcp instance via memory_import. Includes scope, tags, importance, and supersession links so round-trip preserves structure.
| Name | Required | Description | Default |
|---|---|---|---|
| project_path | No | Absolute project path to export. Empty string (default) exports memories across all projects. |
Output Schema
| Name | Required | Description |
|---|---|---|
| message | Yes | JSON document (as a string) containing `memories`, `decisions`, and `pitfalls` arrays plus a `meta` object with export timestamp and scope. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false. The description adds context about what the export includes (scope, tags, importance, supersession links) and that round-trip preserves structure, which goes beyond annotations. No contradiction.
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, front-loaded with the action and output, followed by usage guidance. Every sentence adds essential information with no redundancy or fluff.
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 simplicity (one optional parameter, read-only operation, output schema present), the description covers purpose, usage, content, and safety fully. No gaps remain for an agent to misuse 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?
Input schema has one parameter with 100% description coverage, so the schema already documents project_path well. The description does not add meaning beyond the schema, meeting baseline expectations.
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 'export' and resource 'memories as JSON', specifying the exact data exported (memories, decisions, pitfalls) and the output format (portable JSON). This distinguishes it from siblings like memory_list (non-export) and memory_import (reverse operation).
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 provides precise when-to-use scenarios: before destructive maintenance (bulk delete, schema migration) as a restore point, and for transferring state to another instance via memory_import. Also notes it's read-only, implying safe to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_getGet full memory by idARead-onlyIdempotent
Fetch the full body, tags, and metadata of one memory by id (~300-800 tokens). Read-only. Use after memory_search(detail="index") to expand a single hit. Substrings inside <private> tags are redacted unless reveal_private=true (which emits an audit event). Returns not found if the id does not exist or has been soft-deleted.
| Name | Required | Description | Default |
|---|---|---|---|
| memory_id | Yes | The memory id, as returned by `memory_store` or shown in `memory_search` results (e.g. `mem_01HXYZ...`). | |
| reveal_private | No | If true, include content inside `<private>` tags. Use only when explicitly necessary — emits an audit event. |
Output Schema
| Name | Required | Description |
|---|---|---|
| message | Yes | Full memory rendered as markdown (title, metadata, body). Returns `Memory <id> not found.` when missing. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true. Description adds valuable details: redaction of <private> tags unless reveal_private=true (with audit event), token size range, and 'not found' returns for missing/soft-deleted ids. No contradictions.
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?
Very concise: first sentence states core purpose, second gives usage context, third explains behavioral nuance, fourth covers error case. No extraneous words, each sentence adds unique value.
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 output schema exists, description does not need to detail return structure. Covers purpose, usage, redaction, audit, error behavior, and token size. Fully sufficient for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema provides 100% coverage of descriptions. Tool description adds context: memory_id came from memory_store or memory_search, and reveals reveal_private triggers audit event. Adds value beyond schema without redundancy.
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?
Clear verb 'fetch' with specific resource 'memory by id'. Distinguishes from sibling tools like memory_search by specifying 'full body, tags, and metadata' and token range. Directly states read-only nature.
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 'Use after memory_search(detail="index") to expand a single hit', providing clear when-to-use context. Also warns about reveal_private usage emitting audit events. Lacks explicit mention of when not to use (e.g., for bulk operations) but implied by scope.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_graphExplore the knowledge graph around a memoryARead-onlyIdempotent
BFS walk from one memory id outward, returning neighbour nodes + typed edges. Read-only. Use after memory_search to map related concepts, supersession chains, or the cluster around a decision. direction controls edge polarity (out/in/both); depth is capped at 5.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Memory id to use as the root of the BFS walk. | |
| depth | No | How many hops to traverse from the root (0-5). Default 2. | |
| edge_types | No | Optional whitelist of edge types to follow. Omit to follow all types. | |
| direction | No | `out` follows outgoing edges only, `in` incoming only, `both` (default) follows all. | both |
Output Schema
| Name | Required | Description |
|---|---|---|
| found | Yes | `true` when the root memory exists. `false` when the id was not found (in which case `root` and `edges` are absent/empty). |
| root | No | Root node metadata; absent when `found=false`. |
| edges | Yes | Edges discovered by the BFS walk, sorted by edge_type then by neighbour id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true and destructiveHint=false. Description adds behavioral details about BFS traversal (direction, depth cap of 5) and return type (neighbor nodes + typed edges), complementing 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?
Two concise sentences: first states action and result, second adds usage context and parameter hints. No redundancy or 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?
Covers operation, usage context, and parameter constraints. With an output schema present, return values do not need elaboration. Complete for a graph exploration 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 100%, so baseline is 3. Description briefly summarizes parameter roles (direction polarity, depth cap) but adds little beyond what schema descriptions already provide.
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 (BFS walk) and resource (memory id outward), and distinguishes it from sibling tools like memory_search by specifying its role in exploring related concepts.
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 recommends use after `memory_search` for mapping related concepts, supersession chains, or clusters. Lacks explicit when-not-to-use but provides clear context for appropriate use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_importImport memories from JSONA
Import memories, decisions, and pitfalls from a JSON file produced by memory_export (server-local path, not a URL). Conflict handling via strategy: skip (default, safe to re-run) keeps existing rows on id collision; overwrite replaces them — use for authoritative restores. Side effects: inserts/updates rows in memories, decisions, pitfalls. Embeddings are queued asynchronously.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute path on the server's filesystem to a JSON file produced by `memory_export` (e.g. `/tmp/memento-backup.json`). | |
| strategy | No | `skip` (default) preserves existing rows on id collision; `overwrite` replaces them. | skip |
Output Schema
| Name | Required | Description |
|---|---|---|
| message | Yes | Summary line with counts of rows inserted / updated / skipped per table (memories, decisions, pitfalls). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond annotations (which are minimal) by detailing side effects: 'inserts/updates rows in `memories`, `decisions`, `pitfalls`' and 'Embeddings are queued asynchronously.' It also clarifies re-run safety for 'skip' strategy. No contradiction with annotations; descriptive transparency is high.
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 three sentences, front-loaded with the primary action, and every sentence adds critical information. No wasted words, achieving high density of useful content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (multi-table import, conflict handling, async embedding), the description covers all essential aspects: source, path constraint, strategy options, side effects, and asynchronous behavior. An output schema exists, so return values need not be described.
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?
Although schema coverage is 100%, the description adds value beyond the schema by clarifying 'server-local path, not a URL' (schema already implied server-local) and by explaining the strategy options with use-case guidance ('safe to re-run' for skip, 'use for authoritative restores' for overwrite).
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: 'Import memories, decisions, and pitfalls from a JSON file produced by `memory_export`.' This provides a specific verb ('Import'), resource ('memories, decisions, and pitfalls'), and input format, clearly distinguishing from sibling tools like 'memory_export' (export) and 'memory_store' (individual store).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: the file must be from `memory_export`, and conflict handling strategies are explained ('skip' for safe re-runs, 'overwrite' for authoritative restores). However, it does not explicitly contrast with sibling tools like 'memory_store' or provide when-not-to-use scenarios, making it slightly less than perfect.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_linkLink two memories with a typed edgeAIdempotent
Create a typed directed edge between two memories. Edge types: relates_to, supersedes, caused_by, mitigated_by, references, implements. Use after memory_search to map dependencies, cause/effect, supersession chains, or references. Re-linking the same (from_id, to_id, edge_type) triple updates the weight (idempotent).
| Name | Required | Description | Default |
|---|---|---|---|
| from_id | Yes | Source memory id (the edge points outward from this memory). | |
| to_id | Yes | Target memory id. | |
| edge_type | Yes | Relationship type. `supersedes` is the same notion used by `memory_store.supersedes_id`. | |
| weight | No | Edge strength in [0, 1]. Default 1.0. Lower values can be used to weaken weak "relates_to" hints. |
Output Schema
| Name | Required | Description |
|---|---|---|
| message | Yes | `Edge created/updated: <from> -[<edge_type>:<weight>]-> <to>` on success, or `Memory <id> not found.` when either endpoint is missing. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond idempotentHint in annotations, the description explains that re-linking updates weight, and clarifies the role of weight values. No contradictions with 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?
Three sentences: core action, type list, usage + idempotency. No superfluous text, front-loaded with main verb-resource.
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?
Completeness is high given schema and annotations; output schema exists so return not needed. Covers purpose, types, usage, idempotency. Minor gap: no mention of error cases or prerequisites.
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 covers parameters 100%, but description adds nuance for edge_type meanings and weight usage (weakening weak hints). Adds value beyond 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 creates a typed directed edge between memories, enumerating specific edge types. This distinguishes it from sibling tools like memory_unlink.
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 advises using after memory_search to map dependencies, providing clear context. It also notes idempotent behavior for re-linking, though it does not explicitly state when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_listList memories (no query)ARead-onlyIdempotent
Browse stored memories with optional filters — ordered by recency/importance. Read-only. Use to enumerate by type/scope/project. Prefer memory_search whenever you have keywords (relevance ranking). Use the same detail levels to control token cost.
| Name | Required | Description | Default |
|---|---|---|---|
| project_path | No | Optional absolute project path filter. Empty string lists across all projects. | |
| memory_type | No | Optional type filter (e.g. `decision`). Empty string returns all types. | |
| scope | No | Optional scope filter — `project`, `global`, or `team`. Empty string returns all scopes. | |
| pinned_only | No | If true, only return pinned memories. | |
| limit | No | Maximum number of memories to return (1-200). Default 20. | |
| detail | No | Disclosure level — `index` (cheapest), `summary`, or `full` (default). Drop to `index` when listing many rows to keep token cost down. | full |
| include_file_memories | No | If true, also include markdown file-memory sources. Off by default since lists are usually about SQLite-backed memories. | |
| vault_kind | No | Optional vault subtype filter when listing vault notes. | |
| vault_folder | No | Optional vault subfolder filter (relative to vault root). |
Output Schema
| Name | Required | Description |
|---|---|---|
| detail | Yes | Disclosure level used to render this list. |
| count | Yes | Number of SQLite/file memories returned. |
| memories | Yes | Listed memories ordered by recency/importance. |
| vault_results | Yes | Obsidian vault matches when the vault is enabled and `vault_kind`/`vault_folder` filters apply. Empty otherwise. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Declares 'Read-only' which aligns with annotations. Adds ordering by recency/importance and token cost considerations. No contradictions with annotations (readOnlyHint, destructiveHint, idempotentHint are all consistent).
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?
Three concise sentences front-loading the core action, then usage guidance, then sibling alternative and tip. No redundancy.
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 9 optional parameters (all with schema descriptions) and an output schema, the description covers purpose, when-to-use, behavioral traits, and parameter guidance sufficiently.
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 100% coverage, but description adds value by explaining the token cost trade-off for `detail` parameter and the role of filters. Slightly above baseline of 3.
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?
Explicitly states 'Browse stored memories' with optional filters, distinguishes from sibling `memory_search` by noting it's for enumerating without keywords, and title reinforces 'no query'.
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: 'Use to enumerate by type/scope/project.' and when-not: 'Prefer memory_search whenever you have keywords.' Also advises on token cost control via detail levels.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_pathShortest path between two memoriesARead-onlyIdempotent
BFS shortest path between two memories — returns the chain of ids + edge types, or a no path message when unreachable within max_hops. Read-only. Use after memory_search (with both endpoints known) to trace cause-effect chains, supersession history, or dependency lineage.
| Name | Required | Description | Default |
|---|---|---|---|
| from_id | Yes | Starting memory id. | |
| to_id | Yes | Destination memory id. | |
| max_hops | No | Maximum BFS depth (1-10). Default 4. Returns `no path` if the destination is further than `max_hops` from the start. | |
| edge_types | No | Optional whitelist of edge types to follow. Omit to allow all types. |
Output Schema
| Name | Required | Description |
|---|---|---|
| found | Yes | `true` when a path exists within `max_hops`; `false` otherwise (in which case `path` is empty and `message` carries the reason). |
| hops | Yes | Number of edges in the path. 0 when `from_id === to_id`. |
| path | Yes | Ordered list of nodes from `from_id` to `to_id`, each annotated with the edge type that takes you to the next node. |
| message | No | Human-readable failure reason when `found=false` (e.g. `No path from <a> to <b> within <n> hops`). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. Description adds that it is read-only, returns 'no path' on unreachable, and uses BFS. No contradictions.
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 with no extraneous text. First sentence defines functionality, second provides usage guidance and purpose. 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?
Covers algorithm, input/output behavior, usage context, and safety. With output schema present, return details are not needed. Lacks performance notes but is sufficient for typical use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%. Description adds extra context for max_hops (returns 'no path' if beyond depth) and edge_types (optional whitelist). for id fields, schema descriptions are 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?
Description clearly states the tool performs BFS shortest path between two memories, returning chain of ids and edge types or a 'no path' message. It distinguishes from siblings like memory_search or memory_graph by specifying its use for path tracing and not for general search.
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?
Specifies to use after memory_search with both endpoints known, and outlines use cases (cause-effect chains, supersession history, dependency lineage). Does not explicitly state when not to use, but context from siblings is available.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_pinPin or unpin a memoryAIdempotent
Toggle the pinned flag — pinned memories survive pruning and rank higher in search. Idempotent. Use sparingly: reserve pins for canonical decisions, user preferences, and high-leverage facts. Pinning everything defeats the purpose.
| Name | Required | Description | Default |
|---|---|---|---|
| memory_id | Yes | Id of the memory to pin or unpin. | |
| pinned | No | `true` (default) to pin, `false` to unpin. |
Output Schema
| Name | Required | Description |
|---|---|---|
| message | Yes | `Memory <id> pinned.` / `Memory <id> unpinned.` on success, `Memory <id> not found.` when missing. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses key behavioral traits: idempotent (matches annotation), toggles pinned flag, and explains the consequence (memories survive pruning). No contradiction with 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?
Three concise sentences with no redundancy; every sentence adds value.
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?
Includes purpose, effect, usage guidelines, and idempotency. Given an output schema exists, return values are not required. Complete for a simple toggle 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 100% and the description does not add significant meaning beyond what the schema provides. The mention of 'toggle' clarifies idempotency but is already implied by the idempotentHint annotation.
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 action ('Toggle the pinned flag') and the resource (memory), and explains the effect ('survive pruning and rank higher in search'), distinguishing it from sibling 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?
Provides explicit guidance on when to use ('reserve pins for canonical decisions, user preferences, and high-leverage facts') and when not to ('Pinning everything defeats the purpose').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_searchSearch memoriesARead-onlyIdempotent
Ranked full-text + decay-weighted search across SQLite, file-memory sources, and (when configured) the Obsidian vault. Read-only. Use the three-layer progressive-disclosure pattern: detail="index" (~30 tok/result, start here), "summary" (~80 tok), "full" (~150-300 tok, use sparingly). Follow-ups: memory_timeline(id) for chronological neighbours of one hit, memory_get(id) for one full body, memory_graph(id) to explore typed edges.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Free-text query. Tokenised by FTS5; phrases match individual terms. Examples: `"oauth refresh"`, `"why we picked postgres"`. | |
| project_path | No | Optional absolute project path to scope results. Empty string searches across all projects (subject to scope rules). | |
| memory_type | No | Optional type filter, e.g. `decision`, `lesson`. Empty string returns all types. | |
| limit | No | Maximum number of results to return (1-50). Default 10. | |
| detail | No | Disclosure level — `index` (cheapest), `summary`, or `full`. Always start at `index` and escalate only if needed. | index |
| include_file_memories | No | If true (default), also search markdown memory files registered as sources. Set false to limit to SQLite + vault. |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | Yes | Echo of the query that was executed. |
| detail | Yes | Disclosure level used to render this result set. |
| count | Yes | Number of SQLite/file results returned (after `limit` is applied). |
| results | Yes | Ranked SQLite/file hits. |
| vault_results | Yes | Obsidian vault matches (separate from SQLite results). Always an array — empty when the vault is disabled or has no matches. |
| total_tokens | Yes | Estimated token cost of the rendered text payload. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true and idempotentHint=true. Description adds context about search ranking, decay-weighting, and data sources beyond the annotations. No contradiction.
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?
Extremely concise: two sentences plus a follow-up instruction. All information is front-loaded and relevant, with 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?
Given the presence of an output schema, the description does not need to explain return values. It covers core behavior, sources, usage pattern, and follow-up tools comprehensively for a search 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 100%, so baseline is 3. The description adds value by giving token size estimates for detail levels and query examples (e.g., 'oauth refresh'), which are not in 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 it performs ranked full-text search across multiple sources and is read-only. It distinguishes from siblings by naming specific follow-up tools and implying this is the primary search entry point.
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 provides a three-layer progressive-disclosure pattern with token estimates and instructs to start at 'index'. Names alternative tools for deeper exploration (timeline, get, graph), telling the agent when to use this tool vs others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_storeStore a memoryA
Persist a fact, decision, lesson, or pattern so it can be recalled later by memory_search/memory_get or auto-injected into future sessions. Use for durable context (decisions, gotchas, preferences, recurring commands). For transient notes or duplicates, prefer memory_dedup_check first. Writes one SQLite row, queues an embedding (when enabled), and optionally creates/updates an Obsidian vault note. dedup="strict" refuses duplicates, "warn" stores with a warning, "off" bypasses.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | Short human-readable title (1 line). Used as the search label and as the vault note filename when promoted. | |
| content | Yes | The memory body in markdown. Wrap sensitive substrings in `<private>...</private>` tags to redact them from default reads. | |
| memory_type | No | Category tag: `fact`, `decision`, `lesson`, `pattern`, `preference`, `command`, etc. Drives auto-promotion and importance defaults via project policy. | fact |
| scope | No | Visibility scope: `project` (default, scoped to the project at `project_path`), `global` (all projects), or `team` (synced via git when sync is enabled). | project |
| project_path | No | Absolute filesystem path of the project this memory belongs to. Empty string defaults to the server's current working directory. | |
| tags | No | Free-form tag list, e.g. `["auth", "oauth2"]`. Project policies may require certain tags or ban others. | |
| importance | No | Importance score in [0, 1]. Higher values rank earlier in search and survive pruning longer. Default 0.5. | |
| supersedes_id | No | Optional id of an older memory that this one replaces. The older memory is marked superseded and de-prioritised in search. | |
| pin | No | If true, pin the memory so it is exempt from automatic pruning and ranks higher. | |
| persist_to_vault | No | If true, also write an Obsidian vault note. If omitted, the project's policy decides based on `memory_type`. | |
| vault_mode | No | `create` fails if the note exists; `create_or_update` (default) overwrites an existing note with the same title. | create_or_update |
| vault_kind | No | Optional vault subtype (e.g. `architecture`, `runbook`) used to pick a folder per `vault.kindFolders` config. | |
| vault_folder | No | Optional explicit vault subfolder, relative to the vault root. Overrides `vault_kind` routing. | |
| vault_note_title | No | Optional override for the vault note title. Defaults to `title` when empty. | |
| dedup | No | Per-call override for duplicate handling. Defaults to the server's `search.embeddings.dedupDefaultMode` when omitted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| message | Yes | On success: `Memory stored with ID: <id>` (optionally followed by a vault-note path or a dedup `⚠` warning). On rejection: `Memory not stored: <reason>` explaining policy/dedup failure. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint=false etc.), the description discloses that the tool writes one SQLite row, queues an embedding, and optionally creates/updates an Obsidian vault note. It also details dedup behavior and pin/pruning effects, adding significant 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?
Two succinct sentences that front-load the core purpose and usage guidance, followed by a clear summary of internal operations. No redundancy; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 15 parameters with 100% schema coverage, plus an output schema (implied by context), the description covers all essential aspects: what it does, when to use it, side effects, and parameter variants. It is complete for a complex 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?
The input schema already has 100% coverage with descriptions for all 15 parameters. The description adds overarching context about dedup modes and vault interactions, but per-parameter details are already covered in the schema. Slight extra value justifies a 4.
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 persists facts, decisions, lessons, or patterns for later recall, and distinguishes it from siblings like memory_search, memory_get, and memory_dedup_check by mentioning their specific roles.
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 advises to use memory_dedup_check first for transient notes or duplicates, and explains the dedup parameter options (strict, warn, off) for handling duplicates, providing clear guidance on when to use 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.
memory_timelineList memories around an id (chronological)ARead-onlyIdempotent
Return the chronological neighbourhood of memories around an anchor id (~200 tok/neighbour). Read-only. Use after memory_search(detail="index") to recover work-session context for one hit. Cheaper than calling memory_get on each neighbour individually.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The anchor memory id to centre the window on. Get this from `memory_search` or `memory_store`. | |
| window | No | Number of neighbours to return on each side (1-10). Default 3 → up to 6 neighbours total. | |
| detail | No | Disclosure level — `index` (titles only) or `summary` (titles + short preview, default). `full` is intentionally not offered here; use `memory_get` for that. | summary |
| same_session_only | No | If true (default), only include neighbours captured in the same session as the anchor. Set false to span sessions. |
Output Schema
| Name | Required | Description |
|---|---|---|
| message | Yes | Markdown list of neighbour memories (anchor + window on each side) at the requested `detail` level. Returns `Memory <id> not found.` when the anchor is missing. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, idempotentHint. Description adds useful context about cost efficiency and token size (~200 tok/neighbour), which exceeds annotation info.
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?
Three sentences, front-loaded with main purpose. Each sentence adds value: what it does, when to use, why it's better. 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?
Given the tool's complexity (anchor, window, detail, session filters), the description covers usage context, token cost, and comparison to alternatives. Output schema exists, so return values are covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed descriptions for each parameter. The description does not add extra meaning beyond schema, but the schema is comprehensive. Baseline 3 is appropriate.
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 returns the chronological neighbourhood around an anchor id. The verb 'return' and resource are specific. Distinguishes from siblings like memory_search and memory_get by focusing on neighbourhood and read-only nature.
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 to use after memory_search(detail="index") to recover work-session context. Also notes it's cheaper than calling memory_get on each neighbour, guiding when not to use the alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_unlinkRemove an edge between two memoriesADestructiveIdempotent
Remove a previously created edge — pass the exact (from_id, to_id, edge_type) triple used at creation time. No wildcards. Idempotent. Use to retract incorrect links. To retract a whole memory, prefer memory_delete (keeps audit trail).
| Name | Required | Description | Default |
|---|---|---|---|
| from_id | Yes | Source memory id of the edge to remove. | |
| to_id | Yes | Target memory id of the edge to remove. | |
| edge_type | Yes | Edge type that was used when the edge was created. Must match exactly. |
Output Schema
| Name | Required | Description |
|---|---|---|
| message | Yes | `Edge removed: <from> -[<edge_type>]-> <to>` on success, or `Edge not found.` when the triple does not exist. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses idempotence and no-wildcard behavior, adding value beyond annotations. No contradiction with 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?
Three focused sentences with no filler: purpose, requirement, use case. Front-loaded with key action.
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?
With output schema present and clear alternative tool mentioned, description is fully sufficient for a deletion 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 coverage is 100%, giving baseline 3. Description adds emphasis on exact match and references the triple format, improving clarity.
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 clearly states the tool removes a previously created edge, specifies the exact triple needed, and distinguishes from memory_delete.
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 (retract incorrect links) and when to prefer memory_delete (retracting a whole memory with audit trail).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_updateUpdate a memory in placeAIdempotent
Edit a memory in place — only the fields you pass are changed. Editable: title, content, tags, importance, memory_type, pinned. Use for typo fixes, retagging, importance tuning. For meaningful changes you'd want history for (e.g. a reversed decision), prefer memory_store(supersedes_id=...) instead. Side effect: when content changes, the embedding is re-queued and dedup may run. Returns not found for missing ids.
| Name | Required | Description | Default |
|---|---|---|---|
| memory_id | Yes | Id of the memory to update (e.g. `mem_01HXYZ...`). | |
| title | No | New title (single line). Omit to leave unchanged. | |
| content | No | New body in markdown. Omit to leave unchanged. When changed, the embedding is re-computed asynchronously. | |
| tags | No | Replacement tag list. Omit to leave unchanged. Pass `[]` to clear all tags. | |
| importance | No | New importance score in [0, 1]. Omit to leave unchanged. | |
| memory_type | No | New memory_type (e.g. `fact`, `decision`). Omit to leave unchanged. | |
| pinned | No | New pinned state. Omit to leave unchanged. Equivalent to calling `memory_pin` separately. | |
| dedup | No | Per-call override for duplicate handling when `content` changes. Mirrors `memory_store.dedup`. |
Output Schema
| Name | Required | Description |
|---|---|---|
| message | Yes | `Memory <id> updated.` on success, `Memory <id> not found.` when missing, or a dedup-rejection sentence when `dedup="strict"` blocks the change. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral traits beyond annotations: side effect of embedding re-queuing and dedup on content change, and returns 'not found' for missing ids. Annotations already indicate idempotent and non-destructive, but description provides extra operational 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?
Two concise sentences front-loading the purpose, then guidelines and side effects. No unnecessary 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?
Covers all essential aspects: partial update, editable fields, side effects, alternative tool, and return behavior. With high schema coverage and output schema present, the description is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed param descriptions. The tool description adds the key semantic that only passed fields are changed (partial update) and references dedup as mirroring memory_store.dedup, which adds value beyond 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 edits a memory in place, lists the editable fields, and distinguishes it from memory_store which is for meaningful changes with history. This is specific and differentiates from 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?
The description explicitly tells when to use (typo fixes, retagging, importance tuning) and when not to use (meaningful changes needing history), and recommends the alternative memory_store(supersedes_id=...).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pitfalls_logRecurring pitfalls logA
Multi-action log of recurring problems and their resolutions. Pick one via action: • store — record a new pitfall (title + body required). Writes a row. • list — list open pitfalls (set include_resolved=true for all). Read-only. • resolve — mark a pitfall resolved (pitfall_id required). Use when something keeps biting and you want a queryable problem→resolution log. For one-off design choices, use decisions_log.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Which sub-operation to perform: `store`, `list`, or `resolve`. | |
| project_path | Yes | Absolute project path the pitfall belongs to (or to scope `list`). Required. | |
| title | No | Short symptom title (required for `store`). E.g. `"esbuild fails on M1 when using esm + node-gyp"`. | |
| body | No | Markdown body (required for `store`). Should describe the problem and the resolution / workaround. | |
| importance | No | Importance score in [0, 1] for `store`. Default 0.6. | |
| limit | No | Maximum pitfalls to return for `list` (1-50). Default 10. | |
| include_resolved | No | For `list`: if true, also include resolved pitfalls. Default false (open only). | |
| pitfall_id | No | Required for `action="resolve"` — the id of the pitfall to mark resolved. |
Output Schema
| Name | Required | Description |
|---|---|---|
| message | Yes | For `store`: `Pitfall logged/updated with ID: <id>`. For `list`: markdown list with `[RESOLVED]` or `[xN]` (occurrence count) prefixes, or `No pitfalls found.` For `resolve`: `Pitfall <id> marked as resolved.` or `Pitfall <id> not found.` |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses behavioral traits beyond annotations: 'Writes a row' for store, 'Read-only' for list, and 'mark a pitfall resolved' for resolve. Annotations already indicate non-read-only, so description adds useful context without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, using bullet points and bold for actions. Every sentence is informative and necessary. It is front-loaded with the overall purpose and efficiently covers all three actions.
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 presence of an output schema, the description need not explain return values. It covers all actions, parameter requirements, distinguishes from sibling, and provides context on markdown body and importance score. It is complete for the tool's complexity.
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?
With 100% schema coverage, baseline is 3. The description adds value by explaining per-action parameter requirements (e.g., 'title + body required for store') and providing an example for title, going beyond the schema 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 is a 'Multi-action log of recurring problems and their resolutions' and enumerates three distinct actions (store, list, resolve). It explicitly distinguishes from the sibling tool 'decisions_log' by noting that one-off design choices should use that tool instead.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear when-to-use guidance for each action and differentiates from 'decisions_log' for one-off choices. It lacks explicit when-not-to-use guidance for the overall tool but is otherwise strong.
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.
19 tool updates
v1.0.0- First observed
decisions_log - First observed
memory_analytics - First observed
memory_compress - First observed
memory_dedup_check - First observed
memory_delete - First observed
memory_export - First observed
memory_get - First observed
memory_graph - First observed
memory_import - First observed
memory_link - First observed
memory_list - First observed
memory_path - First observed
memory_pin - First observed
memory_search - First observed
memory_store - First observed
memory_timeline - First observed
memory_unlink - First observed
memory_update - First observed
pitfalls_log
TDQS
Each tool has a clearly distinct purpose: decisions_log for ADR entry, pitfalls_log for problem tracking, and memory_* tools covering CRUD, search, graph, linking, analytics, etc. No two tools overlap in functionality.
Most tools use the 'memory_' prefix with a verb or noun (e.g., memory_store, memory_search), but decisions_log and pitfalls_log break the prefix pattern. The naming is mostly consistent and intuitive.
19 tools is well-scoped for a knowledge management server. The count covers all necessary operations without being excessive, and each tool contributes a unique, valuable function.
The tool surface is comprehensive: store, retrieve, update, delete, search, list, graph traversal, import/export, dedup, compression, pinning, linking/unlinking, timelines, decisions, pitfalls, and analytics. No obvious gaps.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Persistent memory for AI agents with OAuth-backed hosted MCP access.
Persistent memory for AI assistants. Save once; recall from Claude, ChatGPT, or any MCP client.
Persistent memory for AI agents across Claude, ChatGPT and any MCP client.
Persistent, portable memory for AI assistants — your private memory graph, from any MCP client.
Related MCP Servers
AlicenseNot gradedqualityCmaintenanceEnables Claude to add and search personal memories through the Nowledge Mem service. Allows users to store and retrieve contextual information across conversations.4MIT- AlicenseNot gradedqualityDmaintenanceA self-hosted MCP server that provides AI assistants with a shared, persistent SQLite-backed memory for storing and retrieving project context, decisions, and discoveries. It enables cross-session continuity and team-wide knowledge sharing to keep AI coding tools aligned and informed.3MIT
- AlicenseAqualityCmaintenanceSmart memory for AI agents. Solves the Karpathy problem: memories decay, topics are frequency-weighted, one-time questions don't become obsessions. 7 tools. Zero deps.4222MIT
- AlicenseNot gradedqualityCmaintenanceMemento is a local-first, LLM-agnostic memory layer. It runs an MCP server over a single SQLite file on your machine, so any MCP-capable AI assistant — Claude Desktop, Claude Code, Cursor, GitHub Copilot, Cline, OpenCode, Aider, a custom agent — can read and write durable, structured memory about you, your work, and your decisions.4522Apache 2.0
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/lfrmonteiro99/memento-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server