Skip to main content
Glama

SiYuan MCP Server

by pokerLL
README_zh.md8.7 kB
# 思源笔记 MCP 服务器 [English](./README.md) | 中文 为思源笔记提供的模型上下文协议(MCP)服务器,让 Claude、Cursor 等 AI 助手能够无缝地与你的思源笔记交互。 ## ⚠️ 重要声明 本项目代码主要由 AI 辅助开发,仅进行了功能性测试,未对所有代码进行完整审查。使用本项目前,请充分了解并接受以下内容: - 代码可能存在未发现的问题或潜在风险 - 请在使用前进行必要的代码审查和测试 - 使用者需自行承担使用本项目所产生的风险和责任 - 建议在生产环境使用前进行充分的验证 **请谨慎使用,并对自己的选择负责。** --- ## ✨ 特性 - 🚀 完整的 MCP(模型上下文协议)实现 - 📝 提供 20+ 个工具,全面支持思源笔记操作 - 🔍 高级搜索(文件名、内容、SQL) - 📁 文档管理(创建、读取、更新) - 📅 今日笔记支持,自动创建 - 📚 笔记本操作 - 📸 快照管理(备份和恢复) - 🔒 文档移动和树形操作 - 💻 TypeScript 编写,提供完整类型定义 - 🌐 支持 Claude Desktop、Cursor 等所有 MCP 兼容客户端 ## 📦 安装 ### 方式一:从源码安装(推荐) ```bash # 克隆仓库 git clone https://github.com/yourusername/siyuan-mcp.git cd siyuan-mcp # 安装依赖 npm install # 构建项目 npm run build # 全局安装 npm install -g . ``` ### 方式二:从 npm 安装(发布后可用) ```bash npm install -g siyuan-mcp-server ``` 安装完成后,`siyuan-mcp` 命令将全局可用。 ## 🔧 配置 ### 前置条件 1. **获取思源笔记 API Token:** - 打开思源笔记 - 进入 设置 → 关于 → API Token - 复制 Token 2. **确保思源笔记正在运行:** - 默认地址:`http://127.0.0.1:6806` - 如果使用不同端口,请相应调整 `baseUrl` ### 在 Cursor 中配置 编辑 MCP 配置文件 `~/.cursor/mcp.json`: ```json { "mcpServers": { "siyuan-mcp": { "command": "siyuan-mcp", "args": [ "stdio", "--token", "你的_API_TOKEN", "--baseUrl", "http://127.0.0.1:6806" ] } } } ``` ### 在 Claude Desktop 中配置 编辑配置文件: - **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json` - **Windows**: `%APPDATA%\Claude\claude_desktop_config.json` ```json { "mcpServers": { "siyuan-mcp": { "command": "siyuan-mcp", "args": [ "stdio", "--token", "你的_API_TOKEN", "--baseUrl", "http://127.0.0.1:6806" ] } } } ``` ### 验证安装 配置完成后,重启你的 MCP 客户端(Cursor/Claude Desktop),然后尝试: - "列出我的所有思源笔记本" - "搜索包含'项目计划'的文档" - "在工作笔记本中创建一个会议记录" - "显示最近修改的5个文档" ## 🛠️ 可用的 MCP 工具 配置完成后,你可以通过自然语言与思源笔记交互。服务器提供 20+ 个工具: ### 📝 搜索与查询 - **search_by_filename** - 按文件名搜索文档 - **search_by_content** - 按内容搜索块/文档 - **sql_query** - 在思源数据库上执行自定义 SQL 查询(高级) ### 📄 文档操作 - **get_document_content** - 获取文档的 Markdown 内容 - **create_document** - 创建新文档 - **append_to_document** - 追加内容到现有文档 - **update_document** - 更新(覆盖)文档内容 - **move_document** - 移动文档到新位置 - **get_document_tree** - 获取指定深度的文档树结构 ### 📅 今日笔记 - **append_to_daily_note** - 追加到今日笔记(如需要会自动创建) ### 📚 笔记本管理 - **list_notebooks** - 列出所有笔记本 - **get_recently_updated_documents** - 获取最近更新的文档 ### 📸 快照管理 - **create_snapshot** - 创建数据快照用于备份 - **list_snapshots** - 列出可用的快照 - **rollback_snapshot** - 回滚到指定快照 ### 使用示例 用自然语言向你的 AI 助手提问: ``` "列出我的所有思源笔记本" "搜索关于机器学习的文档" "在工作笔记本中创建一个名为'项目想法'的新文档" "显示最近修改的10个文档" "追加'会议记录:讨论了第四季度目标'到今天的日记" "在进行重大更改前创建一个快照" "'项目'笔记本的树形结构是什么?" ``` ## 🔧 高级:作为 TypeScript 库使用 虽然主要设计为 MCP 服务器,你也可以在自己的项目中将此包作为 TypeScript 库使用: ```typescript import { createSiyuanTools } from 'siyuan-mcp-server'; // 创建实例 const siyuan = createSiyuanTools('http://127.0.0.1:6806', 'your-token'); // 搜索操作 const files = await siyuan.searchByFileName('关键词', 10); const blocks = await siyuan.searchByContent('内容', 20); // 文档操作 const content = await siyuan.getFileContent(documentId); await siyuan.createFile('notebookId', '/路径/文档', '# 标题\n\n内容'); await siyuan.appendToFile(documentId, '新内容'); await siyuan.overwriteFile(documentId, '替换的内容'); // 今日笔记 await siyuan.appendToDailyNote('notebookId', '今天我学到了...'); // 笔记本操作 const notebooks = await siyuan.listNotebooks(); // SQL 查询 const results = await siyuan.search.query(` SELECT * FROM blocks WHERE type='d' AND content LIKE '%关键词%' ORDER BY updated DESC LIMIT 10 `); // 直接 API 访问 await siyuan.block.insertBlockAfter(blockId, '新块内容'); await siyuan.document.moveDocument(['doc1', 'doc2'], 'targetNotebookId'); const tree = await siyuan.document.getDocTree('notebookId', 2); ``` ### 类型定义 包含完整的 TypeScript 类型: ```typescript import type { SiyuanConfig, SiyuanApiResponse, Block, Notebook, NotebookConf, DocTreeNode, SearchOptions } from 'siyuan-mcp-server'; ``` ## 💻 开发 ### 设置 ```bash # 克隆并安装 git clone https://github.com/yourusername/siyuan-mcp.git cd siyuan-mcp npm install # 构建 npm run build # 监听模式(自动重新构建) npm run watch # 代码检查 npm run lint # 格式化 npm run format ``` ### 手动测试 ```bash # 手动启动 stdio 服务器 npm run mcp:stdio -- --token YOUR_TOKEN --baseUrl http://127.0.0.1:6806 # 启动 HTTP 服务器(用于 Web 客户端) npm run mcp:http -- --token YOUR_TOKEN --port 3000 --baseUrl http://127.0.0.1:6806 ``` ## 🏗️ 架构 ``` siyuan-mcp/ ├── src/ # 核心 TypeScript 库 │ ├── api/ # 思源 API 客户端 │ ├── types/ # 类型定义 │ └── utils/ # 辅助工具 ├── mcp-server/ # MCP 服务器实现 │ ├── bin/ # CLI 入口点 │ ├── core/ # MCP 服务器核心 │ ├── handlers/ # 工具处理器 │ └── transports/ # Stdio/HTTP 传输 └── dist/ # 编译后的 JavaScript ``` ## 🔧 技术栈 - **语言**: TypeScript 5.3+ - **运行时**: Node.js 18+ - **模块系统**: ES Modules - **MCP SDK**: @modelcontextprotocol/sdk - **协议**: MCP(模型上下文协议) ## ❓ 常见问题 ### 如何获取思源 API Token? 1. 打开思源笔记 2. 进入 设置 → 关于 → API Token 3. 复制 Token ### 如何找到笔记本 ID? 询问你的 MCP 客户端:"列出我的所有思源笔记本",它会显示 ID。 或者通过编程方式: ```typescript const notebooks = await siyuan.listNotebooks(); console.log(notebooks.map(nb => `${nb.name}: ${nb.id}`)); ``` ### 服务器无法工作,应该检查什么? 1. 思源笔记是否正在运行?(默认:http://127.0.0.1:6806) 2. API Token 是否正确? 3. 配置后是否重启了 MCP 客户端? 4. 检查 MCP 客户端中的日志 ### 可以使用不同的思源端口吗? 可以!只需更新 `baseUrl` 参数: ```json "--baseUrl", "http://127.0.0.1:YOUR_PORT" ``` ### 是否支持远程思源实例? 支持!将 `baseUrl` 指向你的远程实例: ```json "--baseUrl", "http://your-server.com:6806" ``` ## 🤝 贡献 欢迎贡献!请随时提交问题和拉取请求。 ## 📄 许可证 Apache-2.0 ## 🔗 相关项目 - [思源笔记](https://github.com/siyuan-note/siyuan) - 思源笔记官方仓库 - [Model Context Protocol](https://modelcontextprotocol.io/) - MCP 文档 - [MCP TypeScript SDK](https://github.com/modelcontextprotocol/typescript-sdk) - 官方 MCP SDK ## 🙏 致谢 本项目主要由 AI 辅助开发,基于优秀的[思源笔记](https://github.com/siyuan-note/siyuan)项目构建。

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/pokerLL/siyuan-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server