FnCal GitHub

飞牛OS 应用 · 自托管日历 · v0.5.2

日历留在自己的 NAS 上

FnCal 是跑在飞牛 OS 上的日历应用,自带 CalDAV 服务:手机和电脑上的日历客户端直接读写同一批日程。AI 助手能帮你读、帮你记,但写进日历之前要先过你这一关。运行时不访问任何第三方云。

协议
CalDAV · RFC 4791
数据
本机 /vol1/@appdata/FnCal/
许可
MIT
体积
708,971 B
FnCal 主界面:年视图色块、左侧日历列表与顶部工具栏
年视图。每个日历一种颜色,左侧可单独隐藏;同一批数据在手机、桌面与 CalDAV 客户端里一致。

AI assistant · MCP

让 AI 帮你排日程,
但决定权留在你手里

通过 MCP 把 FnCal 接进 AI 助手。它读得到的内容、改得动的范围、写完要不要你点头,全部由一个凭据决定。默认状态下 AI 写不进你的日历:它只会留下提案,等你在 FnCal 里点「接受」,或者把一条一次性审批链接发给你。

AI 凭据 Cherry Studio · 我的测试 日历授权 我的测试 · 可写 时间窗 过去 7 天 · 未来 90 天 新建、修改 提案 删除 提案 · 24 小时内有效
01先定边界 哪些日历可见、能看多久、哪些字段可读,都在凭据里一次设好。
AI 助手 FnCal MCP · 已连接 把「产品评审」改到周五 15:00,可以吗? applied: false · 等待你确认 产品评审 11-06 周五 15:00–15:30 提案 · 修改 · 24 小时内有效
02AI 只提案 新建、修改、删除都先返回待确认提案,附上改什么、改在哪、什么时候。
caldav.example/a/7Qk2… 10:00 提案队列 待确认 1 条 · 10 分钟内有效 产品评审 11-06 周五 15:00–15:30 批准 拒绝 每条只能处理一次 · 页面里没有 API 地址
03链接交给你 AI 把 /a/… 链接发给你;打开就是提案列表,逐条或批量处理。
已批准,变更已生效 「产品评审」已从 14:00 改到 15:00 approval-link-decision · pin ✓ ai-change-applied · 11-05 21:15
04你点才算数 批准后立即写入日历,每一次批准、拒绝都留审计记录。
  • 提案 24 小时有效。过期后让 AI 重新发起,原提案不会自动执行。
  • 审批链接 10 分钟有效,每条提案只能处理一次。全部处理完、到期、或 PIN 连错 5 次,链接失效。
  • PIN 是可选的 4 位数字。给凭据设了 PIN,打开链接要先输;连续错 5 次这条链接作废。
  • 链接不是接口。/a/<一次性令牌> 只返回一张 HTML 提案页,页面与链接里都没有 API 地址;服务端只存令牌哈希。
  • 支持弹窗的客户端走弹窗。能力具备时在对话里弹出「批准 / 拒绝 / 取消」,不签发链接;两条路径都不接受 AI 替你做决定。
两点要说明。一,不要把 PIN 告诉 AI 助手——PIN 是给你自己用的。二,没设 PIN 的凭据,链接谁拿到谁就能批;要更稳妥就给凭据设 PIN,并且只把链接转发给自己。
每个 AI 凭据单独设置权限,改完立即生效。
设置可选值作用
日历授权不可见 / 只读 / 可写不可见的日历对 AI 等同于不存在,连名字也看不到
时间窗过去 N 天 / 未来 N 天,可不限只读范围内的日程,超出范围的查询返回空
字段开关标题、时间必给;地点、描述、参与者可选连地点与参与人都可设为 AI 不可见
新建、修改提案 / 直接通过默认提案;直接通过等于把写入权交给 AI
删除提案 / 回收站回收站模式下删除可恢复,保留期内可取回

客户端:凡支持自定义 MCP 的都能接,如 Claude Desktop、Cherry Studio。配置与令牌见 README;AI 技能包随 Release 附带,可在客户端里「立即更新」。

Why self-host

日历不需要
经过别人的服务器

把日程交给第三方,等于把每天几点出门、几点开会、去哪出差都交给一个你不控制的服务。FnCal 把这件事收回 NAS:数据落在自己的硬盘上,备份、迁移、删除都由你决定。

  1. 01

    零云依赖

    运行期不请求 puter.com 或任何第三方云;前端不引 CDN、字体与统计脚本。依赖与许可列在 THIRD_PARTY_NOTICES.md,可逐条审计。

  2. 02

    标准协议,不是封闭格式

    按 RFC 4791 实现 CalDAV,事件(VEVENT)与任务(VTODO)都能同步。导出是标准 .ics,时区、重复规则与提醒往返不丢;哪天不用 FnCal,数据照旧能带走。

  3. 03

    AI 只能在授权范围内动作

    每个凭据单独设置:能看到哪些日历、能看多远的时间窗、能读写哪些字段、写操作是「提案」还是「直接通过」。默认提案,改动要你点确认。

  4. 04

    装在一台 NAS 上就完事

    飞牛 OS 应用中心安装 .fpk,填端口和管理员密码即可用;也提供 Docker 镜像。没有外部账号、没有激活码、没有订阅。

Features

一个日历,六种看法

年、月、周、四天、日、日程六种视图,桌面与手机都能用;手机上每格最多两条文字加「+N」,点开是当日清单。

年月周四天日日程
多日历
新建任意多个日历,各自颜色与描述;可单独隐藏、单独导出。「我的日历」与「任务」不可删除,可改名。
事件与任务
新建只分事件、任务两类。任务放在独立日历里,点顶部按钮在右侧栏查看全部任务;任务同样通过 CalDAV 以 VTODO 暴露。
重复与提醒
支持 RRULE 重复、全天事件、多时区;提醒可设默认值与全天默认值,导入导出往返不丢。
导入导出
导入 .ics 可新建日历或并入已有日历;导出按日历单独进行,不放管理员菜单。
中国公共假日
只标中国法定节日当天,一个开关控制;不联网抓取,不显示调休与他国节日。
主题与设置
明暗跟随系统或手动指定,主题色可选预设或自定义;每周开始日、显示周数、时区都可调。设置页页脚显示当前版本号。

Install

装在自己的 NAS 上

飞牛 OS 用户走应用中心;其他环境用 Docker。装之前先核对包的 SHA-256。

  1. 下载安装包
    从 Release 下载 FnCal-0.5.2.fpk,先核对哈希再安装。
  2. 安装向导
    填一个空闲端口(建议 1024 以上,避开 5232)与管理员用户名、密码;两步都必填。
  3. 打开
    装完点桌面图标,浏览器新标签打开 http://<NAS-IP>:<端口>/。桌面图标不会随端口修改自动更新,改端口后要手动改。
  4. 配 CalDAV 客户端
    服务器地址填 http://<NAS-IP>:<端口>/,用户名密码同登录;推荐在「安全设置 → 我的安全」建一个 CalDAV 专用密码。
# 先核对哈希(Linux / macOS)
sha256sum FnCal-0.5.2.fpk

# Windows PowerShell
Get-FileHash .\FnCal-0.5.2.fpk -Algorithm SHA256

# 期望值
3B74D23BC85AB8DFF1667C0A9E4B04A63BA49806A30976C3B8FEE070512A432A
对公网开放时请套 HTTPS 反向代理。FnCal 不做来源 IP 白名单:谁能访问这个端口,谁就能看到登录页。限流、CSRF 与会话安全始终开启。

Docker 部署见仓库 DOCKER.md;数据卷挂 /data,HTTPS 端口默认 5243。

Download

v0.5.2

2026-11-06 发布。旧版本不要再装;升级请用应用中心覆盖安装,数据保留。

安装包 FnCal-0.5.2.fpk
下载
708,971 B · SHA-256 3B74D23BC85AB8DFF1667C0A9E4B04A63BA49806A30976C3B8FEE070512A432A
AI 技能包 FnCal-MCP-Skill-0.5.2.zip
下载
26,201 B · SHA-256 5F65C0867CAD06EAB1EA4E27C4AC0C45E40C02823D4B2CA494D9C9AAC7CD9528
校验文件 SHA256SUMS.txt
下载
174 B · 含上面两个文件的哈希,可一条命令核对

全部版本:Releases · 更新内容:CHANGELOG · 源码与文档:GitHub 仓库

FAQ

常见问题

数据存在哪里?需要联网吗?

存在 NAS 的用户数据目录(Docker 是 /data 卷):账号、密钥、calendars/ 与日志。运行时不需要外网;AI 接入也是你的客户端去连 FnCal,不是 FnCal 去连外部服务。

支持哪些日历客户端?

凡按 RFC 4791 实现的客户端都可接入:DAVx5(安卓)、Thunderbird、eM Client 等。iOS / macOS 系统日历未做真机验收,行为以你实际测试为准。

AI 会自己改我的日程吗?

默认不会。凭据的「新建、修改」是「提案」时,AI 只能留下提案,需要你接受或通过一次性审批链接批准;只有把它设成「直接通过」,AI 才会直接写入。删除同理,可设成提案或进回收站。

怎么备份?

整目录备份应用数据目录即可(飞牛 OS 是 /vol1/@appdata/FnCal/,Docker 是 /data 卷;账号、密钥、日历与日志都在里面);单本日历也可以用「导出」拿到标准 .ics。恢复时把目录放回原位重启。

能不能只给家人用、不开公网?

可以。把端口留在局域网内最省事;要远程访问就套 HTTPS 反向代理,并留意路由器的端口映射是否是你想要的暴露面。