Skip to main content
Glama
rollecode

Cronometer MCP server

by rollecode

add_custom_food

Create a custom food in Cronometer with any of 94 nutrients per serving, then log it to your diary.

Instructions

Create a custom food with any nutrients you have, from 1 to all 94.

Amounts are for one whole serving of serving_grams, not per 100 g, each in that nutrient's own unit. Call list_nutrients for the accepted names and their units. Only pass the nutrients you actually know: a nutrient you leave out stays blank in Cronometer, while passing 0 states the food contains none of it, and the app treats those differently. An unrecognised name is an error, so nothing is silently dropped from a food that then looks complete.

Two label conveniences: energy_kj is converted to calories, salt_g to sodium. Pass either one or its underlying nutrient, not both.

After creation, use the returned food_id with add_food_entry to log it.

Args: name: Food name. nutrients: Nutrient name to amount per serving, e.g. {"energy": 250, "protein": 12.5, "vitamin_c": 30, "b12_cobalamin": 1.2}. serving_name: Name for the serving size (default "1 serving"). serving_grams: Weight of one serving in grams (default 100). label_type: "AMERICAN_2016" or "EUROPEAN". notes: Free-text note stored on the food.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
nameYes
notesNo
nutrientsYes
label_typeNoAMERICAN_2016
serving_nameNo1 serving
serving_gramsNo

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv1.9.2

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (non-read-only, non-destructive, non-idempotent, open-world), and the description adds substantial semantics beyond them: the blank-vs-zero distinction, the fact that unrecognized names error out rather than being silently dropped, and the energy_kj/salt_g conversion rules. These are exactly the behavioral traits an agent needs to call it correctly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the key behavior (blank vs 0, unit semantics) before the Args block, and every sentence adds information. It is somewhat long and the Args section partially restates the schema, but the repetition carries added meaning, so the size is largely justified.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described; the description still notes the returned food_id for chaining. Given the nested nutrients object and 0% schema coverage, the description supplies the naming, unit, and error semantics an agent needs to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden, and it does: it defines nutrients as per-serving amounts in each nutrient's own unit (not per 100g), gives an example mapping, documents serving_name/serving_grams defaults, label_type values, and notes. All six parameters are explained with meaning beyond their names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource: 'Create a custom food' with a stated scope ('any nutrients you have, from 1 to all 94'). This clearly distinguishes it from siblings like update_custom_food, retire_custom_food, and list_custom_foods, and the follow-up mention of add_food_entry further situates it in the workflow.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit routing: 'Call list_nutrients for the accepted names and their units' and 'use the returned food_id with add_food_entry to log it.' It gives clear when-to-use context for the nutrient-name lookup and the next step, though it doesn't explicitly contrast with update_custom_food or state when a user should prefer this over alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.