Skip to main content
Glama
gamedevsam

SiYuan MCP Server

by gamedevsam
README.md
# SiYuan MCP Server

一个为思源笔记(SiYuan)设计的 Model Context Protocol (MCP) 服务器,提供完整的 AI 集成和智能知识管理功能。

## 🌟 核心特性

### 笔记管理
- **笔记本操作**: 创建、列表、打开、关闭、重命名、删除笔记本
- **文档管理**: 创建、读取、更新、删除文档,支持批量操作
- **块操作**: 创建、读取、更新、删除笔记块,支持批量操作
- **块属性**: 设置和获取块属性,支持自定义属性管理

### 搜索功能
- **简单搜索**: 快速关键词搜索
- **递归搜索**: 深度内容挖掘,支持层级遍历
- **文档内搜索**: 在指定文档中精确查找
- **批量读取**: 高效批量读取多个文档

### 模板与渲染
- **模板渲染**: 支持标准模板语法
- **Sprig模板**: 支持Sprig函数库的高级模板功能
- **动态内容**: 基于模板生成格式化内容

### 导出功能
- **Markdown导出**: 导出为标准Markdown格式
- **多格式导出**: 支持PDF、Word、HTML等多种格式
- **树状结构导出**: 保留文档层级关系的JSON导出

### 资源管理
- **文件上传**: 上传图片、文档等资源文件
- **资源列表**: 列出文档中的所有资源
- **资源重命名**: 重命名资源文件
- **OCR识别**: 图片文字识别功能

### 数据操作
- **SQL查询**: 执行SQL查询,支持复杂的数据检索
- **文件操作**: 读取、写入、删除文件
- **文件列表**: 列出目录中的文件

### 系统工具
- **时间获取**: 获取当前真实时间,支持多种格式和时区
- **健康检查**: 系统健康状态监控
- **端口发现**: 自动发现思源笔记可用端口

### AI 智能集成
- **智能工具选择**: AI驱动的工具推荐和选择
- **使用场景指导**: 详细的工具使用场景和示例
- **性能优化建议**: 基于使用模式的优化建议
- **错误处理**: 标准化的错误处理和重试机制

### 性能优化
- **缓存机制**: 智能缓存提升响应速度
- **批量处理**: 高效的批量数据操作
- **性能监控**: 实时性能指标和统计
- **并发控制**: 合理的并发请求管理

## 🚀 快速开始

### 1. 安装思源笔记
1. 下载安装包:[https://github.com/siyuan-note/siyuan/releases](https://github.com/siyuan-note/siyuan/releases)
2. 启动思源笔记

### 2. 配置思源笔记
1. 启动思源笔记
2. 设置 → 关于 → API token
3. 复制API Token

### 3. 安装 MCP Server

#### 从 npm 安装
```bash
npm install -g siyuan-mcp-server
```

#### 从源码安装
```bash
git clone https://github.com/your-username/siyuan-mcp-server.git
cd siyuan-mcp-server
npm install
npm run build
npm link
```

### 4. 配置 MCP

在您的 MCP 客户端配置文件中添加:

```json
{
  "mcpServers": {
    "siyuan": {
      "command": "npx",
      "args": ["siyuan-mcp-server"],
      "env": {
        "SIYUAN_API_TOKEN": "your-api-token"
      }
    }
  }
}
```

**注意**: 
- `SIYUAN_API_URL` 是可选的,如果不配置,系统会自动发现思源笔记的可用端口
- 如果需要指定端口,可以添加 `"SIYUAN_API_URL": "http://127.0.0.1:6806"`

### 5. 环境变量

- `SIYUAN_API_TOKEN`: 思源笔记 API Token(必需)
- `SIYUAN_API_URL`: 思源笔记 API 地址(可选,默认自动发现可用端口)

**端口自动发现**:
- 系统会自动扫描思源笔记的常用端口(6806, 6807, 6808)
- 如果思源笔记正在运行,系统会自动连接到正确的端口
- 如果自动发现失败,会尝试使用默认端口 6806
- 如需指定端口,可手动设置 `SIYUAN_API_URL` 环境变量

## 🛠️ 技术栈

- **运行时**: Node.js 18+
- **语言**: TypeScript
- **协议**: Model Context Protocol (MCP)
- **HTTP客户端**: Axios
- **构建工具**: TypeScript Compiler

## 📡 MCP 工具列表

### 📚 笔记本操作 (Notebook)
- `list_notebooks` - 列出所有笔记本
- `open_notebook` - 打开笔记本
- `close_notebook` - 关闭笔记本
- `rename_notebook` - 重命名笔记本
- `remove_notebook` - 删除笔记本

### 📄 文档操作 (Document)
- `create_document` - 创建新文档
- `get_document` - 获取文档内容
- `update_document` - 更新文档
- `delete_document` - 删除文档
- `list_documents` - 列出文档
- `batch_read_all` - 批量读取所有文档

### 🧱 块操作 (Block)
- `create_block` - 创建块
- `get_block` - 获取块
- `update_block` - 更新块
- `delete_block` - 删除块
- `prepend_block` - 在块前插入
- `append_block` - 在块后追加
- `fold_block` - 折叠块
- `unfold_block` - 展开块
- `transfer_block_ref` - 转移块引用
- `set_block_attrs` - 设置块属性
- `get_block_attrs` - 获取块属性
- `batch_create_blocks` - 批量创建块
- `batch_update_blocks` - 批量更新块
- `batch_delete_blocks` - 批量删除块

### 🔍 搜索操作 (Search)
- `simple_search` - 简单搜索
- `recursive_search` - 递归搜索
- `search_in_document` - 在文档中搜索

### 🎨 模板操作 (Template)
- `render_template` - 渲染模板
- `render_sprig_template` - 渲染Sprig模板

### 📤 导出操作 (Export)
- `export_markdown` - 导出为Markdown
- `export_file` - 导出为指定格式
- `export_expand` - 导出为树状结构

### 🖼️ 资源操作 (Assets)
- `upload_asset` - 上传资源文件
- `list_assets` - 列出资源文件
- `rename_asset` - 重命名资源文件
- `ocr_asset` - OCR识别图片

### 💾 SQL查询 (SQL)
- `query_sql` - 执行SQL查询

### 📁 文件操作 (File)
- `read_file` - 读取文件
- `write_file` - 写入文件
- `delete_file` - 删除文件
- `list_files` - 列出文件

### ⏰ 系统操作 (System)
- `get_current_time` - 获取当前真实时间

## 📖 使用示例

### 创建文档
```typescript
// 创建新文档
await toolRegistry.execute('create_document', {
  notebook: 'notebook-id',
  path: '/path/to/document',
  title: '文档标题',
  content: '文档内容'
});
```

### 搜索内容
```typescript
// 递归搜索
await toolRegistry.execute('recursive_search', {
  query: '关键词',
  notebook: 'notebook-id',
  maxDepth: 5
});
```

### 批量操作
```typescript
// 批量创建块
await toolRegistry.execute('batch_create_blocks', {
  requests: [
    { content: '第一个块' },
    { content: '第二个块' }
  ]
});
```

### 获取时间
```typescript
// 获取当前时间
await toolRegistry.execute('get_current_time', {
  format: 'iso',
  timezone: 'Asia/Shanghai'
});
```

### 导出文档
```typescript
// 导出为Markdown
await toolRegistry.execute('export_markdown', {
  id: 'document-id'
});
```

## 🔧 开发

### 构建项目
```bash
npm run build
```

### 运行测试
```bash
npm test
```

### 代码检查
```bash
npm run lint
```

### 类型检查
```bash
npm run typecheck
```

## 🤝 贡献指南

欢迎贡献代码、报告问题或提出改进建议!

1. Fork 本仓库
2. 创建特性分支 (`git checkout -b feature/AmazingFeature`)
3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
4. 推送到分支 (`git push origin feature/AmazingFeature`)
5. 开启 Pull Request

## 📄 许可证

MIT License - 详见 [LICENSE](LICENSE) 文件

## 🙏 致谢

感谢思源笔记团队提供优秀的笔记软件和 API 支持。

## 📮 联系方式

- 问题反馈: [GitHub Issues](https://github.com/your-username/siyuan-mcp-server/issues)
- 功能建议: [GitHub Discussions](https://github.com/your-username/siyuan-mcp-server/discussions)