document 工具
这个工具覆盖文档 CRUD、树结构查询、元数据,以及与日记/转换相关的文档操作。
适用场景:你需要创建、移动、查询或转换文档。
相关页面:
常见动作
| 分组 | 动作 |
|---|---|
| 创建与读取 | create, lookup, ensure_link_targets, get_doc, get_outline |
| 树结构查询 | get_child_blocks, get_child_docs, list_tree, search_docs |
| 元数据与修改 | rename, move, reorder, remove, set_attr, duplicate |
| 日记 / 转换 | create_daily_note, heading_to_doc, doc_to_heading |
参数与语义
create支持人类可读path,也支持parentPath+title;省略markdown即创建空文档。创建子文档时优先使用path。parentPath+title可传人类可读父路径,也可传lookup返回的.sy结尾 storage path。lookup可按id、存储path、人类可读hpath/hPath查找;用include请求id、ids、path、hpath或docInfo。ensure_link_targets在一个精确范围内建立可复用的导入 link map:范围必须是notebook+ 直属父文档parentId。resolve与reuse只接受明确的直属子文档 ID。create只接受明确的新标题;即使当前范围已有同名子文档,也绝不把标题当身份复用,而是把它以same_title_child_requires_explicit_id放进unresolved。每个解析或新建结果都带有精确id、笔记本、storagepath和hPath读回。ensure_link_targets(dryRun=true)只适用于mode="create",只检查并返回wouldCreate,不写入。resolve与reuse都是纯只读发现操作。真正的create使用普通两段式合同:先validateOnly=true预检,再用新的 UUIDv7requestId和返回的expectedStructureHash只提交一次。传输结果未知时不得重发,必须检查或继续使用原 request ID。该 action 不会自动删除自己创建的文档。lookup返回的idPath会包含可用的id/ids。当同一 hpath 有多个同名文档时,include: ["ids"]会返回全部匹配 ID;内部已包含 SQL 兜底。rename、remove、move在非 ID 模式下通常需要存储路径。reorder接收笔记本或父文档parentID与orderedIDs。数组必须把全部可见直属子文档 ID 各包含一次。它会启用笔记本自定义排序(sortMode: 6),但不会移动、重命名或修改文档正文。get_child_docs必须传文档id,不接受notebook + path。list_tree使用notebook + path,其中path是/或/20240318112233-abc123.sy这类存储路径,不是人类可读路径。- 如果批量
remove遇到思源短暂的indexing窗口,请改用notebook + storage path逐个删除并重试。 set_attr按文档 ID 写入文档元数据属性。get_outline调用思源原生大纲接口,不读取正文即可返回标题树、标题块 ID、嵌套关系和headingCount。如果还需要可编辑 Markdown,请使用get_doc。
Markdown 与标题规则
create的markdown不需要写同名# 标题;如果写了,工具会自动剥离,避免双标题。create支持直接写((id '标题'))、裸((id))和#标签#。裸双链会自动补齐锚文本;如果解析失败,会降级为((id 'id'))并返回 warning。create允许[^1]脚注式引用和[text](siyuan://blocks/id)写入,但结果会提示它们不会创建思源真实反链。get_doc返回与fs.read一致的可编辑 Markdown,保留((id '标题'))和#标签#。get_doc mode="markdown"始终返回完整展示块窗口。可使用nextWindow继续读取,或传入blockStart、blockLimit和tokenBudget;响应同时包含全文标题outline。includeBlockIds=true会增加独立块引用,不改变content。- 字符级
page/pageSize分页已经移除。mode="html"仍返回不分页的当前视图 HTML,并继续使用size。
安全规则
remove、move需要显式确认。- 按路径修改前先确认路径类型。
- 不要把标题搜索结果当链接目标。再次运行
ensure_link_targets时,使用上次成功响应中的精确 ID,并选resolve或reuse。
示例
MCP:
json
{
"action": "create",
"notebook": "<notebook-id>",
"path": "/Inbox/Weekly Note",
"markdown": "周报正文"
}json
{
"action": "lookup",
"id": "<doc-id>",
"include": "path"
}json
{
"action": "ensure_link_targets",
"notebook": "<notebook-id>",
"parentId": "<parent-document-id>",
"mode": "reuse",
"targets": [{ "key": "source-index", "id": "<direct-child-document-id>" }]
}要新建目标时,用 mode: "create" 和 validateOnly: true 先预检;随后带返回的 expectedStructureHash、新的 UUIDv7 requestId 和明确 title target 只提交一次。遇到同名直属子文档时,结果是 unresolved,不会隐式复用。
CLI:
bash
siyuan document create --notebook <notebook-id> --path "/Inbox/Weekly Note" --markdown "周报正文"
siyuan document lookup --id <doc-id> --include path
siyuan document reorder --parent-id <笔记本或父文档ID> --ordered-ids-json '["<文档ID-1>","<文档ID-2>"]'
siyuan document ensure_link_targets --notebook <notebook-id> --parent-id <parent-document-id> --mode reuse --targets-json '[{"key":"source-index","id":"<direct-child-document-id>"}]'动作列表
createlookupensure_link_targetsrenameremovemovereorderget_child_blocksget_child_docsset_attrlist_treesearch_docsget_docget_outlinecreate_daily_noteduplicateheading_to_docdoc_to_heading