Skip to main content
Glama

A waystone is a roadside marker. Each agent leaves human-confirmed conclusions as waymarks, so the next machine, the next teammate, the next agent can follow them instead of rediscovering everything from scratch.


Why Waystone

Coding assistants like Claude Code and Codex each have their own native memory, but that memory lives on one machine, with one person:

  • Switch to another computer to pick up yesterday's task and you have to re-explain all the context;

  • A colleague's agent doesn't know the architecture decisions the team already made and redoes the work its own way;

  • Dump raw conversation into a vector store and unverified guesses, stale handoffs, and accidentally pasted secrets get mixed in — with no clear sense of who is allowed to change what.

Waystone adds a layer of permissioned, reviewed, provenance-tracked team memory between them. It doesn't replace rules files like CLAUDE.md / AGENTS.md, and it doesn't rewrite any agent's native memory; recalled content is just provenance-attributed reference material.

Related MCP server: Heimdall MCP Server

Key features

Capability

Description

Per-project isolation

Independent members and permissions per project: owner, collaborator, reader; a removed member loses access immediately

Confirmed before publishing

Imported files are previewed locally offline first; both client and server block obvious credentials at publish time

Changes go through proposals

New content on the same topic, environment, and branch becomes a pending proposal that an owner accepts, rebases, or rejects — newer writes never silently overwrite older ones, and the full history is kept

Scope

Each memory can be tagged with an environment (prod/dev), applicable branch, and source version; queries filter by scope before searching

Handoffs

handoff memories record progress, evidence, and next steps; they stop being recalled after 7 days by default; expired proposals lapse automatically

Retraction

Accidentally published content can be retracted: the body is wiped, the vector is deleted, and topic, author, timestamp, and audit trail are kept; the owner or the original author can do this

Recoverable search

SQLite is the single source of truth; the vector index (self-hosted Mem0) can be fully rebuilt at any time; vector results are cross-checked back against SQL for project and status — no cross-project leakage

Agent friendly

stdio MCP tools + CLI + an Agent Skill; browser device-code login, so agents never touch a password

Operational closure

The readiness probe queries the vector store for real; login is rate-limited by real source IP (Cloudflare-compatible); audit log; scheduled backups, restore drills, and off-site pull scripts

Architecture

A recall flows in this order: SQL first narrows the candidate records by member permissions and scope → vector search runs only within those candidates → results are checked back against SQL for project ownership, status, and validity period → the results are returned to the agent, along with any pending conflicting proposals and a note about memories with unspecified scope.

Quick start

1. Deploy the server

Prerequisites: a Linux server, Docker, a self-hosted Mem0 (official service, with an admin created and a service API key generated), and a domain that can get an HTTPS certificate.

git clone https://github.com/hb407033/waystone.git
cd waystone
docker build -t waystone:0.5.0 .

Save the Mem0 service API key to deploy/secrets/mem0_key (mode 600, do not commit to Git), edit the Mem0 address and Docker network name in deploy/compose.yaml to match your setup, then start:

docker compose -f deploy/compose.yaml up -d

The service only listens on the host's 127.0.0.1:8900. See deploy/Caddyfile.example to configure the reverse proxy and domain, then verify it's ready:

curl https://memory.example.com/ready

Full deployment, backup, monitoring, and recovery instructions are in docs/operations.md.

2. Install the client

uv tool install "git+https://github.com/hb407033/waystone@v0.5.0"
waystone login --server https://memory.example.com

login prints a browser authorization link; review the device in the browser and sign in. The first login should use the Mem0 admin account; other members register their own accounts via invite links, after which they can also create projects.

3. Connect your agents

# Claude Code
claude mcp add --scope user --transport stdio waystone -- waystone-mcp
# Codex
codex mcp add waystone -- waystone-mcp

Copy skills/waystone/SKILL.md to ~/.claude/skills/waystone/ (for Codex and Pi, ~/.agents/skills/waystone/). Step-by-step installation instructions for agents are in docs/install.md.

4. Use it in a project

cd your-repo
waystone init "Website Redesign"        # Create a project and bind the current directory; nothing is uploaded
waystone invite colleague@example.com  # Generate an invite link and pass it along
waystone import README.md --preview-only # Offline preview; drop --preview-only to publish after review
waystone recall "What decisions about the login module have been confirmed?"

Or just tell your agent: "Save the database choice we just confirmed into project memory" or "Check the project memory before picking up task-123."

MCP tools

Tool

Purpose

project_list / project_init / project_bind

List, create, and bind projects

memory_preview

Preview the Markdown/TXT to import offline, without uploading

memory_recall

Recall valid memories by question, environment, and branch

memory_publish

Publish a memory after the user confirms the content

memory_entries

Page through all records, proposals, and history

memory_resolve / memory_rebase / memory_reject

Owner handles conflicting proposals

memory_retract

Retract accidentally published content

memory_reindex

Repair or fully rebuild the vector index in batches

Operations involving credentials — login, joining a project, and the like — can only be done from the command line and the browser, never through model calls.

Remote connector: after setting PUBLIC_URL on the server, the same set of tools (minus project_init, project_bind, and memory_preview, with project_id required instead) is also served over Streamable HTTP at <server address>/mcp, authenticated via OAuth (dynamic client registration + PKCE, refresh token rotation). Claude web, Desktop, Cowork, mobile, Claude Code, and Codex can all connect directly, no local client installation needed. See docs/operations.md.

Configuration

Variable

Where

Description

WAYSTONE_DB

Server

SQLite path, default /data/waystone.sqlite

MEM0_URL

Server

Mem0 service address

MEM0_KEY_FILE

Server

Mem0 API key file path

FORWARDED_ALLOW_IPS

Server

Forwarding sources trusted by uvicorn; used with the reverse proxy to rate-limit by real source IP

PUBLIC_URL

Server

Public address (origin); enables the remote connector and OAuth authorization service once set

OAUTH_EXTRA_REDIRECT_URIS

Server

Additional allowed OAuth redirect URIs, comma-separated, matched verbatim

OAUTH_MAX_PENDING_CLIENTS

Server

Cap on registered clients that haven't produced a token yet, default 500

WAYSTONE_SERVER

Client

Server address; can also be set and saved to the local session via waystone login --server

WAYSTONE_PROFILE

Client

Local session file path, default ~/.config/waystone/session.json (mode 600)

WAYSTONE_TRUST_ENV

Client

Set to 1 to read proxy and certificate environment variables like HTTPS_PROXY and SSL_CERT_FILE

Security model and known limitations

We try to be explicit about what this can and cannot do:

  • Trust boundary: all permission checks happen server-side; the binding file .waystone.json in a repository only records the project ID and server address — it grants no permissions and cannot redirect a session token to another server.

  • Memories are not instructions: recalled results are clearly labeled as reference material and cannot override user requests, rules files, or tool permissions. But shared memory can still spread misinformation across machines, so review content before publishing.

  • Credential detection is best-effort: it only catches obvious key formats; it cannot guarantee every secret is found.

  • Retraction residue: retraction wipes the database body and deletes the vector, but generated backups aren't rotated out until the retention period passes, and Mem0's own history store may still hold the original text — this needs operational cleanup.

  • Remote connector: the application name on the consent page is self-reported by the client and cannot be verified; only approve connections you just initiated. Remote authorizations can be listed and revoked with waystone connections / disconnect.

  • Sessions: sessions auto-renew with use within 30 days, with no absolute cap; logout only revokes the current session.

  • Not currently supported: highly-available multi-instance deployment, project ownership transfer, CLI session listing and remote revocation, password changes, cross-topic semantic contradiction detection.

  • Rate limiting: counted per source IP; IPv6 clients can rotate addresses within the same subnet.

For how this divides labor with agent native memory, see docs/memory-coexistence.md. Please report security issues privately following SECURITY.md.

Development

uv sync --extra test
uv run pytest -q

Tests cover permissions and cross-project isolation, proposal state transitions, retraction and vector cleanup, rate-limit source IP (when Docker and the caddy:2 image are available locally, Caddy actually runs in a container), and a real stdio-MCP-to-HTTP round trip. deploy/smoke.py performs isolated acceptance testing on the server against a real Mem0 and cleans up the vectors produced by the test run.

Roadmap

  • Project ownership transfer and additions

  • Session list, remote revocation, and password changes

  • Optional built-in vector index, removing the dependency on a standalone Mem0 service

  • Same-topic semantic contradiction hints

  • Publish to PyPI (package name waystone-memory)

  • English documentation

Contributing

Issues and pull requests are welcome; see CONTRIBUTING.md for the process. Version changes are in CHANGELOG.md.

License

Apache License 2.0

Available Tools

12 tools
memory_entriesB

查看项目已发布、待处理及已被替代的记忆和来源。

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNo
directoryYes

TDQS

B3.4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It discloses that the tool shows entries in three states (published, pending, superseded), which is useful behavioral context. However, it doesn't mention pagination behavior (cursor/limit), ordering, or whether it returns sources alongside memories in a combined format.

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?

A single concise sentence that front-loads the core purpose. It's efficient and doesn't waste words, though it could add a brief note about pagination without becoming verbose.

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 listing tool with no output schema and no annotations, the description gives the essential purpose but omits pagination behavior and return format. The sibling context (memory_publish, memory_retract, memory_reject) helps situate it, but an agent would still need to infer how cursor/limit work.

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 0%, so the description must compensate. It explains the directory parameter's role implicitly (viewing project memories) but doesn't explain limit/cursor semantics. The description adds some context about what the directory contains but leaves pagination parameters undocumented.

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 states a specific verb ('查看' = view/list) and resource ('记忆和来源' = memories and sources) with a scope qualifier ('已发布、待处理及已被替代' = published, pending, and superseded). It distinguishes itself from sibling tools like memory_publish or memory_retract by focusing on viewing entries in those states, though it doesn't explicitly name a sibling alternative.

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 this is a read-only listing tool for memory entries in specific states, which helps an agent know when to use it (when needing to see published/pending/superseded memories). However, it doesn't explicitly state when not to use it or name alternatives like memory_recall or memory_preview for other viewing needs.

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

memory_previewB

离线预览明确指定的 Markdown/TXT 文件,不上传。将结果展示给用户核对。

ParametersJSON Schema
NameRequiredDescriptionDefault
filesYes
directoryYes

TDQS

B3.1/5.0
Behavior3/5

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

There are no annotations, so the description itself must disclose core behavior. It does communicate offline, no-upload, and user-visible verification behavior, which is meaningful and suggests a read-only, side-effect-free operation. However it doesn't state what exactly is returned (file content? rendered preview?), how errors like missing files are handled, or whether there any side effects beyond displaying results. It's useful but incomplete.

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?

Two short sentences, no filler, and the primary operation is front-loaded. The

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 no output schema, no annotations, and no nested structure, the description needs to explain observable behavior and expected return. It says the file preview result is set by the user for verification, but it does not explain the output shape, how the files are referenced, whether the preview renders the file content, or what errors (files not found, invalid name) look like. The agent is left without enough context to use the tool confidently in a workflow.

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

Parameters2/5

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

The schema has 0% description coverage, so the description must carry the parameter-term semantics. 'files' is faintly described as

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 a specific action (

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 a verification-before-something workflow: preview files to let the user check before a more permanent action like publishing or uploading. But it never says explicitly when to use this instead of memory_publish, memory_retract, or memory_recall, nor does it exclude cases. It's clear context but no defined when-not-to or alternative guidance, which is just enough.

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

memory_publishB

仅在用户确认具体内容后发布一条记忆;同主题同环境同分支变更会成为提案。先查已有主题并复用;填写已核实的环境、分支和来源版本,未知留空,不得猜测或上传秘密。

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNodecision
agentNomcp
topicYes
branchNo
sourceYes
contentYes
directoryYes
environmentNo
source_versionNo

TDQS

B3.4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full behavioral burden. It does disclose several important behaviors: user confirmation is required, same-topic/environment/branch changes become proposals, and secrets must not be uploaded. However, it does not cover side effects, reversibility, permissions, or response behavior, leaving some uncertainty for a mutation tool.

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 dense sentence that front-loads the core purpose and then packs essential constraints without filler. Every clause contributes practical meaning, making it efficient and well structured.

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 tool has nine parameters, no annotations, and no output schema, the description is not complete enough for an agent to invoke it reliably. It omits meaning for required fields like directory and source, does not explain the proposal lifecycle in depth, and provides no information about return values or failure modes.

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

Parameters2/5

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

Schema description coverage is 0%, and the description must compensate for nine parameters. It adds meaningful guidance for environment, branch, and source_version by saying they should be filled only when verified and left blank when unknown. However, required fields like directory and source are not explained, and parameters such as kind, agent, and content receive no definition or guidance.

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 says the tool publishes a memory ('发布一条记忆') and adds an important condition—only after user confirmation. It also explains that similar changes become proposals in certain contexts. It does not explicitly contrast itself with sibling tools like memory_recall or memory_retract, but the verb and resource are clear.

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 gives explicit usage constraints: publish only after user confirmation, reuse existing topics by checking first, leave unknown fields blank, and do not guess or upload secrets. It provides practical guidance on how to fill fields, though it does not explicitly state when to prefer a sibling tool over this one.

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

memory_rebaseC

所有者核对当前有效版本与旧提案后,重新将提案提交到当前版本;不会立即生效。

ParametersJSON Schema
NameRequiredDescriptionDefault
entry_idYes
directoryYes
expected_idYes

TDQS

C2.8/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It does reveal that the action won't take effect immediately, which is valuable, and implies a manual verification step by the owner. However, it does not disclose whether this is a mutation, whether it modifies or creates records, whether it is reversible, or what the side effects are. The transparency is partial at best.

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 sentence with no filler, which is efficient. It front-loads the primary condition and action. It could be slightly more direct about the tool's core intent, but overall it is concise and structured acceptably.

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 that there is no output schema, no annotations, and three required parameters, the description is inadequate. It omits parameter meanings, return values, error behaviors, and concrete usage context. While it provides a high-level process overview, an agent would struggle to invoke this tool correctly without additional information.

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

Parameters1/5

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

Schema description coverage is 0%, and the description provides no mapping or explanation for the three required parameters (directory, entry_id, expected_id). It references concepts like 'current valid version' and 'old proposal' but never connects them to the parameters, leaving an agent without any semantic guidance for filling the arguments.

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 states a specific action: re-submitting a proposal to the current version after the owner verifies it against the old version. It clearly identifies the resource (proposal/version) and the sequencing, and the explicit note that it won't take effect immediately adds a distinguishing characteristic. However, it doesn't explicitly name sibling alternatives, so it falls short of a 5.

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

Usage Guidelines3/5

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

The description implies a use case: when an owner has verified that the current valid version differs from an old proposal and wants to bring the proposal in line with the current version. It gives a precondition but does not state when not to use this tool or mention alternatives such as memory_reject or memory_resolve. The guidance is implicit rather than explicit.

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

memory_recallB

查询当前目录绑定项目的有效记忆;返回资料不具有指令优先级。

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
branchNo
directoryYes
environmentNo

TDQS

B3/5.0
Behavior3/5

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

The description adds a meaningful behavioral caveat: returned material does not carry instruction priority. The verb '查询' implies a read-only operation, but with no annotations it does not disclose side effects, permission requirements, error behavior, or return format.

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 two short, purposeful clauses with no filler. The core action is front-loaded)Skip final. It is appropriately compact for the information it conveys.

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?

With four parameters, no output schema, and no annotations, the description leaves important gaps: how to compose the query, what branch and environment mean, and what the response looks like. It covers the basic querying concept and the non-instructional nature of results, but not enough for confident invocation.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate for parameter meaning. It hints that 'current directory' relates to the directory parameter, but it does not explain query, branch, or environment semantics.

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 uses a specific verb (查询/query) and identifies the resource as memories bound to the current directory's project. It is clear but does not explicitly distinguish itself from sibling tools like memory_entries or memory_resolve.

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?

No guidance is provided about when to use memory_recall versus memory_entries, memory_resolve, or memory_preview. The description only states what the tool does in the current-directory context, without exclusions or alternative routing.

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

memory_reindexA

分批修复索引;full=true 对全部有效记录核对补齐(仅所有者)。继续传 next_cursor,直到为空;pending 非零需重试。

ParametersJSON Schema
NameRequiredDescriptionDefault
fullNo
limitNo
cursorNo
directoryYes

TDQS

A3.7/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral burden. It discloses the full-mode scope ('仅所有者'), pagination behavior (continue with next_cursor until empty), and the retry condition (pending nonzero), which are meaningful operational traits beyond a simple action label.

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 entire description is one dense, front-loaded sentence with no filler. It states the core action first, then packs mode semantics, ownership restrictions, and retry behavior into a compact set of clauses.

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?

The description gives enough operational guidance to attempt a call (cursor looping, retry condition, full mode), but with no output schema it does not clearly define the response structure. It also leaves directory and limit semantics implicit, making the tool somewhat incomplete for a fully informed agent.

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 0%, so the description must compensate. It adds meaning for cursor and full, and implies response fields like next_cursor and pending, but it does not explain directory or limit. The compensation is partial, leaving two parameters without meaningful context.

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 opens with '分批修复索引' (batch repair index), giving a specific verb + resource. It clearly identifies the tool's core function, though it does not explicitly differentiate it from sibling memory tools.

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?

Usage is implied through operational instructions: use full=true for full checks, pass next_cursor until empty, and retry when pending is nonzero. However, there is no explicit statement of when to choose this tool over alternatives like memory_rebase or memory_preview.

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

memory_rejectB

所有者明确拒绝某条提案后调用,保留内容和历史,不改写原生记忆。

ParametersJSON Schema
NameRequiredDescriptionDefault
entry_idYes
directoryYes

TDQS

B3.4/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 behavioral disclosure burden. It does disclose important traits: content and history are preserved, and native memory is not rewritten, suggesting a non-destructive rejection operation. However, it does not explain what state actually changes, whether the rejection is reversible, or what happens to the entry/proposal afterwards.

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 trigger condition and then states the key behavioral constraint. There is no filler or redundancy.

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 no annotations, no output schema, and sibling tools with overlapping semantics like memory_retract and memory_resolve, the description is too sparse. It does not clarify the proposal lifecycle, how directory and entry_id are used, what the result will be, or how this tool differs from alternatives. The non-destructive note is useful but insufficient for confident invocation.

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

Parameters2/5

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

Schema description coverage is 0%, and the description mentions neither directory nor entry_id, so it adds no parameter-level meaning. The parameter names are somewhat self-explanatory, but the description still fails to explain how each parameter relates to the rejection operation.

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 specifies that this tool is invoked when the owner explicitly rejects a proposal and indicates a non-destructive effect: preserving content/history and not rewriting native memory. This makes the purpose reasonably clear. It stops short of a 5 because it lacks an explicit operative verb such as 'mark as rejected' and does not contrast itself with sibling tools.

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?

A clear trigger condition is stated: call this after the owner explicitly rejects a proposal. The description does not mention exclusions or point to alternatives like memory_retract or memory_resolve, but the given usage context is specific enough to guide an agent.

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

memory_resolveC

向用户展示新旧版本并获得明确选择后调用;仅所有者可替代当前版本。当前没有有效版本(旧版本已撤回或过期)时,经所有者确认后 expected_id 留空。

ParametersJSON Schema
NameRequiredDescriptionDefault
entry_idYes
directoryYes
expected_idNo

TDQS

C2.8/5.0
Behavior2/5

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

With no annotations, the description must carry the full behavioral burden. It reveals that this is a mutating operation (replaces current version) and has an owner-only restriction. But it does not disclose side effects, success/failure behavior, reversibility, or whether it modifies other entries. For a write operation, this is insufficient transparency.

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

Conciseness3/5

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

The description is a single dense sentence that mixes usage rules, restrictions, and parameter guidance. It is concise but not well structured; there is no clear separation of purpose, usage, or parameters. It front-loads the 'show versions and get choice' instruction, which is not the core purpose.

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 mutation tool with three parameters, no output schema, and zero annotations, the description is incomplete. It lacks any explanation of directory and entry_id, does not describe the return value, and provides no distinction from similar memory tools. An agent would struggle to call this correctly without additional context.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must explain parameters. It only explains expected_id (leave blank when no valid version) but leaves directory and entry_id entirely unexplained. The description does not help an agent understand what values are valid or how they relate to the operation.

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

Purpose3/5

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

The description focuses on when to call rather than what the tool does. It implies the tool replaces the current version, but never states the core operation as a verb on a resource. The name 'memory_resolve' suggests conflict resolution, but the description doesn't explicitly say 'resolve a memory conflict' or similar. It is distinguishable from siblings only through inference.

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?

Provides explicit conditions: call after showing old/new versions and getting explicit choice, and only owner can replace. Also specifies when to leave expected_id blank. However, it does not mention alternatives among the sibling tools, so an agent might not know when to use this versus memory_reject or memory_rebase.

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

memory_retractA

仅在用户明确要求撤回这条记录后调用:正文会被永久抹除并删除向量,不可恢复;所有者或作者本人可操作。返回 index_status=purge_pending 时再次调用以重试删除向量。

ParametersJSON Schema
NameRequiredDescriptionDefault
entry_idYes
directoryYes

TDQS

A4.3/5.0
Behavior5/5

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

With no annotations present, the description carries the full burden and does so excellently. It discloses that content is permanently erased, unrecoverable, vector deletion occurs, only owner/author can operate, and a purge_pending status requires retrying. This is model transparency for a destructive 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 dense sentence that front-loads the critical trigger condition, then succinctly covers consequences, authorization, and retry behavior. Every clause adds necessary information; there is no redundancy or fluff.

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?

Given the tool's destructive nature and absence of annotations and output schema, the description covers the key operational aspects: when to call, what happens, who may call, and what to do on a partial failure. It falls short only in not documenting parameter semantics and the full set of possible return statuses.

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

Parameters2/5

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

Schema description coverage is 0%, and the description does not explain what entry_id or directory represent or how they relate to the retraction. The parameter names are somewhat self-explanatory, but the description fails to compensate for the complete lack of schema-level documentation.

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 identifies a specific verb and resource: 'retract this record' with permanent erasure of the body and deletion of the vector. It also distinguishes itself from siblings like memory_reject or memory_publish by emphasizing the destructive, irreversible nature of the operation.

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 explicitly states the trigger condition: 'only call after the user explicitly requests retraction.' It also provides authorization constraints and a retry condition. It does not name alternative sibling tools, but the 'only call when' phrasing gives clear usage context.

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

project_bindB

绑定已加入的项目,不改变成员权限。

ParametersJSON Schema
NameRequiredDescriptionDefault
directoryYes
project_idYes

TDQS

B3/5.0
Behavior2/5

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

Annotations are not provided, so the description carries the full burden of behavioral disclosure. The description mentions it does not change member permissions, which is a positive behavioral constraint. However, it doesn't disclose side effects like what binding actually does to the project state, whether it's reversible, or what the response looks like. The mutation is implied by 'bind' but not detailed.

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, compact sentence in Chinese that is front-loaded with the verb and resource, and includes an important constraint. It is appropriately concise for the tool's apparent simplicity. No redundant or irrelevant information is present.

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?

Given the tool has only 2 parametersamen and no output schema, the description is somewhat minimal but covers the essential action. However, the lack of behavioral detail (e.g., is it idempotent? what errors occur?) and the absence of any guidance on the directory parameter make it slightly incomplete for an agent to call confidently without external knowledge.

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

Parameters2/5

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

Schema description coverage is 0%, and the description provides no parameter-level information. The parameter names 'project_id' and 'directory' are self-explanatory in the schema, but the description does not explain what 'directory' refers to (e.g., local filesystem path vs. project-relative path) or whether project_id is a UUID or some other identifier. With 0% coverage, the description should compensate, which it fails to do.

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 states a specific verb ('绑定' meaning bind) and resource ('已加入的项目' meaning joined projects), and clarifies that it does not change member permissions. This distinguishes it from project_init, which likely creates a project, and from memory tools. However, it doesn't explicitly state the purpose of binding (e.g., to make the project available for memory operations), but the core action is clear.

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 that the tool is used for projects the user has already joined, which is a usage condition. It doesn't explicitly state when not to use it or name alternatives. It also doesn't mention prerequisites like having the project ID or directory path. Given the sibling list includes project_init, a brief note on when to use init vs bind would improve this dimension.

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

project_initA

用户明确要求创建项目后调用;创建并绑定目录,不自动上传文件。

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
directoryYes

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It discloses that the tool creates and binds a directory and does not auto-upload files, which is useful behavioral context. However, it doesn't mention side effects like whether an existing directory is overwritten, whether the project is persisted, or what happens on failure. For a creation tool, this is a moderate 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 that front-loads the trigger condition and then states the core action and a key exclusion. Every word earns its place; no filler or repetition.

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 2-parameter creation tool with no output schema, the description covers the main action and a key behavioral constraint. However, it lacks details on parameter semantics and side effects, which an agent would need to call it correctly in edge cases. It's adequate but not complete.

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 0%, so the description must compensate. It mentions 'directory' binding, which gives some meaning to the directory parameter, but it doesn't explain what 'name' should be (e.g., unique project name, display name) or what format the directory should take (path, existing vs. new). The description adds minimal value beyond the schema's bare parameter names.

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 states a specific verb ('创建项目' = create project) and resource ('项目' = project), and adds a scoping condition ('用户明确要求创建项目后调用' = call only after user explicitly requests project creation). It also distinguishes itself from siblings by noting it binds a directory and does not auto-upload files. However, it doesn't explicitly name a sibling alternative, so differentiation is implied rather than explicit.

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 gives a clear trigger condition: only call when the user explicitly asks to create a project. It also states what the tool does not do ('不自动上传文件'), which helps an agent avoid misusing it for file uploads. It doesn't explicitly say when not to use it or name alternatives like project_bind, but the context is clear enough for a 4.

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

project_listA

列出当前身份已加入的项目。

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden of behavioral disclosure. The verb 'list' implies a read-only operation and the scope 'current identity' adds context, but it does not state whether prior identity binding is required, what the return payload contains, or whether any state changes occur.

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?

A single, front-loaded Chinese sentence conveys the operation, resource, and scope without redundancy or filler. 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, parameterless listing tool, the description is largely complete. It could be marginally improved by noting what the returned project list looks like, but since there is no output schema and no parameters, the current description is sufficient for an agent to invoke it correctly.

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, so schema coverage is trivially complete. With zero parameters there is no parameter-level burden for the description to carry, and no additional semantic clarification is needed.

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 ('列出' / list), a clear resource ('项目' / projects), and a precise scope ('当前身份已加入' / joined by the current identity). This scope immediately differentiates it from sibling tools like project_init and project_bind, which create or bind rather than list.

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 makes the intended usage clear: list the projects associated with the current identity. It does not explicitly mention when not to use it or name alternatives, but for a zero-parameter read-only listing tool the context is sufficient.

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.

  1. 12 tool updatesv0.5.0
    • First observedmemory_entries
    • First observedmemory_preview
    • First observedmemory_publish
    • First observedmemory_rebase
    • First observedmemory_recall
    • First observedmemory_reindex
    • First observedmemory_reject
    • First observedmemory_resolve
    • First observedmemory_retract
    • First observedproject_bind
    • First observedproject_init
    • First observedproject_list

TDQS

A3.6/5.0

Scored across 12 tools

Disambiguation4/5

Most tools target distinct actions in the memory/project lifecycle, and descriptions clarify workflow roles. The only real ambiguity is between memory_entries and memory_recall, since both return memories, but their scope differs (all entries vs. effective memories for the bound project).

Naming Consistency4/5

Almost all tools follow a verb_noun pattern with snake_case, such as memory_publish, memory_retract, and project_init. The exception is memory_entries, which uses a noun phrase instead of a verb (e.g., list_memories would be more consistent), but the overall pattern remains predictable.

Tool Count5/5

Twelve tools is well-scoped for a memory-and-project management server. Each tool covers a distinct lifecycle action, and none feel redundant or excessive.

Completeness5/5

The memory lifecycle is well covered: publishing, recalling, previewing, superseding, retracting, rejecting, rebasing, reindexing, and listing entries. Project management includes listing, initializing, and binding, which covers the apparent core workflows without obvious dead ends.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    C
    maintenance
    Provides AI assistants with persistent memory of your project architecture, development history, and technical decisions, allowing them to give context-aware coding help without needing repeated explanations.
    16
    61 npm
    2
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides AI coding assistants with persistent, context-rich memory of a codebase, including documentation and git history, enabling recall across sessions.
    105
    Apache 2.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    Gives AI assistants persistent, queryable project memory for decisions, patterns, and rules, reducing the need to re-explain context in every prompt.
    11
    Apache 2.0
  • A
    license
    A
    quality
    D
    maintenance
    Enables AI coding assistants to store and retrieve persistent long-term memory across sessions, remembering project preferences, build steps, and architecture decisions.
    4
    MIT