Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
BODYLOG_DBNoThe SQLite file path (default: ~/.bodylog/log.db)~/.bodylog/log.db
FDC_API_KEYNoUSDA FoodData Central API key (default: DEMO_KEY)DEMO_KEY
BODYLOG_UNITNoUnit for workout totals: kg or lb (default: most-logged unit)
BODYLOG_CARDSNoDirectory where card PNGs are stored (default: ~/.bodylog/cards/)~/.bodylog/cards/
BODYLOG_OFFLINENoSet to '1' to use only the bundled food table, no network (default: off)off

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
log_setA

Log a set to the current workout, starting one if none is open.

exercise: name as the user says it ("incline db curl"); omit to reuse the last set's exercise. weight/unit: 0 or omitted for bodyweight; unit is kg or lb (defaults to the last unit used). kind: normal, warmup, drop or failure. count: identical sets at once ("3x10"). text: alternatively, the user's raw message ("62.5kg x 6", "same", "this is tricep pushdowns btw"). Returns the logged sets and any PRs they set. A text that ends the workout ("done, 1h 5m") returns the card.

edit_last_setB

Fix the most recent set in the open workout ("that was 10 reps", "that was cable pushdowns"), or delete it.

end_sessionA

End the open workout. duration is what the user says ("1h 5m", "65 min", "1:05"); title is optional ("Push Day"). unit (kg or lb) sets the totals' unit. Returns the summary card as text and PNG images (one per page; long workouts span several) to show the user.

session_cardB

Summary card (text + PNG pages) for a workout: the open one, else the latest. theme: dark, light, or clear (transparent background, a sticker for a photo); unit: kg or lb for totals (each set keeps the unit it was logged in); style: full (every set, may span pages) or story (one phone-screen image, one line per exercise).

exercise_historyA

Per-session history for one exercise, newest first: sets, best set, top weight, estimated 1RM, volume.

prsA

All-time records (heaviest weight, best estimated 1RM, most reps) for one exercise or all of them.

weekly_volumeC

Training volume, workouts and sets per week (Monday start), oldest first.

import_chatA

Backfill workouts from a pasted chat log (lines like "[2026-09-08 18:07] me: 60kg x 8"). Safe to repeat: time spans that already hold sets are skipped. Lists lines it could not read.

log_foodA

Log food. Usually pass the user's words as text ("2 eggs, toast and a protein shake", "lunch: 200g chicken, 1 cup rice"); it is split into items and each is matched to USDA FoodData Central or Open Food Facts. For one item: name (or barcode, or a food_id from lookup_food) with grams, or amount + unit (cup, slice, tbsp, oz, ml...). Pass kcal/protein/carbs/fat when the user reads them off a label. meal: breakfast, lunch, dinner or snack (default from the words, else the time of day). Each item has a status: ok / manual count; unknown (no match; see candidates) and needs_amount do not count until fixed with edit_food. Returns the items and the day's totals so far.

edit_foodA

Fix a logged food item by id: a new amount (grams, or amount + unit), another food (name, or food_id from lookup_food or an item's candidates), another meal, or the numbers themselves. delete=True removes it.

lookup_foodA

Search foods without logging: a name ("kimchi", "clif bar") or a product barcode. Returns candidates with per-100 g macros, portions and a food_id to pass to log_food or edit_food.

food_dayA

One day's food (default today, YYYY-MM-DD): items by meal, totals, goals and what is left, streaks, items not counted, and any workouts that day.

food_cardA

Shareable card for a day of food (default today): text plus a PNG. theme: dark, light or clear; style: full (every item) or story (one phone screen). Workouts that day appear on it too.

set_goalsA

Daily targets (kcal, grams of protein/carbs/fat). Omitted ones stay as they are; 0 clears one.

streaksA

Current food-logging streak in days (and the best), and training streak in weeks with a workout.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A3.6/5.0

Scored across 15 tools

Disambiguation4/5

Tools are mostly distinct by domain: food vs. workout logging, and card generation vs. raw data. A few pairs (food_card/session_card, lookup_food/log_food, prs/exercise_history) could be confused, but their descriptions clarify the boundaries well.

Naming Consistency3/5

All names are snake_case and readable, but the pattern is mixed: some are verb-first (log_food, end_session, edit_food) while others are noun-first (food_card, session_card, weekly_volume, prs). This is a readable mixed convention rather than a consistent one.

Tool Count5/5

Fifteen tools is at the upper end of the typical range, but the server covers two distinct domains—food logging and workout logging—and each tool has a clear, non-redundant purpose. The count feels appropriate for the stated scope.

Completeness4/5

The surface covers food logging, editing, searching, goals, summaries, and cards, plus workout logging, workout cards, history, PRs, volume, streaks, and chat import. The main gap is that workout set editing is limited to the most recent set, with no way to edit or delete arbitrary past workout entries.

Maintenance

ActivityMaintained
ResponsivenessNo issues