Skip to main content
Glama

Dayze — Life Context

Update Food (diary patch)

update_food

MUTATES one existing Food Diary row the authenticated user owns. Required: food_id (UUID). Optional patch (same fields as log_food): what, kind, contains_alcohol, dish_items, place, merchant, notes, append_notes (concat), consumed_at (ISO instant) / meal_period (profile TZ), amount, currency, paid_by (self / a name / unknown), payment_method (how it was paid, saved on the linked Finance transaction), expense_id (link one existing owned Finance transaction; null unlinks), with / people_names / person_ids. dish_items replaces the complete ordered dish list. A dish or notes correction never creates another Finance transaction. Unknown or other-user food_id or expense_id returns an error and changes nothing. Returns changed fields and a fresh linked_expense read. Syncs the mirrored calendar event and rebuilds life_state. Requires API key or OAuth with scope context. Share tokens cannot write. ($0.10; API key required)

Input Schema

NameRequiredDescriptionDefault
foodNoAlias for what.
itemNoAlias for what.
kindNo
whatNoFull updated dish/drink text (replaces, does not append). Example: Salmon Bento + hot tea
withNoCompanion names, aliases, or ids to add (does not remove existing tags)
notesNoReplaces notes. Empty or null clears
placeNoVenue or location. Empty or null clears
amountNoPrice if mentioned
dishesNoAlias for dish_items.
peopleNoAlias for with
food_idYesUUID of a food diary row the authenticated user owns
paid_byNoWho paid. A person's name or alias for a third party; "self" / "me" = the user paid (recorded in Finance); "unknown" = payer not known. Empty or null clears. Not a payment method
caloriesNoCorrect the kcal value (0 is a real value). Stored as user-stated unless calories_source says agent_estimate. To clear it to unknown (not zero; totals skip it) send null, or calories_source "unknown" without calories. Omitted = unchanged, except that a corrected `what` re-derives an automatic estimate (never a user-stated value)
currencyNoISO currency, e.g. SGD
merchantNoRestaurant, stall, or shop. Empty or null clears
dish_itemsNoComplete replacement ordered dish list; [] clears it.
expense_idNoLink this entry to ONE existing Finance transaction you own (UUID), so the meal has one ledger row. Empty or null unlinks; the transaction stays in Finance
person_idsNoOwned person UUIDs to tag (user-scoped)
request_idNoClient idempotency key (retries return original result).
consumed_atNoISO instant; wins over meal_period
descriptionNoAlias for what (the dish, not notes).
meal_periodNoSpoken period when consumed_at is omitted, e.g. "late lunch"
person_nameNoOne companion to add, by name
append_notesNoAppend text to existing notes (newline-separated)
people_namesNoAlias for with
payment_methodNoHow it was paid (cash, card, PayLah…). Saved on the linked Finance transaction; never changes paid_by
calories_sourceNoProvenance of calories: user (the user said it, default) or agent_estimate (your estimate). unknown (without calories) clears the kcal value
idempotency_keyNoAlias for request_id.
contains_alcoholNoCorrect whether the item contains alcohol (true for beer, wine, spirits, cocktails, an "alcoholic beverage")

Output Schema

NameRequiredDescriptionDefault
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
changedYesChanged fields with before and after values.
food_idYes
event_idYes
food_logYesUpdated Food Diary row.
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
people_taggedYes
linked_expenseNoPHI-1334: fresh read of the Finance transaction this Food entry is linked to.
unresolved_peopleYes
life_state_rebuiltYes
payment_method_statusNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / contains_alcohol
      Added value: +{
      +  "description": "Correct whether the item contains alcohol (true for beer, wine, spirits, cocktails, an \"alcoholic beverage\")",
      +  "type": "boolean"
      +}
  2. Changed5 schema fields changed
    • addedInput schema / properties / expense_id
      Added value: +{
      +  "description": "Link this entry to ONE existing Finance transaction you own (UUID), so the meal has one ledger row. Empty or null unlinks; the transaction stays in Finance",
      +  "type": "string"
      +}
    • changedInput schema / properties / paid_by / description
      Previous value: -"Who paid (name or alias)"New value: +"Who paid. A person's name or alias for a third party; \"self\" / \"me\" = the user paid (recorded in Finance); \"unknown\" = payer not known. Empty or null clears. Not a payment method"
    • changedInput schema / properties / payment_method / description
      Previous value: -"Alias of paid_by for expense-style agents"New value: +"How it was paid (cash, card, PayLah…). Saved on the linked Finance transaction; never changes paid_by"
    • addedOutput schema / properties / linked_expense
      Added value: +{
      +  "additionalProperties": true,
      +  "description": "PHI-1334: fresh read of the Finance transaction this Food entry is linked to.",
      +  "type": "object"
      +}
    • addedOutput schema / properties / payment_method_status
      Added value: +{
      +  "type": "string"
      +}
  3. Changed2 schema fields changed
    • addedInput schema / properties / calories
      Added value: +{
      +  "description": "Correct the kcal value (0 is a real value). Stored as user-stated unless calories_source says agent_estimate. To clear it to unknown (not zero; totals skip it) send null, or calories_source \"unknown\" without calories. Omitted = unchanged, except that a corrected `what` re-derives an automatic estimate (never a user-stated value)",
      +  "maximum": 10000,
      +  "minimum": 0,
      +  "type": "number"
      +}
    • addedInput schema / properties / calories_source
      Added value: +{
      +  "description": "Provenance of calories: user (the user said it, default) or agent_estimate (your estimate). unknown (without calories) clears the kcal value",
      +  "enum": [
      +    "user",
      +    "agent_estimate",
      +    "unknown"
      +  ],
      +  "type": "string"
      +}
  4. Changed2 schema fields changed
    • addedOutput schema / properties / account
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "The Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.",
      +  "properties": {
      +    "display_name": {
      +      "description": "Account display name.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "handle": {
      +      "description": "Account handle, e.g. @goh.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "note": {
      +      "description": "How to disclose the account to the user.",
      +      "type": "string"
      +    },
      +    "qa_fixture": {
      +      "description": "True for a known QA test account: its records are fixture data, not a real life.",
      +      "type": "boolean"
      +    }
      +  },
      +  "required": [
      +    "handle",
      +    "display_name",
      +    "qa_fixture",
      +    "note"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / provenance
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Which connector wrote the record and which connected Dayze account received it.",
      +  "properties": {
      +    "account": {
      +      "additionalProperties": false,
      +      "description": "The Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.",
      +      "properties": {
      +        "display_name": {
      +          "description": "Account display name.",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "handle": {
      +          "description": "Account handle, e.g. @goh.",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "note": {
      +          "description": "How to disclose the account to the user.",
      +          "type": "string"
      +        },
      +        "qa_fixture": {
      +          "description": "True for a known QA test account: its records are fixture data, not a real life.",
      +          "type": "boolean"
      +        }
      +      },
      +      "required": [
      +        "handle",
      +        "display_name",
      +        "qa_fixture",
      +        "note"
      +      ],
      +      "type": "object"
      +    },
      +    "channel": {
      +      "description": "Always mcp_connector.",
      +      "type": "string"
      +    },
      +    "connector": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "kind": {
      +          "description": "oauth or api_key.",
      +          "type": "string"
      +        },
      +        "name": {
      +          "description": "The connected app or API-key label shown to the account owner.",
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "kind",
      +        "name"
      +      ],
      +      "type": "object"
      +    },
      +    "source": {
      +      "description": "chatgpt for ChatGPT OAuth writes; mcp for another OAuth app or API key.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "source",
      +    "channel",
      +    "connector",
      +    "account"
      +  ],
      +  "type": "object"
      +}
  5. Changed6 schema fields changed
    • addedInput schema / properties / description
      Added value: +{
      +  "description": "Alias for what (the dish, not notes).",
      +  "type": "string"
      +}
    • addedInput schema / properties / dishes
      Added value: +{
      +  "description": "Alias for dish_items.",
      +  "type": "array"
      +}
    • addedInput schema / properties / food
      Added value: +{
      +  "description": "Alias for what.",
      +  "type": "string"
      +}
    • addedInput schema / properties / item
      Added value: +{
      +  "description": "Alias for what.",
      +  "type": "string"
      +}
    • addedInput schema / properties / people
      Added value: +{
      +  "description": "Alias for with",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / person_name
      Added value: +{
      +  "description": "One companion to add, by name",
      +  "type": "string"
      +}
  6. Changed1 schema field changed
    • addedInput schema / properties / dish_items
      Added value: +{
      +  "description": "Complete replacement ordered dish list; [] clears it.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "name": {
      +        "type": "string"
      +      },
      +      "price": {
      +        "minimum": 0,
      +        "type": "number"
      +      },
      +      "rating": {
      +        "maximum": 5,
      +        "minimum": 1,
      +        "type": "number"
      +      }
      +    },
      +    "required": [
      +      "name"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
  7. Changed1 schema field changed
    • changedInput schema / properties / consumed_at / description
      Previous value: -"ISO 8601 datetime; wins over meal_period"New value: +"ISO instant; wins over meal_period"
  8. Changed2 schema fields changed
    • addedInput schema / properties / append_notes
      Added value: +{
      +  "description": "Append text to existing notes (newline-separated)",
      +  "type": "string"
      +}
    • addedInput schema / properties / payment_method
      Added value: +{
      +  "description": "Alias of paid_by for expense-style agents",
      +  "type": "string"
      +}
  9. Changed2 schema fields changed
    • addedInput schema / properties / idempotency_key
      Added value: +{
      +  "description": "Alias for request_id.",
      +  "type": "string"
      +}
    • addedInput schema / properties / request_id
      Added value: +{
      +  "description": "Client idempotency key (retries return original result).",
      +  "type": "string"
      +}
  10. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "changed": {
      +      "additionalProperties": true,
      +      "description": "Changed fields with before and after values.",
      +      "type": "object"
      +    },
      +    "event_id": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "food_id": {
      +      "type": "string"
      +    },
      +    "food_log": {
      +      "additionalProperties": true,
      +      "description": "Updated Food Diary row.",
      +      "type": "object"
      +    },
      +    "life_state_rebuilt": {
      +      "type": "boolean"
      +    },
      +    "people_tagged": {
      +      "items": {
      +        "additionalProperties": true,
      +        "description": "A Dayze person or contact record.",
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "unresolved_people": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "food_id",
      +    "event_id",
      +    "food_log",
      +    "changed",
      +    "people_tagged",
      +    "unresolved_people",
      +    "life_state_rebuilt"
      +  ],
      +  "type": "object"
      +}
  11. Added

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the annotations: discloses side effects (syncs the mirrored calendar event, rebuilds life_state), auth requirements (API key or OAuth scope; share tokens cannot write), cost ($0.10), idempotency, replacement-vs-append semantics, and null-clears behavior. The annotations only carry the safety profile, so this extra context is genuinely additive.

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 mutation/ownership statement and the required key, and nearly every clause carries information. It is a dense run-on block, though, with auth/cost/side-effect notes trailing at the end where structural separation would aid scanning.

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?

For a 29-parameter, 97%-covered mutation tool with an output schema, it covers what an agent needs: patch vs replace, clearing semantics, linking rules, error behavior, auth constraints, and the return shape (changed fields plus fresh linked_expense read). Nothing material is left implicit.

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

Parameters4/5

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

Schema coverage is 97%, so the baseline is 3, but the description adds real meaning: dish_items replaces the complete ordered list, append_notes concatenates, expense_id null unlinks without deleting the transaction, and consumed_at wins over meal_period in profile TZ. These tie the 29 parameters together into patch semantics rather than merely restating field docs.

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?

Opens with a specific verb and resource: 'MUTATES one existing Food Diary row the authenticated user owns', explicitly patch semantics on a single row. That distinguishes it cleanly from log_food (create) and delete_food (remove) in the sibling list without opening any schema.

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?

States the required key (food_id UUID), the ownership precondition, and the failure mode for unknown or other-user ids. It signals patch usage by referencing 'same fields as log_food' and clarifying that corrections never spawn a Finance transaction, but it never explicitly says 'use log_food to create a new row' as the alternative.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.