# Gutlog > Gutlog logs what you eat from a photo in ChatGPT or Claude: calories, macros, nutrients and ingredients with a confidence score you can fix in one tap. Clean-ingredient verdicts, organic advice, a barcode index, tummy scores, trigger analysis and elimination diets, from the web app, MCP, the CLI or the API. Gutlog is made by Meter; the name is a working name. It is not medical advice: gut insights are hypotheses to test, not diagnoses. Health data is never sold and never sent to analytics or advertising. Every web app action is an op, available as REST (`POST https://getgutlog.com/api/v1/{op}`), as an MCP tool (https://getgutlog.com/api/mcp, streamable HTTP) and as a CLI command (`npx @meterapp/gutlog `). Authenticate with OAuth on the MCP endpoint or `Authorization: Bearer gutlog_…` (an API key, optionally scoped). ## Setup A person sets Gutlog up by pasting one sentence into their assistant: "Set up Gutlog for me: read https://getgutlog.com/setup.md and follow it." - [setup.md](https://getgutlog.com/setup.md): instructions for the assistant: which client it runs in, the command or the exact clicks, then verify with `get_onboarding` and log a first meal. - [Setup page](https://getgutlog.com/setup?ref=llms): every client with copy buttons and one-click links (ChatGPT, Claude, Claude Code, Codex, Cursor, VS Code, Gemini CLI, other MCP clients). ## Docs - [Overview](https://getgutlog.com/docs?ref=llms): What Gutlog is, its concepts and every way to use it. - [Getting started](https://getgutlog.com/docs/getting-started?ref=llms): Connect ChatGPT or Claude with one prompt or the setup page, log a first meal, see what is left to set up and what is free. - [Quickstart](https://getgutlog.com/docs/quickstart?ref=llms): Connect your assistant over MCP, log a first meal from a draft and read the day back, in five minutes. - [Logging meals](https://getgutlog.com/docs/logging?ref=llms): Photos, sentences and barcodes; confidence tiers, the review queue and reading your diary back. - [Fixing a meal](https://getgutlog.com/docs/editing?ref=llms): Fix anything in one sentence or one tap; your edits always win, and every change is kept. - [Clean verdicts and organic](https://getgutlog.com/docs/clean?ref=llms): Our own ingredient rubric with an evidence level per flag, profiles, swaps and when organic is worth it. - [Gut, triggers and programs](https://getgutlog.com/docs/gut?ref=llms): Tummy scores, suspected triggers as hypotheses, and low-FODMAP and single-food programs with a safety screen. - [Data, audits and exports](https://getgutlog.com/docs/data?ref=llms): Provenance on every row, audit_diary, and export_data as JSON and CSV with a data dictionary. - [Privacy](https://getgutlog.com/docs/privacy?ref=llms): What happens to your food and symptom data: never sold, never sent to analytics or ads, yours to export or delete. - [MCP server](https://getgutlog.com/docs/mcp?ref=llms): Connect ChatGPT, Claude, Claude Code, Codex, Cursor and any MCP client to Gutlog. - [REST API reference](https://getgutlog.com/docs/api?ref=llms): Every op, its input schema and a curl example, generated from the ops registry. - [CLI](https://getgutlog.com/docs/cli?ref=llms): Run any Gutlog op from a terminal, a script or CI. - [TypeScript SDK](https://getgutlog.com/docs/sdk?ref=llms): A typed client for every op, with retries, idempotency keys and typed errors. - [Errors](https://getgutlog.com/docs/errors?ref=llms): RFC 9457 problem responses and every error code the API returns. - [Meal drafts and confidence](https://getgutlog.com/docs/meal-drafts?ref=llms): The draft an assistant sends to log_meal, ingredient confidence tiers (0.85, 0.60, 0.30) and when a meal needs review. - [Nutrients and units](https://getgutlog.com/docs/nutrients?ref=llms): Every nutrient and its integer unit: energy in millikilocalories, macros and most minerals in milligrams, some vitamins in micrograms. - [Accounts, roles and keys](https://getgutlog.com/docs/organizations?ref=llms): Your personal organization, roles, API keys and their scopes. - [Feedback and reviews](https://getgutlog.com/docs/feedback?ref=llms): Request features, report issues with the failing request attached, upvote, comment and review, from the board, MCP, the CLI or REST. ## Machine-readable - [setup.md](https://getgutlog.com/setup.md): Instructions an assistant follows to connect itself and log a first meal. - [agents.md](https://getgutlog.com/agents.md): Concise guide for agents: auth, workflows, ops and rules. - [llms-full.txt](https://getgutlog.com/llms-full.txt): Everything in one file, including every op's JSON input schema. - [OpenAPI 3.1](https://getgutlog.com/openapi.json): Every op as POST /api/v1/{op}. - [Op catalog](https://getgutlog.com/api/v1): JSON list of every op with its input schema. - [Pricing document](https://getgutlog.com/api/v1/pricing): Plans, prices, allowances and checkout links as JSON. - [MCP server card](https://getgutlog.com/.well-known/mcp.json) - [OAuth protected resource metadata](https://getgutlog.com/.well-known/oauth-protected-resource) ## Pricing Unit: analyses: one photo or text analysis on our model (a photo sent through the web app, CLI, API or email; free text; a label photo), counted per UTC day. Logging a meal your assistant already analyzed (ChatGPT, Claude over MCP), barcode scans of indexed products and edits are free and unlimited. Yearly is $60 instead of $96. The full pricing document (JSON, no credential, the same shape on every Meter product): `GET https://getgutlog.com/api/v1/pricing`; MCP `get_pricing` (also on the no-auth catalog server https://getgutlog.com/api/mcp/catalog); CLI `npx @meterapp/gutlog pricing --json`; human page: https://getgutlog.com/pricing?ref=agent. - Free (`free`): free. 0 photo or text analyses a day on our model, unlimited history; logging from your assistant is unlimited. Your food database, from your own AI assistant. - Plus (`plus`): $8/month or $60/year. 50 photo or text analyses a day on our model, unlimited history; logging from your assistant is unlimited. Gutlog does the work: the app, reminders, plans and gut analysis. Buy: https://getgutlog.com/checkout?plan=plus&ref=agent Limits: No overage: analyses past the 0 a day are refused until the next UTC day or an upgrade. Logging a meal the assistant already analyzed, barcode scans and edits never count. Buying a plan (never collect card details; the human pays on Stripe): - MCP `create_checkout_link`, CLI `gutlog upgrade --plan plus [--yearly]`, REST `POST /api/v1/billing/checkout` return a Stripe Checkout URL for a human. Nothing is charged until they complete it. - Before signup: create_checkout_link needs no account: without a credential it returns a Stripe Checkout URL for a human. After paying they sign in to Gutlog with the same email; the subscription attaches to their organization on return (or claim_checkout {session_id}). - With a saved card: subscribe {plan, interval, confirm: true} changes the plan on the organization's saved card, only after a human approved the price. - Account and invoices: get_billing_link (invoices, card, cancel); get_account (plan, usage, what the next plan adds). ## Meals, confidence and units The host model does the vision: it looks at the photo and sends `log_meal` a draft (items with grams or a household portion, an optional barcode, cooking method, and ingredients with a confidence each). Gutlog matches each item against the person's own foods, the barcode index and the food database, then portions, scores and stores it. The meal is always stored; `needs_review` is set when the meal confidence is under the person's threshold (default 0.80) or a possible ingredient is a known trigger. Ingredient tiers: confirmed ≥0.85 (or from a label, counted), likely 0.6–0.85 (counted), possible 0.3–0.6 (suggested, not counted), dropped below 0.3. Guide: https://getgutlog.com/docs/meal-drafts?ref=llms. Nutrients are integers in a base unit, never floats: energy (mkcal), protein (mg), carbs (mg), fat (mg), saturated_fat (mg), trans_fat (mg), fiber (mg), sugar (mg), added_sugar (mg), sodium (mg), cholesterol (mg), potassium (mg), calcium (mg), iron (mg), magnesium (mg), zinc (mg), vitamin_c (mg), vitamin_a (ug), vitamin_d (ug), vitamin_b12 (ug), folate (ug), caffeine (mg). mkcal is millikilocalories (1 kcal = 1000 mkcal); ug is micrograms. `totals_display` carries kcal and grams for people. Guide: https://getgutlog.com/docs/nutrients?ref=llms. ## Ops ### Meals and diary - `log_meal` (write): Log a meal. Log what the person ate. - `get_day` (read): Get a diary day. One day of the food diary in the person's timezone: every meal with its items (match, grams, nutrients, confidence) and ingredients (id, tier, confidence, status), the day's nutrient totals, the person's daily goals and how many meals need review. - `get_meal` (read): Get a meal. One logged meal with everything an edit needs: item ids, ingredient ids, tiers, statuses and the open questions. - `list_review_queue` (read): List meals to review. Meals flagged needs_review (low confidence, a possible trigger or allergen, an implausible portion), newest first, each as a full meal with its questions. - `update_meal` (write): Update a meal. Change a logged meal: its title, type, time or note; per item (meal_item_id from the meal) its grams or household portion ("the chicken was more like 200 g"), its match (food_id from search_foods: "it was oat milk"), its name, or remove it; add_items with the same item shape as log_meal. - `confirm_ingredients` (write): Confirm ingredients. The person says these ingredients were in the meal ("yes, butter"): ids from the meal's ingredients or questions, or all_likely: true with meal_id to confirm every likely one at once ("yes, that's right"). - `reject_ingredients` (write): Reject ingredients. The person says these ingredients were not in the meal ("no cheese", "no garlic"): ids from the meal's ingredients or questions. - `add_ingredients` (write): Add ingredients. Add ingredients we missed to one item ("it had onions", "cooked in butter"), confirmed. - `set_nutrients` (write): Set nutrient values. Override nutrient values of one item directly ("the protein was more like 45 g", "it said 320 kcal"). - `mark_reviewed` (write): Mark a meal reviewed. The person looked at the meal and it is right as it is: it leaves the review queue and stays out. - `delete_meal` (write): Delete a meal. Remove a meal from the diary (logged twice, or never eaten). - `copy_meal` (write): Copy a meal. Log a meal again ("same as yesterday's breakfast"): meal_id, or date + meal_type for the latest meal of that type that day. - `save_personal_food` (write): Save as my usual. Save a corrected item (meal_item_id) or a whole meal (meal_id, with a name) as one of the person's own foods: "save this as my usual latte". - `list_personal_foods` (read): List personal foods. The person's own foods (saved as usual or learned from corrections), most used first, with nutrients per 100 g, default grams and ingredients. - `archive_personal_food` (write): Archive a personal food. Stop matching a personal food (it was wrong, or the person no longer eats it). - `rate_analysis` (write): Rate an analysis. Thumbs up or down on how well a meal was analyzed, with an optional reason in the person's words. - `get_calibration` (read): Get confidence calibration. How well ingredient confidences match what the person confirmed and rejected: per 0.1 bucket and source (photo, text, database), how many were answered, the confirm rate and the gap from the bucket's midpoint. - `get_calibration_all` (read): Get calibration across everyone. Calibration across every organization (counts only), for tuning thresholds and the analysis prompt. - `refresh_global_aliases` (write): Refresh shared aliases. Promote correction patterns seen from at least 20 different people to shared aliases (and drop ones that fell under). - `get_logging_settings` (read): Get logging settings. The person's review threshold (meals under it are flagged) and daily nutrient goals (integers; goals_display in kcal and grams). - `update_logging_settings` (write): Update logging settings. Set the review threshold (0–1; lower flags fewer meals) and daily goals in display units: {"energy": 1800, "protein": 120, "sodium": 2000} (kcal, grams, mg). ### Foods - `search_foods` (read): Search foods. Find canonical foods by name in USDA FoodData Central (Foundation, SR Legacy and FNDDS mixed dishes) plus packaged products in the barcode index. - `get_food` (read): Get a food. One canonical food by id (from search_foods, e.g. ### Products - `lookup_barcode` (read): Look up a barcode. Find a packaged food by its barcode: our product index first (instant), then Open Food Facts, then USDA Branded Foods; a product found outside the index is added to it. - `get_product` (read): Get a product. A product already in our index by GTIN or id: brand, name, serving, nutrients per serving and per 100 g, ingredient text and parsed ingredient ids, allergens, verification status, the source of every field and the attribution to show, and its public page URL. - `scan_label` (write): Read a label photo. Read a food package from photos on our model: the nutrition facts panel, serving size, ingredient statement and the barcode digits if visible. - `submit_product` (write): Submit a product label. Add or correct a packaged food in the product index from its label: the barcode plus what the label says (brand, name, serving size and grams, the nutrition panel per serving as integers in stored units, the ingredient statement verbatim). - `list_submissions` (read): List product submissions. Gutlog staff: product label submissions waiting for review (pending and conflicting by default, oldest first) with the label, the diff against the product and the revision it proposes. - `review_submission` (write): Review a product submission. Gutlog staff: accept a label submission (its label becomes the product's, recorded as a revision with a diff, and the product is verified) or reject it (a pending revision it proposed is dropped). ### Clean and organic - `check_clean` (read): Check if food is clean. Judge ingredients against Gutlog's published clean-ingredient rubric: pass exactly one of ingredients_text (a label as printed), ingredients (names), barcode (a product in the index) or meal_id (a logged meal). - `get_clean_rubric` (read): Get the clean rubric. The clean-ingredient rubric as data: version, scoring rules, profiles (strict, balanced, custom) with their thresholds, evidence levels, categories, every rule (ingredient, aliases, category, evidence, penalty, why, citation), additives the EU bans or restricts, and this year's EWG Dirty Dozen and Clean Fifteen with the citation. - `get_clean_profile` (read): Get the clean profile. The person's clean profile: strict, balanced (the default) or custom, and for custom the level per category (off, balanced or strict). - `set_clean_profile` (write): Set the clean profile. Choose how strictly food is judged: strict (every rule, including gums, starches and all added sugars), balanced (the default) or custom. - `clean_summary` (read): Summarize clean eating. How clean the person ate from `from` to `to` (diary days, inclusive, at most 92 days), or over the last `days` days up to today in their timezone (default 7): the overall verdict and mean score, one entry per day with its meals' verdicts and scores, verdict counts, the worst offenders (flagged ingredients by how often and how heavily they appeared, with evidence and why) and Dirty Dozen or Clean Fifteen produce eaten. - `suggest_swaps` (read): Suggest cleaner swaps. Cleaner products of the same kind from the product index: for one product (barcode) or each indexed product in a logged meal (meal_id). ### Gut - `log_symptoms` (write): Log symptoms. Record how the person's gut feels: severity 0–10 for bloating, abdominal_pain, gas, nausea, reflux and urgency (only the ones they mention), an overall severity, Bristol stool type 1–7, bowel movements today, energy 0–10, and the time. - `list_symptom_logs` (read): List symptom logs. Symptom logs in a date range (default the last 14 days), newest first: severities per symptom, overall, Bristol type, stool count, energy, fine, and each log's burden (0–10). - `delete_symptom_log` (write): Delete a symptom log. Delete one symptom log the person logged by mistake, and recompute that day's tummy score. - `get_tummy_scores` (read): Get tummy scores. Daily tummy scores 0–100 (100 = no gut symptoms) for a date range, default the last 30 days: per day the score, number of logs, fine logs, worst symptom and Bristol types, plus the average and the trend (second half minus first half). - `get_pending_checkins` (read): Get pending check-ins. Check-ins due now: one 2–4 hours after each logged meal, an evening check-in, today's reintroduction challenge dose and the weekly adequate-relief question when a program is running. - `set_checkin_preferences` (write): Set check-in preferences. Turn check-in emails on or off (off, evening only, or also 2–4 h after each meal and program reminders) and set the local hour of the evening check-in (17–23). - `get_exposures` (read): Get exposures. What the person was exposed to, per meal and per day, for a date range (default the last 7 days, at most 92): FODMAP subgroups (fructans, GOS, lactose, excess fructose, sorbitol, mannitol), gluten, dairy protein, caffeine, alcohol, fat load, capsaicin, carbonation, sugar alcohols, emulsifiers, insoluble fiber and high-histamine foods, each with the level a typical serving carries and the ingredients that brought it, plus a summary per exposure. - `get_triggers` (read): Get suspected triggers. Which foods look safe for this person and which don't, from their own log: for each exposure, the estimated extra symptom severity (0–10 points) in that exposure's time window after eating, the probability it is a real effect, and how many meals it rests on; or "not_enough_data" (fewer than 5 exposure meals followed by a check-in), "inconclusive", "unlikely", or "confirmed"/"ruled_out" from a reintroduction challenge. - `food_tummy_score` (read): Food tummy score. Predicted gut-friendliness 0–100 of a food, a barcode product or a list of taxonomy ingredients for this person (100 = nothing we expect to bother them), with the exposures behind it and their citations. - `check_ingredients` (read): Check ingredients for triggers. Which of these ingredients (taxonomy ids or names) are the person's known or suspected triggers or allergens, with the exposures involved and low-FODMAP swaps. - `get_low_fodmap_swaps` (read): Get low-FODMAP swaps. Lower-FODMAP alternatives for an ingredient or a food (its ingredients), with the FODMAP subgroups each one avoids and the published sources. ### Programs - `screen_for_program` (read): Safety screen for a program. The safety screen every elimination program starts with. - `start_program` (write): Start an elimination program. Start an elimination program after the safety screen (pass the same answers as safety_screen). - `get_program` (read): Get a program. The running elimination program (or one by id): phase, day, next action in words to relay, the schedule of challenges with doses and results, the tummy-score comparison before and during elimination, low-FODMAP swaps for foods the person actually ate recently, and the dietitian recommendation. - `record_relief_check` (write): Record the weekly relief check. The weekly question during elimination: "Over the past 7 days, have you had adequate relief of your gut symptoms?" Record yes or no. - `record_challenge` (write): Record a challenge dose. During reintroduction: record that the person ate today's challenge dose and how they reacted (none, mild, moderate, severe, or unsure). - `advance_program` (write): Advance a program. Move the running program to its next phase when it is ready: elimination → reintroduction (after 2+ weeks with adequate relief), removal → reintroduce (after 2+ weeks), reintroduction → personalization (every challenge done, or skip_remaining), then finish. - `stop_program` (write): Stop a program. Stop the running program (no relief at 6 weeks, too hard to follow, or a doctor's advice). ### Insights - `get_diary` (read): Get the diary. The food and symptom diary over a range of days (default the last 7, at most 31 per call), for reading or auditing: every day (empty ones too, so gaps show) with its meals, items (match, grams, nutrients, confidence, source), ingredients (tier, confidence, status) and symptom logs, each with who logged it and from where. - `get_nutrition_summary` (read): Get a nutrition summary. Calories, macros or any nutrient over any range (default the last 7 days, up to a year): totals, the average per logged day, a breakdown by day, week, month or meal type, and each goal (set_goals) with the average as a percent and how many days met it. - `query_foods` (read): Query the foods eaten. What the person has eaten, grouped by food (default the last 90 days): how many times, on how many days, when last, grams and nutrients contributed. - `audit_diary` (read): Audit the diary. Checks the diary before you trust it (default the last 14 days, at most 92): days with missing meals, meals flagged for review and possible ingredients nobody confirmed, low-confidence matches, implausible portions, days with meals but no symptom log, and likely duplicate meals. - `export_data` (write): Export the data. Exports the diary (default everything) as files: export.json (meals → items → ingredients, symptom logs, corrections and the data dictionary), meals.csv, items.csv, ingredients.csv, symptoms.csv, corrections.csv, daily.csv and README.md (the data dictionary: every file, column and unit). - `get_goals` (read): Get nutrition goals. The person's daily nutrition goals (calories, protein, carbs, fat, fiber, sugars, saturated fat, sodium) as stored integers and in kcal and grams. - `set_goals` (write): Set nutrition goals. Sets daily goals in the units people use: calories (kcal), protein_g, carbs_g, fat_g, fiber_g, sugar_g, added_sugar_g, saturated_fat_g, sodium_mg. - `get_survey` (read): Get the survey to ask. The one-question survey due for this person, if any (at most one a week, never one they answered): {survey: {id, question, kind, scale | choices, how}} or {survey: null}. - `answer_survey` (write): Answer a survey. Records the person's answer to a survey (logging_ease, accuracy, pmf, next_improvement, nps, cancel): a number on the survey's scale or one of its choice ids, plus anything else they said as comment. - `get_query_privacy` (read): Get query privacy. Whether Gutlog keeps the words of free-text requests (keep_raw_queries, off by default) and what it keeps either way. - `update_query_privacy` (write): Update query privacy. Whether Gutlog may keep the words of free-text requests (a search, a meal description) to improve how it understands them. - `get_query_report` (read): Get the query analytics report. Gutlog team only. ### Events - `list_events` (read): List events. The organization's event log, newest first: every platform event (meal.logged, meal.updated, meal.reviewed, meal.deleted, product.submitted…) with its payload (ids and flags, never food or symptom text), subject, source and time. - `get_event` (read): Get event. One event from the organization's event log by id, with its payload and how each internal consumer handled it (done, failed with the error, dead after its retries). ### Account - `get_organization` (read): Get organization. The organization this credential acts in (a person's own diary is their personal organization): id, slug, name, timezone (the diary day boundary) and language, and the caller's role. - `update_organization` (write): Update organization. Change the organization's name, default timezone (IANA, e.g. - `list_activity` (read): List activity. Every change made through the platform, newest first: who (a person, an API key, an AI agent, a worker), from which surface (dashboard, api, mcp, cli, worker, ai) and what. - `get_onboarding` (read): Get onboarding checklist. The person's setup checklist, in order: connect their AI assistant (MCP), log a first meal, scan a barcode, log symptoms, start an elimination program. - `get_referral_stats` (read): Acquisition by channel (staff). Gutlog team only. - `get_profile` (read): Get my profile. Your own settings, the same in every organization: `locale`, the language the dashboard and every email to you are written in (one of en), or null when you never chose one (the dashboard then follows the browser, emails are English). - `update_profile` (write): Update my profile. Changes your own settings: `locale` (en) is the language of the dashboard and of every email Gutlog sends you; null forgets it. ### Members and sharing - `list_members` (read): List members. Everyone in this organization with their email, role (owner, admin, member, viewer) and teams. - `list_invites` (read): List invites. Pending invitations to this organization (email, role, teams, who invited, when it expires). - `list_teams` (read): List teams. Teams in this organization with their members (maintainer or member) and the resources (programs) shared with each team. - `create_team` (write): Create team. Create a team (a group of members to share programs with). - `update_team` (write): Update team. Rename a team or change its description. - `delete_team` (write): Delete team. Delete a team. - `set_team_member` (write): Add to team. Add an organization member to a team, or change their team role (maintainer manages the team; member is in it). - `remove_team_member` (write): Remove from team. Take someone out of a team (they stay in the organization). - `list_resource_access` (read): List resource access. Who can see a shareable resource (an elimination program): its visibility (org or restricted), its creator, and every grant to a team or person with its access (read, write, admin). - `set_resource_visibility` (write): Set resource visibility. org: every organization member sees the resource (viewers read, members write). - `share_resource` (write): Share resource. Give a team or a person read, write or admin access to a program (replacing what that team or person had). - `unshare_resource` (write): Unshare resource. Remove a team's or person's grant on a program. - `list_audit_log` (read): List audit log. Membership, role, team, invite, API key, billing, settings and sharing changes in this organization, newest first: who (a person, an API key, an OAuth client or the system), what, to what, and when. ### API keys - `list_api_keys` (read): List API keys. API keys of this organization (prefix only; the full key is shown once at creation), each with the role it acts with, its scopes and who created it. - `create_api_key` (write): Create API key. Create an organization API key for your backend, the CLI, an MCP host or CI. - `revoke_api_key` (write): Revoke API key. Revoke an API key immediately; every backend, CLI, CI job or MCP host using it stops working. ### Billing - `get_pricing` (read): Get pricing. The plans (Free, Plus): price {monthly, yearly} in USD, photo/text analyses on our model included per day (logging a meal you analyzed yourself, barcode scans and edits are free and unlimited), limits (members, history days; null is unlimited), features, a checkout_url per paid plan, and how_to_buy. - `get_account` (read): Get account. Who this credential acts for and what it may use: the organization, your role in it (viewer, member, admin, owner) and whether you are a person, an OAuth client or an API key (acting_as, with the key's scopes), the plan in force (status, interval, renewal or end date), today's usage against the daily allowance (analyses) with what remains and when it resets, and next_tier: what the next plan adds, its price and a checkout_url. - `get_billing` (read): Get billing. This organization's plan, subscription status, renewal or end date, whether a card is saved (so subscribe can charge it), and today's usage against the plan (analyses, members). - `create_checkout_link` (write): Create checkout link. A Stripe Checkout URL where a human pays for a plan; hand it to them (or open it in their browser). - `subscribe` (write): Subscribe. Start or change this organization's paid plan in one call, charging the card already saved for the organization. - `cancel_subscription` (write): Cancel subscription. Cancel the paid plan at the end of the current period (no refund; the plan stays until then, then the organization is on Free). - `resume_subscription` (write): Resume subscription. Undo a cancellation that has not taken effect yet, so the plan renews as before. - `claim_checkout` (write): Claim checkout. Attach a checkout paid before signup (create_checkout_link without a credential) to this organization, by its session_id (cs_…). - `create_billing_portal_link` (write): Create billing portal link. A private Stripe page where a human downloads invoices, updates the card or billing details, or cancels. - `get_billing_link` (write): Get billing link. The Stripe customer portal for a human: invoices, card and billing details, plan change and cancellation. ### Feedback - `list_feedback` (read): List feature requests and issues. The Gutlog feedback board: feature requests every customer can see, plus your own issue reports (and ones the team published), with status and upvotes, most upvoted first. - `get_feedback` (read): Get a feature request or issue. One feedback item with its status, upvotes, comments (oldest first; official answers from the Gutlog team are marked `official`) and its timeline of status changes with the team's notes. - `list_my_feedback` (read): List my feedback and subscriptions. What your organization filed (every status), the items you get email about (filed, upvoted, commented, followed) with whether you muted them, your organization's review, and whether feedback email reaches you. - `request_feature` (write): Request a feature. Files a feature request on the Gutlog board and upvotes it for your organization. - `report_issue` (write): Report an issue. Reports a problem with Gutlog itself: a failing or wrong call (pass the request_id from the error or the X-Request-Id header, and the op), a meal that matched the wrong food or got the wrong nutrients, a barcode that was not found, a docs error. - `upvote_feedback` (write): Upvote a feature request or issue. Adds your organization's upvote to a feature request or issue ("me too"); votes decide what gets built and fixed first, and you get an email when its status changes. - `remove_feedback_vote` (write): Remove an upvote. Takes back your organization's upvote on a feature request or issue, and stops its emails unless you filed or commented on it. - `comment_on_feedback` (write): Comment on a feature request or issue. Adds context to an existing feature request or issue: your use case, another failing request, a workaround. - `set_feedback_subscription` (write): Start or stop feedback emails. With id: start or stop emails about one feature request or issue. - `submit_review` (write): Post or edit a review. Posts your organization's public review of Gutlog (1–5 stars, what you like, what you don't, what you use it for), or edits it (once an hour; earlier versions are kept). - `list_reviews` (read): List reviews. Published reviews of Gutlog with the aggregate (average rating, count and distribution) and the team's responses. - `update_feedback` (write): Update feedback (staff). Gutlog team only. - `respond_to_feedback` (write): Respond officially (staff). Gutlog team only. - `respond_to_review` (write): Respond to or moderate a review (staff). Gutlog team only. ### Pantry - `list_locations` (read): List pantry locations. The household's storage locations as a tree (e.g. - `save_location` (write): Save pantry locations. Create, rename, retype, nest or archive storage locations. - `add_pantry_items` (write): Add pantry items. Record food the household has: from a receipt, barcode scans, or a fridge, freezer or pantry photo you read yourself (you list what you see; nothing is analyzed here). - `list_pantry` (read): List pantry items. What is on hand, soonest expiry first. - `get_pantry_item` (read): Get a pantry item. One item with its FoodKeeper shelf-life entry (days per storage, opened, thawed, freezer, tips) and its full history (added, used, moved, frozen, thawed, recounted, discarded: who, when, from which surface). - `update_pantry_items` (write): Update pantry items. Change items: resolve what it is (ingredient_id, barcode, foodkeeper_id), recount (quantity: how much is there now), change state (opened, cooked; freezing and thawing is move_pantry_items), dates, the printed date, an expiry you set yourself (expires_on; null returns to the estimate), price, store, notes. - `move_pantry_items` (write): Move pantry items. Move items to another location (location_id, a path, or a type). - `consume_pantry_items` (write): Use pantry items. Record food used: by item_id, or by ingredient_id or name (the soonest-expiring matching items are used first). - `discard_pantry_items` (write): Throw out pantry items. Record food thrown out, all or part, with a reason (expired, spoiled, freezer_burn, didnt_like, too_much, other) for waste tracking; pantry_summary totals it with its cost when the price is known. - `list_expiring` (read): List expiring food. Items expiring within `days` (default 7) and, by default, already past their date, soonest first, each with days_left and a suggested action: use, freeze (freezable, not frozen, 2 days or less left) or toss (past a use-by or the safe time for perishable food), with a one-line why. - `freeze_suggestions` (read): Suggest what to freeze. Items not frozen that FoodKeeper says freeze well and that expire within `days` (default 3), with how long each would keep if frozen today. - `get_raw_ingredients` (read): Get raw ingredients on hand. The canonical ingredients on hand, deduplicated across items and locations: total amount (mass in g/kg, volume in ml/l, counts per unit), item ids, states, locations, soonest expiry and days left, soonest first; plus `unresolved` items with no ingredient. - `set_par_levels` (write): Set staple quantities. Staples the household always wants on hand ("12 eggs", "1 gal milk", "2 cans tomatoes"), with an optional usual location and store. - `get_shopping_list` (read): Get the shopping list. What to buy: items added to the list, staples below their par level (with the amount missing), and items used up in the last `used_up_days` (default 14) that are not on hand. - `add_shopping_items` (write): Add to the shopping list. Put items on the shopping list (name, optional ingredient_id, quantity and unit, store, notes). - `check_off_shopping_items` (write): Check off shopping items. Mark list lines bought (or removed). - `pantry_summary` (read): Pantry summary. Counts on hand by location and state, how many are expired and expiring this week, unresolved items, and this month's use and waste: items thrown out, their cost when known, reasons and the foods most often thrown out. - `get_shelf_life` (read): Look up shelf life. How long a food keeps in the pantry, fridge and freezer, sealed, opened and after thawing, from USDA FoodKeeper (public domain), by name, ingredient_id or foodkeeper_id. ## Feedback and reviews Feature requests are public on https://getgutlog.com/feedback?ref=llms; issue reports are private to the reporter and the Gutlog team. Reviews are public on https://getgutlog.com/reviews?ref=llms, one per account. Guide: https://getgutlog.com/docs/feedback?ref=llms. | action | MCP tool | CLI | REST | | --- | --- | --- | --- | | list / search the board | `list_feedback` | `npx @meterapp/gutlog feedback list` | `GET https://getgutlog.com/api/v1/feedback` (public) | | request a feature | `request_feature` | `npx @meterapp/gutlog feedback request ""` | `POST https://getgutlog.com/api/v1/feedback/features` | | report an issue | `report_issue` | `npx @meterapp/gutlog feedback report "<title>" [--last]` | `POST https://getgutlog.com/api/v1/feedback/issues` | | upvote | `upvote_feedback` | `npx @meterapp/gutlog feedback upvote <id>` | `POST https://getgutlog.com/api/v1/feedback/{id}/votes` | | post / edit a review | `submit_review` | `npx @meterapp/gutlog review --rating 5 --body "…"` | `PUT https://getgutlog.com/api/v1/reviews/me` | ## Optional - [Home](https://getgutlog.com/?ref=llms): The food and gut database your AI assistant writes to - [Setup](https://getgutlog.com/setup?ref=llms): Connect Gutlog to ChatGPT, Claude, Claude Code, Codex, Cursor, VS Code or any MCP client in one step. - [Use cases](https://getgutlog.com/use-cases?ref=llms): What people do with Gutlog from ChatGPT or Claude: log meals, keep a pantry, cook from it, track gut symptoms, scan products, plan the week. Prompts to copy or open in a chat. - [Log meals](https://getgutlog.com/use-cases/log-meals?ref=llms): Log meals from a photo, a sentence or a barcode in ChatGPT or Claude. Gutlog stores every meal with a confidence per ingredient, and one sentence fixes a portion or a missed ingredient. - [Pantry and expiry](https://getgutlog.com/use-cases/pantry?ref=llms): A kitchen inventory your assistant keeps: add groceries from a receipt or a fridge photo, see what expires this week, what to freeze, how long things keep and what went to waste. - [Cook from your pantry](https://getgutlog.com/use-cases/cook-from-your-pantry?ref=llms): Ask your assistant what to cook: it plans from the ingredients Gutlog says you have, what expires soonest, your goals and your suspected triggers, then logs the meal and updates the pantry. - [Meal plans and shopping](https://getgutlog.com/use-cases/meal-planning?ref=llms): Weekly meal plans from your assistant around what Gutlog says you have and avoid, with a shopping list that knows your pantry and your staples. - [Gut and triggers](https://getgutlog.com/use-cases/gut-symptoms?ref=llms): Log bloating, pain, stool type and energy from ChatGPT or Claude, see a daily tummy score, your FODMAP and other exposures, and which foods look like triggers for you, with sample sizes. - [Scan a product](https://getgutlog.com/use-cases/products?ref=llms): Scan a barcode or an ingredient label in ChatGPT or Claude: allergens and things you avoid, a clean-ingredient verdict with evidence levels, cleaner swaps and a tummy score for you. - [Nutrition questions](https://getgutlog.com/use-cases/nutrition?ref=llms): Ask ChatGPT or Claude how much protein you averaged, whether you stayed under your sodium goal, or what you might be missing: Gutlog answers from your logged meals, with goals you set in a sentence. - [Eat cleaner](https://getgutlog.com/use-cases/clean-eating?ref=llms): A weekly clean score from your diary with the worst offenders and their evidence, one swap at a time, and when organic is worth it (Dirty Dozen, Clean Fifteen). - [Elimination programs](https://getgutlog.com/use-cases/elimination-programs?ref=llms): Run a low-FODMAP or single-food elimination program from ChatGPT or Claude: safety screen, swaps, weekly relief checks and reintroduction challenges recorded against your diary. Plus plan. - [Reports and exports](https://getgutlog.com/use-cases/reports?ref=llms): A digestive health summary of your last 30 days to share with a doctor or dietitian, a diary audit that finds missing days and unconfirmed ingredients, and a full export as CSV and JSON. - [Pricing](https://getgutlog.com/pricing?ref=llms): Free: the whole database through your own assistant, unlimited, with your whole history. Plus: Gutlog does the work, from the app and reminders to trigger analysis, elimination diets and 50 photo analyses a day. - [Calories and macros in common foods](https://getgutlog.com/macros?ref=llms): Calories, protein, carbs and fat per 100 g and per portion for common foods, from USDA reference data. - [Built for agents](https://getgutlog.com/agents?ref=llms): MCP, CLI and REST: everything the web app does, your assistant can do. - [Feedback](https://getgutlog.com/feedback?ref=llms): What people asked for, what is planned and what shipped; upvote or ask for what you need. - [Reviews](https://getgutlog.com/reviews?ref=llms): Ratings and reviews of Gutlog, with our replies. - [Consumer health data privacy](https://getgutlog.com/privacy?ref=llms): Draft: how Gutlog handles food, symptom and program data. Never sold, never sent to analytics or ads. - [Terms](https://getgutlog.com/terms?ref=llms): Draft terms for using Gutlog: not medical advice, plans and billing, acceptable use.