Skip to main content
Glama
JohnXu22786

memory-vault

by JohnXu22786

简体中文

Memory Vault

A cross-session persistent memory plugin for coding agents: save the experiences, decisions, preferences and pitfalls distilled from conversations to your local machine, and recall them on demand in future sessions.

  • Storage: SQLite local database (single source of truth); records, tags and the inverted word table all persisted to disk

  • Retrieval: dual-channel fused ranking of keywords (BM25) and semantic vectors (USearch, when available), with time decay support

  • Curation: automatic deduplication on write (exact body dedup + semantic approximate dedup, with merge/skip strategies); tidy collapses similar records into summaries in one step to prevent memory bloat

  • UI: built-in web viewing interface (pure standard library), browse, search, add, delete, tidy

  • Compat: generic markdown memory format import/export, supporting frontmatter and splitting by second-level headings

  • Zero-dependency runnable: the default local hash embedder works offline and is deterministically consistent across sessions; optionally plug in sentence-transformers or any OpenAI-compatible embedding API; vector retrieval auto-degrades (USearch → numpy → pure Python)

Quick Start

No dependencies to install; Python ≥ 3.9 is enough:

# 存入一条记忆
python -m memory_vault put "项目架构" "后端采用微服务,服务间通过消息队列通信"

# 混合检索
python -m memory_vault ask "微服务架构"

# 从 markdown 目录批量导入
python -m memory_vault import ./notes --split

# 压缩整理
python -m memory_vault tidy

# 启动 Web 查看界面
python -m memory_vault serve
# 浏览器打开 http://127.0.0.1:8988

# 以 MCP 服务运行(供插件化 harness 加载)
python -m memory_vault mcp

Data is stored by default in ~/.memory-vault/ (vault.sqlite3 and an optional config.json). You can also point it elsewhere with --vault <dir> or the VAULT_DIR environment variable.

Related MCP server: memento

Integrating with dsh (plugin harness)

Installing in DSH

dsh plugin --profile demo add github:JohnXu22786/memory-vault

The repo also ships a dsh.bundle (package.json + cordis.patch.yml + index.js). Installing it lays down a Cordis plugin row whose Node bridge drives the Python CLI (everything loads from the same package directory), surfacing the CLI commands as dsh tools vault_put / vault_ask / vault_take / vault_list / vault_drop / vault_tidy / vault_stats / vault_ingest. No npm dependencies are required at load time; Python ≥ 3.9 must be on PATH (override the interpreter with the DSH_MV_PYTHON environment variable). If Python is missing or the package can't be imported, the bridge logs a clear error at startup instead of crashing. For full-fidelity write options (tags / weight / source), use the MCP server below.

The plugin root contains manifest.json; the harness loads it per the following conventions:

Interface

How it starts

Purpose

MCP tools (recommended)

python -m memory_vault mcp (stdio transport)

exposes 8 tools such as vault_put / vault_ask to the agent for reading/writing memory in-session

CLI

python -m memory_vault <command>

scripting, scheduled tidy, batch import/export

Web

python -m memory_vault serve

human browsing and maintenance interface

Skill

read SKILL.md

instruction text guiding the agent on when to write and how to retrieve

Typical harness config sketch (MCP style):

{
  "mcpServers": {
    "memory-vault": {
      "command": ["python", "-m", "memory_vault", "mcp"],
      "env": { "VAULT_DIR": "~/.memory-vault" }
    }
  }
}

After the harness launches the process, it sends the initialize handshake, then discovers tools via tools/list and calls them via tools/call. The protocol is newline-delimited JSON-RPC 2.0 over stdio (MCP standard transport), with no third-party dependencies.

MCP tools at a glance

Tool

Description

vault_put

store a record (auto-dedup; returns action: new/merged/skipped)

vault_ask

hybrid retrieval, returns id/title/score/kw/sem/updated_at

vault_take

fetch full content by id

vault_list

list recent records

vault_drop

delete by id

vault_tidy

tidy up (collapse similar records into summaries)

vault_stats

storage stats (count, vector backend, embedding config)

vault_ingest

batch import from markdown files/directories

Usage Tips

  • What to store: project decisions and their reasons, pitfalls hit, user preferences, common commands and conventions, experiment conclusions

  • When to retrieve: at the start of a new session, when a task arrives with insufficient context, when a historical topic comes up

  • Don't over-store: stable engineering rules belong in AGENTS.md-style documents; memory is meant to hold "context that grew out of real work"

Configuration

The config file defaults to <data-dir>/config.json (JSON); VAULT_* environment variables can override it; command-line arguments take the highest precedence. A full example is in config.example.json.

Section

Key

Default

Description

database

dir

~/.memory-vault

data directory

embedding

provider

local

local (built-in hash) / sentence (sentence-transformers) / api (OpenAI-compatible)

embedding

model

per provider

sentence defaults to all-MiniLM-L6-v2; api defaults to text-embedding-3-small

embedding

dims

128

local embedding dimensions

embedding

api_url / api_key / api_model

empty

api provider endpoint; keys support env://VAR, file:///path forms

search

keyword_weight / semantic_weight

0.4 / 0.6

dual-channel fusion weights (auto-clamped to 0~1)

search

recency_days

180

time-decay half-life (days), 0 disables

search

top_k

8

default number of results

curation

dedup_threshold

0.92

write-time dedup similarity threshold

curation

dedup_mode

merge

merge into the existing record / skip keeping the original

curation

cluster_threshold

0.78

tidy clustering threshold

curation

min_cluster

2

minimum cluster size

curation

digest_member_chars

600

characters retained per member record in the summary

web

host / port

127.0.0.1 / 8988

web interface listen address

web

token

empty

when set, all /api/* requests must carry Authorization: Bearer <token> (the UI prompts and remembers it on first request; ?token= query param also supported)

Environment variables: VAULT_DIR, VAULT_CONFIG, VAULT_EMBED_PROVIDER, VAULT_EMBED_MODEL, VAULT_EMBED_DIMS, VAULT_EMBED_API_URL, VAULT_EMBED_API_KEY, VAULT_EMBED_API_MODEL, VAULT_KW_WEIGHT, VAULT_SEM_WEIGHT, VAULT_RECENCY_DAYS, VAULT_TOP_K, VAULT_DEDUP_THRESHOLD, VAULT_DEDUP_MODE, VAULT_CLUSTER_THRESHOLD, VAULT_MIN_CLUSTER, VAULT_DIGEST_MEMBER_CHARS, VAULT_WEB_HOST, VAULT_WEB_PORT, VAULT_WEB_TOKEN.

Embedding Providers

provider

prerequisite

traits

local (default)

none

zero-dependency, offline, deterministic; limited semantic ability, good for getting started and testing

sentence

pip install sentence-transformers

real local semantic model, best results, fully offline

api

an accessible OpenAI-compatible endpoint

configure api_url + api_key (+ api_model), e.g. https://api.openai.com/v1, a local Ollama-compatible gateway, etc.

If changing the embedding config changes the dimensions, the plugin automatically re-embeds existing records on next use.

Vector Retrieval Backend

Prefers USearch (pip install usearch) approximate nearest neighbor; if not installed it auto-degrades to a numpy exact scan, then to a pure Python scan. SQLite is always the single source of truth; the in-memory index is rebuilt from the database at every startup.

Markdown Compatibility

  • Import: import <file-or-directory> [--split]. Recognizes YAML-style frontmatter (title/tags/weight/created/updated), # H1 heading (used as the title and stripped from the body; CRLF line endings supported); --split splits into multiple records by ## H2 headings

  • Export: export <dir>, one .md file per record (frontmatter contains id/time/tags), re-importable

  • Edge cases: record ids are always generated by the system; the id in frontmatter is only exported as information and ignored on import; tags must not contain commas; leading/trailing whitespace in bodies is trimmed on export

  • Designed to interoperate with existing markdown note libraries

CLI Reference

python -m memory_vault init                    # 初始化数据目录
python -m memory_vault put "标题" "正文"        # 存入(正文可省略,此时读标准输入)
echo "正文" | python -m memory_vault put "标题"
python -m memory_vault ask "查询词" -k 5        # 混合检索
python -m memory_vault get <id>                 # 查看单条
python -m memory_vault list -n 20               # 最近列表
python -m memory_vault drop <id>                # 删除
python -m memory_vault tidy                     # 压缩整理
python -m memory_vault import ./notes --split   # 导入 markdown
python -m memory_vault export ./backup          # 导出 markdown
python -m memory_vault info                     # 统计
python -m memory_vault serve                    # Web 界面
python -m memory_vault mcp                      # MCP 服务

All commands support --vault <dir>, --config <file> and --json (machine-readable output). --vault/--config are global options and must come before the subcommand (e.g. python -m memory_vault --vault ~/mv put ...).

Safety note: the web interface listens only on 127.0.0.1 by default. If you need to bind to a non-loopback address (e.g. 0.0.0.0), make sure to also set web.token; the UI has built-in cross-origin write protection (enforced JSON Content-Type + Origin check) and request timeout/concurrency limits.

Web API

Endpoint

Method

Description

/

GET

viewing interface

/api/stats

GET

stats

/api/list?limit=&offset=

GET

recent records

/api/query?q=&k=

GET

hybrid retrieval

/api/put

POST

{title, body, tags, source?, weight?}

/api/delete

POST

{id}

/api/tidy

POST

tidy up

/api/ingest

POST

{path, split?}

Architecture

memory_vault/
├── __main__.py / cli.py   命令行入口(12 个子命令)
├── config.py              配置加载(默认值 <- 文件 <- 环境变量 <- 参数)
├── vault.py               门面:协调存储/嵌入/索引/去重/压缩(进程内锁保证多线程一致)
├── store.py               SQLite 持久层:记录 CRUD、倒排词表、BM25 打分
├── vectors.py             向量索引:USearch -> numpy -> 纯 Python 三级降级
├── embedders.py           嵌入器工厂:local / sentence / api
├── ranking.py             融合排序:双通道 min-max 归一化 + 时间衰减
├── curation.py            去重决策(merge/skip)与摘要构建
├── markdown_io.py         markdown 导入导出(frontmatter / 拆分)
├── webapp.py              内置 Web 界面(http.server + 单页前端)
└── mcp_server.py          MCP stdio 服务(newline-delimited JSON-RPC)

Write flow: put → exact dedup by body (checksum) → semantic approximate dedup (top-k vector search) → persist + update index. Retrieval flow: ask → BM25 keyword score + semantic score → min-max normalized weighted fusion → time decay → rank and output.

Development and Testing

python -m unittest discover -s tests -v   # 129 项测试:存储/检索/去重/压缩/markdown/CLI/MCP/Web/配置
pip install -e .                          # 可选:安装为命令 `vault`

Optional dependencies: pip install usearch (vector acceleration), pip install sentence-transformers (local semantic embeddings).

License

MIT

Available Tools

8 tools
vault_askA

混合检索记忆:关键词(BM25)与语义向量融合排序,返回按相关度降序的记录。

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes查询词(必填)
top_kNo返回条数(默认取配置)

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses the retrieval method (BM25 + semantic vector) and result ordering (relevance descending), which are useful behavioral traits. However, it does not explicitly state that the operation is read-only or discuss potential side effects, rate limits, or failure modes, leaving some ambiguity.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence that immediately conveys the core mechanism and output ordering. Every word adds value, with no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with two well-described parameters and no output schema, the description sufficiently explains the search algorithm and result ordering. It is complete for an agent to understand the tool's function without further elaboration.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already provides 100% coverage for both parameters (query and top_k) with clear descriptions. The description adds context about relevance sorting, which indirectly clarifies how top_k is used, but it does not provide additional parameter-level details beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: it performs hybrid retrieval (BM25 + semantic vector) and returns records sorted by relevance. This clearly distinguishes it from sibling tools like vault_put (write) and vault_list (list all).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The usage is implied by the tool name 'ask' and the retrieval-focused description, but no explicit guidance is given about when to use it versus alternatives or when not to use it. The sibling context provides some signal but not direct instruction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vault_dropC

删除一条记录。

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes记录 id(必填)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of disclosing behavioral traits. It only states 'delete a record' but does not mention permanence, side effects, required permissions, or consequences. The destructive nature is implied but no additional transparency is offered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence with no wasted words. It is highly concise and front-loaded. However, it may be under-specified for the tool's needs, but conciseness itself is not the issue.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple one-parameter operation, the description is minimal. It does not explain what happens after deletion (e.g., return value, success/failure behavior, or whether the operation is reversible). With no annotations or output schema, the description should provide more context, but it remains incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for the single 'id' parameter, so the schema already documents it as required and describes it as 'record id'. The description adds no additional meaning beyond that, which aligns with the baseline score of 3 for high coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description '删除一条记录' clearly states the tool's purpose: deleting a record. It uses a specific verb ('delete') and resource ('record'). However, it does not explicitly differentiate from sibling tools like vault_take or vault_tidy, which might also remove or modify records, so it falls short of full distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention scenarios where vault_drop is preferred over vault_take or vault_tidy. There are no exclusions, prerequisites, or contextual cues, leaving the agent without decision-making information.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vault_ingestB

从 markdown 文件或目录批量导入记忆。

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes文件或目录路径(必填)
splitNo按二级标题拆分(默认 false)

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, and the description fails to disclose key behaviors such as whether existing memories are overwritten, whether directory traversal is recursive, how duplicates are handled, or any formatting requirements. This is a mutation tool that modifies persistent state, so the lack of safety or side-effect disclosure leaves a significant transparency gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no filler words. It directly states the action and target, achieving maximum efficiency for the content it provides.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool that ingests files or directories, the description lacks essential context: expected file structure, recursion behavior, splitting semantics, error handling, and return behavior. With no output schema and minimal detail, an agent would be under-informed about how to invoke this safely and correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% because both parameters ('path' and 'split') have descriptions. The tool description adds no additional parameter context beyond the schema, so it meets the baseline for high coverage without adding extra value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'import' and the resource 'memories from markdown files or directories', which distinguishes it from sibling tools like vault_list or vault_ask. However, it doesn't explicitly name an alternative for contrast, so it falls slightly short of the highest tier.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for bulk imports from markdown sources, which contrasts with the single-item operations implied by vault_put or vault_take. However, no explicit guidance or exclusions are provided, so the agent must infer when to choose this over alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vault_listA

列出最近的记录(不含已折叠内容)。

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo条数(默认 50)
offsetNo偏移(默认 0)

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses the behavioral trait of excluding collapsed content, which is useful. However, it does not explicitly state that the operation is read-only or safe, nor does it mention any side effects, permissions, or return format details. It is minimally transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, short sentence that is front-loaded with the primary action ('List recent records') and includes a valuable caveat ('excluding collapsed content'). Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with two well-documented parameters and no output schema, the description is reasonably complete. It communicates the core function and an important limitation. However, it does not describe the return structure or any pagination behavior beyond the parameter names, which is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already documents limit and offset with descriptions at 100% coverage. The tool description adds no additional parameter semantics beyond what the schema provides. Therefore, baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'List recent records' with the specific verb 'list' and resource 'records', and adds a useful qualifier 'excluding collapsed content'. This distinguishes it from sibling tools like vault_put, vault_take, or vault_stats.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention any exclusions or comparison to siblings like vault_ask or vault_stats. The only implied usage is that it lists records, but no explicit context or when-not-to-use is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vault_putA

存入一条记忆记录;自动去重(相同或高度相似的内容并入已有记录)。

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes记录正文(必填)
tagsNo标签列表
titleNo记录标题(可省略)
sourceNo来源标识(默认 mcp)
weightNo重要度 0~1(默认 0.5)

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It does disclose a key behavior: automatic deduplication (merging identical or highly similar content into existing records). However, it does not explain what happens during the merge, whether the operation is reversible, or what the return value looks like, leaving gaps for a write operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that is front-loaded with the core purpose ('存入一条记忆记录') and then adds the deduplication behavior. Every word earns its place with no redundancy or unnecessary detail. This is an exemplary concise description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple store operation with no output schema and no annotations, the description gives a basic understanding but lacks important context such as the exact behavior during a merge, effects on existing records, or return format. Given the tool's five parameters and write nature, a bit more detail about deduplication and what the agent should expect would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema already documents all five parameters (body, tags, title, source, weight). The description does not add any parameter-specific semantics beyond the schema, such as how deduplication interacts with tags or weight. This meets the baseline of 3 for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb '存入' (store/put) with the resource '记忆记录' (memory record), clearly indicating this tool stores a new record. It also mentions automatic deduplication, which distinguishes it from sibling tools like vault_ingest and vault_list. This is a clear and specific purpose statement.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not provide any explicit guidance on when to use this tool versus alternatives like vault_ingest or vault_take. It only states what the tool does, leaving the agent to infer usage context from the name and sibling set. No exclusions or alternative recommendations are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vault_statsA

查看存储统计(记录数、向量后端、嵌入配置等)。

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the transparency burden. The verb '查看' discloses that this is a read-only operation, and listing specific statistics (record count, vector backend, embedding config) gives the agent a clear picture of the output. It does not detail side effects or permissions, but for a zero-param stats tool, this 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that front-loads the purpose ('查看存储统计') and includes relevant specifics. Every word contributes meaning; there is no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple zero-param tool with no output schema, the description adequately covers the observable behavior. It lists three types of statistics and uses '等' (etc.) to hint at more, which is slightly open-ended but still gives enough context for an agent to understand the tool's function.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has no parameters, and the schema confirms this. The description adds value by explaining what the tool returns without needing to describe parameter usage. Baseline for 0 params is 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the explicit verb '查看' (view) and specifies the resource '存储统计' (storage stats), with examples like record count, vector backend, and embedding config. It clearly distinguishes this from sibling tools (vault_put, vault_take, etc.) which are mutation or retrieval operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies when to use the tool (to view storage statistics) and provides concrete examples of the data shown. It does not explicitly mention alternatives or exclusions, but the scope is unambiguous enough for an agent to select it over siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vault_takeA

按 id 查看单条记录的完整内容。

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes记录 id(必填)

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

As a read operation, the description implies no side effects, but it does not disclose behaviors like error handling for missing ids, authentication requirements, or rate limits. Without annotations, more could be expected, but the description does indicate the return is the 'complete content', which adds some context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one short, front-loaded sentence that immediately conveys the purpose. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-parameter read tool, the description is mostly complete. It indicates the result is the full record content. It doesn't cover error behavior (e.g., not found), but the low complexity makes this acceptable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% as the only parameter 'id' is already described as 'record id (required)'. The description adds no new meaning beyond 'by id', so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action: 'view the complete content of a single record by id' (按 id 查看单条记录的完整内容). The verb 'view' and resource 'single record by id' are specific, and it distinguishes from siblings like vault_list (listing records) and vault_ask (querying).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when a single record's full content is needed by id, but it does not explicitly provide when-to-use vs alternatives or any exclusions. No mention of when to prefer vault_list or vault_ask instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vault_tidyA

压缩记忆:把互相相似的记录折叠为一条摘要,原记录标记为已折叠。

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of disclosing behavior. It explicitly reveals a key side effect: original records are marked as folded, indicating they are not deleted. It does not mention reversibility, permissions, or return details, but the core state change is transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that conveys the purpose and effect without any filler. Every word earns its place, making it highly concise and well structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no parameters and no output schema, the description provides sufficient context: it explains the transformation and the fate of original records. It could mention the return value or when to use it, but given the low complexity, the description is largely complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and an empty input schema, so the baseline is 4. The description correctly implies that no inputs are needed and adds no conflicting or redundant parameter information; it fully covers the (non-existent) parameter requirements.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb (fold/compress) and a clear resource (mutually similar records), stating both the main action—folding similar records into a summary—and the side effect of marking originals as folded. This clearly differentiates it from sibling tools like vault_put, vault_list, or vault_drop.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when memory compression or deduplication is needed, but it does not explicitly state when to use this tool versus alternatives, nor does it mention any exclusions or prerequisites. The context is clear enough to infer the intended use, but explicit guidance is missing.

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. 8 tool updatesv1.0.0
    • First observedvault_ask
    • First observedvault_drop
    • First observedvault_ingest
    • First observedvault_list
    • First observedvault_put
    • First observedvault_stats
    • First observedvault_take
    • First observedvault_tidy

TDQS

A3.8/5.0
Disambiguation5/5

Each tool targets a distinct action: put for storing, ask for searching, take for reading by id, list for enumeration, drop for deletion, tidy for compaction, stats for metadata, and ingest for batch import. There is no overlap or ambiguity between these operations.

Naming Consistency5/5

All tools follow a consistent vault_verb pattern using snake_case. Although 'stats' is a noun, it behaves as a verb in context and the pattern remains predictable and uniform.

Tool Count5/5

Eight tools is well within the optimal 3-15 range and each serves a meaningful purpose for a memory vault. The count is neither excessive nor sparse for the domain.

Completeness4/5

The tool set covers core memory lifecycle: create/update via vault_put with deduplication, read via take/list/ask, delete via drop, plus organization via tidy and import via ingest. A minor gap is the lack of an explicit full-record edit, but the deduplication-based put mitigates this.

Maintenance

ActivityMaintained
ResponsivenessSyncing

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

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Provides persistent knowledge capture and retrieval for coding agents. Enables searching the vault, storing notes, capturing sessions, and reading notes via MCP tools.
    12
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Provides persistent memory for AI coding agents via MCP, enabling agents to store and semantically recall facts, events, and lessons across sessions, all running locally without cloud dependencies.
    Apache 2.0

Latest Blog Posts

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/JohnXu22786/memory-vault'

If you have feedback or need assistance with the MCP directory API, please join our Discord server