<a href="https://cursor.com/install-mcp?name=health-fitness-coach&config=eyJ1cmwiOiJodHRwOi8vbG9jYWxob3N0OjMwMDAvc3NlIn0="><img src="https://cursor.com/deeplink/mcp-install-dark.svg" alt="添加健康与健身教练 MCP 服务器到 Cursor" height="32" /></a>
健康与健身教练 MCP 是一个全面的AI驱动的健身追踪应用程序,通过**模型上下文协议(MCP)**弥合了传统健身应用与智能AI助手之间的差距。
该项目由两个主要组件组成:
┌─────────────────────────────────────────────────────────────────────────────┐
│ 健康与健身教练生态系统 │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────┐ ┌─────────────────────┐ ┌─────────────────┐ │
│ │ 🌐 WEB APP │ │ 🤖 MCP SERVER │ │ 🧠 AI客户端 │ │
│ │ (Next.js) │ │ (协议层) │ │ (Cursor/Claude) │ │
│ │ │ │ │ │ │ │
│ │ • 健身仪表盘 │◄──►│ • 7个智能工具 │◄──►│ • 自然语言处理 │ │
│ │ • 活动日志 │ │ • 数据处理 │ │ • 上下文感知 │ │
│ │ • 进度跟踪 │ │ • 上下文分析 │ │ • 计划生成 │ │
│ │ • 计划可视化 │ │ • API集成 │ │ • 智能查询 │ │
│ │ • 实时更新 │ │ • 协议合规性 │ │ • 工具调用 │ │
│ └─────────────────────┘ └─────────────────────┘ └─────────────────┘ │
│ │ │ │ │
│ └───────────────────────────┼───────────────────────────┘ │
│ │ │
│ ┌─────────────────────────────────────▼─────────────────────────────────────┐ │
│ │ 📊 统一数据层 │ │
│ │ │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ 🏋️ 锻炼 │ │ 🍎 营养 │ │ 📋 计划 │ │ 💭 反馈 │ │ │
│ │ │ • 会话 │ │ • 餐食 │ │ • AI生成 │ │ • 进展 │ │ │
│ │ │ • 持续时间 │ │ • 卡路里 │ │ • 每周 │ │ • 笔记 │ │ │
│ │ │ • 类型 │ │ • 项目 │ │ • 每日 │ │ • 见解 │ │ │
│ │ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ │ │
│ └─────────────────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────────────┘
模型上下文协议是一种标准化的方式,让AI应用程序连接到外部数据源和工具。可以将其视为一种通用翻译器,允许像Claude Desktop或Cursor这样的AI助手理解并与其交互您的健身数据。
我们的MCP服务器充当了一个智能健身数据网关,它:
🔗 桥接AI和健身数据
🧠 启用智能教练
📊 提供丰富的上下文
MCP服务器暴露了7个智能工具,这些工具改变了AI与健身数据交互的方式:
log-workout - 锻炼会话跟踪// 功能:记录带有智能分类的锻炼会话
{
tool: "log-workout",
parameters: {
userId: "user123",
date: "2025-01-07",
type: "力量训练", // 自动分类:有氧、力量、柔韧性
duration: 45, // 活动分钟数
distance: 0 // 有氧运动可选距离
}
}
// AI上下文:"今天我进行了45分钟的力量训练"
log-nutrition - 餐食及卡路里跟踪// 功能:记录带有智能营养分析的餐食
{
tool: "log-nutrition",
parameters: {
userId: "user123",
date: "2_25-01-07",
meal: "早餐", // 自动检测:早餐/午餐/晚餐/小吃
items: ["燕麦片", "香蕉", "杏仁"], // 自然语言食物项
calories: 350 // 计算或估算的卡路里
}
}
// AI上下文:"我早餐吃了燕麦片、香蕉和杏仁"
log-feedback - 进展及动力跟踪// 功能:捕捉主观健身体验和进展笔记
{
tool: "log-feedback",
parameters: {
userId: "user123",
date: "2025-01-07",
notes: "持续锻炼后感觉更强壮。准备好增加重量!"
}
}
// AI上下文:跟踪动力、能量水平和主观进展
generate-plan - AI驱动的健身规划// 功能:创建个性化的锻炼和营养计划
{
tool: "generate-plan",
parameters: {
userId: "user123"
}
}
// AI魔法:分析您的历史、偏好和目标以创建:
// - 明天的锻炼常规
// - 每周锻炼计划
// - 餐饮推荐
// - 逐步难度调整
view-context - 综合健身分析// 功能:提供完整的健身概况供AI决策
{
tool: "view-context",
parameters: {
userId: "user123"
}
}
// 返回:完整的健身历史、模式、目标和见解
// 使AI能够做出知情的教练决策
set-weekly-target - 目标设定及跟踪// 功能:建立并跟踪健身目标
{
tool: "set-weekly-target",
parameters: {
userId: "user123",
weekStart: "2025-01-06",
targetRuns: 3, // 每周有氧目标
calorieBudget: 2000 // 每日卡路里目标
}
}
// AI上下文:启用目标导向的教练和进展跟踪
echo - 系统健康及测试// 功能:测试MCP连接性和系统健康
{
tool: "echo",
parameters: {
message: "测试MCP连接"
}
}
// 使用:调试并确保MCP服务器响应
┌─────────────────────────────────────────────────────────────────────────────┐
│ MCP 数据流 │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ 用户在AI工具中:"我今天做了20个俯卧撑,持续了15分钟" │
│ │ │
│ ▼ │
│ ┌─────────────────────┐ ┌─────────────────────┐ ┌─────────────────┐ │
│ │ 🧠 AI 处理 │ │ 🤖 MCP 协议 │ │ 📊 数据存储 │ │
│ │ │ │ │ │ │ │
│ │ • 解析意图 │───►│ • 工具选择 │───►│ • 存储锻炼 │ │
│ │ • 提取数据 │ │ • 参数映射 │ │ • 更新统计 │ │
│ │ • 选择动作 │ │ • 执行工具调用 │ │ • 计算 │ │
│ │ • 格式化响应 │◄───│ • 返回结果 │◄───│ 进展 │ │
│ └─────────────────────┘ └─────────────────────┘ └─────────────────┘ │
│ │ │
│ ▼ │
│ AI 响应:"很好!我已经记录了您15分钟的俯卧撑会话。您已完成每日锻炼目标的15/60分钟。"│
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│ 双界面系统 │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────┐ ┌─────────────────────┐ │
│ │ 🌐 网络界面 │ │ 🤖 AI界面 │ │
│ │ │ │ │ │
│ │ • 视觉仪表盘 │ │ • 自然语言处理 │ │
│ │ • 点击日志 │ │ • 上下文查询 │ │
│ │ • 进度图表 │ │ • 智能规划 │ │
│ │ • 计划显示 │ │ • 模式分析 │ │
│ └─────────────────────┘ └─────────────────────┘ │
│ │ │ │
│ ▼ ▼ │
│ ┌─────────────────────────────────────────────────────────────────────────┐ │
│ │ 🔄 MCP服务器核心 │ │
│ │ │ │
│ │ • 统一的数据访问接口 │ │
│ │ • 一致的业务逻辑和验证 │ │
│ │ • 网络和AI之间的实时同步 │ │
│ │ • 智能缓存和性能优化 │ │
│ └─────────────────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────────────┘
👤 用户在Cursor中:"我刚刚完成了一次30分钟的HIIT锻炼"
🤖 AI + MCP流程:
1. AI识别锻炼记录意图
2. MCP调用`log-workout`工具
3. 存储:类型="HIIT",持续时间=30,日期=今天
4. 更新每日进度计数器
5. AI回应鼓励和进度更新
📱 网络应用:自动显示更新的锻炼分钟数和锻炼完成情况
👤 用户在Claude中:"根据本周的锻炼情况,为明天创建一个锻炼计划"
🤖 AI + MCP流程:
1. MCP调用`view-context`来分析一周的活动
2. AI识别模式:主要是上半身,低有氧
3. MCP调用`generate-plan`带上下文
4. 创建平衡计划,强调腿部和有氧
5. 存储明天的计划
📱 网络应用:明天的锻炼部分填充了AI生成的锻炼
👤 用户在AI中:"我正在尝试吃得更健康,午餐应该吃什么?"
🤖 AI + MCP流程:
1. MCP调用`view-context`检查今天的餐食和卡路里目标
2. AI分析营养缺口和卡路里预算
3. 建议特定餐食及其卡路里数
4. 用户确认:"我会吃烤鸡肉沙拉"
5. MCP调用`log-nutrition`记录餐食
📱 网络应用:更新营养进展和餐食历史
git clone https://github.com/your-username/health-fitness-coach-mcp.git
cd health-fitness-coach-mcp
npm install
cp env.example .env.local
# 添加OPENAI_API_KEY以生成AI计划
npm run dev
{
"mcpServers": {
"health-fitness-coach": {
"url": "http://localhost:3000/sse"
}
}
}
{
"mcpServers": {
"health-fitness-coach": {
"command": "npx",
"args": ["-y", "mcp-remote", "http://localhost:3000/mcp"]
}
}
}
# 直接测试MCP工具
npm run test:fitness
# 测试特定端点
curl http://localhost:3000/api/context?userId=default-user
http://localhost:3000进行视觉健身追踪// 符合MCP协议的工具定义
export const logWorkoutTool = {
name: "log-workout",
description: "记录带有类型、持续时间和可选距离的锻炼会话",
inputSchema: {
type: "object",
properties: {
userId: { type: "string", description: "唯一用户标识符" },
date: { type: "string", description: "YYYY-MM-DD格式的日期" },
type: { type: "string", description: "锻炼类型(例如'跑步'、'力量')" },
duration: { type: "number", description: "持续时间(分钟)" },
distance: { type: "number", description: "距离(公里,可选)" }
},
required: ["userId", "date", "type", "duration"]
}
}
// 带持久化钩子的内存存储
export const workoutStore = createInMemoryStore<WorkoutEntry>()
export const nutritionStore = createInMemoryStore<NutritionEntry>()
export const planStore = createInMemoryStore<PlanEntry>()
//