SiYuan Note MCP Server
2025.04.04
0
TypeScript笔记管理文档操作内容块控制文件和资源管理SQL 查询支持属性管理导出和转换系统功能开发效率
SiYuan Note MCP Server 是一个与思源笔记系统集成的 MCP 服务器实现,旨在使 AI 模型能够访问和操作笔记数据。它提供了丰富的功能,包括笔记本管理、文档操作、内容块控制、文件和资源管理、SQL 查询支持等,适用于需要自动化或增强思源笔记功能的场景。
View on GitHub
Overview
基本能力
产品定位
SiYuan Note MCP Server 是一个与思源笔记系统集成的 MCP 服务器实现,旨在使 AI 模型能够访问和操作笔记数据。
核心功能
- 笔记本管理
- 文档操作
- 内容块控制
- 文件和资源管理
- SQL 查询支持
- 属性管理
- 导出和转换
- 系统功能
适用场景
- 自动化笔记管理
- AI 辅助笔记生成和编辑
- 批量处理笔记数据
- 集成思源笔记到其他系统
工具列表
- 资源管理:
assets.uploadAssets- 上传资源文件 - 属性管理:
attr.setBlockAttrs,attr.getBlockAttrs- 设置和获取块属性 - 内容块操作:
block.insertBlock,block.updateBlock,block.deleteBlock,block.moveBlock,block.getBlockKramdown- 插入、更新、删除、移动和获取块的 Markdown 内容 - 格式转换:
convert.pandoc- 使用 Pandoc 转换内容 - 导出功能:
export.exportNotebook,export.exportDoc- 导出笔记本和文档 - 文件操作:
file.getFile,file.putFile,file.removeFile,file.readDir- 获取、写入、删除文件和读取目录内容 - 文档树操作:
filetree.createDocWithMd,filetree.renameDoc,filetree.removeDoc,filetree.moveDocs,filetree.getHPathByPath,filetree.getHPathByID- 创建、重命名、删除、移动文档和获取文档路径 - 网络代理:
network.forwardProxy- 网络请求代理 - 笔记本管理:
notebook.lsNotebooks,notebook.openNotebook,notebook.closeNotebook,notebook.renameNotebook,notebook.createNotebook,notebook.removeNotebook,notebook.getNotebookConf,notebook.setNotebookConf- 列出、打开、关闭、重命名、创建、删除笔记本和获取/设置笔记本配置 - 通知提醒:
notification.pushMsg,notification.pushErrMsg- 发送消息和错误通知 - 查询功能:
query.sql,query.block- 执行 SQL 查询和通过 ID 查询块 - 搜索功能:
search.fullTextSearch- 全文搜索 - SQL 查询:
sql.sql- 执行 SQL 查询 - 系统功能:
system.getBootProgress,system.getVersion,system.getCurrentTime- 获取启动进度、系统版本和当前时间 - 模板功能:
template.renderTemplate,template.renderSprig- 渲染模板和 Sprig 模板
常见问题解答
- 如何获取思源笔记 API 令牌? 在思源笔记设置 - 关于中查看。
- 如何配置环境变量?
需要设置
SIYUAN_TOKEN环境变量,用于 API 认证。
使用教程
使用依赖
- Node.js >= 23.10.0
- pnpm
安装教程
- 安装依赖:
pnpm install
- 设置环境变量:
# Windows
set SIYUAN_TOKEN=your-siyuan-token
# Linux/macOS
export SIYUAN_TOKEN=your-siyuan-token
- 启动服务:
pnpm start
Docker 运行
docker run --rm -i \
-e SIYUAN_TOKEN=your-siyuan-token \
mcp/siyuan
调试方式
- 使用
help命令查询详细说明:
{
"type": "help",
"params": {
"type": "block.insertBlock"
}
}