Nextcloud日历任务MCP服务器

一个MCP服务器,允许通过CalDAV在Nextcloud中创建日历事件和任务。

  • by eragooon
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 eragooon/nextcloud_calendar_todo_mcp

使用说明

Nextcloud CalDAV MCP服务器

MCP(模型上下文协议)服务器,允许Claude通过CalDAV在Nextcloud中创建日历事件和任务。

暴露的工具:

工具 说明
create_event 写a VEVENT 进入Nextcloud日历
create_todo 写a VTODO 进入Nextcloud任务

堆栈: Python 3· mcp SDK 1.x· caldav ·uvicorn·尾鳞片漏斗(HTTPS)


先决条件

在Proxmox主机(Debian/Ubuntu)上安装:

apt update
apt install -y python3 python3-venv python3-pip git

不需要nginx,也不需要certbot——Tailscale会自动处理TLS。


1--部署服务器文件

# Files already live in /root/calendar_todo_mcp
# Copy the service file to systemd
mkdir -p /root/calendar_todo_mcp
cp server.py requirements.txt calendar_todo_mcp.service /root/calendar_todo_mcp/

2-Python虚拟环境

python3 -m venv /root/calendar_todo_mcp/venv
/root/calendar_todo_mcp/venv/bin/pip install --upgrade pip
/root/calendar_todo_mcp/venv/bin/pip install -r /root/calendar_todo_mcp/requirements.txt

3--配置 .env

cp /root/calendar_todo_mcp/.env.example /root/calendar_todo_mcp/.env
nano /root/calendar_todo_mcp/.env       # or your preferred editor
chmod 600 /root/calendar_todo_mcp/.env

需要填写的值:

变量 示例 注释
NEXTCLOUD_URL https://cloud.example.com 无尾随斜线
NEXTCLOUD_USER youruser 您的登录用户名
NEXTCLOUD_APP_PASSWORD xxxx-xxxx-xxxx 请参阅下面的步骤
CALENDAR_NAME Personal Nextcloud日历中的确切显示名称
TASKS_CALENDAR_NAME Tasks Nextcloud任务中的确切显示名称
OAUTH_CLIENT_ID calendar-todo-client 您选择的任何标识符
OAUTH_CLIENT_SECRET (生成) 快跑 python3 -c "import secrets; print(secrets.token_urlsafe(32))"
RESOURCE_SERVER_URL https://mymachine.tail-abc123.ts.net 您的Tailscale漏斗URL(见步骤4)

创建Nextcloud应用程序密码

  1. 登录Nextcloud→ 设置 → 安全
  2. 滚动到 应用密码 → 输入名称(例如。 mcp-server) → click 生成新的应用程序密码
  3. 将密码复制到 NEXTCLOUD_APP_PASSWORD

4 — 设置尾部缩放

安装Tailscale

curl -fsSL https://tailscale.com/install.sh | sh
tailscale up

当链接出现时,请在浏览器中使用您的Tailscale帐户登录。

在 Tailscale 控制台中启用 MagicDNS 和 HTTPS

  1. 打开 登录.tailscale.com/admin/dns
  2. 魔法。 激活
  3. HTTPS证书 激活

启用漏斗(通过HTTPS公开访问)

Tailscale Funnel 可通过公共 Internet 访问服务器 — Claude.ai (Cloud) 需要访问 MCP 服务器。

随附的 tailscale_funnel.service 启动时自动启动漏斗(参见步骤5)。提前测试:

tailscale funnel 8000

然后确定您的服务器的URL:

tailscale funnel status
# Ausgabe z.B.: https://mymachine.tail-abc123.ts.net/ proxies to http://127.0.0.1:8000

此HTTPS主机名(例如: https://mymachine.tail-abc123.ts.net)als RESOURCE_SERVER_URL 在模具中 .env 注册 。

只在Tailnet(没有公共访问)? 如果 Claude Desktop 在同一台设备上运行, 足够 tailscale serve 8000 而非 funnel.


5--安装并启动systemd服务

两个服务文件都需要复制和启用:MCP服务器和Tailscale漏斗。

# MCP server
cp /root/calendar_todo_mcp/calendar_todo_mcp.service \
   /etc/systemd/system/calendar-todo-mcp.service

# Tailscale Funnel (keeps the funnel running across reboots)
cp /root/calendar_todo_mcp/tailscale_funnel.service \
   /etc/systemd/system/tailscale-funnel-mcp.service

systemctl daemon-reload
systemctl enable --now calendar-todo-mcp
systemctl enable --now tailscale-funnel-mcp

# Verify both are running
systemctl status calendar-todo-mcp
systemctl status tailscale-funnel-mcp
journalctl -u calendar-todo-mcp -f

6--烟雾测试

替换 mymachine.tail-abc123.ts.net 使用您的实际Tailscale URL:

# OAuth-Metadaten-Endpoint — sollte JSON mit issuer/scopes zurückgeben
curl https://mymachine.tail-abc123.ts.net/.well-known/oauth-protected-resource \
  | python3 -m json.tool

# MCP-Endpoint ohne Token — sollte 401 zurückgeben
curl -s -o /dev/null -w "%{http_code}" \
     https://mymachine.tail-abc123.ts.net/mcp

7--连接克劳德

在 Claude.ai 中的 MCP 服务器或 claude_desktop_config.json 注册:

{
  "mcpServers": {
    "calendar-todo": {
      "url": "https://mymachine.tail-abc123.ts.net/mcp"
    }
  }
}

Claude 在第一次连接时自动启动 OAuth 流(浏览器重定向)。之后,不需要进一步配置。

Claude可以这样说:

“3点给我找牙医。4月10点45分钟“ 提醒:打电话给银行,明天到期


运营

# View live logs
journalctl -u calendar-todo-mcp -f

# Restart after config changes
systemctl restart calendar-todo-mcp

# Stop / disable
systemctl stop calendar-todo-mcp
systemctl disable calendar-todo-mcp

故障排除

问题 检查什么
401 Unauthorized OAuth 流程尚未完成 — 重新连接 Claude 并在浏览器中确认授权
Calendar 'X' not found The CALENDAR_NAME / TASKS_CALENDAR_NAME 必须匹配 确切的显示名称 Nextcloud
CalDAV 401 应用程序密码输入正确吗?用户是否启用了CalDAV访问?
Connection refused 服务是否正在运行? systemctl status calendar-todo-mcp
尾秤 502 Bad Gateway MCP服务器未运行或错误 PORT 在 .env
Funnel 没有回应。 tailscale funnel status 检查;的ggf。 tailscale funnel 8000 再次执行
Tailscale HTTPS 无法运行 Tailscale 管理控制台中启用 MagicDNS 和 HTTPS 证书?