Skip to main content
Glama

An MCP server for Bevel Health. Ask Claude, Grok Build or any MCP client about your Journal, meals, macro goals and workouts, and log new ones.

WARNING

Unofficial. This project isn't affiliated with Bevel. It uses Bevel's private API, reverse-engineered from the iOS app, so it can break whenever Bevel changes it. Use it only with your own account.

Quick start

You need a Mac with Node.js 20+, the Bevel app on your iPhone, and mitmproxy (brew install mitmproxy) to get your first token.

git clone https://github.com/JoshPopov/Bevel-MCP.git && cd Bevel-MCP
npm ci && npm run setup

Setup gets a token from your iPhone and shows what it will change. It asks before changing anything, then checks that the server answers and that Bevel accepts a real request. After that, try:

  • “What did I log in my Journal yesterday?”

  • “How much protein have I had today compared with my goal?”

  • “How has my leg press changed this month?”

  • “Log a banana as a snack at 3pm.” (needs writes)

Use with

--client

What setup does

Claude Code

code

Adds a user-scope bevel server and checks that it's connected

Claude Desktop

desktop

Adds bevel and keeps your other servers

Grok Build

grok

Runs grok mcp add (the Grok app and Grok Bot can't reach local servers)

Any MCP client

other

Shows and copies the JSON config

Any AI agent

prompt

Copies a prompt telling the agent how to add the server

Writes are off by default. Turn them on with npm run setup -- --writes and off with --read-only. npm run doctor checks a Claude setup and prints a report you can share.

Related MCP server: google-health-mcp

Tools

Area

Read

Write

Journal

get_journal, get_custom_journal_types†

set_journal_boolean, clear_journal_boolean†

Meals

search_food, get_food_logs

log_food, update_food_log†, delete_food_log†

Macro goals

get_macro_goals

set_macro_goals

Workouts

get_workout_data, get_workout_history

save_routine, delete_routine, create_custom_exercise†

Account

auth_status

Every tool name starts with bevel_. † These requests come from the app's own traffic but haven't been run against a real account yet.

Every write supports dryRun, reads fresh data first, and succeeds only when Bevel confirms the record.

Not supported:

  • Logging completed workouts (they belong to Apple Health).

  • Sleep, Strain and Recovery scores (Bevel calculates them on the iPhone).

  • Cardio, custom foods and recipes.

  • Number and choice Journal factors.

Tool details

Your token

Bevel signs you in with a token that lasts 60 days. Sign in with Apple can't be repeated from a computer, so npm run token:capture takes the token from the Bevel app's own requests through a local proxy. It checks the token with Bevel, then saves it to the macOS Keychain.

  • Capture installs a certificate on your iPhone that lets your Mac read Bevel's traffic. Remove it in Settings › General › VPN & Device Management when you're done.

  • The proxy intercepts only api.supersethealth.com, records nothing, and never prints the token.

  • npm run status shows how many days are left. To renew, run npm run token:capture again; your Claude setup doesn't change.

Token details and the first-time iPhone steps

Privacy

  • Your data travels only between your Mac, Bevel's API and the AI app you connect. There's no telemetry and no other server.

  • The token stays in your Keychain and is redacted from logs and errors.

  • Never share a token, an Authorization header or a raw capture. A doctor report is safe to share. See SECURITY.md.

Docs

  • Guide: token, settings, connecting clients by hand, how writes behave, troubleshooting, reset

  • Development: tests, live checks against your account, mapping more of the API

  • API notes: every endpoint and payload seen so far

  • Changelog

License

MIT. Bevel and Bevel Health belong to their owners. This project isn't affiliated with or endorsed by them.

Available Tools

17 tools
bevel_auth_statusBevel auth statusA
Read-only

Reports whether a Bevel API token is configured and decodes its non-secret JWT claims locally (account, issued/expiry times, lifetime). With checkApi, also makes one tiny request to confirm Bevel accepts it. Never returns the token.

Inputs: checkApi.

bevel_clear_journal_booleanClear a Boolean Journal factorA
Idempotent

Clears a yes/no Journal factor for one day, so it shows as not answered — exactly what the app sends: the same entry with isNotSet: true and no boolValue. Does nothing if there is no entry or it is already cleared. Requires BEVEL_ENABLE_WRITES=true unless dryRun is set.

Inputs: factorKey (required), date, dryRun.

bevel_create_custom_exerciseCreate a Bevel custom exerciseA

Creates a custom exercise (captured shape). Equipment, exercise type and muscle groups must be values Bevel is known to use (captured or already in your data) unless allowUnverifiedValues is set. Requires BEVEL_ENABLE_WRITES=true unless dryRun is set.

Inputs: name (required), equipment (required), defaultExerciseType (required), primaryMuscleGroups (required), +3 more.

bevel_delete_food_logDelete a Bevel food logA
DestructiveIdempotent

Deletes a logged food the way the app does (soft delete: deletedAt is set on the same entry). Requires BEVEL_ENABLE_WRITES=true unless dryRun is set.

Inputs: id (required), date (required), dryRun.

bevel_delete_routineDelete a Bevel strength routineA
DestructiveIdempotent

Deletes a routine the way the app does (re-sent whole with isDeleted: true). Requires BEVEL_ENABLE_WRITES=true unless dryRun is set.

Inputs: id (required), dryRun.

bevel_get_custom_journal_typesGet Bevel custom Journal typesB
Read-only

Pulls custom Journal types via GET /api/journal/v1/custom-journal-types/pull, following pagination. Items are raw (schema not captured yet).

Inputs: maxPages, lastSyncDate.

bevel_get_food_logsGet Bevel food logs for a dayA
Read-only

Lists the foods logged on a day with time, servings and calories/protein/carbs/fat/fiber/sugar/caffeine, plus day totals.

Inputs: date, includeDeleted.

bevel_get_journalGet Bevel Journal dataA
Read-only

Pulls Journal data via GET /api/journal/v1/user-journal-data/pull, following pagination. Boolean entries are returned as {day, factorKey, value, ...}, optionally filtered by date and factor; value is null and cleared is true for a factor that was cleared in the app. Other collections (defaults) are returned raw because their schema has not been captured yet.

Inputs: date, limit, maxPages, factorKey, +1 more.

bevel_get_macro_goalsGet Bevel macro goalsA
Read-only

Lists calorie/protein/carb/fat goals (each with a start and optional end date) and marks the one active on the given day.

Inputs: date.

bevel_get_workout_dataGet Bevel workout routines and custom exercisesA
Read-only

Lists strength routines (exercises, sets, weights) and custom exercises. Deleted items are hidden. Completed workouts are listed by bevel_get_workout_history; cardio and exercise notes are only counted.

Inputs: includeDeleted, includeSessions.

bevel_get_workout_historyGet Bevel completed workoutsA
Read-only

Lists completed strength workouts (most recent first): date, start time, duration, effort, and each exercise's sets with reps and weight in the unit you use, plus volume (reps × lb). Filter by date range or exercise name. Read-only.

Inputs: to, from, limit, exercise.

bevel_log_foodLog a food in BevelA

Logs a food (from bevel_search_food) to the Nutrition log, building the exact entry the app sends. Bevel files a log into breakfast/lunch/dinner by its time; there is no separate meal field. Requires BEVEL_ENABLE_WRITES=true unless dryRun is set.

Inputs: fdbId (required), date, time, query, +3 more.

bevel_save_routineCreate or replace a Bevel strength routineA

Creates a routine, or (with id) replaces an existing routine's name and exercises — the app also re-sends routines whole. Each exercise is a built-in presetWorkoutId or a customExerciseId with sets of reps or durationSec. Supersets are not supported yet. Requires BEVEL_ENABLE_WRITES=true unless dryRun is set.

Inputs: name (required), exercises (required), id, dryRun, +2 more.

bevel_search_foodSearch Bevel's food databaseA
Read-only

Searches foods the way the app does (generic + branded, 5 each). Returns fdbId, serving options and per-serving calories, protein, carbohydrate, fat, fiber, sugar and caffeine. Use an fdbId from here with bevel_log_food.

Inputs: query (required).

bevel_set_journal_booleanSet a Boolean Journal factorA
Idempotent

Sets a yes/no Journal factor (e.g. Added Sugar) for one day, the way the app does: if an entry for that factor and day exists it is updated in place (same uuid and createdAt), otherwise a new entry is created. Does nothing if the value is already set. Requires BEVEL_ENABLE_WRITES=true unless dryRun is set. Success means Bevel listed the entry's uuid as succeeded; confirm it in the app after restarting it.

Inputs: value (required), factorKey (required), date, dryRun, +1 more.

bevel_set_macro_goalsSet Bevel macro goalsA
Idempotent

Sets daily calorie and macro goals from today on, exactly like the app: if the current goal started before today it is ended yesterday and a new goal starts today; if it already started today it is updated in place. Calories default to 4×protein + 4×carbs + 9×fat. Requires BEVEL_ENABLE_WRITES=true unless dryRun is set.

Inputs: fatG (required), carbsG (required), proteinG (required), dryRun, +1 more.

bevel_update_food_logEdit a Bevel food logA
Idempotent

Changes the servings and/or time of a logged food (same entry, as the app does). Requires BEVEL_ENABLE_WRITES=true unless dryRun is set.

Inputs: id (required), date (required), time, dryRun, +1 more.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.7/5.0

    Scored across 17 tools

    Disambiguation4/5

    Each tool targets a distinct resource+action (goals, journal factors, food logs, routines, workout history), and descriptions draw the key boundaries explicitly (e.g. get_workout_data = routines/exercises vs get_workout_history = completed workouts). Minor residual ambiguity: routine reads live inside bevel_get_workout_data while routine writes use bevel_save_routine/bevel_delete_routine, so an agent looking for 'get_routine' has to infer the mapping, and set vs clear journal boolean could be confused at a glance.

    Naming Consistency4/5

    Nearly all 17 tools follow a consistent bevel_verb_noun snake_case pattern (get_, set_, clear_, delete_, create_, save_, search_, log_, update_). The only deviation is bevel_auth_status, a noun phrase without a verb, which breaks the pattern slightly but remains clear.

    Tool Count4/5

    17 tools is on the high side but justified: the surface spans four distinct sub-domains (nutrition, workouts, journal, macro goals) plus auth. Each tool maps to a real operation rather than being redundant, though the nutrition set (5 tools) plus routine/journal writes pushes it toward the upper bound.

    Completeness3/5

    Food logs have full CRUD, and goals/journal booleans have read+write coverage, but there are notable gaps: workout history is read-only with no way to log a completed workout or cardio, routines can be created/replaced/deleted but not read via a dedicated tool, and custom journal types are read-only with raw schemas. Supersets and custom-journal-type creation are explicitly unsupported.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      B
      maintenance
      Enables MCP clients like Codex and Claude Code to securely read and manage a personal Cronometer account, including food logs, nutrient summaries with missing-data awareness, food search, biometrics, and export analysis.
      MIT
    • A
      license
      A
      quality
      C
      maintenance
      Provides local, read-only MCP access to Google Health API v4, enabling users to query recorded workouts, heart-rate samples, and related health data through natural language in an MCP client.
      3
      55 npm
      MIT
    • A
      license
      Not graded
      quality
      B
      maintenance
      Enables conversational logging and retrieval of workouts, sets, weigh-ins, meals, goals, plans, and progress photos through MCP-capable AI clients, with authenticated per-user storage and export/query capabilities.
      ISC
    • A
      license
      B
      quality
      B
      maintenance
      Enables MCP clients to read account status, plans, and recent workouts, search official exercise names, and, when writes are enabled, apply confirmed preview-first plan changes and historical workout logs.
      22
      MIT