文档 / 给 Agent / MCP 接入
MCP 接入
注册一次,Claude Code 这类 Agent 就能直接读你本机的文档。 它们不再需要你把整本 PDF 粘进对话——先要目录,再按标题取节,或者跨文档检索。 文档始终留在这台机器上。
注册#
$ claude mcp add aimorsel -- morsel mcp
也可以写进项目里的 .mcp.json:
{
"mcpServers": {
"aimorsel": { "command": "morsel", "args": ["mcp"] }
}
}
改完重启一次会话就生效。
八个工具#
前三个是为省上下文设计的,也是和普通「文档转换 MCP」的差别所在。
| 工具 | 它做什么 |
|---|---|
| get_outline | 只返回标题树,附每节的页码范围与 token 估算。读大文档的第一步——花几百 token 就能看清全文结构 |
| get_section | 按标题取某一节正文(含子节),标题模糊匹配。命中太多时会列出候选让 Agent 精确化 |
| search_documents | 跨已转换文档全文检索,命中段落带页码和标题路径,按相关度排序。空格分隔的多个词是「与」的关系 |
| read_pdf_markdown | 直接返回 Markdown 正文,小文档一次读完。过长会截断并给出完整文件路径 |
| extract_tables | 提取文档里所有表格,以 CSV 文本返回,含页码 |
| get_chunks | 切成 RAG 分块返回 JSONL,每块带页码范围、标题路径和 token 估算 |
| qa_check | 逐页元素与字符统计,标记空白页、疑似扫描页、低密度页 |
| convert_pdf | 转换并返回产物文件清单;已转换且没变化的自动跳过 |
省上下文的用法#
一份长文档,Agent 应该这样读——三步之后进上下文的只有真正需要的那一节:
# 1. 先看结构,几百 token get_outline("年报.pdf") # 2. 挑一节取正文 get_section("年报.pdf", "财务摘要") # 3. 或者跨全部已转换文档找一个词,命中带页码 search_documents("毛利率")
get_outline 返回的每节 token 数是含子节的,
和 get_section 实际会返回的体量一致——Agent 照着这个数取舍才准。
几点注意#
- 缓存是共用的。产物统一进
output/,和命令行、图形界面共用同一份 断点续传清单。同一个文件被反复读时第二次几乎是瞬时的。 - 检索默认不触发转换。
search_documents只搜output/里已经转换过的文档;给它一个路径才会去转。 - 返回内容过长会被截断,同时附上完整文件路径,Agent 可以自己去读文件。
- 扫描件要先装 OCR,否则 MCP 拿到的也是空的。见下载页。