Loci
Includes the current Git branch in generated project handoff cards, tying shared memory and handoff context to the relevant repository branch.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Lociremind me what we decided about the auth setup last session"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Loci(忆宫)
English | 简体中文
零依赖 · 中文检索 · 标准 MCP · 单文件网页面板 · 数据只在本机
为什么做这个项目
早上在 A 里把项目背景、技术选型、踩过的坑讲清楚了;中午想试试 B 家新出的模型,切过去 —— 它一个字都不知道,得重新讲一遍;晚上为了省额度换回 C,又得再讲一遍。
你是哪种用户 | 卡在哪 |
多 Agent / 多 harness 用户 | 决策原因、隐性约定、踩过的坑都留在上一个产品里,一换就失忆 |
模型对比测试者 | 想跑同一个任务在不同 harness / 模型下的表现,但上下文搬不过去,只能反复粘贴同一段背景 |
白嫖党(靠各家免费额度过日子) | 哪家有额度用哪家,一天切换三四次 —— 每次都要重建上下文,最耗耐心 |
Loci 把记忆从 harness 里剥出来,收进一个本地 SQLite 文件,用标准 MCP 给所有 Agent 共用:
换 Agent 不失忆 —— 新会话调一次
memory_context,定过的方案、踩过的坑、说过的偏好,开局就知道;15 个产品可以一键接入存结论,不堆聊天记录 —— 原文进会话库(你自己回看),决策 / 坑 / 偏好进记忆库
不花钱、不联网 —— 检索是本地 bigram + TF-IDF 算的:不调模型、不花 token、不发请求
中文真的能用 —— 中文提问、中文回答,靠本地分词命中,不是靠模型猜
零依赖,能读完 —— 单文件 Python + 一个 SQLite,无第三方包,不会被投毒也不会偷偷升级;约 4000 行
写进去的东西不会悄悄变 —— 每次写入都返回回执(写了什么 / 归到哪 / 出自哪段会话 / 怎么撤);碰到重复如实说「没有重复写入」
Related MCP server: mnemon-mcp
六个页面
会话 —— 每个 Agent 跟你说过什么
按 Agent 列出全部对话(标题、摘要、来源、时间),点进去是独立详情页:原话逐轮,以及从这段对话里抽出来的记忆。 右栏是「记忆来源」和「等你处理」(待质检 / 待采集 / 已排除)。本机已有的对话,扫一下就能收进来。
采集 —— 把散落的历史收进来
扫描本机各 Agent 的历史日志与 skills 目录,列出待入库条目,勾选后入库。 入库前做去重(含"同一天日志越写越长"那种前缀重合)和路径白名单校验;扫描根目录可增删。
交接卡 —— 把一个项目交给下一个 Agent
选一个项目,生成一张 markdown 交接卡:已确认的决策 / 偏好约定 / 踩过的坑 / 事实,连同所属 Git 分支一起标出。 复制走,粘给任何 Agent。
库 —— 记忆本体,以及它的运维
搜索、浏览全部记忆;七查质检(重复 / 疑似同义 / 可能矛盾 / 长期未更新 / 过短 / 过粗粒度 / 元数据缺失)+ 0-100 健康分; 备份、导出记忆包、恢复、销毁(销毁前强制确认,只动库、不动源文件)。
Agent —— 谁装了、谁接上了
列出本机装了哪些 Agent、哪些已接入 Loci、各自的数据目录能不能读。 已装的点「一键接入」写入 MCP 配置(写前备份、只合并不覆盖),可移除、可验证握手。
技能 · MCP —— 跨 Agent 复用
本机技能清单与分布(哪个技能被几个 Agent 装着),可跨 Agent 复制; MCP 配置查看与复制,省得每个产品手动填一遍。
快速开始
环境:Python 3.9+,无第三方依赖。
git clone https://github.com/kennytoliver/loci-local.git
cd loci-local
python panel.py --open想双击启动:自己建个快捷方式,指向 python panel.py --open 就行。
面板起来后 → Agent 页 → 对已装的 Agent 点「一键接入」。
不想开面板,命令行装:
python install_agents.py --list # 看本机装了什么
python install_agents.py --all # 全部接入(写前自动备份)
python install_agents.py --verify # 真实 MCP 握手验证手动接入任何 MCP 客户端:
{"command": "python", "args": ["-X", "utf8", "/path/to/loci.py"]}Windows 优先。macOS / Linux 能跑,回收站删除等少数功能降级。
页面怎么用、卡住了怎么办 —— 见 USAGE.md。
数据在你手里
一个 SQLite 文件,无账号、无 API Key、无遥测、无云端副本。面板只监听 127.0.0.1,Agent 走 stdio、不经过端口。
grep -nE "^\s*(import|from) " loci.py # 全是标准库,没有第三方
grep -nE "urlopen|requests\.|socket\." loci.py # 引擎不联网
wc -l loci.py # 约 4000 行,读得完同机任何能读到这个文件的进程都能拿到全部记忆 —— 请用文件权限保护它。 外部独立审查的四轮记录见 AUDIT-LOG.md。
文件
| 引擎 + MCP 服务 + CLI |
| 单文件网页面板 |
| 命令行接入器 |
| 数据库(首次运行自动创建,已在 .gitignore 中排除) |
贡献
欢迎 Issue 和 PR。唯一硬性要求:不引入第三方依赖 —— 零依赖是这个项目的立身之本。详见 CONTRIBUTING.md。
致谢
感谢 MemForge(MIT)先证明了「本地优先 + 单文件记忆库」这条路走得通。
License
MIT © Loci contributors.
Available Tools
11 toolsmemory_contextA
获取常驻上下文包(建议每次对话开始时调用):常驻记忆 + 近期重点记忆,一次拿齐跨 Agent 共享的上下文。输出顺序固定(常驻在前、近期在后),便于模型商前缀缓存命中、省 token
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 近期重点条数,默认8 | |
| branch | No | 可选:当前所在 Git 分支。**不传时自动读当前目录的 git 分支、并在末尾标出「(自动探测)」**;同分支的记忆排前面,其他分支降权但不隐藏。不能带换行/控制字符 | |
| project | No | 项目名(可选,留空返回全局) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses the output composition and deterministic ordering (resident first, recent after) and the token/cache motivation, but says nothing about permissions, side effects, behavior when no memory exists, or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and the call recommendation are front-loaded, and the trailing parenthetical about output ordering and cache efficiency is compact. It is dense but every clause contributes; no filler sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-annotation read tool with three optional parameters and no output schema, the description covers what the tool returns (composition plus ordering) and when to call it. It is largely sufficient, with only minor gaps around edge-case behavior and result field details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents limit, branch (including auto-detection and branch-weighting behavior), and project thoroughly. The description adds no parameter-level detail beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: retrieving a resident context package composed of resident memory plus recent key memories in one call. This distinguishes it functionally from the list/search siblings by emphasizing the bundled, cross-Agent shared payload. It does not, however, explicitly name any sibling it replaces or differs from.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear trigger condition: '建议每次对话开始时调用' (recommended at the start of each conversation), which tells the agent when to reach for it. It stops short of naming alternatives (e.g., memory_list or memory_search) or stating when not to use it, so there is no exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_deleteB
删除一条记忆(软删除)
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | 记忆ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. It discloses that the deletion is a soft delete, which is a valuable behavioral trait. However, it does not explain what soft delete entails (e.g., recoverability, data retention, or side effects), leaving important context unstated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It efficiently conveys the core purpose and the soft-delete behavior. A slight lack of structure (e.g., no separation of usage notes) keeps it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool with no annotations and no output schema, the description is minimally adequate. It states the soft-delete nature but omits important details such as what happens after deletion, whether it can be undone, or any required permissions. More context would be needed for a higher score.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for the single 'id' parameter, so the schema already fully documents its meaning. The description adds no additional semantic detail about the parameter, which is acceptable given the high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('删除' – delete) and resource ('一条记忆' – a memory). It also clarifies the operation is a soft delete. However, it does not explicitly differentiate from sibling tools like memory_pin or memory_save, which would be needed for a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no guidance on when to use this tool versus alternatives, nor any prerequisites or exclusions. The usage is only implied by the verb, which is not sufficient for a higher score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_handoffB
生成项目交接卡(markdown),切换到另一个 Agent 时注入上下文用
| Name | Required | Description | Default |
|---|---|---|---|
| project | Yes | 项目名 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full behavioral burden. It reveals the output format (markdown) but says nothing about whether the card is persisted, whether an existing card for the project is overwritten, what permissions are needed, or how the result is returned — critical unknowns for a mutation-flavored tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact clause with the action verb front-loaded and zero filler. It is appropriately sized for a one-parameter tool, though the brevity borders on under-specification rather than pure efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 1-param tool with no output schema and no annotations, the description is minimal but sufficient to identify the action. It omits whether the card is saved to memory or returned inline and whether re-invocation overwrites prior cards, leaving real gaps for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single 'project' parameter, so the schema already documents it. The description adds nothing about the parameter (e.g., whether it must match an existing project name), so the baseline 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: generates a project handoff card in markdown. The card concept distinguishes it from the memory_* siblings, though the description never explicitly names what it does not do. An agent can infer its role from the phrase 'handoff card', but sibling routing is left implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a clear trigger condition: '切换到另一个 Agent 时' (when switching to another Agent) and the purpose of injecting context. However, it does not mention alternatives such as session_save or memory_context, which are plausible competing choices for carrying context across sessions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_listC
列出最近的记忆
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | ||
| limit | No | 默认20 | |
| project | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It conveys only that results are 'recent', saying nothing about ordering, pagination, default result count behavior, permissions, or what fields are returned for a multi-parameter list tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short phrase with no wasted words, and the purpose is front-loaded. It is concise only because it is minimal, bordering on under-specification for a tool with three parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, three parameters at 33% coverage, and a one-line description, the definition is not complete enough for an agent to call this tool confidently. Nothing about result shape, filtering behavior, or defaults is covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33% (only 'limit' is documented as defaulting to 20), and the description adds no parameter meaning at all. The 'type' and 'project' parameters are unexplained in both the schema and the description, so the description fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource with a scope qualifier ('list recent memories'), so the agent knows it enumerates stored memories rather than mutating them. However, it offers no differentiation from closely related siblings such as memory_search, memory_context, or memory_recall, leaving the agent to infer which listing tool to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance, no mention of when to prefer memory_search or memory_context, and no stated prerequisites. The word 'recent' weakly implies browsing without a query, but this is inference rather than stated guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_pinA
把一条记忆设为常驻(始终随 memory_context 返回)或取消常驻
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | 记忆ID | |
| pinned | No | 1=常驻,0=取消,默认1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose the key behavioral consequence — pinned items are always returned by memory_context — which is real value beyond the schema. It omits idempotency, behavior when the id does not exist, and any cap on the number of pinned memories.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with the action front-loaded; the parenthetical defining 常驻 is the one clause of genuine added value and nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter toggle with full schema coverage and no output schema, the description covers the essential effect. Minor gaps remain around failure cases (invalid id) and interaction with search results, but they are not central to calling it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters are documented in the schema (id, pinned with 1/0 semantics and default 1). The description adds no format or edge-case detail about those parameters, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb pair (set as pinned / unpin) on a specific resource (a memory), and explains what 'pinned' means. It references the sibling memory_context that consumes the state, though it doesn't distinguish itself from memory_save or memory_delete beyond that.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: use it when a memory should always accompany memory_context results. There is no explicit when-not guidance, no mention of alternatives (e.g., whether memory_save can set pinned directly), and no note on limits or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_saveA
保存一条记忆到本地共享记忆库(跨 Agent 可见)。返回写回回执:写了哪条 / 归到哪 / 出自哪 / 怎么撤 —— 请把回执转述给用户,没有任何东西会静默进入长期记忆
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | 逗号分隔标签 | |
| turn | No | 可选:出自该会话的第几轮 | |
| type | No | 记忆类型 | |
| agent | No | 写入方 Agent 名 | |
| branch | No | 可选:这条结论属于哪个 Git 分支。**不传时会自动读当前目录的 git 分支**(读不到就留空);传空串表示明确与本分支无关。同分支的记忆在 memory_context 里排前面。不能带换行/控制字符(会被当成新章节注入给别的 Agent) | |
| content | Yes | 记忆内容(中文友好) | |
| project | No | 所属项目名 | |
| importance | No | 重要度1-4 | |
| session_id | No | 可选:这条结论出自哪段已归档会话(面板「会话」页的编号)。填了就能在面板里溯源回原话 | |
| skip_check | No | 可选:默认 true 走排除清单(拦掉工具输出残骸/纯符号/表格碎片等无信息量内容)。确实要原样存就传 false |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
无 annotations 时描述需承担全部行为披露责任,而它明确说明了返回“写回回执”的内容(写了哪条/归到哪/出自哪/怎么撤)以及“没有任何东西会静默进入长期记忆”的写入语义,并附带让 Agent 把回执转述给用户的行为要求。未提及权限、限额等,但核心行为(可撤销、非静默写入)已披露。
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
两句、前置了作用域与回执要点,信息密度高。回执四个要点用斜杠紧凑并列,无冗余铺垫,但整体略显压缩、可读性一般。
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
对一个 10 参数、无 output schema 的写入工具,描述通过说明返回回执的内容弥补了缺少输出 schema 的空白,且点明可撤销性。但缺少与兄弟工具的分工说明,Agent 仍无法完全判断调用边界。
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema 描述覆盖率 100%,10 个参数(含 branch 的自动读 git 分支、skip_check 默认 true 的排除逻辑、session_id 溯源等)已在 schema 中充分说明。描述未对参数做任何补充,按规则在高覆盖率下取基线 3。
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
明确的动词+资源:“保存一条记忆到本地共享记忆库”,并给出了区别于 session_save 等兄弟工具的关键作用域特征——“跨 Agent 可见”。但并未点名任何兄弟工具,无法帮助 Agent 在 memory_save 与 session_save 之间直接做区分。
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
没有给出何时使用本工具、何时应改用兄弟工具的显式说明。仅在末尾暗示写入是持久化/长期记忆,需要 Agent 自行推断它与 session_save、memory_handoff、memory_pin 的分工。
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_searchB
语义检索本地记忆库(中文 bigram + 英文混合检索)
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | 按类型过滤 | |
| limit | No | 返回条数,默认5 | |
| query | Yes | 查询(支持中文) | |
| project | No | 按项目过滤 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It usefully discloses the retrieval mechanism (Chinese bigram plus English hybrid search), which is meaningful behavioral context. However, it does not state result format, ordering, limits, or explicitly confirm read-only behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single compact phrase with no wasted wording and is front-loaded. It is appropriately concise, though extremely terse for a tool with several filters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description should do more to explain what results are returned and how search behaves. It names the retrieval approach but omits return shape, ordering, and how the filter parameters affect results. This leaves material gaps for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters, including query, type, project, and limit. The description adds retrieval-method context but no parameter-specific meaning beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource: 检索 (retrieve/search) the local memory store. It also states that retrieval is semantic and bilingual, which makes the purpose clearer than a bare name. It does not explicitly differentiate itself from siblings such as memory_list or session_recall.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus alternatives like memory_list, memory_context, or session_recall. The word 语义 implies a semantic-search use case, but no conditions, exclusions, or sibling routing are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_statsB
记忆库统计信息(总数/按类型/按项目/按来源Agent)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, and it does disclose the shape of the returned aggregates (total and three breakdowns) which is genuinely useful. However it says nothing about read-only nature, permissions, cost, or scope limits, leaving the safety profile unspecified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact phrase with the key information front-loaded (statistics) followed by the breakdowns. Nothing is wasted, though it is terse enough to border on under-specification about usage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter stats tool with no annotations and no output schema, the description supplies the essential missing piece: what the counts are broken down by. Read-only intent and any scoping constraints remain implicit, but the core need is met.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing to document and the schema is trivially complete. The baseline for a parameterless tool applies, with no compensating detail needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource (记忆库/memory bank) and the operation (统计信息/statistics), then enumerates the breakdown axes (total/by type/by project/by source Agent). This is specific enough to separate it from memory_list or memory_search, though it does not explicitly name a sibling it is not.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use or when-not-to-use guidance and no reference to alternative tools. An agent must infer that this is the aggregate-count tool rather than memory_list, which is a reasonable but unstated inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
panel_openA
打开 Loci 网页面板(看记忆 / 会话原文 / 交接卡 / 库)。只在用户明确想看面板时才调用(例如用户说「打开 Loci 面板」「我想看看我的记忆」);平时不要主动调、也不要每轮对话都调 —— 默认情况下面板不会自己弹出来
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral load. It usefully discloses that the panel does not appear automatically, but says nothing about what invoking the tool returns (e.g. a URL or a UI side effect) or any permission requirements, leaving a gap for a no-annotation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose, then the gating rule. Slightly repetitive — '只在用户明确想看面板时才调用' is restated as '平时不要主动调、也不要每轮对话都调' — but the redundancy is deliberate emphasis and remains short.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, no-output-schema UI tool, the description covers purpose and invocation gating adequately. The only missing piece is what actually happens on invocation (navigation target, returned value), which a caller might reasonably want to know.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, which is the baseline-4 case; there are no parameter semantics to add meaning to, and the description correctly implies the call needs no arguments.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (打开 Loci 网页面板) and enumerates the panel's contents (记忆 / 会话原文 / 交接卡 / 库). This distinguishes it from the data-oriented siblings (memory_list, memory_search), though it does not name any sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use ('只在用户明确想看面板时才调用', with example utterances) and explicit when-not ('平时不要主动调、也不要每轮对话都调'). This is unusually thorough routing guidance with concrete trigger phrases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_recallB
检索历史对话原文(会话层),返回当时的原话片段——用于在新 Agent 里复现旧对话上下文
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 返回条数,默认5 | |
| query | Yes | 查询(支持中文) | |
| project | No | 按项目过滤 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It usefully discloses that results are raw verbatim fragments from the session layer rather than summarized memory, but says nothing about read-only safety, permissions, result ordering, or pagination behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that leads with verb and resource, then qualifies scope and purpose. No filler, though the clause structure is slightly dense.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description does explain the return content (verbatim fragments), which covers the main gap. It still leaves unclear how it relates to the numerous retrieval siblings and what an empty or partial result looks like.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so limit, query, and project are already documented in the schema (including the default of 5). The description adds no parameter-level detail beyond what the schema provides, which is the baseline 3 case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (检索) plus resource (历史对话原文), and adds the return form (原话片段) and the session-layer scope. It does not name the sibling it contrasts with, so an agent must infer how it differs from memory_search or memory_context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The use case (复现旧对话上下文 in a new Agent) implies when to reach for it, but there is no explicit when-not guidance and no alternative named among the many retrieval siblings (memory_search, memory_context, memory_list).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_saveB
归档一次对话原文(会话层)。把当前对话保存进本地库,其他 Agent 之后可检索复现
| Name | Required | Description | Default |
|---|---|---|---|
| agent | No | 来源 Agent 名 | |
| title | No | 会话标题(留空按首句自动生成) | |
| project | No | 所属项目 | |
| summary | No | 一句话摘要(可选) | |
| transcript | Yes | 整段对话文本(或 JSONL/JSON 数组) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With zero annotations the description carries the full burden. It does disclose the essential behavior — the transcript is persisted into a local library and later retrievable by other agents — but says nothing about overwrite/duplicate semantics, required permissions, title auto-generation side effects, or failure modes for a write tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero padding, with the action and scope front-loaded. Efficient, though the second sentence mostly restates persistence already implied by 归档.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and no annotations, so the description must cover return/behavior on its own. It conveys persistence and retrievability but omits return values, conflict handling, and the save-vs-memory routing decision, leaving gaps for a 5-parameter write tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all five parameters including the transcript format hint (JSONL/JSON array). The description adds no parameter-level detail beyond what the schema provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (归档/保存) and resource (对话原文, 会话层), and distinguishes scope from the memory_* siblings by naming the session layer. It even hints at the read counterpart ('其他 Agent 之后可检索复现'), though it does not name session_recall explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use, no exclusions, and no comparison to memory_save, which is the obvious confusing sibling since both persist content. The '会话层' phrasing implies a session-vs-memory distinction but leaves the agent to infer it.
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.
11 tool updates
v0.1.0- First observed
memory_context - First observed
memory_delete - First observed
memory_handoff - First observed
memory_list - First observed
memory_pin - First observed
memory_save - First observed
memory_search - First observed
memory_stats - First observed
panel_open - First observed
session_recall - First observed
session_save
TDQS
Scored across 11 tools
Each tool has a distinct layer+action scope: memory_* tools target the memory store, session_* tools target archived conversation text, and panel_open is a UI action. The only mild overlaps are memory_list vs memory_context (recent vs resident context) and memory_handoff vs memory_context, but the descriptions clarify their different outputs and use cases.
Nearly all tools follow a predictable domain_action pattern (memory_save, memory_search, session_save, session_recall). Minor deviation: verbs mix actions (save/list/search) with nouns (stats/context/handoff), though it stays readable and consistent in style.
11 tools is well-scoped for a cross-agent memory system, covering listing, saving, searching, deleting, stats, pinning, context retrieval, session archive/recall, handoff, and panel access. Each tool earns its place with no obvious redundancy.
Strong lifecycle coverage across both memory and session layers, including soft delete and pin/unpin toggle. The notable gap is a memory_update/edit operation — editing requires delete-then-save — and there is no direct get-by-id retrieval, but core workflows are covered.
Maintenance
Related MCP Connectors
Persistent memory, knowledge graph, task management and more for AI agents via MCP.
One memory, every AI. A shared, user-owned markdown memory your AI clients read and write over MCP.
Governed personal world model and memory for your AI agent. Pair once, connect over MCP.
- LogRackOAuthai.lograck
Shared memory for your AI tools: tasks, notes and context every tool can read and write over MCP.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceA local-first MCP memory server providing persistent, searchable memory for AI agents, powered by SQLite.1 npm1Apache 2.0
- AlicenseNot gradedqualityDmaintenanceA local-first MCP server providing persistent, layered memory (episodic, semantic, procedural, resource) for AI agents, with search, versioning, and session management via a single SQLite file.26 npm3MIT
- AlicenseAqualityBmaintenanceProvides persistent, searchable memory for AI agents across any MCP-compatible client, storing project context, user preferences, and session learnings locally in SQLite with tools to save, retrieve, search, and manage them.125 npmMIT
- FlicenseNot gradedqualityAmaintenanceProvides persistent, cross-session memory for MCP-compatible AI tools, letting them store and share a unified local memory with Chinese-aware semantic search, typo correction, associative perception chains, and graph-based recall.109 npm3-