Documentation Index
Fetch the complete documentation index at: https://linkly.ai/docs/llms.txt
Use this file to discover all available pages before exploring further.
工具概览
Linkly AI 通过 MCP(Model Context Protocol)向 AI 助理暴露七个工具,构成一个渐进式的文档访问工作流:list_libraries(列出知识库)、explore(概览文档集合)和 find_paths(按关键词定位文件夹路径,配合 search 的 path_glob 使用)。
search
搜索文档,找到相关结果
outline
查看文档大纲,了解结构
grep
正则匹配,精确定位文本模式
read
阅读文档内容,获取详情
list_libraries
列出知识库及其文档数量
explore
概览文档集合的主题和结构
find_paths
按关键词定位文件夹路径,给
search 的 path_glob 提供候选检索(search)
搜索已索引的本地文档,返回最相关的结果列表。参数
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
query | string | 是 | — | 搜索关键词或短语 |
limit | number | 否 | 20 | 最大返回结果数(1-50) |
doc_types | string[] | 否 | 全部 | 按文档类型过滤,如 ["pdf", "md", "docx"] |
library | string | 否 | — | 限定在某个知识库内搜索,使用 list_libraries 查看可用知识库 |
path_glob | string | 否 | — | 按文件路径过滤,SQLite GLOB 语法。* 匹配任意字符(含 /),? 匹配单个字符,区分大小写。当真实路径未知时,先调 find_paths 获取 |
modified_after | string | 否 | — | 修改时间下界(含),ISO 8601 UTC 格式:日期 2024-01-01(视为 00:00:00Z)或完整 RFC 3339 2024-01-01T00:00:00Z |
modified_before | string | 否 | — | 修改时间上界(含),格式同 modified_after |
time_sort | string | 否 | default | 时间排序模式:default(保留相关度排序)/ newest(最新优先)/ oldest(最旧优先)。命中候选集去重之后才重排 |
output_format | string | 否 | markdown | 设为 json 可获得结构化 JSON 输出 |
- 当用户给出明确的时间窗口(“上个月”、“在 2024 年”、“近三个月”)时,用
modified_after/modified_before。 - 当用户只是说”最近的”、“最新的”、“最早的”,没有具体范围时,用
time_sort=newest或oldest。 - 两者可以组合:“2024 年里最早的”等于
modified_after=2024-01-01+modified_before=2024-12-31+time_sort=oldest。 - 计算”上个月”等相对时间时,先从任何工具响应末尾的
[meta] now=...字段读取当前 UTC 时间,再做日期推算(详见下方响应元数据)。
返回字段
每条搜索结果包含以下信息:| 字段 | 说明 |
|---|---|
doc_id | 文档唯一标识,用于后续 outline/read 调用 |
title | 文档标题 |
path | 文件路径 |
relevance | 相关度分数(0-1) |
word_count | 文档字数 |
total_lines | 文档总行数 |
has_outline | 是否有可用大纲 |
modified_at | 最后修改时间 |
keywords | 提取的关键词列表 |
snippet | 匹配的内容摘要片段 |
使用示例
大纲(outline)
获取一个或多个文档的结构化大纲和元数据,帮助快速了解文档结构并定位目标章节。参数
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
doc_ids | string[] | 是 | — | 文档 ID 列表(来自搜索结果) |
expand | string[] | 否 | 自动 | 要展开的节点 ID(如 ["2", "3.1"]),省略则自动展示所有层级 |
output_format | string | 否 | markdown | 设为 json 可获得结构化 JSON 输出 |
何时使用大纲
| 场景 | 建议 |
|---|---|
| 文档 > 50 行且有大纲 | 先查看大纲,再读取目标章节 |
| 短文档(< 50 行) | 跳过大纲,直接 read 全文 |
has_outline: false 的文档 | 使用 grep 定位模式或 read 逐页浏览 |
大纲功能对有书签的 PDF、 Markdown 和 DOCX
文档效果最好,在阅读大部头的文档、书籍的时候会获得事半功倍的效果。
纯文本和无书签的 PDF 将在后续迭代中提供大纲支持。
使用示例
正则匹配(grep)
在单个文档内通过正则表达式定位具体行。最适合has_outline=false 的文档(无法使用 outline 浏览结构时)。在 search 之后使用,用于精确定位特定文本(人名、日期、术语、标识符等),然后用 read 跳转到匹配位置深入阅读。适用于所有文档类型(PDF、Markdown、DOCX、TXT、HTML)。如需跨多个文档搜索,请对每个文档分别调用 grep。
参数
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
pattern | string | 是 | — | 要搜索的正则表达式模式 |
doc_id | string | 是 | — | 要搜索的文档 ID(来自搜索结果) |
context | number | 否 | 3 | 每个匹配行前后各 N 行上下文 |
before | number | 否 | — | 匹配行前 N 行上下文(覆盖 context) |
after | number | 否 | — | 匹配行后 N 行上下文(覆盖 context) |
case_insensitive | boolean | 否 | false | 大小写不敏感匹配 |
output_mode | string | 否 | content | content(匹配行及上下文)或 count(仅统计匹配数,用于预览总量) |
limit | number | 否 | 20 | 最大返回匹配行数(最多 100) |
offset | number | 否 | 0 | 跳过前 N 条匹配(分页用) |
output_format | string | 否 | markdown | 设为 json 可获得结构化 JSON 输出 |
何时使用 grep 而非 outline
| 场景 | 建议 |
|---|---|
| 需要查找特定术语、人名或日期 | 使用 grep |
| 需要了解文档整体结构 | 使用 outline |
| 文档没有大纲 | 使用 grep 定位 |
| 查找模式(邮箱、编号、数字等) | 使用 grep 正则 |
使用示例
阅读(read)
读取文档内容,支持行号定位和分页,适合阅读长文档的特定部分。Read 工具行为与 Claude AI SDK 的行为一致,因此能够在各种 Agentic AI 模型中获得最佳效果。参数
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
doc_id | string | 是 | — | 文档 ID(来自搜索结果) |
offset | number | 否 | 1 | 起始行号(从 1 开始) |
limit | number | 否 | 200 | 读取行数(最多 500) |
output_format | string | 否 | markdown | 设为 json 可获得结构化 JSON 输出 |
内容格式
Read 工具将返回带有行号的内容,方便引用和定位:
分页策略
对于长文档,建议分块读取:read 精确读取该区间的内容。
使用示例
知识库列表(list_libraries)
列出用户配置的所有知识库及其描述和文档数量。参数
无需参数。使用场景
- 用户询问”我有哪些知识库”时调用
- 在使用
search的library参数前,确认知识库名称
概览(explore)
获取全部已索引文档或特定知识库的鸟瞰概览。返回文档类型分布、目录结构(含文件数和中位字数)以及高频关键词(标注集中来源)。参数
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
library | string | 否 | — | 指定知识库名称,省略则概览全部已索引文档 |
使用场景
- 用户想了解知识库或文档集合中大概有什么内容
- 用户没有明确的搜索主题,想先发现可用的主题和方向
- AI 助理需要了解文档集合的规模和主题分布,以便制定有效的搜索策略
search 查询的线索。
路径定位(find_paths)
按关键词在已索引文档的文件路径上做模糊匹配,聚合到文件夹粒度,返回最匹配的若干候选目录。其定位是search 的辅助工具:当用户描述容器名(如”在我的微信里”、“在 Notion 笔记里”)但你不知道这个容器在磁盘上的真实路径时,先用 find_paths 探测真实路径,再把它作为 search 的 path_glob 参数。
实际目录名往往和用户的口语不一致(“微信”对应 xinWeChat、“Notion 笔记”对应 notion 笔记 等),盲填 path_glob 容易失败。
参数
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
patterns | string[] | 是 | — | 关键词数组,对每个元素在路径上做子串匹配(内部包装为 SQL LIKE %关键词%)。多个关键词之间是 OR 关系,鼓励一次传入多个变体(中英对照、大小写、应用真实命名等),如 ["WeChat", "微信", "wxid", "xinWeChat"]。ASCII 大小写不敏感;CJK 字面匹配 |
library | string | 否 | — | 限定在某个知识库内查找,使用 list_libraries 查看可用知识库 |
limit | number | 否 | 10 | 最大候选目录数(最多 50) |
output_format | string | 否 | markdown | 设为 json 可获得结构化 JSON 输出 |
返回字段(JSON 模式)
| 字段 | 说明 |
|---|---|
total_files | 命中并被聚合到候选目录的文件总数(在 limit 截断之前) |
truncated | 是否因 limit 截断(true 表示候选目录还有更多) |
directories | 候选目录数组,按 file_count 降序排列。每项含 path(路径,遵循”显示完整路径”开关)和 file_count(该目录下的命中文件数) |
聚合行为
- 关键词只匹配到文件名段(不是任何目录段)的文件会被静默丢弃 —— 这是”找文件夹”工具,不是”找文件”工具。如果某个查询返回 0 个候选目录但你确认有匹配文件,应回退到直接用
search。 - 每条匹配按其路径中最浅的关键词出现位置做截断聚合:例如
local:///Users/me/Library/.../com.tencent.xinWeChat/Data/...被关键词WeChat命中后,聚合 key 是.../com.tencent.xinWeChat,无论文件本身嵌得多深。
何时使用
- 用户用模糊或跨语言词描述容器(“在我微信里”、“在 Notion 笔记里”、“在我的工作备份里”),且你不知道真实路径
- 在调用
search之前先确定path_glob的值
何时不使用
- 单纯按内容/主题搜索(“找简历”、“找 AI 论文”)—— 直接调
search,其混合检索本身已覆盖标题、文件名、内容、路径 - 仅按文件类型过滤(“所有 PDF”)—— 直接调
search加path_glob="*.pdf" - 没有容器意图的笼统查询(“找最近的东西”)—— 直接调
search
使用示例
响应元数据(Response Metadata)
每次成功的工具响应都会附带一个当前 UTC 时间字段,方便调用方推算”上个月”、“今年”、“过去 30 天”等相对日期,避免依赖模型训练截止时间瞎猜。-
Markdown 输出:响应末尾追加一行分隔块,形如:
-
JSON 输出:在响应顶层添加
_meta对象:
isError: true)不附加这个元数据 —— 错误体本身已经传达了失败原因,再附加时间戳反而会稀释信号。
当用户使用相对日期(“上个月”、“近三个月”)时,应当从最近一次工具响应中读取 now 字段,以此为基准换算出具体的 ISO 8601 日期,再传给 search 的 modified_after / modified_before。
调用示例
完整工作流:CLI 方式
以下示例演示如何通过 CLI 完成一次完整的文档检索:完整工作流:MCP 方式
AI 助理通过 MCP 协议调用工具时,请求格式如下:常见问题
支持哪些文档格式?
支持哪些文档格式?
Linkly AI 目前支持以下格式:
| 格式 | 扩展名 | 大纲支持 |
|---|---|---|
| Markdown | .md, .mdx | ✅ |
| Word | .docx | ✅ |
.pdf | 部分支持 | |
| 纯文本 | .txt | ❌ |
| HTML | .html, .htm | 部分支持 |
| 图片 (OCR) | .png, .jpg, .jpeg, .bmp, .webp | ❌ |
大纲不可用怎么办?
大纲不可用怎么办?
如果文档没有可用的大纲(
has_outline: false),你可以:- 直接使用
read工具分页浏览文档内容 - 先读取文档开头(默认 200 行),了解大致内容后再决定是否继续阅读
如何处理长文档?
如何处理长文档?
推荐流程:
- 先通过
outline了解文档结构(如果有大纲) - 根据大纲中的行范围,使用
read的offset和limit参数精确读取目标章节 - 每次最多读取 500 行,通过调整
offset分页读取
MCP 服务的默认端口是多少?
MCP 服务的默认端口是多少?
默认端口为 60606。如果该端口被占用,应用会自动尝试其他端口。你可以在 Linkly AI Desktop 的设置中查看实际使用的端口。
搜索结果不准确怎么办?
搜索结果不准确怎么办?
你可以尝试:
- 使用更精确的关键词
- 使用自然语言描述(利用向量语义匹配)
- 混合使用关键词和同义词,如
"认证 auth 登录 sign-in" - 使用
--type过滤特定文档类型,缩小搜索范围

