mindin

io.github.gronare由 GitHub 账号 gronare 发布v0.15.0更新于 Nov 6, 2026

Indexed search, schema-checked writes and session hooks for a markdown notes vault

概览

AI 生成的概览

面向编码代理的索引式 Markdown 笔记库:全文搜索、按 schema 校验的写入,以及把笔记与 git 历史关联的会话钩子。

可以做什么
  • 搜索与读取笔记:在本地 SQLite 索引上做全文搜索,带 etag 读取单篇笔记,列出路径,并获取会话上下文(系统笔记、未完成任务、参考笔记、仓库日志末尾)。
  • 写入与编辑笔记:按 schema 校验后创建或覆盖,支持条件 etag,追加带日期的行,移动或重命名笔记。
  • 管理笔记生命周期:设置状态(backlog、active、draft),用 close 归档已完成工作,删除笔记。
  • 记录被推迟的工作:按区域和优先级登记 backlog 笔记,按优先级和时长列出 backlog。
  • 日志与维护:每个仓库每次会话追加一行带提交 sha 的日志,用 lint 报告笔记库漂移,初始化 schema 与视图,查询身份与写入权限。
适用场景
适合希望助手跨会话保留项目记忆(计划、决策、坑点、待办任务)并以自有 Markdown 形式保存的场景,也适合需要把记忆与其描述的代码和提交关联起来的工作流。
运行要求
以 Python 包形式在本地通过 stdio 运行(uvx 或 uv tool install)。需要一个笔记库:用 VAULT_PATH 指向文件夹,或用 S3_* 设置(endpoint、bucket、region、prefix、access key、secret key)指向 S3 或 MinIO 存储桶。可选设置包括 VAULT_CACHE_DIR、VAULT_SCHEMA 及停止钩子相关变量。初始化会向笔记库写入 schema。
安装前请注意
笔记库放在存储桶时需提供 S3_ACCESS_KEY 与 S3_SECRET_KEY 凭据。助手可以写入、移动并永久删除笔记,close 会将其归档;只有违反 schema 的写入才会被拒绝。停止钩子可能提示代理保存未记录的工作。匿名使用数据仅在用户同意后发送。

安装

在 SourceWeft 中

  1. 打开 控制台中的 mindin,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

mindin

Memory for Claude and coding agents, kept as markdown notes you own, with a schema that holds and a tie to your git history.

Install

sh
curl -fsSL https://mindin.dev/install.sh | sh

It installs the mindin command with uv, asks where your vault lives (a folder, an S3 bucket or a vault server), and offers to add the vault to Claude Code, Codex and Cursor; it changes nothing in them without a yes. mindin was called notes-vault-mcp: the notes-vault-mcp package and command still work, and install and run mindin.

A vault server

A vault server with Docker Compose, for claude.ai, Claude Desktop, mobile and every machine you work on. You need a domain pointing at the machine, ports 80 and 443 open, and an SMTP account for sign-in links.

sh
mkdir notes-vault && cd notes-vaultcurl -fsSL -O https://github.com/gronare/mindin/releases/latest/download/compose.yml -O https://github.com/gronare/mindin/releases/latest/download/Caddyfilecurl -fsSL -o .env https://github.com/gronare/mindin/releases/latest/download/example.envdocker compose run --rm --no-deps vault master-key generate   # paste into .env, with VAULT_HOST and SMTPdocker compose up -ddocker compose exec vault mindin accounts invite [email protected]

Then open https://VAULT_HOST/account and sign in. Install with Docker walks through each step.

Without the script, on one machine: uv tool install mindin, then mindin setup.

mindin asks before it shares anonymous usage data, and sends nothing until you say yes: then, once a day, a random install id, mindin's version, the OS and CPU type and how mindin runs (plugin, CLI or server) go to signals.mindin.dev, never notes, names, paths or your vault's address. mindin setup --signals yes|no changes the answer. The install signal has the details.

Use

Add the server's address, https://VAULT_HOST/mcp, as a custom connector in claude.ai. Claude searches, reads and writes your notes. The same search from a shell on a signed-in machine:

console
$ mindin search "signing in"1 note · archive and superseded hidden
myapp  system  3 daysAreas/myapp.md  ## Sign-in Users sign in with passkeys; email links are the fallback.

What you get

  • Notes you own. Plain markdown in a folder or an S3 bucket; open them in Obsidian, keep them in git.
  • A schema with teeth. Required fields, legal statuses and kinds, a tag vocabulary; a write that breaks the contract is refused. Start from PARA, a simple vault, a journal or your own layout.
  • A lifecycle. close archives finished work, backlog_add files what was deferred, log_append writes one line per repo per session, lint reports drift.
  • Memory tied to code. A note names the paths it describes; the session-start hook prints the commits newer than the note.
  • Search that reads your languages. Stemming, folded diacritics, synonyms, and optional search by meaning that runs on your machine.
  • Your own vault server. Accounts with passkeys, email links, GitHub or your identity provider, several vaults each, shared vaults, sealed in storage.

Documentation

docs/ has the install guides, the how-tos for each client, the reference for every tool, command and setting, and how it works.

License

MIT. See LICENSE.

来源:README.md,提交 dad1c8b

工具

16

read_file

MODERATE — one round trip to storage. Returns the note with an `etag:` first line; pass that etag back to write_file to refuse a write over someone else's change. Search first. `.vault/schema.yml` reads the vault's schema.

输入参数path必填

write_file

WRITE — validates the frontmatter against the vault schema and refuses the write if it does not hold. Stamps `updated` with today and fills `date` when missing. Pass expected_etag from read_file to make the write conditional, or "*" to create a note that must not exist yet.

输入参数path必填content必填expected_etag

append_file

WRITE — appends to an existing note and bumps `updated`; the note must still satisfy the schema. A missing note is refused: create it with write_file.

输入参数path必填content必填

move_file

WRITE — moves or renames a note; the note must satisfy the schema at the destination. Use `close` to archive finished work.

输入参数dest必填source必填

delete_file

WRITE — deletes a note for good. Prefer `close`, which keeps it.

输入参数path必填

list_files

CHEAP — paths only, no metadata and no bodies. `search` answers context questions better.

输入参数prefix

set_status

WRITE — changes a note's status without rewriting it: backlog (with a priority: urgent, high, medium, low) parks it, active picks it up again, draft. The triage list at session start is settled with this, append_file or close.

输入参数path必填sourcestatus必填priority

close

WRITE — finishes a note: sets status complete (or superseded with superseded_by when merged_into is given) and moves it into the archive. Run it in the same pass as the last commit of the work; a note left open is what makes the vault drift.

输入参数path必填statusmerged_into

backlog_add

WRITE — files an idea as a backlog note in the task folder: title, area (stem or [[stem]]), one line saying what and why, optional priority (urgent, high, medium, low) and source (who said it and when, or a sha). Call it the moment something is deferred, in so many words or in passing; picking the idea up later is setting its status to active.

输入参数area必填line必填title必填sourcepriority

backlog

CHEAP — the backlog sorted by priority then age. Filter by area (a stem, or the prefix a family of stems shares) and by priority.

输入参数arealimitpriority

log_append

WRITE — appends one dated line to the repo log, with the commits it produced. Run once at the end of a session per repo. Creates the log note when it is missing. repo is the main checkout's name, also from a worktree; branch is the branch the commits were made on. area is the stem of the system note (or [[stem]]); it defaults to the repo name.

输入参数arealine必填repo必填branchcommits

context

CHEAP — the session-start call. Returns the system notes covering the code at `path`, the open tasks for it, the reference notes and the tail of the repo log, in one answer. Use it before searching blind. format "json" adds the system notes' paths and dates and the triage keys, for hooks that read it.

输入参数pathrepolimitqueryformat

whoami

CHEAP — who this connection signs in as and whether it may write. Answers JSON.

无需输入参数。

lint

MODERATE — reads every note to report drift: broken frontmatter, missing required fields, missing area, unresolved wikilinks, orphans, stale open tasks, archived notes still marked active, duplicate stems and superseded targets that do not exist.

无需输入参数。

init

WRITE — sets a vault up: writes `.vault/schema.yml` and the Obsidian Bases views into the vault root. Run once per vault, right after installing. preset picks the layout of a vault without a schema: default, para, simple, journal, custom; without it, the vault gets default. On a vault that has a schema, it only writes the views that are missing and keeps the rest; a layout is switched with the CLI (`init --preset <name> --force`) or on the account page, never through this tool.

输入参数forcepreset

版本历史

4
  1. v0.15.0最新Nov 6, 2026
  2. v0.14.3Nov 5, 2026
  3. v0.14.2Nov 5, 2026
  4. v0.14.1Nov 5, 2026

评分

已满足适用检查项的 90%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分
  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分