芬伯里
一个集成了MCP(模型上下文协议)的开源婴儿跟踪应用程序。
特性
- 睡眠跟踪:基于定时器的午睡和夜间睡眠跟踪,并提供质量评级
- 喂食追踪:母乳喂养,每侧持续时间跟踪和侧切换,奶瓶(含量)和固体
- 尿布追踪:湿的、脏的或两者都有,颜色/稠度/数量可选
- 泵送跟踪:基于定时器的泵送会话,具有左/右量
- 增长跟踪:重量、身高和头围,采用英制/公制支撑
- 温度跟踪:体温记录,包括C/F转换和发烧状态
- 活动跟踪:沐浴、腹部时间、户外游戏、屏幕时间等,支持计时器
- 药物追踪:使用定制药物记录药物剂量并跟踪剂量
- 多护理人员支持:与家人和护理人员共享访问权限
- 实时同步:更改在所有设备上立即同步
- 多个报表视图:活动历史记录的日视图、周视图和列表视图
- 视觉时间轴:每日活动时间表,直观地表示所有活动类型
- 活动编辑:使用持续时间滑块和详细控件编辑记录的活动
- AI聊天界面:用于记录和查询婴儿数据的自然语言交互
- MCP集成:用于记录和分析婴儿数据的AI代理集成
技术栈
- 框架:Next.js 15(应用路由器)
- 语言:TypeScript
- API:tRPC v11
- 数据库:Supabase(PostgreSQL)
- 对象关系映射:Prisma
- 实时:Supabase实时
- 认证:NextAuth.js v5
- 样式:顺风CSS 4+shadcn/ui
- 主控程序:@modelcontextprotocol/sdk
- 状态状态:
- 单体仓库:Turborepo
项目结构
finnberry/
├── apps/
│ ├── web/ # Next.js webapp
│ └── mcp-server/ # MCP Server
├── packages/
│ ├── db/ # Prisma schema + client
│ ├── api/ # tRPC routers
│ ├── schemas/ # Shared Zod schemas
│ └── utils/ # Shared utilities
└── turbo.json部署到 Vercel
部署Finnberry最简单的方法是使用Vercel:

手动Vercel设置
API超时(Vercel计划)
AI聊天功能使用流式响应。默认超时为60秒(专业版)。对于Hobby(免费)计划,编辑 apps/web/src/app/api/chat/route.ts 和改变 maxDuration 到 10.
| 计划 | 最长持续时间 |
|---|---|
| 爱好(免费) | 10秒 |
| Pro | 60秒 |
| 企业版 | 900秒 |
入门指南
对于当地发展:
先决条件
- Node.js 20+
- pnpm 9+
- Supabase项目(或本地PostgreSQL)
安装
- 克隆存储库:
git clone https://github.com/yourusername/finnberry.git
cd finnberry- 安装依赖项:
pnpm install- 设置环境变量:
cp apps/web/.env.example apps/web/.env- 配置您的
apps/web/.env文件(参见 环境变量 在......下面
- 生成Prisma客户端并推送架构:
pnpm db:generate
pnpm db:push- 启动开发服务器:
pnpm dev该应用程序将在 http://localhost:3000.
环境变量
必需
| 变量 | 描述 |
|---|---|
DATABASE_URL | Supabase PostgreSQL池器连接字符串 |
DIRECT_URL | PostgreSQL直接连接(用于迁移) |
AUTH_SECRET | NextAuth secret-使用生成 openssl rand -base64 32 |
可选的
| 变量 | 描述 |
|---|---|
NEXTAUTH_URL | 应用程序URL-生产所需,在开发中自动检测 |
GOOGLE_CLIENT_ID | 谷歌OAuth客户端ID |
GOOGLE_CLIENT_SECRET | Google OAuth客户端密钥 |
NEXT_PUBLIC_SUPABASE_URL | Supabase项目URL(实时) |
NEXT_PUBLIC_SUPABASE_ANON_KEY | Supabase匿名密钥(实时) |
SUPABASE_SERVICE_ROLE_KEY | Supabase服务角色密钥(服务器端访问) |
EMAIL_SERVER | 魔术链接电子邮件的SMTP连接字符串 |
EMAIL_FROM | 魔术链接的发件人电子邮件地址 |
ANTHROPIC_API_KEY | 人工智能聊天功能的Anthropic API密钥 |
邮件配置
对于魔术链接身份验证,请配置 EMAIL_SERVER 使用您的SMTP提供商:
# Resend
EMAIL_SERVER="smtps://resend:re_YOUR_API_KEY@smtp.resend.com:465"
# Gmail (requires app password)
EMAIL_SERVER="smtps://you@gmail.com:app-password@smtp.gmail.com:465"Supabase设置
- 在以下位置创建新项目 网站 supabase.com
- 从项目设置中获取连接字符串→ 数据库:
- 连接字符串(池器) → DATABASE_URL - 连接字符串(直接) → DIRECT_URL
- 从项目设置获取API密钥→ API:
- 项目网址 → NEXT_PUBLIC_SUPABASE_URL - 匿名公开 → NEXT_PUBLIC_SUPABASE_ANON_KEY - service_role → SUPABASE_SERVICE_ROLE_KEY
- 为表启用实时(可选,用于实时同步):
- 转到数据库→ 复制 - 为以下对象启用复制: sleep_records, feeding_records, diaper_records, pumping_records, growth_records, activity_records, temperature_records, medicine_records
数据库命令
| 命令 | 用例 |
|---|---|
pnpm db:push | 开发-快速模式同步,无需迁移文件 |
pnpm db:migrate | 生产-创建迁移历史 |
pnpm db:generate | 架构更改后重新生成Prisma客户端 |
pnpm db:studio | 打开Prisma Studio浏览数据 |
从其他设备访问
发展模式
发展中(NODE_ENV=development),为了方便起见,该应用程序会自动从请求标头中检测主机:
- 本地主机:工作地点
http://localhost:3000 - 局域网接入:工作地点
http://:3000(例如,通过手机) - 测试服务器:工作地点
http://:3000
Magic links将自动使用您访问应用程序的正确URL。
生产/自托管部署
重要:在制作或接触互联网时,你 必须 集 NEXTAUTH_URL 明确地在你的 .env 安全文件:
# For a home server on your LAN
NEXTAUTH_URL="http://192.168.1.100:3000"
# For a cloud server (EC2, DigitalOcean, etc.)
NEXTAUTH_URL="http://your-server-ip:3000"
# For production with a domain
NEXTAUTH_URL="https://finnberry.yourdomain.com"这可以防止主机头注入攻击。
网络接入
对于远程服务器(例如EC2):
- 打开安全组/防火墙中的端口3000
- 集
NEXTAUTH_URL到服务器的公共IP或域 - 考虑使用带有SSL的反向代理(nginx/caddy)进行面向互联网的部署
安全最佳实践:
- 在生产环境中使用HTTPS(通过Let's Encrypt的反向代理)
- 没有适当的安全措施,不要将应用程序直接暴露在互联网上
- 为数据库和
NEXTAUTH_SECRET - 保持依赖关系更新
AI聊天界面
仪表板包括一个聊天选项卡,允许与您的婴儿跟踪数据进行自然语言交互。
特性
- 自然语言日志:说“给婴儿换一块湿尿布”或“给婴儿打个盹”
- 查询数据:问“宝宝今天做了什么?”或“宝宝本周睡了多久?”
- 流媒体响应:通过工具执行可视化实时流式传输AI响应
- 模型选择:在俳句(快速)、十四行诗(平衡)或Opus(最有能力)之间进行选择
设置
- 从获取Anthropic API密钥 console.anthropic.com
- 添加到您的
.env文件:
ANTHROPIC_API_KEY=sk-ant-...- 聊天选项卡将出现在仪表板上的主页和报告旁边
交互示例
- “把尿布弄湿”
- “开始跟踪睡眠”
- “记录一瓶4盎司的配方奶粉”
- “上次喂食是什么时候?”
- “给我总结一下今天的活动”
MCP 服务器
MCP服务器允许AI代理(如克劳德)与您的婴儿跟踪数据进行交互。
可用工具
| 工具 | 说明 |
|---|---|
start-sleep | 启动睡眠定时器 |
end-sleep | 结束主动睡眠会话 |
log-sleep | 记录已完成的睡眠 |
get-sleep-summary | 获取睡眠统计数据 |
log-breastfeeding | 记录母乳喂养会话 |
log-bottle | 原木奶瓶喂养 |
log-solids | 原木固体食物 |
get-feeding-summary | 获取喂养统计数据 |
log-diaper | 记录尿布更换 |
get-diaper-summary | 获取尿布统计数据 |
list-children | 列出所有孩子 |
get-daily-summary | 获取一天的所有活动 |
可用资源
| URI | 描述 |
|---|---|
finnberry://children | 列出所有孩子 |
finnberry://children/{id} | 儿童档案 |
finnberry://children/{id}/today | 今天的活动 |
finnberry://children/{id}/sleep?period=week | 睡眠记录 |
finnberry://children/{id}/feeding?period=week | 喂食记录 |
可用提示
| 提示 | 描述 |
|---|---|
analyze-sleep-patterns | 获取有关睡眠模式的人工智能见解 |
daily-summary | 生成适合家长的每日摘要 |
与Claude Desktop一起使用
添加到您的Claude桌面配置(claude_desktop_config.json):
{
"mcpServers": {
"finnberry": {
"command": "node",
"args": ["/path/to/finnberry/apps/mcp-server/dist/index.js"],
"env": {
"DATABASE_URL": "your-database-url"
}
}
}
}首先构建MCP服务器:
cd apps/mcp-server
pnpm build脚本
| 脚本 | 描述 |
|---|---|
pnpm dev | 启动开发服务器 |
pnpm build | 构建所有包 |
pnpm lint | 跑linting |
pnpm type-check | 运行TypeScript检查 |
pnpm db:generate | 生成Prisma客户端 |
pnpm db:push | 将架构推送到数据库 |
pnpm db:migrate | 运行数据库迁移 |
测试
pnpm test # Run all tests (Vitest)
pnpm test:e2e # Run Playwright E2E tests (requires dev server)
pnpm test:coverage # Run tests with coverage report看 CLAUDE.md 获取详细的测试文档。
许可证
麻省理工学院
