{"ok":true,"site":{"host":"cal-mcp-psi.vercel.app","url":"https://cal-mcp-psi.vercel.app/","type":"live","desc":"Track your calories, nutrition, hydration, and body progress. AI-powered meal logging via WebMCP.","tools":[{"name":"search_products","kind":"answer","impl":"imperative","description":"Search the product catalog — returns all available WebMCP tools in the application.","title":"Search Products","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Optional search query to filter tools."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"get_app_guide","kind":"answer","impl":"imperative","description":"Returns workflow instructions and policies for this app. Call this first to understand how to use other tools.","title":"Get App Guide","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"topic":{"type":"string","enum":["overview","log_meal","analyze_photo","daily_review","progress_review","correct_meal","privacy"],"description":"Which workflow or topic to get guidance for."}},"required":["topic"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"get_workflow_status","kind":"answer","impl":"imperative","description":"Returns the current state of a workflow — pending captures, draft IDs, and the recommended next tool to call.","title":"Get Workflow Status","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"workflow":{"type":"string","enum":["log_meal","daily_review","progress_review"],"description":"Which workflow to check."}},"required":["workflow"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"get_user_context","kind":"answer","impl":"imperative","description":"Returns user preferences, locale, timezone, and nutrition targets needed for calculations.","title":"Get User Context","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"includeBodyMetrics":{"type":"boolean","description":"If true, includes height and weight (sensitive — only request if needed)."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"create_meal_draft","kind":"act","impl":"imperative","description":"Creates and logs a meal directly from your analysis into daily intake.","title":"Create Meal Draft","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"captureId":{"type":"string","description":"Optional correlation ID from get_pending_photo_context."},"eatenAt":{"type":"string","description":"ISO timestamp when meal was eaten (UTC)."},"mealType":{"type":"string","enum":["breakfast","lunch","dinner","snack"]},"title":{"type":"string","description":"Meal name, 1-80 characters."},"items":{"type":"array","description":"Food items with nutrition per entered quantity (not per 100g).","items":{"type":"object","properties":{"name":{"type":"string"},"quantity":{"type":"number"},"unit":{"type":"string","enum":["g","ml","oz","piece","serving","cup","tbsp","tsp"]},"grams":{"type":"number","description":"Weight in grams if known."},"nutrition":{"type":"object","properties":{"caloriesKcal":{"type":"number"},"proteinG":{"type":"number"},"carbsG":{"type":"number"},"fatG":{"type":"number"},"fiberG":{"type":"number"}},"required":["caloriesKcal","proteinG","carbsG","fatG"]},"confidence":{"type":"number","description":"0.0-1.0 confidence in this estimate."},"estimationNotes":{"type":"string","description":"Explain how you estimated this item."}},"required":["name","quantity","unit","nutrition"]},"minItems":1,"maxItems":30},"overallConfidence":{"type":"number","description":"Overall confidence 0-1."},"assumptions":{"type":"array","items":{"type":"string"},"description":"List assumptions made in your analysis."}},"required":["eatenAt","mealType","title","items"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"update_meal_draft","kind":"act","impl":"imperative","description":"Updates or corrects a logged meal entry or draft by ID with updated items or attributes.","title":"Update Meal Draft / Entry","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"mealId":{"type":"string","description":"ID of the meal entry or draft to update."},"title":{"type":"string"},"mealType":{"type":"string","enum":["breakfast","lunch","dinner","snack"]},"eatenAt":{"type":"string"},"items":{"type":"array","description":"Updated list of food items."}},"required":["mealId"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"get_meal","kind":"answer","impl":"imperative","description":"Retrieves one confirmed meal by ID, with its items and nutrition.","title":"Get Meal","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"mealId":{"type":"string","description":"ID of the meal."}},"required":["mealId"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"list_meals","kind":"answer","impl":"imperative","description":"Returns a bounded list of confirmed meals in a date range. Maximum 31-day range.","title":"List Meals","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"from":{"type":"string","description":"Start local date (YYYY-MM-DD)."},"to":{"type":"string","description":"End local date (YYYY-MM-DD)."},"mealType":{"type":"string","enum":["breakfast","lunch","dinner","snack"]},"limit":{"type":"number","description":"Max results, default 20, max 50."},"cursor":{"type":"string","description":"Pagination cursor (meal ID)."}},"required":["from","to"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"delete_meal","kind":"transact","impl":"imperative","description":"Deletes a confirmed meal. Requires userConfirmed: true.","title":"Delete Meal","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"mealId":{"type":"string"},"userConfirmed":{"type":"boolean","description":"Must be true after user confirms deletion."}},"required":["mealId","userConfirmed"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"find_frequent_meals","kind":"answer","impl":"imperative","description":"Returns frequently logged meals, ranked by count and recency. Use to suggest meals from memory.","title":"Find Frequent Meals","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Optional search query to filter by food name."},"limit":{"type":"number","description":"Max results, default 5, max 10."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"repeat_meal","kind":"act","impl":"imperative","description":"Copies a previous confirmed meal to a new timestamp. Requires userConfirmed: true.","title":"Repeat Meal","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"sourceMealId":{"type":"string","description":"ID of the meal to copy."},"eatenAt":{"type":"string","description":"UTC ISO timestamp for the new meal."},"mealType":{"type":"string","enum":["breakfast","lunch","dinner","snack"]},"userConfirmed":{"type":"boolean"}},"required":["sourceMealId","eatenAt","userConfirmed"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"get_daily_summary","kind":"answer","impl":"imperative","description":"Returns calories, macros, and hydration consumed vs target for a date. Defaults to today.","title":"Get Daily Summary","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"date":{"type":"string","description":"Local date YYYY-MM-DD. Defaults to today."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"get_progress_report","kind":"answer","impl":"imperative","description":"Returns nutrition and weight trend data with summary facts. Max 366 days. At least 3 data points required for trend statements.","title":"Get Progress Report","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"from":{"type":"string","description":"Start local date YYYY-MM-DD."},"to":{"type":"string","description":"End local date YYYY-MM-DD."},"metrics":{"type":"array","items":{"type":"string","enum":["calories","protein","carbs","fat","fiber","water","weight"]},"description":"Which metrics to include."},"granularity":{"type":"string","enum":["day","week"],"description":"Data point granularity."}},"required":["from","to","metrics"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"log_weight","kind":"act","impl":"imperative","description":"Records a weigh-in. Converts to kg internally. Requires userConfirmed: true.","title":"Log Weight","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"weight":{"type":"number","description":"Weight value."},"unit":{"type":"string","enum":["kg","lb"]},"recordedAt":{"type":"string","description":"UTC ISO timestamp. Defaults to now."},"note":{"type":"string","description":"Optional note."},"userConfirmed":{"type":"boolean"}},"required":["weight","unit","userConfirmed"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"get_weight_progress","kind":"answer","impl":"imperative","description":"Returns weigh-ins, 7-day moving average, and weight change for a date range.","title":"Get Weight Progress","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"from":{"type":"string","description":"Start local date."},"to":{"type":"string","description":"End local date."},"includeNotes":{"type":"boolean","description":"Include notes (untrusted content)."}},"required":["from","to"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"log_water","kind":"act","impl":"imperative","description":"Records water consumption. Converts to ml internally. Small amounts committed directly.","title":"Log Water","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"amount":{"type":"number","description":"Amount of water consumed."},"unit":{"type":"string","enum":["ml","l","fl_oz","cup"]},"recordedAt":{"type":"string","description":"UTC ISO timestamp. Defaults to now."}},"required":["amount","unit"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"get_hydration_summary","kind":"answer","impl":"imperative","description":"Returns daily water consumed, target, and recent entry times.","title":"Get Hydration Summary","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"date":{"type":"string","description":"Local date YYYY-MM-DD. Defaults to today."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]}],"category":"Health & Education","favicon":"/favicons/cal-mcp-psi.vercel.app.svg","apiSurface":"spec","toolCount":17}}