whatevr

Log meals and read calories and macros from any AI assistant. Pairs with the whatevr iPhone app.

我該用這個嗎

品質與安全性

A
說明品質
100%
結構描述完整度
84%
命名品質
100%
汙染風險
100%
權限相符程度
100%
協定合規性
100%

根據工具定義與協定合規性的自動化分析。

上下文成本

~3,103Token(工具定義)
~1.6 KB典型回應大小
顯著的注意力影響(128k 上下文的 2.42%)

這是每次將伺服器的工具載入模型上下文時所消耗的約略 token 數量。數量越高,可用於其他工作的注意力就越少。

安裝

一鍵安裝

將以下內容加入你的 `claude_desktop_config.json` 檔案:

{
  "mcpServers": {
    "whatevr": {
      "url": "https://api.trywhatevr.app/mcp"
    }
  }
}

遠端端點

https://api.trywhatevr.app/mcpstreamable-http

它能做什麼

工具清單

工具(12)

🟢 唯讀🟡 寫入🔴 刪除⚪ 未知
🟡log_anything(text, logged_at, tz_offset_min)

Log food, drinks, water, exercise, or a weigh-in from one natural-language sentence — the same parser as the app's voice logging. Examples: 'two eggs and toast', '30 minute run', '3 glasses of water', 'weighed 184 this morning'. Spoken dates like 'yesterday I had pizza' work. Describe the FOOD, not just numbers: stating explicit nutrition in the text ('burrito, 800 calories') pins those totals exactly but logs ONE pre-computed item with no ingredient breakdown — if you do that, follow up with update_log's `ingredients` array so the log keeps its per-item detail.

輸入結構描述

{
  "type": "object",
  "properties": {
    "text": {
      "type": "string",
      "maxLength": 2000,
      "description": "What to log, in plain words."
    },
    "logged_at": {
      "type": "string",
      "description": "Bare-local timestamp YYYY-MM-DDThh:mm:ss (no zone). Omit to use the user's 'now'."
    },
    "tz_offset_min": {
      "type": "number",
      "description": "The user's JS getTimezoneOffset() — minutes BEHIND UTC (e.g. 240 for EDT). Optional: when omitted, the user's app-reported timezone is used (UTC only if the account has never reported one)."
    }
  },
  "required": [
    "text"
  ]
}
⚪log_exercise(activity, duration_minutes, calories_burned, logged_at, tz_offset_min)

Log structured exercise with a known calorie burn. For an ESTIMATED burn from plain text, use log_anything ('30 minute run').

輸入結構描述

{
  "type": "object",
  "properties": {
    "activity": {
      "type": "string",
      "description": "e.g. 'running'"
    },
    "duration_minutes": {
      "type": "number",
      "minimum": 1,
      "maximum": 1440
    },
    "calories_burned": {
      "type": "number",
      "minimum": 0,
      "maximum": 20000
    },
    "logged_at": {
      "type": "string",
      "description": "Bare-local timestamp YYYY-MM-DDThh:mm:ss (no zone). Omit to use the user's 'now'."
    },
    "tz_offset_min": {
      "type": "number",
      "description": "The user's JS getTimezoneOffset() — minutes BEHIND UTC (e.g. 240 for EDT). Optional: when omitted, the user's app-reported timezone is used (UTC only if the account has never reported one)."
    }
  },
  "required": [
    "activity",
    "duration_minutes",
    "calories_burned"
  ]
}
⚪log_weight(weight_lb, note, logged_at, tz_offset_min)

Log a weigh-in in pounds. The newest reading also becomes the user's current weight (drives their calorie targets).

輸入結構描述

{
  "type": "object",
  "properties": {
    "weight_lb": {
      "type": "number",
      "minimum": 20,
      "maximum": 1500
    },
    "note": {
      "type": "string"
    },
    "logged_at": {
      "type": "string",
      "description": "Bare-local timestamp YYYY-MM-DDThh:mm:ss (no zone). Omit to use the user's 'now'."
    },
    "tz_offset_min": {
      "type": "number",
      "description": "The user's JS getTimezoneOffset() — minutes BEHIND UTC (e.g. 240 for EDT). Optional: when omitted, the user's app-reported timezone is used (UTC only if the account has never reported one)."
    }
  },
  "required": [
    "weight_lb"
  ]
}
⚪log_water(glasses, amount_fl_oz, logged_at, tz_offset_min)

Log water — glasses (8 fl oz each) or an exact amount_fl_oz. Defaults to 1 glass.

輸入結構描述

{
  "type": "object",
  "properties": {
    "glasses": {
      "type": "number",
      "minimum": 1,
      "maximum": 32,
      "description": "8 fl oz each; used when amount_fl_oz is absent"
    },
    "amount_fl_oz": {
      "type": "number",
      "minimum": 1,
      "maximum": 256
    },
    "logged_at": {
      "type": "string",
      "description": "Bare-local timestamp YYYY-MM-DDThh:mm:ss (no zone). Omit to use the user's 'now'."
    },
    "tz_offset_min": {
      "type": "number",
      "description": "The user's JS getTimezoneOffset() — minutes BEHIND UTC (e.g. 240 for EDT). Optional: when omitted, the user's app-reported timezone is used (UTC only if the account has never reported one)."
    }
  }
}
🟢get_today(tz_offset_min)

Today's complete picture: calorie/macro totals vs targets, water, streak, exercises, and the item-by-item food log (`recent`: every logged item's name, calories, macros, ingredients). Each `recent` item's `id` works with update_log to correct mistakes.

輸入結構描述

{
  "type": "object",
  "properties": {
    "tz_offset_min": {
      "type": "number",
      "description": "The user's JS getTimezoneOffset() — minutes BEHIND UTC (e.g. 240 for EDT). Optional: when omitted, the user's app-reported timezone is used (UTC only if the account has never reported one)."
    }
  }
}
🟢get_day(date)

Everything logged on a specific day, INCLUDING each food item's name and nutrition (same shape as get_today). Use this to answer “what did I eat yesterday / on <date>”. Each `recent` item's `id` works with update_log to correct mistakes.

輸入結構描述

{
  "type": "object",
  "properties": {
    "date": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "YYYY-MM-DD"
    }
  },
  "required": [
    "date"
  ]
}
🟢get_progress(days, anchor, tz_offset_min)

Daily calorie/macro/exercise TOTALS over time + the weight trend (no food item names — use get_day for what was actually eaten).

輸入結構描述

{
  "type": "object",
  "properties": {
    "days": {
      "type": "number",
      "description": "1–730, or 0 for all-time (default 30)"
    },
    "anchor": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Window end date (default: the user's today)"
    },
    "tz_offset_min": {
      "type": "number",
      "description": "The user's JS getTimezoneOffset() — minutes BEHIND UTC (e.g. 240 for EDT). Optional: when omitted, the user's app-reported timezone is used (UTC only if the account has never reported one)."
    }
  }
}
🟢get_me

Who the user is: name/handle/email, health profile, calorie/macro targets, and derived metrics.

輸入結構描述

{
  "type": "object",
  "properties": {}
}
🔴update_goals(goal, goal_weight_lb, rate_lb_per_week, activity_level, calorie_target, ...)

Change the user's goal and daily targets — the same settings as the app's Goals screen. Send ONLY the fields to change. Each target takes a number (a custom target) or "auto" (computed from their body, activity and goal). The server keeps calories and macros consistent (protein×4 + carbs×4 + fat×9 ≈ calories), so the targets it returns can differ slightly from what you sent — report the returned ones. Current weight is not here: log a weigh-in with log_weight. Needs the user's "Change goals & settings" switch for this connection (whatevr app → Settings → Connections); if it's off you'll get a message saying so — relay it. The user is notified of every change.

輸入結構描述

{
  "type": "object",
  "properties": {
    "goal": {
      "type": "string",
      "enum": [
        "lose",
        "maintain",
        "gain"
      ]
    },
    "goal_weight_lb": {
      "type": "number",
      "minimum": 50,
      "maximum": 700
    },
    "rate_lb_per_week": {
      "type": "number",
      "minimum": 0,
      "maximum": 2,
      "description": "Pace for lose/gain (ignored for maintain)."
    },
    "activity_level": {
      "type": "string",
      "enum": [
        "sedentary",
        "light",
        "moderate",
        "very",
        "extra"
      ]
    },
    "calorie_target": {
      "description": "1000–5000, or \"auto\".",
      "anyOf": [
        {
          "type": "number",
          "minimum": 1000,
          "maximum": 5000
        },
        {
          "type": "string",
          "enum": [
            "auto"
          ]
        }
      ]
    },
    "protein_target_g": {
      "description": "20–400, or \"auto\".",
      "anyOf": [
        {
          "type": "number",
          "minimum": 20,
          "maximum": 400
        },
        {
          "type": "string",
          "enum": [
            "auto"
          ]
        }
      ]
    },
    "carbs_target_g": {
      "description": "20–600, or \"auto\".",
      "anyOf": [
        {
          "type": "number",
          "minimum": 20,
          "maximum": 600
        },
        {
          "type": "string",
          "enum": [
            "auto"
          ]
        }
      ]
    },
    "fat_target_g": {
      "description": "10–250, or \"auto\".",
      "anyOf": [
        {
          "type": "number",
          "minimum": 10,
          "maximum": 250
        },
        {
          "type": "string",
          "enum": [
            "auto"
          ]
        }
      ]
    },
    "water_goal_glasses": {
      "type": "number",
      "minimum": 1,
      "maximum": 20
    },
    "fiber_minimum_g": {
      "type": "number",
      "minimum": 5,
      "maximum": 60
    },
    "sugar_maximum_g": {
      "type": "number",
      "minimum": 10,
      "maximum": 150
    },
    "sodium_maximum_mg": {
      "type": "number",
      "minimum": 500,
      "maximum": 5000
    }
  }
}
🟡update_reminders(log_reminder, streak_reminder, tz_offset_min)

Turn the user's daily reminders on or off: the evening 'nothing logged today' nudge and the streak reminder. Same as the app's Notifications screen. Needs the user's "Change goals & settings" switch for this connection. The user is notified of the change.

輸入結構描述

{
  "type": "object",
  "properties": {
    "log_reminder": {
      "type": "boolean"
    },
    "streak_reminder": {
      "type": "boolean"
    },
    "tz_offset_min": {
      "type": "number",
      "description": "The user's JS getTimezoneOffset(). Only used if the app has never reported their timezone; then it's required."
    }
  }
}
🔴delete_log(log_id, type)

Delete ONE entry from the user's log: a food, exercise, weigh-in or water entry. Read get_today/get_day first — each item in `recent` carries its `id` and `type`; pass both. Deleting a weigh-in updates their current weight to the newest remaining one. This can't be undone, so confirm with the user first. Needs the user's "Delete entries" switch for this connection (whatevr app → Settings → Connections). The user is notified.

輸入結構描述

{
  "type": "object",
  "properties": {
    "log_id": {
      "type": "string",
      "description": "The item's `id` from get_today/get_day `recent`."
    },
    "type": {
      "type": "string",
      "enum": [
        "food",
        "exercise",
        "weight",
        "water"
      ],
      "description": "The item's `type` from `recent`."
    }
  },
  "required": [
    "log_id",
    "type"
  ]
}
🔴update_log(log_id, title, calories, protein_g, carbs_g, ...)

Correct an existing FOOD log: title, nutrition numbers, the ingredient list, meal, or time-of-day. Read get_today/get_day first — each item in `recent` (type "food") carries the `id` to pass here. Send ONLY the fields to change; values are absolute for the item as logged. Two modes, never mixed: send `ingredients` to REPLACE the whole list (include every ingredient you want kept — the log's totals recompute from it, so don't also send calories/macros), OR send top-level numbers to set totals directly — the existing ingredient breakdown then RESCALES proportionally so the parts always sum to the new totals (ingredient names/amounts don't change, so when the COMPOSITION changed — something added or removed — send `ingredients` instead). Note: ANY edit that changes a routine-created log's title or its calories — including an ingredients replacement, since totals recompute — also updates that saved routine. When logged_time changes, the log's meal may re-infer from the new hour unless you set meal explicitly. Requires a full-access token; edit one log at a time.

輸入結構描述

{
  "type": "object",
  "properties": {
    "log_id": {
      "type": "string",
      "description": "The item's `id` from get_today/get_day `recent` (type \"food\" only)."
    },
    "title": {
      "type": "string",
      "maxLength": 200
    },
    "calories": {
      "type": "number",
      "minimum": 0,
      "maximum": 20000
    },
    "protein_g": {
      "type": "number",
      "minimum": 0,
      "maximum": 2000
    },
    "carbs_g": {
      "type": "number",
      "minimum": 0,
      "maximum": 2000
    },
    "fat_g": {
      "type": "number",
      "minimum": 0,
      "maximum": 2000
    },
    "fiber_g": {
      "type": "number",
      "minimum": 0,
      "maximum": 2000
    },
    "sugar_g": {
      "type": "number",
      "minimum": 0,
      "maximum": 2000
    },
    "sodium_mg": {
      "type": "number",
      "minimum": 0,
      "maximum": 100000
    },
    "meal": {
      "type": "string",
      "enum": [
        "breakfast",
        "lunch",
        "dinner",
        "snack"
      ]
    },
    "logged_time": {
      "type": "string",
      "pattern": "^\\d{2}:\\d{2}$",
      "description": "HH:MM 24h — time-of-day only; the log's DATE never changes."
    },
    "ingredients": {
      "type": "array",
      "maxItems": 50,
      "description": "REPLACES the full ingredient list; totals recompute from it. Cannot be combined with top-level numeric fields.",
      "items": {
        "type": "object",
        "required": [
          "name",
          "calories"
        ],
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 120
          },
          "amount": {
            "type": "string",
            "maxLength": 60
          },
          "calories": {
            "type": "number",
            "minimum": 0,
            "maximum": 20000
          },
          "protein_g": {
            "type": "number",
            "minimum": 0,
            "maximum": 2000
          },
          "carbs_g": {
            "type": "number",
            "minimum": 0,
            "maximum": 2000
          },
          "fat_g": {
            "type": "number",
            "minimum": 0,
            "maximum": 2000
          },
          "fiber_g": {
            "type": "number",
            "minimum": 0,
            "maximum": 2000
          },
          "sugar_g": {
            "type": "number",
            "minimum": 0,
            "maximum": 2000
          },
          "sodium_mg": {
            "type": "number",
            "minimum": 0,
            "maximum": 100000
          }
        }
      }
    }
  },
  "required": [
    "log_id"
  ]
}

社群

為此伺服器評分

證據

近期觀測

已驗證未記錄版本12 個工具