{"name":"io.github.abhaymettu/bodylog","slug":"abhaymettu-bodylog","title":"bodylog","description":"Agent-first workout and food log: sets and meals from chat, USDA and Open Food Facts macros, cards.","url":"https://mcp.market/server/abhaymettu-bodylog","rating":null,"grade":"B","score":78,"certified":false,"status":"active","category":"ai","tags":["ai"],"presence":{"score":18,"stars":1,"forks":0,"downloads_week":10,"last_push_at":"2026-09-23T15:38:31.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"pypi","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/abhaymettu/bodylog","website":null,"version":"0.1.0","remotes":[],"packages":[{"registryType":"pypi","identifier":"bodylog","version":"0.1.0","runtimeHint":"uvx","transport":{"type":"stdio"},"packageArguments":[{"value":"mcp","type":"positional"}],"environmentVariables":[{"description":"SQLite file for the log (default ~/.bodylog/log.db)","format":"string","name":"BODYLOG_DB"},{"description":"Directory for rendered card PNGs (default ~/.bodylog/cards)","format":"string","name":"BODYLOG_CARDS"},{"description":"USDA FoodData Central API key (free at api.data.gov); DEMO_KEY is used without one","format":"string","isSecret":true,"name":"FDC_API_KEY"},{"description":"Set to 1 to use only the bundled USDA table, no network lookups","format":"string","name":"BODYLOG_OFFLINE"}]}],"tools":[{"name":"edit_food","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"edit_last_set","description":"Fix the most recent set in the open workout (\"that was 10 reps\", \"that was cable pushdowns\"), or delete it.","write_action":false,"price_micros":0,"input_schema":null},{"name":"end_session","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"exercise_history","description":"Per-session history for one exercise, newest first: sets, best set, top weight, estimated 1RM, volume.","write_action":false,"price_micros":0,"input_schema":null},{"name":"food_card","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"food_day","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"import_chat","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"log_food","description":"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. m","write_action":false,"price_micros":0,"input_schema":null},{"name":"log_set","description":"Log a set to the current workout, starting one if none is open.","write_action":false,"price_micros":0,"input_schema":null},{"name":"lookup_food","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"prs","description":"All-time records (heaviest weight, best estimated 1RM, most reps) for one exercise or all of them.","write_action":false,"price_micros":0,"input_schema":null},{"name":"session_card","description":"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).","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_goals","description":"Daily targets (kcal, grams of protein/carbs/fat). Omitted ones stay as they are; 0 clears one.","write_action":false,"price_micros":0,"input_schema":null},{"name":"streaks","description":"Current food-logging streak in days (and the best), and training streak in weeks with a workout.","write_action":false,"price_micros":0,"input_schema":null},{"name":"weekly_volume","description":"Training volume, workouts and sets per week (Monday start), oldest first.","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":78,"grade":"B","scanned_at":"2026-11-03T23:29:14.111Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-11-03T23:29:14.051Z","components":{"code":{"score":25,"max":25,"notes":["15 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":6,"max":15,"notes":["static API keys via environment variables"]},"maintenance":{"score":12,"max":15,"notes":["last push 41 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[],"inputs":{"packages":[{"registryType":"pypi","identifier":"bodylog","version":"0.1.0","found":true,"weeklyDownloads":10,"license":"MIT","dependencyCount":2,"publishedAt":"2026-09-23T15:36:31.572842Z","repositoryUrl":"https://github.com/abhaymettu/bodylog"}],"repo":{"found":true,"owner":"abhaymettu","repo":"bodylog","archived":false,"pushedAt":"2026-09-23T15:38:31Z","stars":1,"forks":0,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/113219143?v=4","ownerCreatedAt":"2022-09-10T00:38:52Z","license":"MIT"},"icon":{"url":"https://avatars.githubusercontent.com/u/113219143?v=4&s=128","source":"github"},"presence":{"stars":1,"forks":0,"downloadsWeek":10,"license":"MIT","lastPushAt":"2026-09-23T15:38:31.000Z","score":18}}}},"grade_history":[],"reviews":[]}