mcpField
M
Mimirs

Mimirs

本地服务
github.com/TheWinci记忆与知识3011 周前更新

关于 Mimirs

Mimirs 是面向 AI 编码 Agent 的项目持久记忆工具,采用本地优先设计,无需 API 密钥或 Docker,基于 bun 与 SQLite 运行。它结合向量与 BM25 混合检索,并通过 AST 感知分块理解代码结构。

主要功能

  1. 01向量与 BM25 混合检索
  2. 02基于 AST 的分块,支持 24 种语言
  3. 03依赖图权重提升相关文件排序
  4. 04跨会话对话记忆与检查点
  5. 05批注与自动生成的 Wiki

适用场景

  1. 01让编码 Agent 在会话开始时快速定位相关文件
  2. 02在多次会话之间保留项目上下文与讨论记录
  3. 03为代码库生成并维护 Wiki 文档

MCP 相关

Mimirs 以 MCP 服务形式通过 stdio 运行,向 Claude Code、Cursor、Windsurf 等 MCP 客户端提供检索与记忆相关工具,并可通过 mimirs init 自动配置客户端。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"mimirs": {
"command": "npx",
"args": [
"-y",
"mimirs"
],
"env": {
"RAG_PROJECT_DIR": "<RAG_PROJECT_DIR>"
}
}
}
}
启动命令npx -y mimirs
需要配置的环境变量
RAG_PROJECT_DIR

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmmimirs

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

mimirs 标志

MIMIRS

以北欧智慧与知识之神 Mímir 命名。

为 AI 编码 Agent 提供持久的项目记忆。只需一条命令即可完成设置,无需维护。

npm 许可证

你的 Agent 每次开始会话时都一无所知——只能猜文件名、搜索关键字、把上下文浪费在无关文件上,还会忘记昨天讨论过的所有内容。

在一个真实项目中,一条典型提示词会消耗 380K 个 token,端到端约需 12 秒。

使用 mimirs 建立索引后:91K 个 token,约需 3 秒——在该代码库中减少了 76%。实际数据会因仓库大小、查询和模型而异。

无需 API 密钥。无需云服务。无需 Docker。
只需 bun 和 SQLite。
语义搜索  ·  自动生成的 Wiki
跨会话记忆  ·  依赖关系图  ·  注释
兼容:Claude Code  ·  Cursor  ·  Windsurf  ·  JetBrains (Junie)  ·  GitHub Copilot  ·  任意 MCP 客户端
mimirs:从终端为仓库建立索引,然后搜索、阅读并查找受影响的测试

快速开始

1. 前置条件

Bun(curl -fsSL https://bun.sh/install | bash),macOS 用户还需要安装较新版本的 SQLite——Apple 捆绑的版本不支持扩展:

brew install sqlite

Linux 和 Windows 已自带兼容的 SQLite。

2. 设置编辑器(自动)
bunx mimirs init --ide claude   # or: cursor, windsurf, copilot, jetbrains, all

这会创建 MCP 服务配置、编辑器规则、.mimirs/config.json 和 .gitignore 条目。使用 --ide all 可一次性设置所有受支持的编辑器。

init 支持 Claude Code、Cursor、Windsurf、Copilot 和 JetBrains (Junie)。其他工具——Codex、Zed、自定义客户端——请复制下面的代码片段之一。

3. 设置编辑器(手动参考)

mimirs MCP 服务通过 stdio 运行。每个客户端都需要相同的三项配置:command(bunx)、args(["mimirs@^1", "serve"]),以及指向项目根目录的 RAG_PROJECT_DIR 环境变量。

为什么用 @^1 而不是 @latest? 这个版本范围会让你保持在 1.x,因此仍会自动获取错误修复和新功能,但不会在未经你允许的情况下升级到带有破坏性变更的未来 2.0 版本。要升级到下一个主版本,请编辑参数或重新运行 bunx mimirs init。如果配置中已有 mimirs@latest,重新运行 bunx mimirs init 会将其改写为 mimirs@^1。

“command not found: bunx”/服务无法启动(但 bunx 在终端中可以运行)? 从 Dock 或桌面启动器启动的编辑器不会加载 shell 配置文件,因此其 PATH 中没有 ~/.bun/bin。请在下方代码片段中将 command 设置为 which bunx 返回的绝对路径,而不是单独的 bunx。bunx mimirs init 会自动写入绝对路径(重新运行即可修复现有配置),bunx mimirs doctor 会检测此问题。

Claude Code — 项目根目录中的 .mcp.json
{
  "mcpServers": {
    "mimirs": {
      "command": "bunx",
      "args": ["mimirs@^1", "serve"],
      "env": {
        "RAG_PROJECT_DIR": "/absolute/path/to/your/project"
      }
    }
  }
}
Cursor — 项目根目录中的 .cursor/mcp.json
{
  "mcpServers": {
    "mimirs": {
      "command": "bunx",
      "args": ["mimirs@^1", "serve"],
      "env": {
        "RAG_PROJECT_DIR": "/absolute/path/to/your/project"
      }
    }
  }
}
Windsurf — ~/.codeium/windsurf/mcp_config.json(全局)

Windsurf 从主目录而非项目目录读取 MCP 服务。JetBrains 插件版本使用 ~/.codeium/mcp_config.json。

{
  "mcpServers": {
    "mimirs": {
      "command": "bunx",
      "args": ["mimirs@^1", "serve"],
      "env": {
        "RAG_PROJECT_DIR": "/absolute/path/to/your/project"
      }
    }
  }
}
JetBrains (Junie) — 项目根目录中的 .junie/mcp.json
{
  "mcpServers": {
    "mimirs": {
      "command": "bunx",
      "args": ["mimirs@^1", "serve"],
      "env": {
        "RAG_PROJECT_DIR": "/absolute/path/to/your/project"
      }
    }
  }
}
GitHub Copilot — 项目根目录中的 .vscode/mcp.json

VS Code 的 Copilot 使用 servers 映射(而非 mcpServers)和 type 字段。

{
  "servers": {
    "mimirs": {
      "type": "stdio",
      "command": "bunx",
      "args": ["mimirs@^1", "serve"],
      "env": {
        "RAG_PROJECT_DIR": "/absolute/path/to/your/project"
      }
    }
  }
}
Codex — ~/.codex/config.toml(全局)

Codex 使用 TOML 而非 JSON,并从 ~/.codex/config.toml 读取配置。每个项目需要一个配置块——如果要配置多个仓库,请选择唯一的表名(mimirs-frontend、mimirs-api 等)。

[mcp_servers.mimirs]
command = "bunx"
args = ["mimirs@^1", "serve"]
env = { RAG_PROJECT_DIR = "/absolute/path/to/your/project" }

或者,也可以使用展开的 env 表:

[mcp_servers.mimirs]
command = "bunx"
args = ["mimirs@^1", "serve"]

[mcp_servers.mimirs.env]
RAG_PROJECT_DIR = "/absolute/path/to/your/project"
只读项目目录? 重定向索引

如果项目位于只读挂载中,请将 RAG_DB_DIR 设置为可写位置。索引会存放在那里,而不是 <project>/.mimirs/。

{
  "mcpServers": {
    "mimirs": {
      "command": "bunx",
      "args": ["mimirs@^1", "serve"],
      "env": {
        "RAG_PROJECT_DIR": "/read/only/project",
        "RAG_DB_DIR": "/home/me/.cache/mimirs/myproject"
      }
    }
  }
}
4. 首次索引

MCP 服务会在首次查询时延迟建立索引,因此配置完成后,只需向 Agent 提问即可。要预先强制建立完整索引(适用于大型仓库):

bunx mimirs index            # current directory
bunx mimirs status           # how many files, chunks, embeddings
5. 试用演示(可选)
bunx mimirs demo

手动工作流(不使用 init)

init 是一项便捷功能:它会配置你的编辑器(MCP 配置、Agent 规则、.gitignore、.mimirs/config.json)。它不会构建索引,下面的步骤也都不需要它——首次建立索引或查询时,索引和默认配置会自动创建。

1. 手动添加 MCP 服务。 从上面的手动参考中复制适用于你的客户端的代码片段:command: "bunx"、args: ["mimirs@^1", "serve"],以及指向项目根目录的 RAG_PROJECT_DIR。这就是全部 MCP 配置。

不使用 init 就不会有 Agent 规则文件,因此你的助手不会知道这些工具的存在。你可以在提示词中提及 mimirs,也可以将 CLAUDE.md 中的工具列表复制到编辑器的规则中。

2. 构建索引。 MCP 服务会在首次调用工具时延迟建立索引,因此通过 Agent 使用时可以跳过此步骤。若要提前建立索引(大型代码库建议这样做;使用下面的 CLI search/read 前则必须这样做):

bunx mimirs index                                # current directory
bunx mimirs index /path/to/repo                  # a specific directory
bunx mimirs index --patterns "src/**/*.ts,*.md"  # restrict to globs
bunx mimirs status                               # files, chunks, embeddings

无需 init,也无需配置文件——系统会应用默认设置,并将索引写入 <project>/.mimirs/。

3. 从 CLI 查询。 有两个读取命令,都会针对当前目录中的索引运行(使用 --dir 可指定其他目录):

# Where is it? — ranked file paths + snippet previews
bunx mimirs search "where is auth handled" --top 10

# What is it? — the actual matching code chunks (functions, classes, sections)
bunx mimirs read "jwt validation" --top 8 --threshold 0.3

可使用 --ext .ts,.tsx、--in src,packages/core 或 --exclude tests 限定范围。注意:CLI search/read 不会自动建立索引——请先运行 mimirs index(只有 MCP 服务会按需建立索引)。

Claude Code 插件

如需更深入的集成,mimirs 也可作为 Claude Code 插件使用。在 Claude Code 会话中:

/plugin marketplace add https://github.com/TheWinci/mimirs.git
/plugin install mimirs

该插件会配置 MCP 服务和三个钩子——SessionStart(上下文摘要)、PostToolUse(编辑后自动重新建立索引)、SessionEnd(自动创建检查点)——以及一组工作流技能,用于编排工具以完成常见任务:explore、plan、review、debug、research、recall、catch-up、handoff、doc-gaps、scout 和 wiki。

想要使用技能,但不安装插件? 这些技能是 skills/ 下的普通 SKILL.md 文件。将你喜欢的技能复制到项目的 .claude/skills/<name>/(与代码库共享)或 ~/.claude/skills/<name>/(适用于你的所有项目),Claude Code 就会在下次会话中加载它们。技能是 Claude Code 的功能,因此不适用于其他编辑器——但 MCP 工具本身可在任何地方使用。

搜索质量

Recall@10 为 89–97%,Recall@20 为 97–100%,MRR 为 0.69–0.77。在三种语言的四个真实代码库上进行基准测试,采用按难度分层混合的查询集(每组 72–120 个查询,约 ⅓ 为难题),并于 2026-06-04 在当前流水线上重新测量。完整方法见 BENCHMARKS.md。

代码库语言文件数查询数Recall@10MRR零遗漏率
mimirsTypeScript2447495.3%0.7594.1%
ExcalidrawTypeScript6937290.3%0.7739.7%
DjangoPython3,18111697.4%0.7272.6%
KubernetesGo8,79212089.2%0.68910.8%

较大的代码库(Kubernetes、Excalidraw)规模足够大,因此一些相关文件的排名会刚好落在前 10 之外;前 20 的召回率可达 97–100%,因此在大型代码库中请设置 searchTopK: 15–20。

与编码 Agent 的对比(ContextBench)

我们还在 ContextBench(针对真实代码仓库进行金标准上下文检索)上测试了 mimirs。该基准中的其他项目都是完整的编码 Agent——多步骤探索者——而非单次调用的工具。对于一个聚焦查询(大模型阅读 issue 后发送的查询),一次 mimirs 检索调用与完整的 Agent 执行轨迹相比,排名如下:

指标mimirs排名领域
文件覆盖率0.799#1高于 OpenHands、SWE-agent、Agentless……
行覆盖率0.341#1高于 Agentless、mini-SWE……
行精确率0.316#2仅次于 Agentless(0.376)
文件精确率0.192#6按照设计较低——优先召回

mimirs 通过单次调用在两项覆盖率指标上均领先。文件精确率有意排在最后:漏掉一个金标准文件是致命的(大模型永远看不到要修复的代码),多找到一个文件则很容易过滤——因此 mimirs 尽可能提高召回率,再由模型完成精确筛选。而文件精确率偏低,主要是指标造成的假象:mimirs 返回的非金标准文件中,约 86% 是与修复相关联的上下文(调用方、类型、同级实现),而非噪声——以金标准衡量时精确率为 0.19,以相关性衡量时则为 0.87。

相同的召回率,成本仅为一小部分。 在与仅使用 grep 的 Agent 正面对比时(原始 issue、无索引、不查看修复内容),针对相同的 15 个 issue 进行定位:mimirs 通过一次约 15 ms 的调用且不消耗任何大模型 Token,就能提供相关文件簇;Agent 则平均每个 issue 需要 约 11.5 次工具调用(每次都是一个大模型步骤)才能收敛——而且最终只找到主要文件。对于多文件修复,Agent 找到了金标准文件的 22%,而 mimirs 通过一次调用就找到了 56%——依赖关系图揭示了 issue 从未提及的次要文件。

n=15 的样本,对比 Agent 的 500 个样本集——仅供参考;Agent 的工具调用次数由其自行报告且设有上限。完整排行榜、注意事项、相关性和成本表请见 BENCHMARKS.md。

对比情况

mimirs无工具(grep + Read)塞入全部上下文云端 RAG 服务
设置一条命令无需设置无需设置API 密钥、账号
Token 成本约 91K/提示词约 380K/提示词整个代码库不等
搜索质量Recall@10 为 89–97%取决于关键词不适用(已加载全部内容)不等
代码理解感知 AST(24 种语言)行级无通常为行级
跨会话记忆对话 + 检查点无无部分支持
隐私完全本地本地本地数据会离开你的设备
价格免费免费高额 Token 费用$10-50/月 + Token 费用

为什么不选用现有工具?

  • Continue.dev 的 @codebase——功能最接近(本地 RAG、开源),但检索功能集成在编辑器扩展中。Mimirs 是独立的 MCP 服务,提供明确的工具(search、read_relevant、project_map、search_conversation、annotate),供 Agent 规划调用,并内置对话追踪和 Wiki 生成器。
  • Aider 的 repo-map——使用 tree-sitter 生成代码仓库的静态摘要,不使用嵌入。它巧妙而轻量,但摘要并不等于检索——mimirs 会针对每个查询,使用向量 + BM25 为代码块排序,并根据图中心性提升排名。
  • Sourcegraph Cody / OpenCtx——代码搜索能力出色,但索引依赖云基础设施和账号。只需运行一条 bunx 命令即可使用 Mimirs,且数据不会离开你的设备。
  • llama-index / LangChain / 自行搭建——这些都是库。Mimirs 开箱即用:已集成感知 AST 的分块、混合检索、文件监视器、对话追踪和注释功能。

工作原理

  1. 解析并分块 — 使用与类型匹配的策略拆分内容:代码按函数/类边界拆分(通过 tree-sitter 支持 24 种语言),Markdown 按标题拆分,YAML/JSON 按顶层键拆分。超过嵌入模型令牌限制的块会通过窗口切分后再合并。

  2. 生成嵌入 — 每个块都通过 all-MiniLM-L6-v2 转换为 384 维向量(在进程内通过 Transformers.js + ONNX 运行,无需 API 调用)。向量存储在 sqlite-vec 中。

  3. 构建依赖图 — 在 AST 分块时捕获导入说明符和导出符号,随后解析这些信息,构建文件级依赖图和符号级调用图。impact 会遍历函数的所有传递调用方(影响范围 + 要运行的测试);trace 会查找一个符号如何到达另一个符号;mimirs affected CLI 会将 git diff 转换为确切的待运行测试集合。

  4. 混合搜索 — 并行执行向量相似度搜索和 BM25 搜索,并通过倒数排名融合(加权,默认值为 0.5)合并结果,从而适应两种评分器差异很大的分数范围。标识符会按 camelCase/snake_case 拆分,因此搜索 depends 也会匹配 getDependsOn。随后根据依赖图中心性和路径启发式提升结果排名。read_relevant 会返回单个块及其实体名称和精确行号范围(path:start-end)。

  5. 监视并重新索引 — 文件变更会通过 2 秒防抖检测。变更文件会重新索引;已删除文件会被清理。

  6. 对话与检查点 — 实时读取 Claude Code 的 JSONL 对话记录。Agent 可以在重要时刻创建检查点,供后续会话搜索。

  7. 注释 — 附加到文件或符号的备注会在 read_relevant 结果中以 [NOTE] 块的形式显示。

  8. 分析 — 记录每次查询。分析结果会展示无结果查询、相关性较低的查询,以及不同时间段之间的趋势。

数据处理

mimirs 完全在你的机器上运行。它会索引仓库跟踪的文件,以及未跟踪但未被 gitignore 排除的文件(因此,忘记加入 gitignore 的 .env 可能会被读取——默认会排除 .env、*.pem、*.key 和 SSH 密钥等常见机密模式;你可以在 .mimirs/config.json 的 exclude 中添加自己的排除项)。文件内容和嵌入向量存储在 <project>/.mimirs/index.db 这个本地 SQLite 文件中。对话索引只会读取 ~/.claude/projects/<this-project>/ 下当前项目的对话记录。

唯一的网络调用是从 huggingface.co 一次性下载嵌入模型 (Xenova/all-MiniLM-L6-v2),并将其缓存到 ~/.cache/mimirs/models。你的代码不会离开你的机器——不会发送到任何服务。

支持的语言

通过 bun-chunk 和 tree-sitter 语法进行 AST 感知分块:

TypeScript、JavaScript、Python、Go、Rust、Java、C、C++、C#、Ruby、PHP、Scala、Kotlin、Lua、Zig、Elixir、Haskell、OCaml、Dart、Bash/Zsh、TOML、YAML、HTML、CSS/SCSS/LESS

也支持索引:Markdown、JSON、XML、SQL、GraphQL、Protobuf、Terraform、Dockerfile、Makefile 等。扩展名不在已知列表中的文件会回退到按段落拆分。

文档

技术栈

层选择
运行时Bun(内置 SQLite,TypeScript 运行速度快)
AST 分块bun-chunk — 支持 24 种语言的 tree-sitter 语法
嵌入Transformers.js + ONNX(在进程内运行,无需守护进程)
嵌入模型all-MiniLM-L6-v2(约 23MB,384 维)— 可配置
向量存储sqlite-vec(单个 .db 文件)
MCP@modelcontextprotocol/sdk(stdio 传输)
插件Claude Code 插件,包含技能和钩子

所有数据都存储在项目内的 .mimirs/ 中——请将其加入 .gitignore。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。