注意: 本项目是对原基于Python的 cbcoutinho/nextcloud-mcp-server 的完全重写,现在使用的是 TypeScript,并且支持通过 Smithery 进行一键云部署。
与原始仓库的主要区别:
- 语言: 本项目使用 TypeScript 编写,而原始项目使用 Python。
- Smithery 支持: 增加了对 Smithery 部署和本地测试的支持。
- 项目结构: 项目结构已调整以适应 Node.js/TypeScript 环境,并集成了 MCP SDK。
- 依赖管理: 本项目使用 npm 进行包管理,而原始项目使用 Python 的依赖管理工具。
- 部署: 现在支持本地开发和通过 Smithery 进行云部署。
Nextcloud MCP(模型上下文协议)服务器允许像 OpenAI 的 GPT、Google 的 Gemini 或 Anthropic 的 Claude 这样的大型语言模型(LLMs)与你的 Nextcloud 实例进行交互。这使得可以自动化各种 Nextcloud 功能,包括笔记、日历、联系人、表格和 WebDAV 文件操作。
该服务器提供了与多个 Nextcloud 应用程序的集成,使 LLM 可以通过一组全面的 30 种工具 在 5 个主要类别中与你的 Nextcloud 数据进行交互。
| 应用 | 支持状态 | 描述 |
|---|---|---|
| 笔记 | ✅ 完整支持 | 创建、读取、更新、删除、搜索和追加笔记。 |
| 日历 | ✅ 完整支持 | 完整的日历集成 - 通过 CalDAV 管理日历和事件。 |
| 表格 | ✅ 完整支持 | 完整的表格操作 - 列出表格、获取模式并执行行的 CRUD 操作。 |
| 文件(WebDAV) | ✅ 完整支持 | 完整的文件系统访问 - 浏览目录、读写文件、创建或删除资源。 |
| 联系人 | ✅ 完整支持 | 通过 CardDAV 创建、读取、更新和删除联系人和地址簿。 |
| 工具 | 描述 |
|---|---|
nextcloud_notes_create_note | 使用标题、内容和类别创建新笔记 |
nextcloud_notes_update_note | 根据 ID 更新现有笔记,可选标题、内容或类别 |
nextcloud_notes_append_content | 使用清晰分隔符追加内容到现有笔记 |
nextcloud_notes_search_notes | 根据标题或内容搜索笔记,并过滤结果 |
nextcloud_notes_delete_note | 根据 ID 删除笔记 |
| 工具 | 描述 |
|---|---|
nextcloud_calendar_list_calendars | 列出用户可用的所有日历 |
nextcloud_calendar_create_event | 创建具有摘要、描述、日期和地点的日历事件 |
next-Cloud_calendar_list_events | 列出自定义日历中的事件,可选日期过滤 |
nextcloud_calendar_get_event | 获取特定事件的详细信息 |
nextcloud_calendar_update_event | 更新现有事件的任何方面 |
nextcloud_calendar_delete_event | 删除日历事件 |
| 工具 | 描述 |
|---|---|
nextcloud_contacts_list_addressbooks | 列出用户可用的所有地址簿 |
nextcloud_contacts_create_addressbook | 创建具有显示名称和描述的新地址簿 |
nextcloud_contacts_delete_addressbook | 根据 ID 删除地址簿 |
nextcloud_contacts_list_contacts | 列出自定义地址簿中的所有联系人 |
nextcloud_contacts_create_contact | 创建具有全名、电子邮件、电话、地址和组织的新联系人 |
nextcloud_contacts_delete_contact | 从地址簿中删除联系人 |
| 工具 | 描述 |
|---|---|
nextcloud_tables_list_tables | 列出用户可用的所有表格 |
nextcloud_tables_get_schema | 获取特定表格的模式/结构,包括列 |
nextcloud_tables_read_table | 读取表格中的所有行 |
nextcloud_tables_insert_row | 向表格中插入一行,包含键值数据 |
nextcloud_tables_update_row | 更新表格中的现有行 |
nextcloud_tables_delete_row | 从表格中删除一行 |
| 工具 | 描述 |
|---|---|
nextcloud_webdav_search_files | 🔍 新功能! 统一搜索文件名、内容和元数据 - 不需要指定确切路径 |
nextcloud_webdav_list_directory | 列出 Nextcloud 中任意路径下的文件和目录 |
nextcloud_webdav_read_file | 从 Nextcloud 读取文件内容 |
nextcloud_webdav_write_file | 在 Nextcloud 中创建或更新文件 |
nextcloud_webdav_create_directory | 在 Nextcloud 中创建新目录 |
nextcloud_webdav_delete_resource | 从 Nextcloud 中删除文件或目录 |
此 MCP 服务器的亮点是强大的 统一搜索系统,灵感来自现代搜索界面,如我创建的另一个 MCP:mcp-datagovmy。这彻底改变了你与 Nextcloud 文件的互动方式,消除了指定确切文件路径的需求。
// 基础搜索 - 查找所有包含“FAQ Dean List”的文件
await nextcloud_webdav_search_files({
query: "FAQ Dean List"
});
// 高级搜索 - 查找 2024 年的 PDF 报告
await nextcloud_webdav_search_files({
query: "report 2024",
fileTypes: ["pdf"],
searchIn: ["filename", "content"],
limit: 20,
includeContent: true,
quickSearch: true
});
// 指定目录的日期范围搜索
await nextcloud_webdav_search_files({
query: "会议记录",
basePath: "/Documents",
searchIn: ["filename", "content"],
dateRange: {
from: "2024-01-01",
to: "2024-12-31"
}
});
// 按文件特征搜索
await nextcloud_webdav_search_files({
query: "配置文件",
sizeRange: { min: 1024, max: 102400 }, // 1KB - 100KB
fileTypes: ["json", "yaml", "xml", "conf"]
});
// 对大目录的快速搜索(优化)
await nextcloud_webdav_search_files({
query: "预算",
basePath: "/", // 根目录
quickSearch: true, // 启用优化
limit: 25,
maxDepth: 2 // 限制搜索深度
});
| 参数 | 类型 | 默认值 | 描述 | 示例 |
|---|---|---|---|---|
query | string | 必填 | 搜索词 - 支持多个单词 | "FAQ Dean List" |
searchIn | array | ["filename", "content"] | 搜索范围:filename、content、metadata | ["filename", "content", "metadata"] |
fileTypes | array | 所有类型 | 要包含的文件扩展名 | ["pdf", "txt", "md", "docx"] |
basePath | string | "/" | 要搜索的目录 | "/Documents/Reports" |
limit | number | 50 | 返回的最大结果数 | 20 |
includeContent | boolean | false | 包含文本文件的内容预览 | true |
caseSensitive | boolean | false | 区分大小写的匹配 | true |
quickSearch | boolean | true | 对根目录搜索启用优化模式 | false |
maxDepth | number | 3 | 最大目录深度(1-10) | 5 |
sizeRange | object | 无限制 | 文件大小过滤器(字节) | {min: 1024, max: 1048576} |
dateRange | object | 所有日期 | 最后修改日期过滤器 | {from: "2024-01-01", to: "2024-12-31"} |
quickSearch: true 和 maxDepth: 2-3 以获得更快的结果basePath: "/Documents" 而不是搜索根 "/"fileTypes 过滤器以缩小范围quickSearch 并使用较小的 limit 值| 工具 | 描述 |
|---|---|
hello | 验证服务器连接并列出所有可用工具 |
// 你需要知道确切路径
await nextcloud_webdav_read_file({
path: "/Documents/Finance/Reports/Q4_Budget_Analysis_2024.pdf"
});
// 需要多次调用来探索
await nextcloud_webdav_list_directory({ path: "/" });
await nextcloud_webdav_list_directory({ path: "/Documents" });
await nextcloud_webdav_list_directory({ path: "/Documents/Finance" });
// ...等等
// 整个 Nextcloud 的自然语言搜索!
await nextcloud_webdav_search_files({
query: "Q4 预算分析 2024",
fileTypes: ["pdf"]
});
// 无论位置如何都能立即找到文件!
系统智能地提取并搜索以下内容:
.txt、.md、.csv - 全内容索引.js、.ts、.py、.html、.css - 语法感知搜索.json、.xml、.yaml - 结构感知索引.pdf、.docx - 元数据和属性结果使用高级算法进行排名:
直接从 npm 安装并作为 MCP 服务器运行:
# 全局安装
npm install -g mcp-nextcloud
# 或者在项目中本地安装
npm install mcp-nextcloud
安装后,可以直接运行 MCP 服务器:
# 如果全局安装
mcp-nextcloud
# 如果本地安装
npx mcp-nextcloud
# 或者使用 npm 脚本
npm exec mcp-nextcloud
环境设置: 创建一个 .env 文件,包含你的 Nextcloud 凭证:
NEXTCLOUD_HOST=https://your.nextcloud.instance.com
NEXTCLOUD_USERNAME=your_nextcloud_username
NEXTCLOUD_PASSWORD=your_nextcloud_app_password
添加到你的 MCP 客户端配置(例如,Claude Desktop、Continue 等):
{
"mcpServers": {
"nextcloud": {
"command": "mcp-nextcloud",
"env": {
"NEXTCLOUD_HOST": "https://your.nextcloud.instance.com",
"NEXTCLOUD_USERNAME": "your_username",
"NEXTCLOUD_PASSWORD": "your_app_password"
}
}
}
}
克隆仓库:
git clone https://github.com/hithereiamaliff/mcp-nextcloud.git
cd mcp-nextcloud
安装依赖项:
npm install
配置你的 Nextcloud 凭证(参见配置部分)
构建项目:
npm run build
在根目录下根据 .env.sample 创建一个 .env 文件:
# .env
NEXTCLOUD_HOST=https://your.nextcloud.instance.com
NEXTCLOUD_USERNAME=your_nextcloud_username
NEXTCLOUD_PASSWORD=your_nextcloud_app_password_or_login_password
重要安全提示: 使用专用的 Nextcloud 应用密码而不是常规登录密码。可以在你的 Nextcloud 安全设置中生成一个。
当通过 Smithery 部署时,可以通过以下方式进行凭证配置:
最简单的方式让用户开始:
npm install -g mcp-nextcloud
mcp-nextcloud
这会安装一个全局 CLI,可以直接与 MCP 客户端一起使用。
开发期间最快的本地测试方法:
npm run dev
这将:
确保项目已配置:
npm run build
部署到 Smithery:
npm run deploy
按照 Smithery 部署提示安全配置你的 Nextcloud 凭证。
对于传统的本地开发:
npm run start
服务器将启动并监听 MCP 连接。
要将此包发布到 npm:
准备发布:
npm run build
npm version patch|minor|major
发布到 npm:
npm publish
验证发布:
npm view mcp-nextcloud
npm run build)npm version).npmignore 正确排除开发文件dist/cli.js)此项目同时支持两种部署方法:
Smithery 配