mcpField
S
SeekLink

SeekLink

本地服务
github.com搜索与检索1120 周前更新

关于 SeekLink

SeekLink 是面向个人知识库和本地 Agent 工作流的 Markdown vault 语义搜索命令行工具,也可作为只读 MCP 服务运行。它结合关键词与向量检索并提供行号定位结果;项目已暂停维护。

主要功能

  1. 01关键词与向量混合搜索
  2. 02带行号的 Markdown 结果
  3. 03按标签和文件夹筛选
  4. 04读取指定文件行范围
  5. 05索引状态与诊断

适用场景

  1. 01在 Markdown vault 中查找相关笔记
  2. 02为 Agent 定位准确段落
  3. 03按标签或文件夹筛选笔记

MCP 相关

可选的 stdio MCP 服务提供只读的 search、get、status 和 doctor 工具。连接 MCP 客户端前,需先用命令行工具为 vault 建立索引。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"simonsysun-seeklink": {
"command": "uvx",
"args": [
"seeklink"
]
}
}
}
启动命令uvx seeklink

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

安装包
pypiseeklink0.7.0

工具

还没有获取到工具列表

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

详细介绍

SeekLink

English · 中文

PyPI Python 3.11+ Tests License: MIT

状态:暂停维护。 SeekLink 已不再积极维护。对于同类、仍在积极开发的本地 Markdown 搜索引擎——支持本地混合关键词 + 向量搜索、按行锚定结果、CLI + MCP 和多语言——我们推荐 qmd。

SeekLink 是一款本地语义搜索 CLI,也可选用只读 MCP stdio 服务,适用于 Markdown 知识库。它会为 .md 文件所在文件夹建立索引,使用混合关键词 + 向量检索,并返回按行锚定的结果,方便人类和 Agent 使用简单的 shell 命令读取。

它适用于个人知识库、兼容 Obsidian 的知识库、英中双语笔记和本地 Agent 工作流。Claude Code、Cursor 和 VS Code 等 MCP 客户端可通过 seeklink[mcp] 调用相同的只读搜索/获取/状态/诊断功能。它也适用于 Andrej Karpathy 的 llm-wiki 等 Markdown wiki 模式:Agent 可以搜索现有页面、读取精确的行范围,然后更新 wiki,而无需将知识库发送到托管服务。

所有操作都在本地运行。无需 API 密钥,也无需云端搜索服务或 Obsidian 插件。

安装

uv tool install seeklink
# or
pip install seeklink

如需 Apple Silicon 重排支持,请安装可选的 MLX 扩展:

uv tool install "seeklink[mlx]"
# or
pip install "seeklink[mlx]"

对于 Claude Code、Cursor 或 VS Code 等 Model Context Protocol(MCP)客户端,请安装可选的 MCP 扩展:

uv tool install "seeklink[mcp]"
# or
pip install "seeklink[mcp]"

SeekLink 要求 Python 的 sqlite3 模块链接到启用了 FTS5 的 SQLite 3.45 或更高版本。seeklink status --vault PATH 会检查此项;如果运行时 SQLite 版本过旧,则会输出清晰的错误信息。

快速开始

# 1. Build the index first.
seeklink index --vault /path/to/vault

# 2. Search it.
seeklink search "machine learning" --vault /path/to/vault

设置默认知识库后,日常使用会更简单:

export SEEKLINK_VAULT=/path/to/vault
seeklink index
seeklink search "agent memory systems"
seeklink get notes/agent-memory-patterns.md:1 -C 20

未传入 --vault 时,seeklink search 和针对单个文件的 seeklink index path/to/file.md 会使用常驻守护进程。该守护进程会将嵌入器和可选的重排器保留在内存中;在 macOS 上,它会显示为一个本地 Python 进程。它只在本地运行,使用 Unix 套接字,不会开放网络端口,也不会调用云端服务。默认情况下,闲置 15 分钟后会退出。完整知识库的 seeklink index 会在进程内运行,因此进度会输出到 stderr,最终的 Done: 摘要会输出到 stdout。seeklink status 和 seeklink get 始终采用冷启动:status 只读取 SQLite 元数据,get 则直接从磁盘读取文件。如果脚本需要一次性冷启动,可使用 --no-daemon、SEEKLINK_NO_DAEMON=1 或显式指定 --vault PATH。

MCP 用户也需先执行相同的步骤:注册 MCP 服务前,先用 seeklink index --vault PATH 建立索引。

输出

文本搜索输出格式稳定:

  SCORE  PATH[:LINE]  TITLE
           <content preview, one line, up to 120 chars>
  • PATH 是相对于知识库根目录的路径。
  • LINE 从 1 开始,指向当前文件中最匹配的片段。
  • 成功时(包括没有结果)退出码为 0;SeekLink 检测到运行时知识库/配置/文件错误时为 1;参数解析导致的命令行用法错误时为 2。
  • 分数适合在单次查询内排序。请勿比较启用和未启用重排器时的分数。

Agent 需要结构化输出时,请使用 JSON:

seeklink search "agent memory systems" --vault PATH --json
seeklink status --vault PATH --json
seeklink doctor --vault PATH --json
seeklink daemon status --json

常用命令

搜索
seeklink search "query" --vault PATH [options]

选项:

--top-k N          Number of results. Default: 10.
--json             Emit one machine-readable JSON object.
--tags TAG [TAG]   Filter by tags. AND semantics.
--folder PREFIX    Filter by vault-relative folder prefix.
--rerank-k N|auto  Rerank candidate budget. Default: auto.
--no-rerank        Skip cross-encoder reranking for this query.
--no-daemon        Force an in-process search instead of using the daemon.
--title-weight F   Override title/alias/heading channel weight. Default: 1.5.
获取

无需使用数据库或守护进程,即可读取文件中的精确行范围:

seeklink get notes/spaced-repetition.md
seeklink get notes/spaced-repetition.md:12
seeklink get notes/spaced-repetition.md:12 -l 40
seeklink get notes/spaced-repetition.md:12 -C 20

-l/--lines 会打印从 LINE 开始的行。-C/--context 会以 grep 风格打印 LINE 前后的行。拒绝 ../.. 等路径越界写法。

状态
seeklink status --vault PATH
seeklink status --vault PATH --json

状态会报告索引计数、模型名称、索引配置兼容性、SQLite WAL 状态和新鲜度警告。它不会加载嵌入模型或重排模型。

Doctor
seeklink doctor --vault PATH
seeklink doctor --vault PATH --json

Doctor 会检查 Python、SQLite、本地数据库、索引兼容性、守护进程状态,以及 MLX 是否可用(可选)。它不会下载或加载模型,但在本地 SeekLink 数据库/架构不存在时,可能会进行初始化。

MCP

可选的 Model Context Protocol (MCP) 适配器让 Agent 客户端能够直接发现并调用 SeekLink 的只读工具。CLI 可以独立运行;MCP 是同一检索路径的另一种入口,并非替代方案。

seeklink mcp --vault PATH

使用 seeklink[mcp] 安装。先用 CLI 构建索引:seeklink index --vault PATH。MCP 适配器为只读模式,提供四种工具:search、get、status 和 doctor。它不提供 index,不会写入笔记,不使用 HTTP/OAuth,也不会通过 Unix 套接字守护进程进行路由。每个知识库运行一个 MCP 服务。search 会保持文本摘要简洁,并附带路径和行锚点;需要预览结果的 Agent 可在结构化内容中查看。对于已有的 .seeklink/seeklink.db,status 和 doctor 可能会初始化或迁移本地 SeekLink 架构,但不会为 Markdown 笔记编制索引或进行修改。如果你的 MCP 客户端无法继承 shell 的 PATH,请在下方示例中使用 which seeklink 返回的绝对路径。

Claude Code:

claude mcp add --transport stdio --scope project seeklink \
  -- seeklink mcp --vault /ABS/PATH/TO/VAULT

Cursor .cursor/mcp.json:

{
  "mcpServers": {
    "seeklink": {
      "type": "stdio",
      "command": "seeklink",
      "args": ["mcp", "--vault", "/ABS/PATH/TO/VAULT"]
    }
  }
}

VS Code .vscode/mcp.json:

{
  "servers": {
    "seeklink": {
      "type": "stdio",
      "command": "seeklink",
      "args": ["mcp", "--vault", "/ABS/PATH/TO/VAULT"]
    }
  }
}
索引
seeklink index --vault PATH
seeklink index path/to/file.md --vault PATH

对整个知识库编制索引时,除非已存储的索引使用了不同的嵌入器、向量维度或分块器配置,否则会根据内容哈希跳过未更改的文件;如果配置不同,SeekLink 会重建派生索引内容。对单个文件编制索引时,仅当现有索引配置兼容,才会更新该 Markdown 文件。

守护进程
seeklink daemon status
seeklink daemon stop
seeklink daemon restart
seeklink daemon pid
seeklink daemon run --vault PATH

通常无需手动启动守护进程。search 和单文件 index 会在适当时自动启动并重启守护进程;它在闲置 SEEKLINK_DAEMON_IDLE_TIMEOUT 秒后退出。默认值为 900 秒(15 分钟);将其设为 0、off、false 或 no,可让守护进程持续运行,直到手动停止。

对整个知识库运行 index 时仍会在进程内执行,以便显示进度。对 search 或单文件 index 传入 --vault,会强制使用一次性冷启动路径,因为守护进程在启动时会绑定到一个知识库。--no-daemon 和 SEEKLINK_NO_DAEMON=1 也会强制使用相同的冷启动路径。使用 seeklink daemon status 检查常驻进程,使用 seeklink daemon stop 立即释放其内存。

搜索原理

SeekLink 使用 Reciprocal Rank Fusion 融合以下四个通道:

通道用途
BM25 / FTS5精确词语、代码术语、缩写、CJK 词法匹配
向量搜索不同措辞之间的语义匹配
标题 / 别名 / 标题层级精确查找笔记和章节
Wikilink 入度根据现有 [[links]] 得出的轻量图质量先验

默认嵌入器通过 fastembed 使用 jinaai/jina-embeddings-v2-base-zh。CJK 全文搜索会在本地 Python/SQLite 构建能够安全注册 jieba 分词器时使用 jieba FTS5 分词器;否则 SeekLink 会回退到 SQLite 内置的 trigram 分词器,而不会崩溃。

默认向量维度为 768。高级自定义嵌入器实验可设置 SEEKLINK_EMBEDDING_DIM,但该值必须与嵌入器的输出维度一致,且需要完整重建 seeklink index。

在 Apple Silicon 上,如果通过 seeklink[mlx] 安装,SeekLink 可使用 mlx-community/Qwen3-Reranker-0.6B-mxfp8 对候选结果重排。重排在本地进行且为可选功能;如果 MLX 不可用,SeekLink 会回退到第一阶段的混合 RRF 排序。使用 --no-rerank 可针对单次查询禁用重排,或将 SEEKLINK_RERANKER_MODEL="" 设为空字符串以全局禁用。

Frontmatter

Markdown frontmatter 是可选的。存在时,SeekLink 会使用它来获取标签和 别名:

---
tags: [ai, memory]
aliases: [LLM memory, agent memory]
---
  • tags 支持筛选搜索:seeklink search "memory" --tags ai
  • aliases 会被编入搜索索引,并在解析 wikilink 时使用

存储

SeekLink 会在知识库中写入一个 SQLite 数据库:

/path/to/vault/.seeklink/seeklink.db

数据库包含源元数据、分块、FTS5 表、sqlite-vec 向量和 wikilink 图。删除 .seeklink/ 并运行 seeklink index 即可重建。

支持情况

区域状态
Python3.11、3.12、3.13、3.14
SQLite与 SQLite 3.45+ 链接且启用 FTS5 的 Python sqlite3
OSmacOS 和 Linux
Windows不作为一等支持平台
文件格式Markdown .md
知识库风格普通文件夹或兼容 Obsidian 的知识库
CJK通过 jieba 使用原生路径,静态 SQLite 构建时回退到 trigram
重排器Apple Silicon 上可选的 seeklink[mlx] 附加项;其他平台禁用
守护进程每台机器仅支持一个知识库
MCP可选的 seeklink[mcp] stdio 适配器,每个知识库一个服务

不适用场景

  • 托管式或同步式的多用户搜索。
  • 未经转换的非 Markdown 来源。
  • GUI 或 Obsidian 插件。
  • 对数百万条笔记进行亚毫秒级搜索。
  • 云端嵌入或重排 API。

Agent 说明

Agent 可以通过普通子进程调用使用 SeekLink:

seeklink status --vault PATH
seeklink index --vault PATH
seeklink search "query" --vault PATH --json
seeklink get PATH:LINE -C 20 --vault PATH

MCP 客户端可以使用可选的只读适配器:

seeklink mcp --vault PATH

若要让 Agent 为 Markdown 知识库选择 SeekLink,请将以下内容添加到 项目的 AGENTS.md、CLAUDE.md 或编辑器规则中:

When you need to search or inspect this Markdown vault, use SeekLink for
semantic retrieval:

1. Run `seeklink status --vault PATH --json`.
2. If no index exists or files changed, run `seeklink index --vault PATH`.
3. Run `seeklink search "QUERY" --vault PATH --json`.
4. Read exact context with `seeklink get PATH:LINE -C 20 --vault PATH`.

If SeekLink is registered as an MCP server in this client, prefer the
`search`, `get`, `status`, and `doctor` MCP tools over shelling out to the CLI.

Prefer SeekLink for conceptual, cross-language, tag/folder-filtered, or
Obsidian-style note searches. Use rg for exact literal searches.

对于高频循环,守护进程会在 ~/.rhizome/seeklink.sock 的 Unix 套接字上公开长度前缀 JSON 协议。除非确实需要套接字级延迟,大多数 Agent 应优先使用 CLI JSON 接口。

精简版 Agent 约定见 llms.txt。

评估

搜索质量测试位于 tests/blind/;测试方法记录在 docs/blind-test.md 中。发布声明应有随附的测试样例查询 或明确标注的私有知识库测量结果作为依据。

贡献

git clone https://github.com/simonsysun/seeklink
cd seeklink
uv sync --dev
uv run python -m pytest tests/ -q

保持运行时依赖精简,确保公开文档面向用户,并为用户可见的变更添加 CHANGELOG.md 条目。

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

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

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