Skip to main content
Glama

Dayze — Life Context

Server Details

Life context for agents: get_context_pack + public notable packs. x402 + OAuth.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
99.9% over 50 days
Last Tested
Transport
Streamable HTTP · MCP 2025-06-18
URL
Repository
gohluke/dayze-mcp
GitHub Stars
0
Server Listing
Dayze MCP

TDQS

B3/5.0

Scored across 169 tools

Disambiguation2/5

There is substantial overlap and redundancy: get_people/get_person_neighborhood/get_person_interactions/get_interactions all traverse similar contact/relationship data; get_photos_for_event/get_photos_for_place/get_entity_assets/search_photos/get_asset/get_photo overlap; and several destructive pairs exist (delete_event vs delete_food, clean variants). Tool descriptions do add disambiguation notes in places, but the sheer volume and cross-cutting scope make misselection likely.

Naming Consistency3/5

Mostly verb_noun snake_case (log_food, get_trips, archive_expense, update_person) but the surface mixes in inconsistent forms: bare verbs (search, resolve), verb_noun with different verbs for the same concept (get_ vs list_ vs fetch), and several aliases (get_money_between_people vs get_person_transactions, get_people_links vs get_person_connections) that break predictability.

Tool Count2/5

At 169 tools, this vastly exceeds reasonable bounds for a single agent surface, even for a broad 'life context' domain. Many are preview/apply/restore triples plus aliases, indicating internal step decomposition leaked into the public tool surface rather than being composed server-side.

Completeness4/5

Coverage is broad and deep — CRUD for people, events, places, inventory, memories, moments, food, transactions, plus imports and graph traversal — with a consistent reversible-change and audit story. Minor gaps remain (e.g. no create/delete for some trend or alias types, no explicit trip/expense creation outside log_travel/log_expense) but core life-context workflows are covered.

Available Tools

169 tools
add_inventory_itemAdd Inventory ItemAInspect

Add an owned item to the user's private Inventory. For a computer, phone, camera or synth pass spec_template (computer.v1, phone.v1, camera.v1, synth.v1) and specs with that template's fields, taken from what the user says or the device reports; never infer specs from a model name. Changing facts (OS version, free space, battery, service readiness) go in state, one observation with observed_at. Never ask for or store device or account identifiers. Returns inventory_id and the item with capability_summary. Example: { name: "MacBook Pro 14 (2023)", spec_template: "computer.v1", specs: { manufacturer: "Apple", model_name: "MacBook Pro", model_identifier: "Mac15,11", chip: "Apple M3 Max", performance_cores: 10, efficiency_cores: 4, total_cores: 14, memory_bytes: 38654705664, memory: "36 GB", architecture: "arm64" }, state: { os: { name: "macOS", version: "15.4.1", build: "24E263" }, observed_at: "2026-09-29T14:00:00Z", source: "user_reported" } } ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesWhat the user calls the item, e.g. "MacBook Pro 14 (2023)".
tagsNoReplaces the tag list.
brandNo
modelNo
notesNoFree text from the user.
specsNoStable facts, by the template's field names (computer.v1: nickname, manufacturer, model_name, model_identifier, year, primary_uses, capability_tags, product_family, form_factor, chip, cpu, architecture, performance_cores, efficiency_cores, total_cores, threads, gpu, gpu_cores, gpu_memory_bytes, neural_engine_cores, memory_bytes, memory, storage_devices, display, ports). Merged per key on update; null removes a key; other keys are kept as written. Only what the user or the device says, never inferred from a model name. Never device or account identifiers.
stateNoChanging facts, as one observation: observed_at (ISO, default now), source (e.g. user_reported, system_profiler), confidence (0-1), and values such as os { name, version, build }, available_storage_bytes, battery, security { sip, gatekeeper, filevault }, services { bluebubbles: { installed_version, running, configured, blockers, checked_at } }. Merged per key; a key observed more recently is kept. Never changes specs or notes. Never device or account identifiers.
statusNoDefault owned. To archive, use archive_inventory_item.
subtypeNoSpecific kind: laptop, sweatshirt, guitar. Alias: item_type.
categoryNoelectronics | instruments | clothing | shoes | bags | accessories | jewelry | watches | collectibles | sports | health | home | tools | vehicles | furniture | other. Computers, phones and cameras are electronics; synths are instruments. Defaults to the spec_template's category, else other.
currencyNoISO 4217, e.g. USD, SGD. Default USD.
locationNoWhere it is kept.
conditionNo
item_typeNoAlias for subtype (the stored column).
person_idsNoContacts to link: purchased_from, or inherited_from when acquisition_type is inheritance.
request_idNoClient idempotency key (retries return original result).
acquired_dateNoYYYY-MM-DD it came into the user's life (gift, inheritance). add_inventory_item also stores it as purchase_date when none is given.
acquired_fromNoShop or person it came from.
current_valueNoAlias for estimated_value (the stored column).
purchase_dateNoYYYY-MM-DD
spec_templateNoWhich typed fields specs uses. Templates are listed in docs/MCP_LIFE_GRAPH.md. null (update) clears it.
purchase_priceNo
estimated_valueNoWhat it is worth now. Alias: current_value.
idempotency_keyNoAlias for request_id.
acquisition_typeNopurchase | gift | inheritance | …
reference_numberNoManufacturer reference or model number (e.g. a watch reference).
subtype_confidenceNo0-1, when the subtype is a guess.
specs_schema_versionNoLayout of specs and state. Only 1 (the default).

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemNoInventory item record. With specs: spec_template, specs, state (a timestamped snapshot), state_freshness and capability_summary.
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
messageNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
inventory_idNo
idempotent_replayNotrue when this request_id already ran: the first result, nothing new written.
people_not_linkedNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations only declare readOnly=false, destructive=false, openWorld=false. The description adds real behavioral context the annotations lack: cost ($0.10), API key requirement, a privacy constraint ('never ask for or store device or account identifiers'), and the return shape (inventory_id, item with capability_summary). It does not cover failure modes or rate limits, so not a 5.

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?

Purpose and the key constraining rules are front-loaded in the opening sentences, and every clause is load-bearing for a 28-parameter tool. The embedded JSON example is long and slightly unwieldy, but it demonstrates the specs/state split in a way prose cannot.

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 high-complexity 28-param nested tool, the description plus a rich schema and output schema cover what an agent needs: when a template is required, what goes in specs vs state, the privacy prohibition, and the return values. Nothing essential is missing.

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 86%, so the baseline is 3; the description nonetheless makes the hardest distinction explicit — stable facts belong in specs, changing facts go in state as one observation with observed_at — and the worked example shows exactly which fields that implies. This adds meaning beyond the field-level descriptions.

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?

States a specific verb and resource ('Add an owned item to the user's private Inventory') and immediately differentiates the typed spec path from free-form adds. An agent can distinguish this from update_inventory_item, get_inventory_item, and archive_inventory_item 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?

Gives concrete routing rules: pass spec_template plus matching specs for computer/phone/camera/synth, put changing facts in state as one observation with observed_at, and never infer specs from a model name. It stops short of explicitly contrasting add vs update_inventory_item, which the schema partly handles ('null (update) clears it').

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

add_inventory_valuationAdd Inventory ValuationAInspect

Append a valuation (value, currency, valued_at, source) to one owned Inventory item; the item's current value becomes this value. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
notesNo
valueYesWhat it is worth.
sourceNoWhere the value comes from: appraisal, listing, estimate, …
currencyNoISO 4217, default USD.
valued_atNoISO date or date-time; default now.
confidenceNo0-1
request_idNoClient idempotency key (retries return original result).
inventory_idYesThe item id from add_inventory_item, get_inventory or search_inventory.
idempotency_keyNoAlias for request_id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
messageNo
valuationNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
inventory_idNo
idempotent_replayNo

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuine context beyond that: it's an append operation, the item's current value is overwritten by this value, and it costs $0.10 with an API key required. This is above the annotation baseline.

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

Conciseness5/5

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

A single front-loaded sentence covering the operation, its target and its side effect, plus a short parenthetical for cost/auth. No filler and every clause earns its place.

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

Completeness4/5

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

With an output schema present, return values need not be described, and the description plus rich schema cover the parameters, the mutation semantics and the pricing/auth constraints. The only real gap is the absence of alternative-tool routing, which keeps it from a 5.

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

Parameters3/5

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

Schema description coverage is 89%, so the schema already documents the parameters in detail. The description lists value, currency, valued_at and source but adds no format, default, or validation meaning beyond what the schema already states. Baseline 3 is appropriate.

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

Purpose4/5

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

The description states a specific verb and resource ('Append a valuation ... to one owned Inventory item') and names the contributing fields. It also discloses the consequential side effect that the item's current value becomes this value, which helps separate it from update_inventory_item. It stops short of naming the sibling it is not, so a 5 isn't warranted.

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

Usage Guidelines3/5

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

Usage is implied by 'append a valuation to one owned Inventory item' (i.e., the item must already exist), but there is no explicit when-to-use/when-not guidance and no routing to alternatives such as get_inventory_valuations or update_inventory_item. It's the minimum viable level.

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

add_person_aliasAdd Person AliasBInspect

Add a nickname/payment handle/misspelling alias for one CRM person. ($0.05; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
aliasYes
sourceNo
person_idYes
alias_kindNo
request_idNoClient idempotency key (retries return original result).
idempotency_keyNoAlias for request_id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
aliasNo
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
aliasesNo
messageNo
change_idNo
person_idNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare the write/non-destructive/non-open-world profile, so the bar is lower. The description usefully adds the per-call cost and API-key requirement, which annotations do not convey, but says nothing about uniqueness conflicts, dedup behavior, or how the alias affects downstream matching.

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?

A single tight sentence with the core action front-loaded and the cost/auth constraint in a short parenthetical. Nothing wasted, though the parenthetical could be slightly more integrated.

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

Completeness3/5

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

With an output schema present, return values need no explanation, and the cost/auth detail is covered. Still, for a 6-parameter mutation tool the description omits alias_kind/source semantics and conflict behavior an agent needs before invoking.

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

Parameters3/5

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

Schema description coverage is only 33%, so the description should compensate. It hints at alias_kind via 'nickname/payment handle/misspelling' but never names the parameter, and leaves source, alias, and person_id semantics to the schema. This is only baseline-level compensation for the coverage gap.

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

Purpose4/5

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

States a specific verb (Add) and resource (alias) scoped to 'one CRM person', and illustrates the alias kinds (nickname/payment handle/misspelling). It doesn't explicitly distinguish itself from the close siblings update_person_alias and remove_person_alias, but the verb makes the intent unambiguous.

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

Usage Guidelines2/5

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

The only guidance is cost and auth ($0.05; API key required). There is no statement of when to add an alias versus updating or removing one, nor any prerequisite about the person existing or alias uniqueness.

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

apply_event_fact_correctionApply Event Fact CorrectionAInspect

Correct or dispute an event fact from a saved answer. Inspect its source first. Supply request_id for safe retries. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
valueNoRequired when action is correct.
actionYes
message_idYes
request_idYes
source_refYes
idempotency_keyNoAlias for request_id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
statusNo
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
recordStateNo
correctionIdNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already establish the safety profile (write but not destructive, closed-world), and the description adds genuinely new operational context not present in the annotations: a $0.10 cost, an API key requirement, and the idempotency purpose of request_id. It does not mention reversibility (undo_event_fact_correction exists) or side effects on the saved answer, which keeps it out of 5 territory.

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?

Three telegraphic sentences, front-loaded with the action and followed by the prerequisite, retry hint, and cost/auth note. Every sentence carries information, though the phrasing is clipped enough that minor clarifications are traded away for brevity.

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

Completeness4/5

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

Because an output schema exists, the description need not explain return values, and it covers the mutation's prerequisite, idempotency, cost, and auth. For a 6-parameter mutation it could still say more about which parameters identify the target fact and about reversibility, so it is complete but not exhaustive.

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

Parameters3/5

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

Schema coverage is only 33%, so the description must carry more weight, and it partly does by explaining request_id as the retry-safety/idempotency handle and implying value is the correction payload. However, message_id, source_ref, and action semantics (when to pick 'correct' vs 'not_true_anymore') are left entirely to the schema, leaving a real gap.

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

Purpose4/5

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

States a specific verb pair ('Correct or dispute') on a specific resource ('an event fact from a saved answer'), which distinguishes it from sibling writers like correct_memory_atom and the read-only get_event_fact_source. It does not explicitly name those siblings, so the differentiation is implicit rather than spelled out.

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?

'Inspect its source first' gives a concrete prerequisite step (pointing the agent at the source-inspection flow), and 'Supply request_id for safe retries' gives a conditional instruction for the retry case. There is no explicit when-not guidance or named alternative (e.g., undo_event_fact_correction for reversal), so it stops short of a 5.

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

archive_assetArchive AssetA
Destructive
Inspect

Preview first, 30-day undo. Soft-delete an asset (sets archived_at). Original rows are preserved for versioning. Reviewed and reversible: first call preview_destructive_change({ tool: "archive_asset", arguments: { asset_id } }), which stores the exact change without applying it. After the user confirms, call archive_asset with preview_id, restore_window_acknowledged: true and request_id; the reviewed preview is applied exactly and a changed record is refused. Returns restore_id; restore_change({ restore_id }) undoes it for 30 days unless the record was edited since. ($0.05; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
asset_idYes
preview_idYespreview_id returned by preview_destructive_change for this tool.
request_idYesRequired idempotency key; retries return the original receipt.
idempotency_keyNoAlias for request_id.
restore_window_acknowledgedYesMust be true after reviewing the preview and its 30-day restore window.

Output Schema

ParametersJSON Schema
NameRequiredDescription
assetNo
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
messageNo
archivedNo
asset_idNo
preview_idNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
restore_idNoPass to restore_change to undo within restore_window_days.
reversibleNo
idempotent_replayNo
restore_expires_atNo
restore_window_daysNo

TDQS

A4.9/5.0
Behavior5/5

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

Annotations only carry destructiveHint=true; the description adds substantial context beyond that: soft-delete via archived_at, original rows preserved for versioning, a changed record is refused, 30-day undo window via restore_id, and cost/auth requirements ($0.05, API key). This is rich behavioral disclosure.

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

Conciseness5/5

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

Dense but front-loaded: the 'Preview first, 30-day undo' summary leads, followed by mechanism, workflow, and return semantics in order. No sentence is filler given the complexity of the two-step reviewed flow.

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 destructive mutation tool with an output schema, it covers safety (reversible, preserved rows), the prerequisite preview workflow, the return value (restore_id) and undo path, plus auth and cost. Nothing an agent needs to invoke it correctly is missing.

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 80%, so most parameters are already documented, but the description adds meaning by tying preview_id, restore_window_acknowledged and request_id into a workflow and explaining the required flag values. It stops short of fully disambiguating idempotency_key vs request_id, which the schema handles.

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?

States a specific verb and resource (soft-delete an asset, sets archived_at) and immediately differentiates the mechanism from hard deletes. An agent can distinguish it from siblings like archive_event or archive_expense without opening a schema.

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

Usage Guidelines5/5

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

Explicitly prescribes the required sequence: call preview_destructive_change first, then re-invoke with preview_id, restore_window_acknowledged and request_id after user confirmation. It names the alternatives (preview_destructive_change, restore_change) and the exact conditions that select them.

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

archive_eventarchive eventA
Destructive
Inspect

Reversibly archive one owned event; preserve linked data and return restore_id. Archived rows are never purged, so restore_event works for at least 30 days (the Dayze destructive-change restore window). Use a new request_id for each intended action. ($0; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
reasonNo
event_idYes
request_idYes
idempotency_keyNoAlias for request_id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
rowsNo
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
changedNo
expires_atNo
preview_idNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
restore_idNo
server_timeNo
candidate_hashNo

TDQS

A4.3/5.0
Behavior5/5

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

Goes well beyond the annotations: reversibility, linked data preservation, a returned restore_id, the guarantee that archived rows are never purged, the 30-day restore window, idempotency behavior, zero cost, and API-key auth. Annotations only give the destructive/read-only flags; the description supplies the retention and restore semantics that matter for a destructive-flagged tool.

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-loads the operation and key guarantees in the first clause, and each sentence adds distinct facts (reversibility, restore window, idempotency, cost). The parenthetical about the Dayze restore window is slightly verbose but still informative, not filler.

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

Completeness4/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, yet the description still notes restore_id. Combined with auth, cost, retention, and idempotency details, it is nearly complete; the main gap is the ownership/permission constraint and the undocumented reason and alias parameters.

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

Parameters3/5

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

Schema description coverage is only 25%, so the description should carry more. It clarifies request_id semantics (fresh value per action) and implies event_id must be an owned event, but leaves reason and the idempotency_key alias unexplained, so it only partially compensates.

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?

States a specific verb (archive) and resource (event), with scope (one owned event) that distinguishes it from the sibling delete_event and pairs it with restore_event. An agent can identify the operation without opening the 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?

Explains the reversal path (restore_event works for at least 30 days) and gives idempotency guidance ('Use a new request_id for each intended action'), which is clear context. It does not explicitly compare against delete_event or state when archiving is preferable to deletion, so no full when/when-not routing.

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

archive_expensearchive expenseA
Destructive
Inspect

Reversibly archive one owned expense; preserve linked data and return restore_id. Archived rows are never purged, so restore_expense works for at least 30 days (the Dayze destructive-change restore window). Use a new request_id for each intended action. ($0; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
reasonNo
expense_idYes
request_idYes
idempotency_keyNoAlias for request_id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
rowsNo
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
changedNo
expires_atNo
preview_idNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
restore_idNo
server_timeNo
candidate_hashNo

TDQS

A4.1/5.0
Behavior5/5

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

Adds substantial context beyond the annotations: linked data is preserved, archived rows are never purged, restore is guaranteed for at least 30 days (the Dayze destructive-change restore window), and the call is $0 but requires an API key. These are exactly the traits an agent needs to reason about safety and cost for a mutating tool.

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?

Three dense, front-loaded sentences with no filler; the core action leads and the retention/restore facts follow. The parentheticals ('the Dayze destructive-change restore window', '$0; API key required') are compact but slightly cluttered.

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

Completeness4/5

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

An output schema exists and the description still flags the restore_id return, plus it covers reversibility, retention, auth, and cost. Given annotations and output schema are both present, this is close to complete; only the exact effect on the expense's visibility/state is left implicit.

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

Parameters3/5

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

Schema coverage is only 25%, so the description carries extra burden. It adds real semantics for request_id (must be unique per intended action, implying idempotency), but says nothing about expense_id, reason, or the idempotency_key alias. Partial compensation, not full.

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?

States a specific verb, resource, and scope: 'Reversibly archive one owned expense.' The word 'reversibly' immediately distinguishes it from hard-delete siblings (delete_event, delete_food, delete_memory), and 'expense' distinguishes it from the other archive_* tools. An agent can identify the operation without opening the schema.

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

Usage Guidelines3/5

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

It hints at when reversibility matters by naming the 30-day restore window and pointing to restore_expense, and it gives operational guidance ('use a new request_id for each intended action'). However, it never explicitly says when to choose archive over update_expense or the delete_* family, so the choice is left to inference.

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

archive_inventory_itemArchive Inventory ItemA
Destructive
Inspect

Preview first, 30-day undo. Archive an inventory item instead of deleting it (status archived, archived_at set; valuations, people links and photos are kept). Reviewed and reversible: first call preview_destructive_change({ tool: "archive_inventory_item", arguments: { inventory_id } }), which stores the exact change without applying it. After the user confirms, call archive_inventory_item with preview_id, restore_window_acknowledged: true and request_id; the reviewed preview is applied exactly and a changed record is refused. Returns restore_id; restore_change({ restore_id }) undoes it for 30 days unless the record was edited since. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
reasonNoWhy it is archived (kept on the receipt).
preview_idYespreview_id returned by preview_destructive_change for this tool.
request_idYesRequired idempotency key; retries return the original receipt.
inventory_idYesThe item id from add_inventory_item, get_inventory or search_inventory.
idempotency_keyNoAlias for request_id.
restore_window_acknowledgedYesMust be true after reviewing the preview and its 30-day restore window.

Output Schema

ParametersJSON Schema
NameRequiredDescription
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
messageNo
archivedNo
preview_idNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
restore_idNoPass to restore_change to undo within restore_window_days.
reversibleNo
inventory_idNo
idempotent_replayNo
restore_expires_atNo
restore_window_daysNo

TDQS

A4.8/5.0
Behavior5/5

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

Annotations declare destructiveHint=true, and the description goes well beyond that: it discloses what is preserved (valuations, people links, photos), the 30-day restore window, that a changed record is refused, idempotency behavior on retries, and that a preview_id is mandatory. It also notes auth (API key) and cost ($0.10), which annotations cannot convey.

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 two most important facts ('Preview first, 30-day undo'), then the mechanism and parameters. Dense but every clause carries operational meaning; the parenthetical cost/auth note is compact rather than wasteful.

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 destructive, multi-parameter, preview-gated mutation with an output schema present, the description covers the prerequisites, the reversibility contract, the failure case (edited record refused), and the undo path. Nothing an agent needs to call it safely is missing.

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 100%, so the baseline is 3, but the description adds cross-parameter meaning the schema cannot: preview_id must originate from preview_destructive_change invoked for this exact tool, restore_window_acknowledged must be true after reviewing, and request_id is the idempotency key. The return of restore_id is also tied back to restore_change.

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?

States a specific verb+resource (archive an inventory item) and immediately distinguishes it from deletion by naming the resulting state (status archived, archived_at set). The resource qualifier separates it cleanly from the sibling archive_asset, archive_event, archive_expense, and archive_trip tools.

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

Usage Guidelines5/5

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

Gives the full ordered workflow: call preview_destructive_change first, wait for user confirmation, then call this tool with preview_id, restore_window_acknowledged and request_id. It also names the alternative (restore_change) and the exact condition under which undo applies, leaving nothing to inference.

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

archive_triparchive tripA
Destructive
Inspect

Reversibly archive one owned trip; preserve linked data and return restore_id. Archived rows are never purged, so restore_trip works for at least 30 days (the Dayze destructive-change restore window). Use a new request_id for each intended action. ($0; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
reasonNo
trip_idYes
request_idYes
idempotency_keyNoAlias for request_id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
rowsNo
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
changedNo
expires_atNo
preview_idNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
restore_idNo
server_timeNo
candidate_hashNo

TDQS

A4.3/5.0
Behavior5/5

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

Annotations only flag destructiveHint=true; the description resolves the ambiguity that flag creates by stating the archive is reversible, that rows are never purged, that linked data is preserved, and that the restore window is 30 days. It also discloses auth requirements (API key) and cost ($0), which annotations cannot convey.

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

Conciseness5/5

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

Two dense sentences with no filler, front-loading the reversibility guarantee and then the restore window and idempotency rule. The parenthetical cost/auth note is compact and earns its place.

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

Completeness4/5

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

An output schema exists and the description still names the key return value (restore_id), and it covers reversibility, retention window, auth, and cost. The only gap is that the non-required 'reason' parameter and trip_id identifier semantics are left unexplained for a mutation tool.

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

Parameters2/5

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

Schema description coverage is only 25% and only idempotency_key carries an inline description (alias for request_id). The description adds real semantics for request_id (must be new per intended action) but says nothing about trip_id or the 'reason' parameter, leaving half the required/optional surface undocumented in both places.

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?

States a specific verb (archive), resource (one owned trip), and the key behavioral property (reversible, linked data preserved). The scope qualifier 'one owned trip' and the naming of restore_id/restore_trip let an agent distinguish it from sibling archive_* tools and from delete_* tools without opening the 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?

Gives actionable usage context: reversibility, the 30-day restore window tied to restore_trip, and the instruction to use a new request_id per intended action. It stops short of explicitly naming when to prefer this over alternatives like delete_event or archive_event, so it is clear context without exclusions.

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

attach_assetAttach AssetAInspect

Attach an asset_id to one of your entities. An asset uploaded without an entity is attached as is; one already on an entity gets a linked copy (the original row stays). Roles: original | processed | thumbnail | cover | document | receipt | certificate | other (photo is stored as original). Legacy: pass url instead of asset_id. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoA web link (https://…) to an image. Not a storage path: upload a file, then attach its asset_id.
roleNooriginal | cover | thumbnail | …
asset_idNo
metadataNoFree-form metadata, merged into the stored metadata (metadata.source becomes the asset source).
entity_idYes
asset_typeNo
request_idNoClient idempotency key (retries return original result).
descriptionNoCaption for the attached asset (kept on a linked copy too).
entity_typeYes
idempotency_keyNoAlias for request_id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
assetNo
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
messageNo
asset_idNo
attachedNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations declare it non-readonly and non-destructive, and the description adds real value beyond them: the linked-copy side effect ('the original row stays'), legacy url support, cost ($0.10), and an API key requirement. It stops short of rate limits or failure modes, so not a full 5.

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?

Purpose is front-loaded in the first sentence, followed by behavior, roles, legacy handling, and cost/auth. Dense single-paragraph packing, but nearly every clause earns its place; minor density cost keeps it from 5.

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

Completeness4/5

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

For a mutation tool with an output schema (so return values need not be described) and annotations covering safety, the description supplies the essential remaining context: side effects, legacy path, and cost/auth. It is nearly complete, missing only idempotency/parameter nuances.

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

Parameters3/5

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

Schema coverage is 60% and the description mainly restates fields the schema already documents (roles list duplicates the enum, url legacy is also in the schema). It adds only the marginal note that 'photo is stored as original' and leaves metadata/request_id/idempotency_key unexplained in the description.

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?

States a specific verb+resource (attach an asset_id to an entity) and implicitly distinguishes itself from siblings like upload_asset (which creates an asset) by contrasting 'uploaded without an entity' vs 'already on an entity'. An agent can tell this links existing assets rather than creating them.

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

Usage Guidelines3/5

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

Provides legacy usage context ('pass url instead of asset_id') and behavioral conditions (unattached vs already-attached), but never explicitly states when to use this over siblings such as upload_asset or update_asset. Usage is implied rather than routed.

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

attach_food_photoAttach Food Photo (Food Diary photo)AInspect

MUTATES one Food Diary row the authenticated user owns by storing a meal photo on it (same pipeline as the web diary upload). Required: food_id (UUID from log_food / search) plus exactly one of image_base64 (raw base64 or data: URL) or url (public https image). JPEG, PNG, WebP, GIF, HEIC, or AVIF under 8 MB. One photo per entry: calling again replaces photo_url (replaced/previous_photo_url report it). EXIF capture time moves consumed_at unless keep_consumed_at=true. Unknown or other-user food_id returns not_found and stores nothing. Response photo_url is re-read from the row. Syncs the mirrored calendar event and rebuilds life_state. Requires API key or OAuth with scope context. Share tokens cannot write. ($0.15; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoPublic https image URL to fetch and store. Use this or image_base64.
food_idYesUUID of a Food Diary row the authenticated user owns
filenameNoOptional original filename
request_idNoClient idempotency key (retries return original result).
image_base64NoImage bytes as base64 (optional data:image/...;base64, prefix). Use this or url.
idempotency_keyNoAlias for request_id.
keep_consumed_atNotrue keeps the entry time even if the photo EXIF has a capture time

Output Schema

ParametersJSON Schema
NameRequiredDescription
photoYesStored image summary (mime_type, file_size_bytes, taken_at).
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
food_idYes
event_idYes
replacedYesTrue when the entry already had a photo.
photo_urlYesStored photo URL, re-read from the Food Diary row.
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
consumed_atYes
life_state_rebuiltYes
previous_photo_urlYes
consumed_at_changedYesTrue when photo EXIF moved the entry time.

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 (readOnlyHint=false, destructiveHint=false). It discloses one-photo-per-entry replacement semantics, that replaced URLs are reported, that EXIF capture time shifts consumed_at unless keep_consumed_at=true, that unknown/other-user food_id returns not_found and stores nothing, that the calendar event is synced and life_state rebuilt, auth requirements, and cost. This is rich, decision-relevant disclosure.

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?

The verb and scope are front-loaded in the first clause, and the dense remainder is largely load-bearing detail. It is a long single block, and the auth/cost/side-effect sentences could be tightened, but nothing is filler.

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?

With annotations, a 100%-covered schema, and an output schema present, the description covers the remaining gaps an agent needs: auth modes, share-token restriction, idempotency, replacement behavior, and side effects. Nothing material for correct invocation is missing.

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 100%, so baseline is 3. The description meaningfully extends it: 'exactly one of' image_base64 or url, accepted formats (JPEG/PNG/WebP/GIF/HEIC/AVIF), and the 8 MB size cap -- none of which appear in the schema. It also explains the keep_consumed_at effect in narrative form.

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+resource+scope: 'MUTATES one Food Diary row the authenticated user owns by storing a meal photo on it'. The parenthetical about the web diary upload pipeline and the food_id sourcing make it clearly distinct from generic upload_photo/attach_asset siblings. An agent can tell exactly what this does without opening the 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 food_id and names where to obtain it (log_food / search), which gives real routing context. It also clarifies the either/or between image_base64 and url. However, it never explicitly contrasts against the closest siblings (upload_photo, attach_asset, update_food), so there is no stated when-not.

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

audit_peopleAudit People (compact)A
Read-only
Inspect

CONTEXT LAYER: server-side contact hygiene. Returns compact candidate clusters only (duplicates, entity-type hints, normalization, payment-handle collisions, junk system/test-word names). Do NOT use get_people bulk dumps for cleanup. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
checksNo
min_confidenceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
summaryYes
guidanceNo
candidatesYes

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description correctly aligns with a safe, read-only operation. It adds context on cost and authentication requirements, and states that it returns only compact candidate clusters, which is a useful behavioral detail. No contradictions with annotations.

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?

The description is two sentences: the first states the purpose and output, the second provides a warning and cost/auth info. It is front-loaded and efficient, with no redundant fluff. However, it omits parameter guidance, but that's not a conciseness issue.

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

Completeness2/5

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

The tool has 3 undocumented parameters and a specific purpose in a crowded domain of cleanup tools. The description differentiates from get_people but not from other cleanup tools like cleanup_preview or score_people_duplicates. It also doesn't explain what 'checks' values are valid or how 'min_confidence' relates to the output. With an output schema present, return values are covered, but parameter usage and selection criteria remain unclear, making it incomplete for reliable invocation.

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

Parameters1/5

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

The input schema has 3 parameters with 0% description coverage. The description does not explain what 'limit', 'checks', or 'min_confidence' mean, nor their expected formats or constraints. Since the schema provides no descriptions, the description must compensate but does not. This leaves an agent guessing about how to set these parameters.

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?

The description clearly states the tool performs server-side contact hygiene and returns compact candidate clusters for specific issues (duplicates, entity-type hints, normalization, payment-handle collisions, junk names). It explicitly contrasts with get_people bulk dumps, making its purpose distinct from a major sibling. The verb 'audit' and resource 'people' are clear.

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?

The description explicitly warns against using get_people bulk dumps for cleanup, directing the agent to this tool instead. It also mentions cost and API key requirements. However, it does not clarify when to choose this over other cleanup-specific siblings such as cleanup_preview or score_people_duplicates, leaving some ambiguity in tool selection.

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

backfill_place_namesBackfill Place NamesBInspect

Add human names to coord-only places/visits via Google nearby search + reverse geocode. Never overwrites existing names, coordinates, or user-entered fields. Idempotent; resumable via cursor under a per-account monthly Places quota. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax targets this run (1–100, default 25).
cursorNoResume token from a previous next_cursor.
dry_runNo
request_idNoClient idempotency key (retries return original result).
idempotency_keyNoAlias for request_id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
doneNo
namedNo
quotaNoPer-account monthly Places usage.
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
messageNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
next_cursorNo
rate_limitedNo
skipped_namedNo
skipped_no_matchNo

TDQS

B3.2/5.0
Behavior1/5

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

The description contradicts the openWorldHint=false annotation by explicitly calling external Google APIs (nearby search + reverse geocode). Per the rules, a contradiction scores 1. The otherwise rich detail (idempotency, non-destructive guarantees, quota, cost) cannot compensate.

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

Conciseness5/5

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

Three dense sentences, front-loaded with purpose and followed by behavioral guarantees and operational constraints. No filler; every clause carries information.

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

Completeness4/5

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

Given the output schema exists and annotations (aside from the contradiction) cover safety, the description supplies cost, quota, idempotency, and resumability context. It lacks guidance on how to supply the API key or what happens on quota exhaustion, but overall it is fairly complete.

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

Parameters3/5

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

Schema description coverage is 80%, so the schema already documents limit, cursor, request_id, and idempotency_key. The description only reiterates cursor resumability and adds cost/API key info, not parameter semantics. dry_run remains undocumented in both.

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

Purpose4/5

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

States a specific verb (add), resource (human names to coord-only places/visits), and method (Google nearby search + reverse geocode). It does not differentiate from the similar sibling enrich_place_from_google, which also enriches places from Google.

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

Usage Guidelines3/5

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

Implied usage for coord-only places, but no explicit when-to-use or when-not criteria, and no mention of alternatives like enrich_place_from_google or update_place. The quota and cost notes are operational, not routing guidance.

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

bulk_dismiss_clarificationsBulk Dismiss ClarificationsA
Destructive
Inspect

Preview first, 30-day undo. Dismiss non-person / typed junk from the clarification queue. Reviewed and reversible: first call preview_destructive_change({ tool: "bulk_dismiss_clarifications", arguments: { entity_type?, reason? } }), which stores the exact change without applying it. After the user confirms, call bulk_dismiss_clarifications with preview_id, restore_window_acknowledged: true and request_id; the reviewed preview is applied exactly and a changed record is refused. Returns restore_id; restore_change({ restore_id }) undoes it for 30 days unless the record was edited since. The preview lists every clarification that would be dismissed; restore returns them to pending. ($0.05; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
reasonNo
preview_idYespreview_id returned by preview_destructive_change for this tool.
request_idYesRequired idempotency key; retries return the original receipt.
entity_typeNo
idempotency_keyNoAlias for request_id.
restore_window_acknowledgedYesMust be true after reviewing the preview and its 30-day restore window.

Output Schema

ParametersJSON Schema
NameRequiredDescription
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
messageNo
dismissedNo
preview_idNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
restore_idNoPass to restore_change to undo within restore_window_days.
reversibleNo
idempotent_replayNo
restore_expires_atNo
restore_window_daysNo

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already flag destructiveHint=true, and the description adds substantial context beyond them: a 30-day undo via restore_change, refusal if the record changed since preview, restore_id return, idempotency behavior, and even cost/API-key requirements. This is exactly the behavioral disclosure a mutation tool needs.

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 two key facts ('Preview first, 30-day undo') and organized as a workflow. It is somewhat dense and repeats the review/reversibility idea, but nearly every sentence carries operational detail.

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 destructive bulk mutation with a preview gate, the description covers the full lifecycle: preview, confirmation, application, undo window, and failure on changed records. An output schema exists, so return-value detail is not required, and cost/auth are noted.

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?

With 67% schema coverage, the description still explains how the three required parameters are used together (preview_id from the preview call, restore_window_acknowledged after review, request_id for idempotent retries) and documents the preview-side entity_type/reason arguments. It adds real meaning over the schema.

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?

States a specific verb+resource with a scoping qualifier: 'Dismiss non-person / typed junk from the clarification queue.' The 'bulk' framing plus the junk-type filter distinguishes it from the single-item dismiss_clarification and the resolve_clarification siblings without opening a 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?

It gives an explicit two-step protocol (preview first, then call this after the user confirms) and names the exact preview call and required arguments. It stops short of naming dismiss_clarification as the single-item alternative, so the routing guidance is clear but not exhaustive.

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

classify_contactClassify ContactAInspect

Set entity_type (person/company/merchant/…) on a CRM row without losing transactions or links. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceNo
entity_idNo
person_idNo
confidenceNo
request_idNoClient idempotency key (retries return original result).
entity_typeYes
idempotency_keyNoAlias for request_id.
identity_statusNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
personNo
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
messageNo
change_idNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already declare destructiveHint=false, and the description reinforces this with 'without losing transactions or links', which is exactly the concern for a reclassification operation. It also discloses two facts absent from structured fields: a $0.10 cost and an API key requirement.

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

Conciseness5/5

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

Two compact sentences, the operation and its safety guarantee front-loaded, with cost/auth as a trailing parenthetical. Nothing is padded.

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

Completeness3/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 no explanation, and annotations plus the cost/auth note cover much of the behavioral picture. The gap is identification: for a mutation on a CRM row, the description never explains how source/entity_id/person_id select the target, leaving a real ambiguity at call time.

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

Parameters3/5

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

With 25% schema coverage, the description carries some burden and does add value by enumerating entity_type values that the schema leaves as a bare string. But it says nothing about the five other undocumented parameters (source, entity_id, person_id, confidence, identity_status) — notably which combination identifies the row to classify.

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

Purpose4/5

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

States a specific verb (Set entity_type) and resource (a CRM row), and enumerates the target values person/company/merchant. It does not, however, distinguish itself from the adjacent sibling convert_contact_entity, which an agent could plausibly pick instead.

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

Usage Guidelines2/5

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

There is no when-to-use guidance: nothing says when classification is appropriate versus convert_contact_entity, update_person_identity, or update_person. The implied context (a CRM row needing an entity type) is the only signal offered.

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

cleanup_applycleanup applyA
Destructive
Inspect

Atomically archive the exact reviewed preview. Requires preview_id, candidate_hash and request_id. Refuses changed sources. Returns per-row statuses and restore_id (restore_cleanup undoes it for at least 30 days); replay performs no additional actions. ($0; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
preview_idYes
request_idYes
candidate_hashYes
idempotency_keyNoAlias for request_id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
rowsNo
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
changedNo
expires_atNo
preview_idNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
restore_idNo
server_timeNo
candidate_hashNo

TDQS

A4.4/5.0
Behavior5/5

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

Adds substantial behavioral detail beyond annotations: atomicity, refusal on changed sources, per-row statuses, a restore_id valid for at least 30 days, replay behavior that performs no additional actions, and cost/auth requirements. All of this is consistent with destructiveHint=true and enriches the agent's understanding of a destructive write operation.

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

Conciseness5/5

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

Very compact and front-loaded: the core action is stated first, followed by requirements, safety behavior, return/undo information, and cost/auth constraints. Every clause carries useful information with no filler.

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?

Given that an output schema exists, the description need not explain return values, but it still usefully mentions per-row statuses and restore_id. Annotations cover the safety profile, and the description fills in atomicity, refusal behavior, undo window, replay semantics, and cost/auth requirements, leaving no major operational gap.

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

Parameters2/5

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

Schema description coverage is only 25%, so the description should compensate by explaining the parameters. It merely lists preview_id, candidate_hash, and request_id as required, which repeats schema metadata without defining what they mean or how they relate to preview integrity and idempotency. The optional idempotency_key alias is not mentioned at all.

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?

States a specific verb and resource: 'Atomically archive the exact reviewed preview.' This clearly distinguishes cleanup_apply from cleanup_preview by tying it to applying an already-reviewed preview, and from restore_cleanup by naming it as the undo path.

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?

Gives clear usage context: it requires a reviewed preview, refuses changed sources, and names restore_cleanup as the alternative for undoing the operation. It does not explicitly say to call cleanup_preview first, but the reviewed-preview requirement strongly implies the workflow.

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

cleanup_previewcleanup previewAInspect

Read-only account audit and durable archive plan for events, expenses or trips. Returns source hashes, linked records, field differences, rollback payloads and a review queue. Review the exact candidate set before cleanup_apply. Preview expires after 30 minutes. ($0; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
familyYes
request_idNoClient idempotency key (retries return original result).
idempotency_keyNoAlias for request_id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
rowsNo
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
changedNo
expires_atNo
preview_idNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
restore_idNo
server_timeNo
candidate_hashNo

TDQS

A3.5/5.0
Behavior1/5

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

The description explicitly claims "Read-only account audit," but the annotations declare readOnlyHint=false. An agent that trusts the prose would treat this as a safe read while the structured safety signal says otherwise, which is a direct conflict. The otherwise-useful additions (30-minute expiry, $0 cost, API-key requirement, returned artifacts) do not cure the contradiction of the annotation.

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 purpose in the first clause, followed by returns, the sibling routing rule, and operational constraints — no wasted sentences. It is slightly telegraphic ("($0; API key required)") but dense rather than padded.

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

Completeness4/5

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

With an output schema present, the description need not enumerate return fields, and annotations cover the safety profile — though that coverage conflicts with the prose. Expiry, cost, and auth needs are stated, so an agent has enough to call it; the unresolved read-only conflict is the main completeness defect.

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

Parameters3/5

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

Schema coverage is 67%, with request_id and idempotency_key already documented in the schema as idempotency mechanisms. The description's "events, expenses or trips" restates the family enum values without adding syntax, defaults, or selection guidance, so the baseline of 3 applies.

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?

States a specific action on specific resources ("account audit and durable archive plan for events, expenses or trips"), and the family list maps directly onto the enum an agent will see. It also distinguishes itself from its closest sibling by naming cleanup_apply as the step it precedes.

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?

"Review the exact candidate set before cleanup_apply" gives a clear workflow condition and names the alternative tool, so the agent knows this is the pre-flight step. It stops short of stating when not to use it or what to do once the 30-minute preview expires, so it is clear context rather than full routing.

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

commit_life_updateCommit Life UpdateA
Destructive
Inspect

Owner approve+commit via payload_hash + owner_session_id (flagged; off by default). Requires the propose_life_update review first. Commits append bitemporal revisions and keep prior revisions; there is no post-commit undo tool, so correct a committed fact with a new propose_life_update. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
request_idNo
proposal_idYes
payload_hashYes
idempotency_keyNo
owner_session_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
enabledNo
messageNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
assertionIdsNo
graphVersionNo

TDQS

A3.9/5.0
Behavior5/5

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

Adds substantial context beyond the destructiveHint=true annotation: append-only bitemporal revisions that preserve prior versions, the absence of any post-commit undo tool, the workaround, the cost ($0.10), and the API-key requirement. This is exactly the irreversible-mutation disclosure an agent needs.

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?

The core action and its precondition are front-loaded, and the parenthetical cost/auth notes are compact. Semicolon-heavy and dense, but every clause carries information rather than filler.

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

Completeness4/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 no explanation, and the description covers the prerequisites, irreversibility, cost, and auth. It is close to complete for a destructive mutation, with the only real gap being parameter meaning.

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

Parameters2/5

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

Schema coverage is 0% across five parameters, so the description must compensate. It name-drops payload_hash and owner_session_id but gives no meaning for either, and never explains the required proposal_id or the optional idempotency_key and request_id, leaving most parameters semantically opaque.

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

Purpose4/5

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

States a specific verb (commit) and resource (life update) and ties it directly to the sibling propose_life_update, which it requires first. An agent can distinguish this from propose_life_update and the restore_* tools without opening the schema, though the phrasing 'Owner approve+commit' is slightly telegraphic.

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?

Explicitly states the precondition ('Requires the propose_life_update review first') and the correct alternative for fixing a bad commit ('correct a committed fact with a new propose_life_update'), plus the 'off by default' flag status. It stops short of spelling out when the flag is toggled on, but the routing guidance is clear.

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

compare_livesCompare Two LivesA
Read-only
Inspect

Side-by-side notable packs for two slugs (life_in_days + day_number timelines). One call instead of two notable_pack. Example: elon-musk vs steve-jobs. ($0.08)

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoYYYY-MM-DD target date for both packs
peersNo
slug_aYesFirst person slug
slug_bYesSecond person slug
similarNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
aYesFirst notable-person knowledge pack.
bYesSecond notable-person knowledge pack.
packYes
compareYesComputed comparison fields and URLs.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so no contradiction exists. The description adds useful behavioral context beyond the annotations: it packages what would be two notable_pack calls into one, notes the timeline format, and discloses the $0.08 cost.

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

Conciseness5/5

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

Three concise semantic units in one sentence: what it returns, why it is preferable to calling notable_pack twice, and a concrete example. No filler words or redundant restatements.

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 read-only tool with only two required parameters, the description plus the input schema and annotations gives an agent everything needed to call it correctly. It also includes enough comparison-specific context to choose this over notable_pack, and the cost and timeline details remove the main remaining unknowns.

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

Parameters3/5

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

slug_a and slug_b have schema descriptions, and the example reinforces what a slug looks like. However, the description adds nothing about date, peers, or similar, and peers/similar are not described in the schema either, so the 40% schema-description gap is left uncompensated.

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?

The description states a clear operation: produce side-by-side notable packs for two slugs. It names the resource (notable packs with life_in_days + day_number timelines) and explicitly differentiates itself from notable_pack by noting it replaces two calls. The elon-musk vs steve-jobs example grounds the abstraction.

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?

It explicitly names notable_pack as the alternative and frames compare_lives as the one-call version for comparing two people. It doesn't give formal when-not conditions, but the intended context is clear enough for an agent to decide when to pick this over a single notable_pack call.

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

convert_contact_entityConvert Contact EntityA
Destructive
Inspect

Preview first, 30-day undo. Convert a contact’s entity_type (same as classify_contact). Preserves FKs. Reviewed and reversible: first call preview_destructive_change({ tool: "convert_contact_entity", arguments: { person_id, target_type } }), which stores the exact change without applying it. After the user confirms, call convert_contact_entity with preview_id, restore_window_acknowledged: true and request_id; the reviewed preview is applied exactly and a changed record is refused. Returns restore_id; restore_change({ restore_id }) undoes it for 30 days unless the record was edited since. Restore reverts entity_type, identity_status and identity_confidence. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
entity_idNo
person_idNo
preview_idYespreview_id returned by preview_destructive_change for this tool.
request_idYesRequired idempotency key; retries return the original receipt.
target_typeNo
idempotency_keyNoAlias for request_id.
restore_window_acknowledgedYesMust be true after reviewing the preview and its 30-day restore window.

Output Schema

ParametersJSON Schema
NameRequiredDescription
personNo
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
messageNo
change_idNo
preview_idNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
restore_idNoPass to restore_change to undo within restore_window_days.
reversibleNo
idempotent_replayNo
restore_expires_atNo
restore_window_daysNo

TDQS

A4.8/5.0
Behavior5/5

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

Goes well past the annotations (destructiveHint=true): discloses preview-first requirement, 30-day undo window, that a changed/changed record is refused, that FKs are preserved, and precisely what restore reverts (entity_type, identity_status, identity_confidence). This is unusually rich behavioral context for a mutation tool.

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-loads the preview/undo model and cost, with each sentence carrying workflow or reversal information. It is dense and slightly repetitive in restating the preview/restore loop, but nothing is wasted.

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?

Given an output schema exists, the description needn't explain return values, and it still covers the full lifecycle (preview, apply, refuse-on-change, restore) plus pricing and auth. An agent has everything needed to invoke it correctly.

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 57%, so the description meaningfully supplements: it explains preview_id's provenance, request_id's idempotent-retry behavior, and the review semantics of restore_window_acknowledged. It could still clarify entity_id vs person_id and target_type's allowed values.

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?

States a specific verb and resource ('Convert a contact's entity_type') and immediately identifies its relationship to a sibling ('same as classify_contact'), letting an agent distinguish it from the ~150 other tools. No ambiguity about what the tool does.

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

Usage Guidelines5/5

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

Gives an explicit two-step protocol: first call preview_destructive_change with exact arguments, then after user confirmation call this tool with preview_id, restore_window_acknowledged: true and request_id. It also names classify_contact as the equivalent operation, so the when/how is fully prescribed.

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

correct_memory_atomCorrect Memory AtomA
Destructive
Inspect

Preview first, 30-day undo. Remove one exact false atom from a bundled memory, retaining the other text and clearing its stale embedding. Reviewed and reversible: first call preview_destructive_change({ tool: "correct_memory_atom", arguments: { memory_id, false_atom } }), which stores the exact change without applying it. After the user confirms, call correct_memory_atom with preview_id, restore_window_acknowledged: true and request_id; the reviewed preview is applied exactly and a changed record is refused. Returns restore_id; restore_change({ restore_id }) undoes it for 30 days unless the record was edited since. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
memory_idNoMemory id, checked against the preview.
preview_idYespreview_id returned by preview_destructive_change for this tool.
request_idYesRequired idempotency key; retries return the original receipt.
idempotency_keyNoAlias for request_id.
restore_window_acknowledgedYesMust be true after reviewing the preview and its 30-day restore window.

Output Schema

ParametersJSON Schema
NameRequiredDescription
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
contentYes
memory_idYes
false_atomNo
preview_idNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
restore_idNoPass to restore_change to undo within restore_window_days.
reversibleNo
idempotent_replayNo
life_state_rebuiltYes
restore_expires_atNo
restore_window_daysNo

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true, but the description adds substantial context beyond them: the preview-first guard, the 30-day restore window, the refusal of a changed record (staleness safety), the restore_id undo path, the $0.10 cost, and the API-key requirement. This is exactly the added behavioral detail expected when annotations only flag destructiveness.

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?

The workflow and reversibility facts are front-loaded, and the sentences are dense but purposeful. The trailing cost/API-key parenthetical and some workflow repetition make it slightly longer than strictly necessary, but every element carries useful signal.

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 destructive mutation with a required multi-step preview flow, the description covers the full lifecycle: preview, apply, and undo. With an output schema present, it need not detail return values, and it still names restore_id, so an agent has everything needed to call it correctly.

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 100%, so the baseline is 3, but the description adds meaning: it clarifies that memory_id and false_atom are supplied to the preview call rather than this one, and that preview_id comes from preview_destructive_change while restore_window_acknowledged must be true after review. It explains the reasoning behind request_id idempotency, though the alias field is left to the schema.

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?

States a specific verb (remove one exact false atom) against a specific resource (a bundled memory) and explicitly scopes it as surgical: it retains the other text and clears the stale embedding. This distinguishes it from siblings like delete_memory and merge_memory without needing to open 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 Guidelines5/5

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

Gives an explicit two-step workflow: call preview_destructive_change first with the exact arguments, then call correct_memory_atom after user confirmation with preview_id and restore_window_acknowledged. It names the ordering, the prerequisite, and the confirm step, leaving nothing to inference.

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

create_conditionAdd ConditionAInspect

Add a private condition for an explicit subject_type: self, or person plus an owned person_id from get_people/resolve_person. Never turn a family member's condition into self; if the person is unresolved, ask and write nothing. status defaults suspected—never infer active or confirmed from a mention. Keep the user's words; source defaults user_reported and confirmation_status reported. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesWhat the user calls it, in their words (e.g. "Blurry near vision"). Never a diagnosis they did not give.
notesNo
sourceNoProvenance, e.g. user_reported. Default user_reported.
statusNosuspected (default for a new one) | active | improving | resolved.
symptomsNoWhat they notice, e.g. "Blurry at near distance, worse in the evening".
body_areaNoWhere, e.g. "Left eye".
person_idNoOwned contact id; required for person.
request_idNoClient idempotency key (retries return original result).
started_onNoYYYY-MM-DD it started (onset). Default for a new one: today.
treatmentsNoWhat they use or do for it.
subject_typeYesself, or person with person_id.
tracking_focusNoWhat to watch on each check-in.
idempotency_keyNoAlias for request_id.
confirmation_statusNounconfirmed | reported (default) | confirmed; never infer confirmed.

Output Schema

ParametersJSON Schema
NameRequiredDescription
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
createdNo
messageNo
conditionNoA private condition with explicit subject_type/person_id, source and confirmation_status.
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
condition_idNo
already_existedNotrue: an open condition with this name exists; it came back unchanged.
idempotent_replayNotrue when this request_id already ran: the first result, nothing new written.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only declare the safety profile (non-read, non-destructive), while the description adds real behavioral context: privacy of the record, cost ($0.10), API-key requirement, defaults for status/source/confirmation_status, and the no-write-if-unresolved rule. This is substantial value beyond the annotations and does not contradict them.

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?

Purpose and the subject_type rule are front-loaded, then defaults, then cost/auth. Every clause carries a rule or fact, though the density is high and the trailing cost/API-key note reads as appended rather than integrated.

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?

With 14 parameters, high schema coverage, and an output schema present, the description need not explain return values. It supplies exactly the missing pieces—usage rules, defaults, privacy, and cost/auth—so an agent has everything required to call it correctly.

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 93%, so the baseline is 3; the description goes beyond it by reinforcing defaults (suspected, user_reported, reported) and adding a semantic guardrail—never infer active/confirmed from a mention and keep the user's words. These add meaning for the enum/default parameters the schema alone does not fully constrain.

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?

States a specific verb and resource ("Add a private condition") plus the scoping rule (subject_type self or person). The create semantics implicitly distinguish it from the sibling update_condition, and the "private" qualifier adds scope an agent would not otherwise know.

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

Usage Guidelines5/5

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

Gives explicit when-to-use rules and exclusions: use self or a person with an owned person_id from get_people/resolve_person, never turn a family member into self, and if the person is unresolved ask and write nothing. It even routes to the sibling tools needed to resolve the person first.

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

create_pending_replyCreate Pending ReplyAInspect

Pending Replies (Inbox): save a reply the user owes someone, e.g. 'what to reply to X', 'I owe X a reply'. Use this, not log_event or a task. Optional draft (the reply text), summary (one line in your own words; never the email body, subject or sender), channel, category, received_at, and source { kind, thread_id, message_id } (ids only). Links the contact only when resolve_person finds exactly one (or pass person_id); otherwise the reply is saved unlinked and person_link says why. An unsent reply for the same thread or person comes back instead of a second one (created: false, deduplicated: true); update_existing: true replaces its draft and summary. Never sends anything. Requires API key or OAuth with context.write; share tokens cannot write. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
draftNoThe reply text to send later, max 20,000 characters. Replaces the saved draft; empty or null clears. Alias: draft_message.
sourceNoThe email the reply answers, as ids only (e.g. a search_gmail id is a message_id). Never a subject, sender or text. On update, null clears it.
channelNoWhere to reply: whatsapp, email, sms, call, imessage, telegram, instagram, facebook, signal, linkedin, twitter, slack, teams, work_email, zoom, dayze, other. Default email when source is set, else other.
summaryNoOne line (max 280) in your own words: what the reply is about. Never paste the email body, subject line or sender address.
categoryNoDefault personal.
person_idNoAn owned contact id; links that contact directly.
request_idNoClient idempotency key (retries return original result).
person_nameYesWho the reply is owed to, as the user said it (e.g. "Ilana").
received_atNoWhen they wrote (ISO date-time). Default now.
draft_messageNoAlias for draft.
idempotency_keyNoAlias for request_id.
update_existingNoWhen an unsent reply for this thread or person exists, write draft/summary onto it instead of returning it unchanged.

Output Schema

ParametersJSON Schema
NameRequiredDescription
replyYesOne reply the user owes (Inbox → Pending Replies). Dayze never sends it.
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
app_urlNo
createdYesTrue when this call saved a new reply.
messageYes
updatedYesTrue when an existing unsent reply was changed (update_existing).
matched_onYessource_thread, source_message or person when deduplicated.
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
person_linkYesWhether a contact was linked. Linked only on one resolve_person match or an owned person_id.
deduplicatedYesTrue when an unsent reply for the same thread or person was returned instead of a new one.
source_savedYesFalse when a source was given and could not be stored.
life_state_rebuiltYes

TDQS

A4.8/5.0
Behavior5/5

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

Annotations declare a non-destructive write; the description adds rich context beyond them: never sends anything, dedup returns created:false/deduplicated:true, linking fallback with person_link explaining why, auth requirements (context.write, share tokens cannot write), and cost ($0.10).

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?

Dense but front-loaded: purpose first, then routing, then optional fields, dedup, auth and cost. Every sentence carries operational information, though the parenthetical field list makes it somewhat packed.

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 12-param mutation tool with an output schema and annotations, the description covers the write semantics, dedup, linking, auth, and cost. An agent has everything needed to call it correctly without guessing.

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 100%, so the baseline is 3, but the description adds meaning by tying parameters to behavior: person_id bypasses resolve_person linking, update_existing mutates an existing unsent reply, and summary must never contain the email body/subject/sender.

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?

States a specific verb+resource ('save a reply the user owes someone') with concrete examples ('what to reply to X', 'I owe X a reply'). Explicitly distinguishes itself from log_event and task, so an agent can route correctly without opening a schema.

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

Usage Guidelines5/5

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

Explicit 'Use this, not log_event or a task' names the alternatives and the condition that selects this tool. It further routes on dedup ('update_existing: true replaces its draft and summary') and linking ('only when resolve_person finds exactly one').

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

create_personCreate ContactAInspect

Add a Dayze Contacts record, birthday included (YYYY-MM-DD, YYYY-MM, YYYY, or MM-DD if year unknown); checks duplicates first. An existing contact comes back unchanged with its person_id, not_applied (the fields you sent) and a hint. request_id is optional: without one, identical calls within 15 minutes return the first result. Advertised name create_person is stable; tools/call also accepts create_contact. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
tierNo
emailNo
notesNo
phoneNo
aliasesNo
birthdayNoYYYY-MM-DD, YYYY-MM, YYYY, or MM-DD / --MM-DD when the year is unknown (same as update_person)
request_idNoClient idempotency key (retries return original result).
is_favoriteNo
context_tagsNo
relationshipNo
relationshipsNo
idempotency_keyNoAlias for request_id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
codeNo
hintNo
nameNo
slugNo
peopleNo
personNoCRM person record.
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
aliasesNoAliases saved on the new contact.
createdNo
messageNo
skippedNo
birthdayNoAs stored: YYYY-MM-DD. A year-unknown birthday is 1900-MM-DD (Feb 29: 1904-02-29).
duplicateNoTrue when the contact already existed: nothing on it was changed.
person_idNoThe new contact, or the existing one on a duplicate.
created_atNo
person_idsNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
matched_viaNo
not_appliedNoOn a duplicate: the fields sent that were not saved.
role_expandNo
hygiene_flagsNo
aliases_not_savedNoAliases not saved (another contact has them); the contact was still created.
idempotent_replayNo
birthday_precisionNoday, month, year, month_day (year unknown) or approximate.

TDQS

A4.1/5.0
Behavior5/5

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

Goes well beyond the annotations (readOnlyHint=false, destructiveHint=false): discloses duplicate detection, the exact shape of the existing-contact response (person_id, not_applied, hint), idempotency semantics (request_id / 15-minute dedupe window), the create_contact alias, cost ($0.10) and the API-key requirement. Rich, non-obvious behavioral context.

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-loads the core action and birthday formats, then layers idempotency, naming and cost. Dense but mostly earn-place; the parenthetical cost/auth note and alias clause make it slightly crowded for a single paragraph.

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

Completeness4/5

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

For a 13-param write tool with an output schema, it covers the important gaps: auth, cost, idempotency, duplicate handling and the existing-record return case. The main omission is meaning for the secondary filter-like params, though the output schema and self-explanatory names cover most of that.

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

Parameters3/5

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

Schema description coverage is only 23%, so the description must compensate. It adds real value on the two non-obvious params (birthday formats, request_id idempotency), but leaves tier, aliases, is_favorite, context_tags, relationship(s) and idempotency_key unexplained. Most remaining params are self-evident, so this is adequate rather than thorough.

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?

States a specific verb ('Add') and resource ('Dayze Contacts record') and is clearly distinguishable from sibling creators like create_place and create_condition. It also resolves the create_person/create_contact naming ambiguity explicitly.

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

Usage Guidelines3/5

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

Implies usage through the duplicate-check behavior ('checks duplicates first'), which hints at a create-vs-update decision, but never states when to use this instead of update_person or merge_people. No explicit when-not guidance or named alternatives.

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

create_placeCreate Place CardBInspect

Save a venue card (business_contacts): address, opening_hours, affordability ($/$$/$$$), notes, tags. Idempotent by name or idempotency_key — does not create calendar notes. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
areaNo
cityNo
nameYes
tagsNo
hoursNoAlias for opening_hours
notesNo
phoneNo
addressNo
countryNo
websiteNo
categoryNorestaurant|cafe|supermarket|shop|hawker|… (aliases mapped to business_contacts.category)
latitudeNo
longitudeNo
request_idNoClient idempotency key (retries return original result).
descriptionNo
price_levelNoAlias for affordability
hours_sourceNoagent | google_places | user
affordabilityNo$ | $$ | $$$ (or 1–3)
opening_hoursNo
phone_numbersNo
idempotency_keyNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
placeNoSaved place card.
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
createdNo
messageNo
place_idNo
duplicateNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
business_contact_idNo

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false. The description adds useful behavioral context—idempotency semantics, API key requirement, and cost ($0.10)—which is genuinely beyond what annotations provide. It does not, however, describe what happens on duplicate name matches beyond 'does not create calendar notes,' nor error behavior for partial matches.

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

Conciseness5/5

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

A single dense sentence with no wasted words. It front-loads the core purpose, lists fields compactly, and tacks on idempotency and cost—appropriate framing for a tool definition.

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

Completeness3/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 needn't be described. But for a 21-parameter mutation tool with only 29% schema description coverage and no annotation coverage of side effects, the description leaves too many gaps—particularly the ambiguity around name-based idempotency (what if the name matches an existing place but other fields differ?) and the meaning of aliased parameters.

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

Parameters2/5

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

Schema description coverage is only 29% with 21 parameters, so the schema leaves most parameters undocumented. The description lists some field categories (address, opening_hours, affordability, notes, tags) and mentions idempotency by name or idempotency_key, but omits many parameters like latitude/longitude, category aliasing, phone_numbers, hours_source, and request_id. It does not compensate for the low coverage.

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

Purpose4/5

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

The description states a specific verb and resource: saving a 'venue card (business_contacts)' with named fields. However, it doesn't explicitly distinguish this from siblings like `update_place` or `enrich_place_from_google`, though the create-vs-update distinction is implied by the name.

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

Usage Guidelines2/5

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

No explicit when-to-use guidance or alternatives. The description implies idempotency but doesn't explain when an agent should use `create_place` versus `update_place`, `resolve_place`, or `log_place_visit`, nor does it state what happens when a place already exists.

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

delete_eventDelete Event (calendar remove)A
Destructive
Inspect

Reversibly archives one owned event. Required event_id and request_id. Returns the prior row in deleted for compatibility, changed, restore_id and life_state_rebuilt. All food, people and asset links are preserved. Restore with restore_event. Replays perform no additional action. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
event_idYesUUID of a calendar event the authenticated user owns
request_idYesRequired client idempotency key; a replay returns the first result.
idempotency_keyNoAlias for request_id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
deletedYesA Dayze calendar event record.
event_idYes
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
food_deleted_idsYes
life_state_rebuiltYes

TDQS

A3.8/5.0
Behavior4/5

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

Goes well beyond the annotations: reversibility, preserved food/people/asset links, replay being a no-op, restore path, and cost/auth requirements ($0.10; API key required). The only tension is that destructiveHint=true is framed as harmless archival, which could soften an agent's caution before confirming with the user, though the two are not strictly contradictory.

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 core action and reversibility, and most sentences carry distinct information. The enumeration of return fields (deleted, changed, restore_id, life_state_rebuilt) duplicates the output schema and is the one expendable clause.

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

Completeness4/5

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

For a mutating tool with annotations, an output schema, and full param coverage, the description supplies the missing pieces: reversibility, link preservation, idempotency behavior, restore path, cost, and auth. The remaining gap is sibling differentiation from archive_event.

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 100%, so baseline is 3, and the description adds real meaning by stating that both event_id and request_id are required and that a replay returns the first result. The idempotency_key alias is left to the schema, but that is a minor omission.

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

Purpose4/5

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

States a specific verb and resource with scope: 'Reversibly archives one owned event.' The word 'one' and 'owned' pin the cardinality and authorization boundary. However, it does not distinguish itself from the sibling archive_event, which reads as the same operation, so an agent cannot route between them from the description alone.

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

Usage Guidelines3/5

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

It names the undo path ('Restore with restore_event'), which is useful recovery guidance, and implies use when the user wants an event removed. But it never states when to prefer this over archive_event, update_event, or delete_food/delete_place-style siblings, and gives no prerequisites beyond ownership.

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

delete_foodDelete Food (Food Diary remove)A
Destructive
Inspect

Preview first, 30-day undo. Removes one Food Diary row the authenticated user owns and archives its mirrored calendar event. Prefer this over delete_event for meals logged via log_food. Unknown or other-user food_id returns an error. Rebuilds life_state. Reviewed and reversible: first call preview_destructive_change({ tool: "delete_food", arguments: { food_id } }), which stores the exact change without applying it. After the user confirms, call delete_food with preview_id, restore_window_acknowledged: true and request_id; the reviewed preview is applied exactly and a changed record is refused. Returns restore_id; restore_change({ restore_id }) undoes it for 30 days unless the record was edited since. Requires API key or OAuth with context.delete. Share tokens cannot write. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
food_idYesUUID of a Food Diary row the authenticated user owns
preview_idYespreview_id returned by preview_destructive_change for this tool.
request_idYesRequired idempotency key; retries return the original receipt.
idempotency_keyNoAlias for request_id.
restore_window_acknowledgedYesMust be true after reviewing the preview and its 30-day restore window.

Output Schema

ParametersJSON Schema
NameRequiredDescription
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
deletedYesDeleted food diary row.
food_idYes
event_idNo
preview_idNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
restore_idNoPass to restore_change to undo within restore_window_days.
reversibleNo
idempotent_replayNo
life_state_rebuiltYes
restore_expires_atNo
restore_window_daysNo

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already flag destructiveHint=true/readOnlyHint=false, but the description goes far beyond: 30-day undo window via restore_id, restore refusal if the record was edited since, rebuilds life_state, refusal of changed previews, idempotent request_id retries, auth requirements (API key or OAuth with context.delete, share tokens cannot write) and cost. This is rich behavioral disclosure.

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 two headline facts ('Preview first, 30-day undo') and every sentence carries operational weight. It is dense and slightly repetitive in restating the preview/confirm step, but no sentence is filler for a tool with this much mandatory ceremony.

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?

Output schema exists so return values need no explanation, yet the description still names the returned restore_id. Auth, cost, error conditions, idempotency, and the preview workflow are all covered, leaving nothing an agent needs in order to call this destructive tool safely.

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 description coverage is already 100%, so baseline is 3. The description adds workflow meaning the schema cannot: why preview_id must come from preview_destructive_change, why restore_window_acknowledged must be true, and that request_id is an idempotency key. It explains the parameters' roles in the flow rather than their formats.

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?

States a specific verb+resource ('Removes one Food Diary row the authenticated user owns') plus the side effect on the mirrored calendar event, and explicitly distinguishes itself from sibling delete_event and implies the log_food/update_food context. An agent can identify this 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 Guidelines5/5

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

Explicit when-to-use ('Prefer this over delete_event for meals logged via log_food'), when-not (unknown or other-user food_id returns an error), and the full mandatory preview-then-confirm sequence including which arguments to pass to preview_destructive_change and delete_food. Nothing is left to inference.

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

delete_memoryDelete Memory (Agent memory remove)A
Destructive
Inspect

Preview first, 30-day undo. Removes Dayze Agent memories the authenticated user owns: memory_id (or up to 50 memory_ids) from get_memories. Rows get_memories marks source "event" are calendar events (use delete_event). An unknown or other-user id is not found and nothing changes. Dayze chat and get_memories stop using them at once; rebuilds life_state. Reviewed and reversible: first call preview_destructive_change({ tool: "delete_memory", arguments: { memory_id } }), which stores the exact change without applying it. After the user confirms, call delete_memory with preview_id, restore_window_acknowledged: true and request_id; the reviewed preview is applied exactly and a changed record is refused. Returns restore_id; restore_change({ restore_id }) undoes it for 30 days unless the record was edited since. Requires API key or OAuth with context.delete. Share tokens cannot write. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
memory_idNoOptional: the memory the preview named (checked against it). A preview of several memory_ids names none.
preview_idYespreview_id returned by preview_destructive_change for this tool.
request_idYesRequired idempotency key; retries return the original receipt.
idempotency_keyNoAlias for request_id.
restore_window_acknowledgedYesMust be true after reviewing the preview and its 30-day restore window.

Output Schema

ParametersJSON Schema
NameRequiredDescription
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
deletedYes
memory_idNoThe memory the preview named; null for a preview of several.
memory_idsYes
preview_idNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
restore_idNoPass to restore_change to undo within restore_window_days.
reversibleNo
idempotent_replayNo
life_state_rebuiltYes
restore_expires_atNo
restore_window_daysNo

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only declare destructiveHint=true; the description goes far beyond by disclosing the 30-day restore window, that a changed record is refused, downstream effects (chat and get_memories stop using them at once, life_state rebuilds), the auth requirement (API key or OAuth with context.delete, share tokens cannot write), and idempotent retry behavior. These are exactly the operational traits an agent needs for a destructive tool.

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 constraint ('Preview first, 30-day undo'), and every sentence carries substantive information. It is dense and occasionally run-on, but there is no filler and no repetition of the schema.

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-value detail is unnecessary, and the description still covers the receipt/restore_id concept. Combined with the preview workflow, auth constraints, side effects, and reversibility, nothing an agent needs to invoke this correctly is missing.

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 100%, so the baseline is 3, and the description adds workflow meaning: memory_id is optional and checked against the preview, preview_id must come from preview_destructive_change, and restore_window_acknowledged must be true after reviewing the preview. It explains why these parameters exist rather than only restating their types.

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?

States a specific verb and resource ('Removes Dayze Agent memories the authenticated user owns') and scopes ownership explicitly. It distinguishes itself from siblings by routing calendar-event rows to delete_event and by naming get_memories as the source of memory_id. An agent can identify the target object class without opening the schema.

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

Usage Guidelines5/5

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

Gives an explicit two-step workflow: call preview_destructive_change first, then call delete_memory with preview_id, restore_window_acknowledged: true and request_id after user confirmation. It names the alternative (delete_event) and the condition that selects it, and states that unknown or other-user ids simply resolve to not-found.

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

delete_momentDelete MomentA
Destructive
Inspect

Preview first, 30-day undo. Reviewed and reversible: first call preview_destructive_change({ tool: "delete_moment", arguments: { moment_id } }), which stores the exact change without applying it. After the user confirms, call delete_moment with preview_id, restore_window_acknowledged: true and request_id; the reviewed preview is applied exactly and a changed record is refused. Returns restore_id; restore_change({ restore_id }) undoes it for 30 days unless the record was edited since. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
moment_idNo
preview_idYespreview_id returned by preview_destructive_change for this tool.
request_idYesRequired idempotency key; retries return the original receipt.
idempotency_keyNoAlias for request_id.
restore_window_acknowledgedYesMust be true after reviewing the preview and its 30-day restore window.

Output Schema

ParametersJSON Schema
NameRequiredDescription
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
deletedNo
moment_idNo
preview_idNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
restore_idNoPass to restore_change to undo within restore_window_days.
reversibleNo
linked_impactNo
idempotent_replayNo
restore_expires_atNo
restore_window_daysNo

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already flag destructiveHint=true and readOnlyHint=false, and the description layers substantial extra behavior on top: a mandatory preview gate, exact-application semantics, a 30-day restore window via restore_id, refusal when the record changed since preview, and the cost ($0.10) and API key requirement. This is rich context well beyond the annotations.

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?

The key point ('Preview first, 30-day undo') is front-loaded, and the paragraph is information-dense with the cost/auth notice trailing. It is on the dense side for one paragraph, but nearly every clause carries operational meaning.

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?

Given a mutation tool with an output schema present, the description covers the workflow, reversibility, refusal semantics, idempotency, cost and auth requirements. Nothing an agent needs to invoke it correctly is missing, and return values are appropriately not over-explained.

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

Parameters3/5

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

Schema description coverage is 80%, so the schema already documents preview_id, request_id, idempotency_key and restore_window_acknowledged. The description reinforces usage (pass preview_id, acknowledged: true, request_id) but adds no new format or constraint detail beyond what the schema states. Baseline 3 is appropriate.

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

Purpose4/5

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

The name/title pair (delete_moment) plus the workflow text make it clear this applies a reviewed deletion of a moment, and the description names the prerequisite (preview_destructive_change) and the undo path (restore_change). However, it never plainly states 'deletes a moment' as a verb+resource and does not differentiate itself from the sibling delete_moment_preview. Clear purpose, but differentiation is left implicit.

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

Usage Guidelines5/5

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

It gives an explicit two-step protocol: call preview_destructive_change first to store the change, then delete_moment after user confirmation with preview_id, restore_window_acknowledged: true and request_id. It also states the refusal condition (a changed record is refused) and the undo path, so when-to-use and the guardrails are fully specified.

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

delete_moment_previewPreview Moment DeletionA
Destructive
Inspect

Read a Moment and linked impact and store a reviewed deletion preview; nothing is removed. ($0.05; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
moment_idYes
request_idNoClient idempotency key (retries return original result).
idempotency_keyNoAlias for request_id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
momentNo
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
preview_idNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
linked_impactNo
restore_window_daysNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations declare destructiveHint=true and readOnlyHint=false, which sounds alarming for a 'preview', but the description clarifies that 'nothing is removed' and that only a preview is stored. This is meaningful added context beyond the annotations, resolving a potential misinterpretation. It also discloses the $0.05 cost and API key requirement, which annotations do not.

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

Conciseness5/5

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

One dense sentence front-loads the operation, the effect, and the key safety point ('nothing is removed'), then appends cost and auth requirements in parentheses. No wasted words.

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

Completeness4/5

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

Covers the operation, the non-destructive nature, the cost, and the auth requirement, which addresses the main behavioral unknowns given a moderate schema and an output schema that presumably explains the return. It does not explain the relationship to delete_moment or the preview's lifespan, but it is nearly complete.

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

Parameters3/5

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

Schema coverage is 67%; the description adds no parameter guidance beyond the schema. request_id and idempotency_key are documented in the schema itself, and moment_id is simply required. Baseline 3 is appropriate since the schema does the heavy lifting for most parameters.

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?

States a specific verb and resource ('Read a Moment and linked impact and store a reviewed deletion preview') and immediately distinguishes itself from the real deletion tool by clarifying 'nothing is removed'. An agent can tell it apart from delete_moment and preview_destructive_change without opening the 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?

The implicit workflow is clear: this is the preview step before delete_moment, and the description says nothing is removed, which routes agents here rather than to the destructive sibling. It does not explicitly name delete_moment or state when the preview is mandatory, leaving some inference.

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

delete_personDelete ContactA
Destructive
Inspect

Delete one owned contact only after delete_person_preview. Preserves a complete restore snapshot for 30 days; undo with undo_contact_change using restore_id. Requires a request_id for retry-safe idempotency. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
person_idYesUUID of the owned contact to delete.
preview_idYesDurable preview_id returned by delete_person_preview.
request_idYesRequired idempotency key; retries return the original result.
idempotency_keyNoAlias for request_id.
restore_window_acknowledgedYesMust be true after reviewing the 30-day restore window.

Output Schema

ParametersJSON Schema
NameRequiredDescription
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
deletedNo
messageNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
restore_idNo
reversibleNo
deleted_personNoCRM person record.
deleted_person_idNo
life_state_rebuiltNo
restore_expires_atNo

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, and the description adds context beyond them: a 30-day restore snapshot is preserved, undo is possible via restore_id, request_id gives retry-safe idempotency, and it costs $0.10 with an API key required. This is rich behavioral disclosure that materially affects how an agent should call it.

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

Conciseness5/5

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

Four tight sentences, each carrying distinct information (precondition, recovery window, idempotency, cost/auth). The critical precondition is front-loaded before the softer details.

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 explained. Given the destructive nature and 5-param surface, the description covers everything an agent needs: prerequisite, reversibility window, undo path, and idempotency contract.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all five parameters, including request_id as an idempotency key and restore_window_acknowledged. The description restates the request_id idempotency purpose but adds no syntax or format detail beyond the schema, so the baseline 3 applies.

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?

States a specific verb and resource ('Delete one owned contact') with a clear scope restriction ('one owned'). It explicitly distinguishes itself from the sibling delete_person_preview (which must precede it) and undo_contact_change (which reverses it), so an agent can place it precisely among the destructive-contact siblings.

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

Usage Guidelines5/5

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

Gives an explicit precondition ('only after delete_person_preview'), names the alternative recovery path ('undo with undo_contact_change using restore_id'), and notes the retry contract. When and how to use it are fully specified with no inference required.

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

delete_person_previewDelete Contact PreviewAInspect

Create a durable, non-mutating snapshot of one owned contact and every linked record before deletion. Review the 30-day restore window, then pass preview_id to delete_person. ($0.05; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
person_idYesUUID of the owned contact to review.
request_idNoClient idempotency key (retries return original result).
idempotency_keyNoAlias for request_id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
personNoCRM person record.
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
manifestNo
person_idYes
preview_idYes
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
reversibleYes
restore_window_daysYes

TDQS

A4.7/5.0
Behavior5/5

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

Annotations declare readOnlyHint=false and destructiveHint=false; the description explains the apparent tension by specifying the operation is non-mutating to the contact but produces a durable snapshot, and adds behavioral context annotations cannot carry: a $0.05 cost, an API key requirement, and a 30-day restore window. That is exactly the kind of side-effect, auth, and lifecycle information an agent needs before calling.

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

Conciseness5/5

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

Three short sentences with no filler: the operation and its non-mutating nature come first, the workflow second, and the cost/auth constraint last. Every clause carries information an agent must act on.

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 (including preview_id) need not be explained, and the description covers the remaining gaps: safety profile, cost, auth, and the restore window. Nothing needed to invoke this correctly or chain it into delete_person is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so person_id, request_id, and idempotency_key are already fully documented in the schema and the baseline is 3. The description adds only an indirect hint that a preview_id is produced for later use; it offers no extra meaning about the inputs themselves.

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?

States a specific verb and resource ('Create a durable, non-mutating snapshot of one owned contact and every linked record') and immediately disambiguates from the name's implication of deletion by calling it non-mutating. It also names the sibling tool it feeds into (delete_person), so an agent can distinguish it from delete_person without opening either schema.

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

Usage Guidelines5/5

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

Gives explicit ordering ('before deletion'), the review step ('Review the 30-day restore window'), and the exact handoff ('then pass preview_id to delete_person'). The when-to-use condition and the alternative it pairs with are both stated rather than inferred.

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

delete_placeDelete Place CardA
Destructive
Inspect

Preview first, 30-day undo. Delete a saved place card (business_contacts) by place_id / business_contact_id and return the deleted card. Reviewed and reversible: first call preview_destructive_change({ tool: "delete_place", arguments: { place_id } }), which stores the exact change without applying it. After the user confirms, call delete_place with preview_id, restore_window_acknowledged: true and request_id; the reviewed preview is applied exactly and a changed record is refused. Returns restore_id; restore_change({ restore_id }) undoes it for 30 days unless the record was edited since. Restore also re-links visits, events, expenses and people that pointed at the card. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
idNo
place_idNo
preview_idYespreview_id returned by preview_destructive_change for this tool.
request_idYesRequired idempotency key; retries return the original receipt.
idempotency_keyNoAlias for request_id.
business_contact_idNo
restore_window_acknowledgedYesMust be true after reviewing the preview and its 30-day restore window.

Output Schema

ParametersJSON Schema
NameRequiredDescription
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
deletedYesDeleted saved place card row.
place_idYes
preview_idNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
restore_idNoPass to restore_change to undo within restore_window_days.
reversibleNo
idempotent_replayNo
restore_expires_atNo
business_contact_idYes
restore_window_daysNo

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true, but the description adds substantial context: 30-day undo via restore_change, re-linking of visits/events/expenses/people, refusal if the record was edited, restore_id return, cost, and API key requirement. No contradiction with annotations.

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

Conciseness5/5

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

Front-loads the key information (Preview first, 30-day undo), then gives the exact safe invocation sequence, restore behavior, and cost/API requirement last. Every sentence supports correct or safe invocation.

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?

With an output schema present, return values need not be described. Annotations cover the destructive safety profile, and the description supplies the preview/restore contract, idempotency and acknowledgment requirements, re-linking behavior, cost, and auth requirement. Complete for this destructive tool.

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 57%, and the description explains the critical required parameters: preview_id from preview_destructive_change, restore_window_acknowledged must be true, request_id as idempotency key, plus place_id/business_contact_id as lookup keys. It does not explain the optional id parameter or the idempotency_key alias in depth, so it falls short of fully compensating.

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?

States a specific verb and resource: delete a saved place card (business_contacts) by place_id / business_contact_id, returning the deleted card. It clearly targets the place card rather than a sibling entity such as a place visit.

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

Usage Guidelines5/5

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

Explicitly mandates the preview-first workflow: call preview_destructive_change first, then after user confirmation call delete_place with preview_id, restore_window_acknowledged: true, and request_id. The sequence, conditions, and refusal of changed records are all stated.

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

delete_place_visitDelete Place VisitA
Destructive
Inspect

Preview first, 30-day undo. Delete one place_visits row (visit_id from get_place_visits or log_place_visit) without deleting its canonical place. Reviewed and reversible: first call preview_destructive_change({ tool: "delete_place_visit", arguments: { visit_id } }), which stores the exact change without applying it. After the user confirms, call delete_place_visit with preview_id, restore_window_acknowledged: true and request_id; the reviewed preview is applied exactly and a changed record is refused. Returns restore_id; restore_change({ restore_id }) undoes it for 30 days unless the record was edited since. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
visit_idYesUUID of a place_visits row: visit_id from get_place_visits or log_place_visit.
preview_idYespreview_id returned by preview_destructive_change for this tool.
request_idYesRequired idempotency key; retries return the original receipt.
idempotency_keyNoAlias for request_id.
restore_window_acknowledgedYesMust be true after reviewing the preview and its 30-day restore window.

Output Schema

ParametersJSON Schema
NameRequiredDescription
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
deletedYesDeleted place visit row.
visit_idYes
preview_idNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
restore_idNoPass to restore_change to undo within restore_window_days.
reversibleNo
place_visit_idYes
idempotent_replayNo
restore_expires_atNo
restore_window_daysNo

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true, but the description adds substantial context beyond them: a 30-day reversible undo window, the preview-then-apply contract, refusal if the record changed since preview, restore_id return, idempotency, and the $0.10 cost plus API-key requirement.

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 'Preview first, 30-day undo,' and every sentence carries operational weight. It is dense and packs cost/parenthetical detail, but no sentence is filler; slightly more compression could help.

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 destructive, multi-step tool this is complete: it covers the preview gate, confirmation flow, reversibility window, and even names the return value, despite an output schema existing. Nothing needed to invoke it correctly is missing.

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 100%, so each parameter is already documented. The description goes beyond that by explaining how the parameters interlock in the workflow (preview_id comes from preview_destructive_change, restore_window_acknowledged must be true, request_id ties to retries), adding real meaning over the schema alone.

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?

States a specific verb (delete) and resource (one place_visits row) and immediately disambiguates from the sibling delete_place with 'without deleting its canonical place'. An agent can distinguish it from delete_place and delete_person without opening a schema.

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

Usage Guidelines5/5

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

Lays out an explicit when/when-not workflow: first call preview_destructive_change, then after user confirmation call this tool with preview_id. It names the exact alternative tools (preview_destructive_change, restore_change) and the conditions that select them, leaving nothing to inference.

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

dismiss_clarificationDismiss ClarificationBInspect

Dismiss a pending entity clarification (not_person, etc.). ($0.05; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
reasonNo
request_idNoClient idempotency key (retries return original result).
idempotency_keyNoAlias for request_id.
clarification_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
messageNo
dismissedNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare this is a mutation (readOnlyHint=false) that is non-destructive and not open-world. The description adds genuinely useful operational context — the $0.05 cost and API key requirement — but says nothing about whether a dismissal is reversible, what happens to the underlying entity record, or whether the pending item can be restored.

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

Conciseness5/5

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

One sentence with the action front-loaded and cost/auth constraints tucked into a trailing parenthetical. Nothing wasted, nothing buried.

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

Completeness3/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, and the cost/auth note covers operations. Still missing is the consequence of dismissal (irreversibility, effect on the entity) and any routing guidance among the three clarification-related siblings, which leaves the definition thin for a paid mutation tool.

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

Parameters2/5

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

Schema coverage is only 50%: request_id and idempotency_key are documented in the schema, but clarification_id (the sole required param) and reason are bare. The description mentions clarification types but does not explain what clarification_id references or what reason is used for, so it fails to compensate for the coverage gap.

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

Purpose4/5

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

States a specific verb and resource ('Dismiss a pending entity clarification') and gives a concrete example of the clarification type ('not_person, etc.'). It is distinguishable from resolve_clarification and bulk_dismiss_clarifications by implication, but never names those siblings or draws the boundary explicitly.

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

Usage Guidelines2/5

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

Only the word 'pending' hints at when this applies. There is no guidance on when to dismiss rather than resolve a clarification, no mention of bulk_dismiss_clarifications for multiple items, and no stated preconditions beyond an API key.

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

enrich_place_from_googleEnrich Place from GoogleAInspect

Optional Google Places fill for a saved place card (hours/address/phone/website). Defaults to fill_empty_only — does not overwrite agent-supplied fields. Returns a clear not_configured capability error if GOOGLE_PLACES_API_KEY (or GOOGLE_MAPS_API_KEY) is missing. ($0.15; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
place_idNo
request_idNoClient idempotency key (retries return original result).
fill_empty_onlyNo
idempotency_keyNoAlias for request_id.
business_contact_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
codeNoCapability or enrich outcome (not_configured, no_match, …).
placeNoSaved place card.
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
messageNo
enrichedNo
place_idNo
capabilityNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
applied_fieldsNo
business_contact_idNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations declare openWorldHint=true and destructiveHint=false, which the description reinforces with the concrete default (fill_empty_only, does not overwrite agent-supplied fields) — a real behavioral guarantee beyond the annotation. It also discloses the not_configured failure mode when GOOGLE_PLACES_API_KEY/GOOGLE_MAPS_API_KEY is absent and a $0.15 cost, though it never says what happens when fill_empty_only is set false (i.e., whether existing values are overwritten).

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?

Three tightly packed sentences, front-loaded with the core action and default behavior before the failure mode and cost. The parenthetical field list and API-key aliases add density but each element carries information an agent needs.

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

Completeness4/5

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

With an output schema present, return values need no explanation, and the description still covers the default write policy, the external-dependency failure mode, and cost. The main gap is the behavior under fill_empty_only=false and role of business_contact_id, but overall it is sufficient to invoke the tool correctly.

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

Parameters3/5

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

Schema description coverage is only 40% across 5 parameters, so the description must compensate. It does explain the important fill_empty_only flag (default and non-overwrite semantics) that the schema leaves undocumented, but place_id, business_contact_id, and the idempotency alias pair receive no additional meaning from the description.

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

Purpose4/5

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

Names a specific verb (enrich/fill) and resource (saved place card) and enumerates the fields it populates (hours/address/phone/website), so the agent knows exactly what the tool produces. It does not explicitly name a sibling like update_place or create_place to route against, so the differentiation from those tools is inferred rather than stated.

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

Usage Guidelines3/5

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

"Optional Google Places fill" signals when the tool is appropriate (supplementing an existing place card with external data), and the default fill_empty_only implies the safe path. However, no alternative tool is named and there is no explicit when-not guidance, leaving the agent to infer when a manual update_place is preferable.

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

explain_factExplain FactA
Read-only
Inspect

Return evidence/provenance for a claim: polaris_learned_facts, life_events / life_event_relationships when present, then memories. Use when the agent must cite why it believes something — do not invent sources. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
factNoAlias for query
limitNoMax evidence rows 1–20, default 8
queryYesFact or phrase to explain

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
queryYes
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
messageNo
evidenceYes
inspect_noteNoHow to cite: link each record with its inspect_url, never a link built from an id; which record types here have no Dayze page.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already establish this is a safe read (readOnlyHint=true, destructiveHint=false), so the description adds value beyond them: an explicit source precedence order, a cost figure ($0.10), an auth requirement (API key), and the anti-fabrication constraint. That is meaningful disclosure for a tool whose annotations only cover safety.

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?

The purpose and source order are front-loaded, followed by the usage clause and cost/auth note in parentheses. It is dense but every clause carries information; the only minor cost is that the source listing is tightly packed.

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

Completeness4/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 shape need not be described. Combined with the usage condition, auth requirement, cost, and source precedence, the description covers what an agent needs to invoke it correctly; the main residual gap is no explicit guidance on when to prefer a sibling retrieval tool instead.

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

Parameters3/5

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

Schema description coverage is 100%, so query, fact (alias), and limit (1–20, default 8) are fully documented in the schema itself. The description adds nothing about parameter behavior or the query/fact aliasing, so the baseline 3 applies.

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

Purpose4/5

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

The description states a specific verb and resource ('Return evidence/provenance for a claim') and even enumerates the source hierarchy it walks (polaris_learned_facts, life_events/life_event_relationships, memories), which makes it easy to distinguish from plain retrieval tools like get_memories. It stops short of naming a sibling tool to contrast against, so it is strong but not maximally differentiated.

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?

'Use when the agent must cite why it believes something — do not invent sources' gives an explicit when-to-use condition and a behavioral prohibition. It does not name an alternative tool or state when not to use it, so it lacks the exclusion clause that would push it to a 5.

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

find_identity_candidatesFind Identity CandidatesA
Read-only
Inspect

Compact identity resolution candidates by person_id or query (alias/name/payment signals). Prefer over bulk get_people. ($0.05; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryNo
person_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
candidatesYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds meaningful behavioral context beyond the annotations: the result is 'compact' candidates, there is a $0.05 cost, and an API key is required. These details help an agent anticipate side effects and requirements.

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

Conciseness5/5

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

The description is a compact two-sentence definition with no filler. The primary action and scope are front-loaded, and the routing hint, cost, and auth requirement are each given in clearly minimal phrasing.

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

Completeness4/5

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

With an output schema present, return-value documentation is covered, and annotations cover the safety profile. The description adds cost, auth, and a sibling preference. The only completeness gap is the undefined limit parameter, but overall the agent has enough context to invoke the tool correctly.

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 description coverage is 0%, so the description must compensate. It explains that person_id is a direct lookup key and that query can include alias/name/payment signals, giving meaning to two of the three parameters. The limit parameter is left unexplained, which is the only gap.

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?

The description clearly states the operation: finding compact identity resolution candidates by person_id or query, and enumerates the query signals (alias/name/payment signals). It explicitly distinguishes itself from the bulk get_people sibling, which is exactly the kind of differentiation an agent needs.

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?

The description gives direct routing guidance: 'Prefer over bulk get_people.' It also identifies the two input modes (person_id or query), making the intended use context reasonably clear. It does not exhaustively contrast with related search/resolve tools, but the explicit sibling preference is strong guidance.

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

get_assetGet AssetA
Read-only
Inspect

Fetch one asset by asset_id with signed_url for download/processing. ($0.05; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
asset_idYes
include_signed_urlNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
assetNo
countYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already signal read-only safety, and the description adds meaningful behavioral context: the operation costs $0.05 and requires an API key, which is beyond the structured annotations. It also discloses that the output can include a signed_url for download/processing, clarifying a key behavioral detail not present in the schema. No contradiction with the annotations.

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

Conciseness5/5

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

The description is a compact two-sentence definition with no filler. The primary action and resource are front-loaded, and the cost/api-key caveat is appended economically without disrupting the core message.

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

Completeness4/5

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

Given the low parameter count and existing output schema, the description provides the key context needed to call the tool: what it returns, the lookup method, cost, and authentication requirement. It falls slightly short only because it does not clarify the include_signed_url parameter's behavior, which is important for accurate invocation.

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

Parameters2/5

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

With schema description coverage at 0%, the description must carry parameter meaning, but it only explicitly mentions asset_id and the concept of a signed_url. The optional boolean include_signed_url is not named or explained, leaving its effect ambiguous. This is a notable gap for an otherwise simple two-parameter tool.

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?

The description uses a specific verb ('Fetch'), a clear resource ('one asset'), and the lookup key ('asset_id'), making the tool's core purpose unambiguous. It also states the return context ('signed_url for download/processing'), distinguishing it from sibling list-type tools like get_entity_assets or update-oriented tools like update_asset.

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?

The phrase 'Fetch one asset by asset_id' gives a clear and direct when-to-use scenario: retrieve a single asset when you have its ID. It also adds practical usage conditions, noting the $0.05 cost and API key requirement. However, it does not explicitly name alternatives or exclusion cases, such as when to use get_entity_assets instead.

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

get_berklee_relationship_mapBerklee Relationship MapA
Read-only
Inspect

Read-only owner view of the 2012–2015 Berklee email archive: per-person first/last cited contact, imported message volume, explicitly stored courses/projects, and email-anchor versus name-only provenance. Optional exact course, term, and project filters. Every cited event carries an inspect_url. Volume is not closeness; silence is not interpreted. Identity-document, health, and legal records are excluded. ($0.15; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
termNoExact term facet, e.g. Fall 2014.
courseNoExact stored course facet.
projectNoExact stored project facet.

Output Schema

ParametersJSON Schema
NameRequiredDescription
facetsYesAvailable course, term, and project filter values.
peopleYes
periodYesFixed college archive window, 2012-01-01 through 2015-12-31.
accountYesThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
caveatsYes
filtersYesExact course, term, and project filters applied.
truncatedYes
inspect_noteNoHow to cite: link each record with its inspect_url, never a link built from an id; which record types here have no Dayze page.
record_countYes
active_correction_countYes
correction_history_countYes
correction_history_availableYes
excluded_sensitive_record_countYes

TDQS

A3.7/5.0
Behavior5/5

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

Goes well beyond the readOnlyHint/openWorldHint/destructiveHint annotations: it discloses cost ($0.15), an API key requirement, explicit data exclusions (identity-document, health, legal records), and interpretation caveats ('volume is not closeness; silence is not interpreted') plus per-event inspect_url provenance. This is exactly the extra context annotations cannot carry.

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?

A single dense but front-loaded paragraph; the core purpose leads, then filters, provenance, caveats, exclusions, and pricing. Every sentence carries information, though the packing makes it slightly heavy to scan.

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

Completeness4/5

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

With an output schema present, return values need not be explained, and the description still covers filters, provenance model, exclusions, cost, and auth. Complete enough to call correctly; only sibling differentiation is missing.

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

Parameters3/5

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

Schema description coverage is 100% and each param is already documented as an 'exact ... facet', so the description adds little beyond confirming they are optional filters. Baseline 3 is appropriate when the schema does the heavy lifting.

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

Purpose4/5

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

States a specific resource and scope: a read-only owner view of the 2012–2015 Berklee email archive, enumerating the exact facets returned (first/last cited contact, message volume, stored courses/projects, provenance). The purpose is unmistakable, but it never names or distinguishes itself from siblings like get_person_connections or get_person_neighborhood, so an agent cannot route between them from the text alone.

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

Usage Guidelines2/5

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

It notes that course/term/project filters are optional but gives no when-to-use guidance, no prerequisites, and no comparison to alternative relationship/person-graph tools. The agent must infer that this is a Berklee-archive-specific view rather than the general people graph.

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

get_cities_visitedCities VisitedB
Read-only
Inspect

Canonical cities from confirmed/completed trips only (excludes soft pins / status=possible). Inference requires category=travel + structured location — not todo titles. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
toNo
fromNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
citiesYes

TDQS

B3.4/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, non-destructive, closed-world), so the bar is lower; the description still adds real behavioral context by disclosing cost ($0.10), an API-key requirement, and the trip-status filter that governs what is returned.

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?

Three tightly packed clauses with no filler; the scope constraint is front-loaded and the operational caveats (cost, auth) trail appropriately. Dense but every clause carries information.

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

Completeness3/5

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

With an output schema present, return values need not be described, and the inclusion rules plus cost/auth caveats are well covered. The gap is the two undocumented parameters, which leave the range arguments entirely unexplained.

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

Parameters2/5

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

Schema description coverage is 0% for the two parameters (to, from) and the description never mentions them or their expected format, so an agent gets no added meaning about the range semantics beyond the bare names.

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

Purpose4/5

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

The description states a specific resource (canonical cities) and its derivation scope (confirmed/completed trips only), which lets an agent distinguish it from the coarser get_countries_visited. It never says plainly that it returns a list, but the resource and scope are unambiguous.

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

Usage Guidelines3/5

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

It gives inclusion/exclusion rules ('excludes soft pins / status=possible') and a data-derivation precondition (category=travel + structured location), which implies when the tool is populated. However it never names an alternative such as get_countries_visited or get_travel_history, nor states when to prefer this over them.

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

get_conditionsGet ConditionsA
Read-only
Inspect

Private health conditions owned by the user, for subject_type self (default) or an explicitly resolved Dayze Contacts person_id. A person condition never appears in the user's self list. status: open (default), suspected, active, improving, resolved or all. condition_id returns recent check-ins and care items for the same subject. ($0.05; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNoopen (default: every condition not resolved), one status, or all.
person_idNoOwned contact id; required for person.
condition_idNoOne condition, with its recent check-ins and care items.
subject_typeNoself, or person with person_id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
statusNoThe filter applied: open, a status, or all.
conditionNoA private condition with explicit subject_type/person_id, source and confirmation_status.
person_idNo
conditionsNo
subject_typeNoself or person.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, and destructiveHint, so safety is covered. The description adds valuable context beyond that: the privacy boundary ('Private health conditions'), the isolation guarantee between self and person lists, the default status behavior, and the cost/auth requirement ($0.05; API key required). It doesn't cover pagination or return shape, but that is a minor gap given the existing annotations.

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?

The description is dense but front-loaded, starting with the resource and scope. Every sentence carries information: scoping rule, status defaults, condition_id behavior, and cost/auth. It is a bit compressed, which slightly hurts readability, but there is no wasted filler.

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

Completeness4/5

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

With an output schema present, the description doesn't need to explain return values. It covers the essential operational context: subject scoping, default status, the condition_id drill-down, and billing/auth. An agent can call this correctly. The only minor gap is pagination behavior for list results, which is not mentioned.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all four parameters including enums and defaults. The description reinforces the default for status and the subject_type/person_id pairing, which is useful but largely redundant. Baseline 3 is appropriate when the schema does the heavy lifting.

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

Purpose4/5

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

States a specific verb+resource: 'Private health conditions owned by the user'. It explains the subject scoping (self vs. person) and distinguishes the two lists ('A person condition never appears in the user's self list'). It doesn't name its sibling get_health_trends or get_sleep_summary explicitly, so it doesn't reach the highest level of sibling differentiation, but the scoping rule is a strong differentiator.

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?

Gives clear context: use for the user's own conditions by default, or for a Dayze Contacts person when explicitly resolved with person_id. It also explains that condition_id returns recent check-ins and care items for the same subject, which effectively tells an agent when to use this tool vs. a broader list. No explicit exclusion of an alternative sibling is given, so not a 5.

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

get_context_packLife Context PackA
Read-only
Inspect

Life Context pack for one Dayze account (account names it — with more than one Dayze connection, say which account you are answering from): identity, pulse, people, next actions, memories, quizzes, recent consented place visits, and traced facts. Use include_*=false to omit default sections; current location and money stay opt-in. Spec: https://dayze.com/docs/life-context Records carry inspect_url (their Dayze page): cite with it, never build a link from an id; a record without one has no page (inspect_note says which). ($0.20; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoAlias for query.
atNoISO date-time to answer as of (default now), e.g. 2026-09-26T09:00:00+08:00.
focusNoOptional focus hint echoed in the pack (e.g. places, travel, people)
queryNoQuestion that guides facts and memories.
timezoneNoIANA time zone for today (default: where the user is now, else their home zone).
include_moneyNoInclude the private cashflow summary
include_tripsNoInclude recent/upcoming trips from completed travel history
include_placesNoInclude recent canonical places.
include_locationNoInclude city/country label; never returns a precise address
include_memoriesNoInclude recent memories.
include_place_visitsNoInclude recent venue visits; never a GPS trail
include_quiz_resultsNoInclude latest quiz results.
include_relationshipsNoInclude people and relationship context.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNo
errorNoPresent when life state is unavailable.
factsNoQuestion-aware personal facts, in selection order.
focusNo
pulseYes
queryNo
traceNoWhich facts were supplied and why. fact_ids equals facts[].id.
tripsNoRecent trips when include_trips=true.
placesNoRecent canonical places when include_places=true.
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
omittedNoFacts left out, counted by reason.
partialNo
identityYes
memoriesNo
protocolYesLife Context metadata.
sectionsNoPer-section ok/error status for partial packs.
redactionNopii redacted|raw; sensitive_topics the caller may receive; counts of sensitive trackers / memories withheld.
whats_nextYes
known_factsNo
who_mattersNo
generated_atNo
inspect_noteNoHow to cite: link each record with its inspect_url, never a link built from an id; which record types here have no Dayze page.
place_visitsNo
preferred_toolYes

TDQS

A4/5.0
Behavior5/5

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

With readOnlyHint/destructiveHint already covering safety, the description still adds a lot: a $0.20 cost, an API key requirement, explicit privacy framing ('never returns a precise address', 'never a GPS trail'), and citation rules for returned records ('cite with inspect_url, never build a link from an id; a record without one has no page (inspect_note says which)'). These are behavioral facts an agent could not get from annotations or schema.

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?

It is dense but front-loaded: content inventory first, then opt-out mechanics, then citation rules, with the spec link and price at the end. Every sentence carries information, though the run-on enumeration and parentheticals make it heavier than ideal.

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

Completeness4/5

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

For a 13-parameter composite tool with an output schema present, the description covers account scoping, section opt-outs, privacy defaults, pricing, and even the interpretation of returned inspect_url/inspect_note fields. The one notable omission is routing relative to get_life_context and the notable_* family.

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 100%, so the baseline is 3, but the description adds cross-parameter semantics the schema cannot: which sections are default-on versus opt-in, that 'current location and money stay opt-in', and that a given section is suppressed with include_*=false. The account-selection note also gives context for the `account` parameter that the schema does not.

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

Purpose4/5

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

The description gives a specific verb+resource ('Life Context pack for one Dayze account') and enumerates exactly what the pack contains: identity, pulse, people, next actions, memories, quizzes, place visits, traced facts. It is clearly a broad read-only aggregate rather than a single-domain getter. It does not, however, explicitly distinguish itself from the close siblings get_life_context, notable_pack, or notable_profile, which an agent must otherwise infer from names alone.

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

Usage Guidelines3/5

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

It gives real operational guidance for account selection ('with more than one Dayze connection, say which account you are answering from') and for tuning output ('Use include_*=false to omit default sections; current location and money stay opt-in'). What is missing is when to prefer this composite pack over get_life_context or the notable_* siblings — the usage guidance is param-tuning rather than tool-selection.

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

get_countries_visitedCountries VisitedB
Read-only
Inspect

Canonical countries from completed trips (not other people travel). ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
toNo
fromNo
include_residenceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
countriesYes

TDQS

B3.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds valuable context beyond that: the data is canonical, derives from completed trips, excludes other people's travel, costs $0.10 per call, and requires an API key. No contradiction exists.

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?

The description is extremely compact and front-loaded, with the core meaning first and the cost/auth note parenthesized. All words carry value, though the phrase 'not other people travel' is grammatically awkward and 'canonical' is undefined. Overall it is efficient, not bloated.

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

Completeness2/5

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

With three optional and completely undocumented parameters, the description does not give the agent enough to call the tool correctly. The output schema and read-only annotations help, but the missing parameter semantics and the lack of explicit date-range/format guidance make this under-specified for a tool with multiple optional inputs.

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

Parameters1/5

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

Schema description coverage is 0%, so the description must compensate for the undocumented 'to', 'from', and 'include_residence' parameters. It does not mention or explain any of them. The agent is left to guess whether 'from'/'to' are dates, ids, or something else, and what residence inclusion means.

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

Purpose4/5

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

The description clearly identifies the resource (countries) and the source scope (completed trips), and adds a distinguishing 'not other people travel' note. It does not use an explicit verb, but 'canonical countries from completed trips' is unambiguous enough for an agent to infer a retrieval operation.

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

Usage Guidelines3/5

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

The description implies when to use the tool (when the ask concerns canonical countries visited on completed trips, not cities or individual trips) but does not name any alternative tool or state explicit exclusions. Sibling tools like get_cities_visited or get_travel_history are present but not referenced, leaving routing to the agent's inference.

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

get_current_statesCurrent StatesC
Read-only
Inspect

Permitted assertion states for a person (flagged life-graph; off by default). ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
known_atNo
valid_atNo
people_idNoCRM people.id UUID
person_idNoAlias for people_id
predicatesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
statesNo
enabledNo

TDQS

C2.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds the cost ($0.10) and API key requirement, which are useful operational constraints, but says nothing about what 'states' are, how they are filtered, or output behavior beyond what the output schema likely covers.

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?

The description is a single concise sentence that front-loads the resource and includes cost/auth details. It is efficient, though the parenthetical may be too terse to be useful.

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

Completeness2/5

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

With an output schema present, return values need not be explained, but the description fails to explain the core concept of 'permitted assertion states' or how the temporal parameters affect results. For a tool with five parameters and 40% schema coverage, the description is incomplete.

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

Parameters2/5

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

Schema description coverage is only 40%, and the description provides no information about the five parameters (known_at, valid_at, people_id/person_id alias, predicates). Two parameters have schema descriptions (people_id and person_id alias), but the temporal and predicate parameters are undocumented, and the description does not compensate.

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

Purpose3/5

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

The description states the resource ('assertion states for a person') and implies a retrieval action, but the verb is not explicit and the phrase 'flagged life-graph; off by default' is ambiguous. It is distinguishable from siblings like get_life_graph or get_person_links only by the specialized 'states' concept, which is not clearly defined.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives such as get_life_graph, get_context_pack, or get_life_context. The parenthetical about being off by default suggests limited availability but does not give actionable conditions for invocation.

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

get_entity_assetsGet Entity AssetsA
Read-only
Inspect

List assets linked to an entity (role, signed_url, versions). entity_type inventory_item → inventory. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
entity_idYes
asset_typeNo
entity_typeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
assetsNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare read-only and non-destructive behavior, and the description's 'List' wording is consistent. It goes beyond annotations by disclosing that an API key is required and that the call costs $0.10, which is operationally useful for an agent deciding whether to call it.

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

Conciseness5/5

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

The description is two compact sentences with no filler; the main verb is front-loaded and the cost/auth constraint is efficiently appended. The arrow notation is terse but packs useful parameter semantics into very few words.

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

Completeness3/5

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

Cost, authentication, read-only intent, and some asset-type scope are covered, and an output schema exists so return format need not be described. However, with three un-described parameters, no enums, and many sibling tools, the description leaves enough ambiguity around entity_type values and the inventory mapping that invocation still requires inference.

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

Parameters3/5

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

With 0% schema description coverage, the description must explain parameters, and it partially does: the parenthetical likely enumerates asset_type values and 'entity_type inventory_item → inventory' adds domain mapping. But it leaves entity_id implicit and does not enumerate valid entity_type values, so the compensation for low schema coverage is incomplete.

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

Purpose4/5

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

The description clearly identifies the action ('List assets linked to an entity') and gives concrete asset-type examples (role, signed_url, versions), so an agent can tell what the tool returns. It does not explicitly contrast this with get_asset or get_inventory, so it misses the highest sibling-differentiation bar.

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

Usage Guidelines3/5

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

The intended use is implied by 'List assets linked to an entity,' and the 'entity_type inventory_item → inventory' hint is context-specific. However, there is no explicit guidance about when to choose this over get_asset/get_inventory or when it should not be used, which is noticeable given the large sibling list.

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

get_event_fact_sourceGet Event Fact SourceA
Read-only
Inspect

Inspect an event fact from a saved Dayze answer before correcting it. Requires calendar read and travel details access. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
message_idYesSaved assistant answer message UUID.
source_refYesevents:<id> or event_people:<id> from that answer.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
factNo
recordNo
statusNo
historyNo
evidenceNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare this is a safe read (readOnlyHint=true, destructiveHint=false, openWorldHint=false). The description adds value beyond them with auth scope (calendar read, travel details), a cost ($0.10), and an API-key requirement, which an agent needs before invoking.

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

Conciseness5/5

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

A single front-loaded sentence plus a compact prerequisite/cost clause. Every element earns its place, with the action and scope stated before the constraint.

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

Completeness4/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 explained. The description covers purpose, prerequisites, and cost, leaving little an agent needs to call it correctly, though it could tie more explicitly to the correction sibling.

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

Parameters3/5

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

Schema coverage is 100% and both parameters are fully described in the schema, so the baseline is 3. The description adds no syntax or format detail for message_id or source_ref beyond what the schema already provides.

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

Purpose4/5

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

States a specific verb (Inspect) and resource (an event fact from a saved Dayze answer), which cleanly separates it from apply_event_fact_correction and explain_fact. It does not name a sibling explicitly, so it lands just short of a 5.

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?

'before correcting it' clearly situates the tool in the correction workflow, implying apply_event_fact_correction as the follow-on. Prerequisites ('Requires calendar read and travel details access') add useful context, though no explicit alternative is named.

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

get_eventsCalendar EventsA
Read-only
Inspect

Authenticated user's calendar events. Prefer explicit from/to (YYYY-MM-DD). Shortcuts: today|week|month|year (calendar year)|decade. Browsing noise excluded by default. Records carry inspect_url (their Dayze page): cite with it, never build a link from an id; a record without one has no page (inspect_note says which). ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
atNoISO date-time to answer as of (default now), e.g. 2026-09-26T09:00:00+08:00.
toNoInclusive YYYY-MM-DD
fromNoInclusive YYYY-MM-DD (preferred over range)
kindsNoFilter by event_kind: life_event, calendar_block, todo, goal, travel_segment, food_log, health_record, transaction, media_log, work, family, personal. Alias "food" (also meal/drink/snack) matches the displayed Food category: food_log rows plus Meal/Drink/Snack life_events. total/has_more count only matching rows.
limitNo
queryNoLiteral substring in title, description or location.
rangeNo
cursorNo
offsetNoSkip this many matching rows of a new snapshot (a cursor carries its own).
date_toNoAlias for to.
timezoneNoIANA time zone for today (default: where the user is now, else their home zone).
date_fromNoAlias for from.
redact_piiNotrue: redact contact details, card and account numbers and secrets in description, location and scoreboard, even where this connection may see them. Never unredacts: without travel_secrets:read they are always redacted.
event_kindsNoAlias for kinds.
include_archivedNo
include_browsingNoInclude extension "Browsed domain · Xm" auto-events (default false)
include_calendar_blocksNoInclude Focus Time / calendar_block rows (default false)

Output Schema

ParametersJSON Schema
NameRequiredDescription
toYesInclusive YYYY-MM-DD upper bound; null for all records.
capYes
fromYesInclusive YYYY-MM-DD lower bound; null for all records.
rangeYes
totalNo
eventsYes
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
has_moreNo
orderingNo
timezoneYesResolved timezone used for this event window and as fallback for rows without one.
truncatedYes
expires_atNo
next_cursorNo
server_timeNo
snapshot_atNo
snapshot_idNo
inspect_noteNoHow to cite: link each record with its inspect_url, never a link built from an id; which record types here have no Dayze page.

TDQS

A4/5.0
Behavior5/5

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

Goes well beyond the readOnly/openWorld annotations: it discloses a $0.10 cost and API-key requirement, that browsing auto-events are excluded by default, and a citation contract (records carry inspect_url, cite with it, never synthesize a link from an id; a record lacking one has no page and inspect_note says which). That is materially useful behavior an agent cannot infer from structured fields.

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 resource, then range guidance, then the output citation rule, then cost/auth. Dense and parenthetical-heavy, but nearly every clause carries information; only the citation policy sentence is long enough to slow scanning.

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

Completeness4/5

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

With 17 params, an output schema, and rich annotations, the description covers the gaps that matter: cost, auth, default filtering, date-shortcut semantics, and how to handle returned inspect_url values. Pagination behavior (cursor vs offset snapshot) is left entirely to the schema.

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 76% and the description supplements it: from/to preferred over range, the today|week|month|year|decade shortcut vocabulary, and the default exclusion of browsing noise (include_browsing). It does not add meaning for limit, cursor, offset, include_archived, or query, which the schema already covers.

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

Purpose4/5

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

Opens with a specific resource and scope: "Authenticated user's calendar events." An agent can tell it apart from get_interactions, get_sleep, or get_transactions without opening a schema, though the retrieval verb itself is implied rather than stated.

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

Usage Guidelines3/5

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

"Prefer explicit from/to" and the shortcut list give parameter-level guidance, and default exclusions hint at scope, but the description never says when to reach for this tool over siblings such as search, get_life_context, or get_context_pack. Usage is implied rather than routed.

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

get_expensesExpense SummaryA
Read-only
Inspect

Authenticated user cashflow summary: spend, income, net, and top spend categories. Requires OAuth or a supported scoped credential. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
periodNoSummary window. Default month.

Output Schema

ParametersJSON Schema
NameRequiredDescription
netNo
usdNoTotals converted to USD (approximate FX).
countNo
spendNo
incomeNo
periodYes
currencyNo
by_currencyNo
period_daysNo
multi_currencyNo
top_categoriesNo

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered by structured data. The description adds genuinely new context: the credential requirement and the $0.10 cost. It doesn't disclose pagination, default period, or result ordering, so it stops short of 5.

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

Conciseness5/5

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

Two terse sentences, front-loaded with the resource and its output contents, followed by the auth/cost constraint. No filler, no repetition of the title.

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

Completeness4/5

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

For a single-parameter, read-only summary tool with an output schema (so return values need no explanation), the description covers what is returned, auth, and cost. Only the period default/behavior at the tool level is left implicit, which the schema mostly handles.

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

Parameters3/5

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

Schema description coverage is 100% for the single 'period' parameter (enum month/year, default month documented in schema), so the description cannot and need not add much. Baseline 3 is appropriate; nothing in the description clarifies the parameter beyond the schema.

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

Purpose4/5

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

Names a specific verb+resource ('cashflow summary') and enumerates the content it returns: spend, income, net, top spend categories. This clearly distinguishes it from sibling reads like get_transactions, get_money_between_people, and get_inventory_valuations. However it doesn't explicitly name which sibling to prefer, so it falls short of a 5.

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

Usage Guidelines2/5

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

States the auth prerequisite ('Requires OAuth or a supported scoped credential') but gives no when-to-use vs when-not guidance relative to alternatives such as get_transactions or search_transactions. An agent must infer the aggregation-vs-raw-records distinction on its own.

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

get_fundraising_candidatesGet Fundraising CandidatesA
Read-only
Inspect

Structured fundraising CRM: source-backed roles, sector and stage fit, pipeline and existing graph intro paths. Use for who to approach for a round. Returns canonical person IDs. ($0.05; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
viewNo
stageNo
sectorNo
statusNo
strengthNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
candidatesNo

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false. The description adds useful non-annotation context about cost, authentication, and return type: '$0.05; API key required' and 'Returns canonical person IDs'.

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?

The description is short and front-loaded, starting with the tool's domain and purpose. The cost/auth note is compact. It is efficient, though the sentence fragments make it slightly less polished than a maximally structured definition.

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

Completeness3/5

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

Annotations cover safety and an output schema exists, so the description does not need to explain return values. However, for a tool with 5 optional filter parameters and zero schema descriptions, the description is only partially complete: it gives purpose and one use case but leaves parameter usage largely unexplained.

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

Parameters2/5

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

With 5 parameters and 0% schema description coverage, the description should compensate but largely does not. It hints at concepts like 'sector and stage fit', 'pipeline', and 'existing graph intro paths', but never explains view, status, strength, or how the filters map to parameters or enums.

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

Purpose4/5

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

The description identifies a specific domain and output: 'Structured fundraising CRM' returning 'canonical person IDs', with 'Use for who to approach for a round.' This is clear but does not explicitly differentiate from the large set of get_* sibling tools beyond the fundraising framing.

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?

It gives a clear use context: 'Use for who to approach for a round.' It does not mention when not to use it or point to alternative tools, so it falls short of the 5-level routing guidance.

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

get_interactionsLife Update InteractionsA
Read-only
Inspect

Bounded graph read over life_updates (PHI-54/61): traverse interaction → person/event/expense/place with source/confidence on every hop. When life_update edges are missing, projects hops from CRM interactions, event_people, and expense person FKs (PHI-100). Prefer for “who was I with at X?”, “when am I meeting Y next?”, “how much at Z?”. 93-day default window. Pass person_name, place_query, or ids. Records carry inspect_url (their Dayze page): cite with it, never build a link from an id; a record without one has no page (inspect_note says which). ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoInclusive YYYY-MM-DD
fromNoInclusive YYYY-MM-DD
limitNoMax 1–50, default 25
event_idNo
place_idNo
person_idNo
expense_idNo
person_nameNo
place_queryNoVenue/merchant substring

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNo
errorNo
windowNoBounded from/to lookback window.
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
no_dataNo
degradedNo
truncatedNo
inspect_noteNoHow to cite: link each record with its inspect_url, never a link built from an id; which record types here have no Dayze page.
interactionsNo

TDQS

A4.3/5.0
Behavior5/5

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

With annotations already covering readOnly/non-destructive/closed-world, the description adds substantial extra context: a 93-day default window, fallback projection from CRM interactions/event_people/expense FKs, per-record inspect_url citation rules, cost ($0.10), and API-key requirement.

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?

Dense but front-loaded: the core purpose leads, then fallback behavior, then usage triggers, then operational constraints. Nearly every sentence carries information, though the parenthetical ticket references (PHI-54/61, PHI-100) are noise for an agent.

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

Completeness4/5

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

With an output schema present, return-value detail is unnecessary, and the description covers fallback behavior, citation rules, cost, and auth. Minor gap: it doesn't clarify how explicit from/to overrides the 93-day default or how the several id filters combine.

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

Parameters3/5

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

Schema description coverage is only 44% across 9 parameters, so the schema leaves gaps. The description adds the useful hint to pass person_name, place_query, or ids and mentions the 93-day default window, but does not explain the id parameters, limit semantics, or how from/to interact with the default window.

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?

States a specific verb and resource ('Bounded graph read over life_updates') and names the exact traversal path (interaction → person/event/expense/place). This clearly distinguishes it from siblings like get_life_graph and get_person_interactions.

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?

Gives explicit trigger questions ('who was I with at X?', 'when am I meeting Y next?', 'how much at Z?') and an edge-case fallback behavior for missing life_update edges. It does not name a sibling alternative or state when NOT to use it, so it falls short of a 5.

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

get_inventoryGet InventoryA
Read-only
Inspect

Browse the user's owned Inventory: filter by category, status or search text (name, brand, model, notes, reference number). Archived and no-longer-owned items only with include_archived. Items with specs carry capability_summary and state_freshness; each item has photo_count and cover_url. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo1-200, default 50
offsetNo
searchNoMatch name, brand, model, notes or reference number.
statusNo
sort_byNo
categoryNoe.g. electronics, watches, clothing
include_archivedNoInclude archived and no-longer-owned items.
include_sensitiveNoAPI keys only: include stored identifiers. Ignored for connectors without pii:read.

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
itemsNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare this a non-destructive read in a closed world, so the bar is lower; the description still adds useful operational context: archived/no-longer-owned items are excluded by default, spec-bearing items return capability_summary and state_freshness, and the call costs $0.10 with an API key. It does not cover pagination behavior.

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?

A single dense paragraph that front-loads the browse+filter purpose, then scope caveats, then return-field hints and cost/auth. Every clause carries information, though the return-field detail is partly redundant with the output schema.

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

Completeness4/5

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

With an output schema present, return values need not be re-explained, and the description still adds cost, auth, default-exclusion behavior, and filter semantics. Only pagination (limit/offset interaction) and include_sensitive handling are left implicit.

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

Parameters3/5

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

Schema coverage is 63%, and the description adds real meaning for search (which fields are matched) and restates include_archived's effect. However limit/offset/sort_by, the status enum values, and especially include_sensitive are left entirely to the schema, so the description only partially compensates for the coverage gap.

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

Purpose4/5

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

States a specific verb (browse) and resource (the user's owned Inventory) plus the three filter axes, so the agent knows this is a filtered list operation. It is distinguishable from get_inventory_item by its plural/browse framing, though it never names the very similar search_inventory sibling.

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

Usage Guidelines3/5

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

The filter conditions imply usage, but there is no explicit when-to-use/when-not guidance relative to search_inventory or get_inventory_item, which are the obvious alternatives in a sibling list of this size. The include_archived note hints at scope but is a parameter rule, not selection guidance.

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

get_inventory_itemGet Inventory ItemA
Read-only
Inspect

One owned Inventory item in full: specs and spec_template, state with state_freshness (current, recent or stale for each key; check with the user before relying on stale state), capability_summary (one line to plan from, e.g. "Can my computer run this?"), valuations, linked people and photos. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
inventory_idYesThe item id from add_inventory_item, get_inventory or search_inventory.

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemNoInventory item record. With specs: spec_template, specs, state (a timestamped snapshot), state_freshness and capability_summary.
assetsNo
peopleNo
valuationsNo
people_linksNo
capability_summaryNoOne line to plan from: the item, its stored specs, and its last observed state with its date.

TDQS

A4/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, non-destructive, closed-world), yet the description adds information not present in structured fields: a $0.10 cost, an API-key requirement, and how to interpret state_freshness including a caution about stale values. It does not describe caching, rate limits, or pagination, so it stops short of full transparency.

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?

A single front-loaded sentence that names the resource first and then enumerates contents, with cost/auth tacked on at the end so they are not buried. Dense but mostly waste-free; the parenthetical example question is slightly indulgent.

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 no prose explanation, and the description still covers cost, auth, and the freshness caveat an agent needs before acting. Nothing required to call this correctly is missing.

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

Parameters3/5

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

Only one parameter and schema coverage is 100%, so the schema already documents inventory_id and its origin tools. The description adds no parameter-level detail beyond that, which matches the baseline 3 when structured fields do the heavy lifting.

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?

States a specific verb and resource with explicit scope: 'One owned Inventory item in full', and enumerates the exact payload (specs, spec_template, state/state_freshness, capability_summary, valuations, people, photos). This clearly separates it from get_inventory (list), search_inventory (search), and update_inventory_item (mutation).

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

Usage Guidelines3/5

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

Usage is implied (single-item detail fetch by id supplied from add_inventory_item, get_inventory, or search_inventory in the schema). It offers one genuine conditional instruction — check with the user before relying on stale state — but never names an alternative tool or states when to prefer this over get_inventory or search_inventory.

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

get_inventory_valuationsGet Inventory ValuationsA
Read-only
Inspect

Chronological valuation history for one owned Inventory item. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
inventory_idYesThe item id from add_inventory_item, get_inventory or search_inventory.

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
valuationsNo
inventory_idNo

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=false, so safety is covered. The description adds genuinely new operational context: a $0.10 cost and an API-key requirement, which an agent needs before calling. It does not describe pagination or volume limits, keeping it from a 5.

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

Conciseness5/5

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

Two compact sentences, front-loaded with the purpose, followed by the cost/auth caveat. Every fragment carries information; nothing is redundant with the title.

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

Completeness4/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-value description is unnecessary, and the schema documents the sole parameter fully. The description supplies ordering, cost, and auth context, leaving only minor gaps like result limits or whether history can be empty.

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

Parameters3/5

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

Only one parameter and schema description coverage is 100%, with the schema already explaining the id comes from add_inventory_item, get_inventory, or search_inventory. The description adds 'owned' as a qualifier but no syntax or format detail, so baseline 3 is appropriate.

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

Purpose4/5

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

Specific verb+resource: returns chronological valuation history for a single owned inventory item. It clearly reads as a read-side counterpart to add_inventory_valuation and distinct from get_inventory/get_inventory_item. It stops short of explicitly naming the siblings it differs from, so a 4 rather than a 5.

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

Usage Guidelines3/5

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

Usage is implied by 'one owned Inventory item' – the caller must already have an item id, implying use after add_inventory_item/get_inventory/search_inventory. There is no explicit when-to-use-vs-alternative statement or exclusion (e.g., when to prefer this over get_inventory_item).

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

get_life_contextLife Context SnapshotA
Read-only
Inspect

Get a snapshot of the authenticated user's current life context (identity, today/upcoming events, pulse, trackers, plus a question-aware facts slice with trace). Relationships and memories are included by default; pass include_*=false to omit. social_edges is capped at the highest-confidence 40 — check social_edges_truncated / social_edges_total. Location is opt-in. Requires an authenticated Dayze account via OAuth; scoped API keys are also supported for direct clients. ($0.15; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoAlias for query.
atNoISO date-time to answer as of (default now), e.g. 2026-09-26T09:00:00+08:00.
queryNoOptional question. Drives the question-aware facts slice (family, names, dates, merchants) returned in facts/trace.
timezoneNoIANA time zone for today (default: where the user is now, else their home zone).
include_moneyNoInclude money facts in the question-aware facts slice (opt-in; the grant must allow financial details).
include_locationNoInclude city/country label; never returns a precise address
include_memoriesNoInclude recent memory summaries (default true; set false to omit)
include_relationshipsNoInclude inner-circle and relationship summaries (default true; set false to omit)

Output Schema

ParametersJSON Schema
NameRequiredDescription
factsNoQuestion-aware personal facts, in selection order.
traceNoWhich facts were supplied and why. fact_ids equals facts[].id.
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
omittedNoFacts left out, counted by reason.
partialNoTrue when the facts slice is incomplete; never read a missing fact as "none on file".
identityYesAccount identity and timezone.
sectionsNosections.harness: ok, or error (HARNESS_FAILED / HARNESS_DEGRADED with failed_sources) when facts may be missing.
redactionNopii redacted|raw; sensitive_topics the caller may receive; counts of sensitive trackers / memories withheld.
mood_scoreNo
energy_scoreNo
inner_circleNo
inspect_noteNoHow to cite: link each record with its inspect_url, never a link built from an id; which record types here have no Dayze page.
pulse_streakNo
social_edgesNo
today_eventsYes
active_trackersNo
recent_memoriesNo
upcoming_eventsYes
pending_responsesNo
social_edges_limitNoMax edges returned in social_edges.
social_edges_totalNoperson_connections rows on file; null when unknown.
relationship_healthNo
social_edges_truncatedNoTrue when more edges exist than social_edges lists.
pending_responses_countNo

TDQS

A3.9/5.0
Behavior5/5

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

Goes well beyond the readOnlyHint/destructiveHint annotations: it discloses a hard cap on social_edges with truncation signals to check (social_edges_truncated / social_edges_total), states that location is opt-in, and names the auth requirements (OAuth-authenticated account, scoped API key support) plus a price point ($0.15). These are exactly the operational facts an agent cannot recover from annotations or schema.

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-loads the core purpose before the parenthetical detail, and each sentence carries information (contents, defaults, cap, auth, cost). It is dense with parentheticals and a trailing pricing/auth clause that slightly blurs the front-loading, but nothing is truly redundant for an 8-parameter bundle tool.

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

Completeness4/5

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

With an output schema present, the description correctly avoids explaining return values and instead covers what an agent still needs: scope, defaults, truncation handling, auth, and cost. The only gap is the absence of any comparison to neighboring snapshot tools, which matters given how many siblings exist.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents every parameter, including defaults and the money/location permission notes. The description's statements about defaults and 'include_*=false' largely restate the schema's own default values, adding only a small amount of framing. Baseline 3 is appropriate when the schema does the heavy lifting.

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

Purpose4/5

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

States a specific verb ('Get') and resource ('a snapshot of the authenticated user's current life context') and enumerates the bundle contents (identity, events, pulse, trackers, question-aware facts slice). An agent can tell it is a broad current-state bundle rather than a single-entity lookup. It does not explicitly name the overlapping siblings (get_context_pack, notable_pack, get_current_states), so sibling differentiation is left implicit.

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

Usage Guidelines3/5

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

Gives concrete opt-in/opt-out guidance ('Relationships and memories are included by default; pass include_*=false to omit' and 'Location is opt-in'), which is real usage direction. However, it never says when to prefer this tool over get_context_pack, get_life_graph, or notable_pack, so the routing decision across the many snapshot-family siblings is left to inference.

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

get_life_graphLife Graph ExportA
Read-only
Inspect

Explicit private life-graph export: favorites/VIP plus people with edges or recent event tags. Pass full=true for a larger capped list. Optional event–people links. Requires OAuth or a supported scoped credential. ($0.25; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
fullNoInclude additional people by last interaction, up to max_people
max_peopleNo
event_links_limitNo
include_event_linksNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
hotYes
edgesYes
nodesYes
edge_countYes
node_countYes
event_people_linksNo
max_people_requestedNo

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description does not need to reassert safety. It adds valuable behavioral context by disclosing the private export scope, the cap behavior behind full=true, optional event-people links, the OAuth/scoped-credential requirement, and the $0.25 cost. This goes beyond what the annotations provide.

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

Conciseness5/5

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

The description is compact and front-loaded: the first clause states what the tool exports, followed by the key flag, optional links, and auth/cost note. Every sentence earns its place, and there is no filler or redundant restatement of the tool name.

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

Completeness4/5

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

Given the output schema, annotations, and the tool's simple parameter structure, the description covers essential invocation details: scope, the full flag, optional links, auth, and cost. The only notable gaps are explicit guidance around the max_people/event_links_limit caps and alternatives, but these are not critical for a successful call.

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

Parameters2/5

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

With only 25% schema description coverage, the description must compensate for underdocumented parameters. It explicitly mentions full=true and 'Optional event-people links,' but it never names or explains max_people or event_links_limit, and 'larger capped list' is vague about the actual cap. This is only partial compensation for four parameters.

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

Purpose4/5

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

The description clearly identifies the action ('export') and the object ('private life-graph'), and it enumerates the graph's contents: favorites/VIP plus people with edges or recent event tags. It does not explicitly contrast with sibling tools like get_life_context or get_people, but the name and content make the purpose distinguishable.

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

Usage Guidelines3/5

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

The description implies usage context through phrases like 'Explicit private life-graph export' and 'Pass full=true for a larger capped list,' and it states an authentication requirement. However, it never explicitly says when to choose this tool over related siblings such as get_people or get_life_context, nor does it state exclusions or alternatives.

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

get_location_contextLocation ContextA
Read-only
Inspect

Likely current or at-time place with confidence and provenance. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
atNoISO timestamp

Output Schema

ParametersJSON Schema
NameRequiredDescription
atNo
placeNoCanonical place record.
confidenceNo
provenanceNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already mark this as read-only and non-destructive. The description adds useful behavioral context beyond those annotations: the result is a 'likely' estimate, includes confidence and provenance, requires an API key, and costs $0.10 per call.

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

Conciseness5/5

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

A single sentence conveys the core purpose, uncertainty, provenance, cost, and authentication requirement without any filler. The most important information is front-loaded and every element earns its place.

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?

Given one optional parameter fully documented in the schema, an output schema, and read-only annotations, the description covers the essential operational facts including cost and API key requirement. No critical information needed to invoke the tool correctly appears missing.

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?

The schema already describes the only parameter, 'at', as an ISO timestamp with 100% coverage. The description adds meaning by distinguishing 'current' vs 'at-time', which clarifies that omitting the parameter yields the current estimate and providing it yields an estimate for that time.

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

Purpose4/5

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

The description clearly names the resource, a place estimate at the current or a specified time, with confidence and provenance. It is understandable, though it lacks an explicit verb and does not distinguish itself from sibling tools like get_life_context or get_location_history.

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

Usage Guidelines3/5

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

The phrasing 'current or at-time place' implies this tool is for point-in-time location estimation, but the description does not explicitly say when to use it over alternatives or when not to use it. Cost and API key requirements are practical prerequisites, but not usage guidance.

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

get_location_historyLocation HistoryB
Read-only
Inspect

Normalized visit history (venue-level by default). Merges GPS location_visits + place_visits (MCP/Uber digs). ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
toNo
cityNo
fromNo
placeNo
countryNo
precisionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
visitsNo

TDQS

B3.3/5.0
Behavior4/5

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

Annotations already establish read-only, non-destructive, closed-world semantics, so the safety profile is covered. The description adds genuinely new operational context: it costs $0.10 per call and requires an API key, and it discloses the data-merging behavior. Return format is not described, but an output schema exists.

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

Conciseness5/5

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

Two tight sentences, front-loaded with the core scope followed by the operational caveat. No filler; the parenthetical cost/auth note is compact and useful.

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

Completeness3/5

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

Because an output schema exists, return values need not be explained. However, for a 6-parameter, 0%-coverage filtering tool, the absence of any parameter or usage guidance leaves real gaps an agent would need to resolve.

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

Parameters2/5

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

Six parameters with 0% schema description coverage, so the description must carry the load, and it does not: from/to, city, place, country, and the precision enum are all unexplained. The only hint is 'venue-level by default', which implies the precision default but adds no meaning to the other five filters.

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

Purpose4/5

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

States a specific verb+resource (retrieve normalized visit history) and a distinguishing scope ('venue-level by default', merging GPS location_visits + place_visits), which separates it from raw get_place_visits/get_movements. It never names a sibling explicitly, so differentiation is inferential rather than stated.

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

Usage Guidelines2/5

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

There is no when-to-use / when-not-to-use guidance and no alternatives named, despite many adjacent siblings (get_place_visits, get_movements, get_location_context, get_travel_history). 'venue-level by default' implies a default behavior but not selection criteria.

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

get_memoriesAgent MemoriesA
Read-only
Inspect

Authenticated user memories from Dayze Agent. Pass query for semantic/keyword retrieval. Prefer search for event-first trip and calendar titles. Requires OAuth or a supported scoped credential. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoAlias for query.
focusNoRanks memories toward this focus. next_actions (or current, now) returns only up to 4 next-action memories.
limitNoMax rows 1–50, default 20
queryNoSemantic focus (optional)

Output Schema

ParametersJSON Schema
NameRequiredDescription
modeYes
queryNo
eventsNo
peopleNo
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
memoriesYes
inspect_noteNoHow to cite: link each record with its inspect_url, never a link built from an id; which record types here have no Dayze page.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds real behavioral context beyond that: an auth requirement ('OAuth or a supported scoped credential') and a cost/credential gate ('$0.10; API key required'), which an agent needs before invoking.

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

Conciseness5/5

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

Four short, front-loaded clauses with zero filler: purpose, usage, alternative routing, and auth/cost. Every sentence carries distinct information; nothing is repeated from the schema or annotations.

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

Completeness4/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-value explanation is unnecessary. Auth, cost, and search-vs-memories routing are all present. Only minor gaps remain around what a 'memory' record contains conceptually, but that is largely covered by the schema and output schema.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents q/query, focus, and limit. The description only mentions that query drives semantic/keyword retrieval, adding little beyond the schema's own text. Baseline 3 applies.

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

Purpose4/5

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

States the verb (retrieve) and resource (authenticated user memories from Dayze Agent) and names the sibling 'search' as the contrasting tool. An agent can tell what this returns without opening the schema, though the nature of a 'memory' is left somewhat abstract.

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?

'Prefer search for event-first trip and calendar titles' gives an explicit alternative and the condition that selects it, and 'Pass query for semantic/keyword retrieval' implies the primary usage. No explicit when-not for get_memories itself, but the routing is clear.

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

get_momentsGet MomentsA
Read-only
Inspect

List owned Moments by date, title, type, tag, person or place. Stable moment_id and inspect_url for each. ($0.05; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoYYYY-MM-DD inclusive
tagNo
fromNoYYYY-MM-DD inclusive
limitNo
placeNo
titleNo
offsetNo
person_idNo
moment_typeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
limitYes
offsetYes
momentsYes
next_offsetYes

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, openWorldHint=false, destructiveHint=false, so the safety profile is covered. The description adds genuinely useful context beyond them: the $0.05 cost, the API-key requirement, and the stability of returned identifiers. It does not cover pagination behavior, which limits it below a 5.

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

Conciseness5/5

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

Two tight sentences. The filtering capability is front-loaded, then the returned identity fields, then the cost/auth constraint in parentheses. Every clause earns its place with no filler.

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

Completeness3/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, and the safety annotations are covered. However, for a 9-parameter list tool with 0 required params and no usage guidance, the description should say something about pagination (limit/offset) and how it differs from search_moments.

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 description coverage is only 22%, so the description must compensate, and it largely does: it names date, title, type, tag, person and place filters, covering six of the nine parameters. The limit/offset pagination parameters are not addressed in either place, which is the remaining gap.

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

Purpose4/5

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

States a specific verb (List) and resource (Moments) and enumerates the filterable dimensions (date, title, type, tag, person, place), which maps directly onto the schema. It scopes to 'owned' Moments, hinting at a boundary, but never names the closest sibling search_moments to differentiate itself.

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

Usage Guidelines2/5

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

No statement of when to use this instead of search_moments, get_memories, or notable_search, all of which sit in the same sibling cluster. The word 'owned' is the only scoping signal, and it is never explained or contrasted with alternatives.

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

get_money_between_peopleMoney Between PeopleA
Read-only
Inspect

Same as get_person_transactions: authenticated user ↔ one contact via individual expense rows. Requires context.read and financial_details:read. Prefer get_person_transactions; this alias exists for agent discoverability. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoInclusive YYYY-MM-DD filter
fromNoInclusive YYYY-MM-DD filter
nameNoSurface name if person_id unknown
limitNoMax rows 1–200, default 50
person_idNoCRM people.id

Output Schema

ParametersJSON Schema
NameRequiredDescription
nameNo
modelNo
totalsNo
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
entriesNo
person_idNo
inspect_noteNoHow to cite: link each record with its inspect_url, never a link built from an id; which record types here have no Dayze page.
person_inspect_urlNoThe contact's Dayze page.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds genuinely useful non-schema context: required scopes (context.read, financial_details:read) and a cost/auth note ($0.10; API key required). It does not explain pagination or result shape, but the output schema exists.

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?

Very compact and front-loaded: equivalence, scope, scopes/cost, and the preference note all appear in a single tight block. The parenthetical cost/API-key note is slightly compressed but not wasteful.

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

Completeness4/5

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

With annotations covering the read-only safety profile and an output schema handling return values, the description supplies the remaining essentials: auth scopes, cost, and the alias relationship to the canonical tool. Nothing critical to correct invocation is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so all five parameters (to, from, name, limit, person_id) are already documented in the schema. The description adds nothing about parameter behavior or formats, which matches the baseline for full-coverage schemas.

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

Purpose4/5

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

States a specific resource and scope (authenticated user ↔ one contact via individual expense rows) and names the equivalent sibling get_person_transactions, so an agent can place it without opening the schema. Slight deduction because the tool's own identity is framed entirely by reference to another tool rather than standing alone.

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

Usage Guidelines5/5

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

Explicitly routes the agent: "Prefer get_person_transactions; this alias exists for agent discoverability." It names the alternative and the condition that selects it, so there is no ambiguity about which tool to call.

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

get_movementsMovement SegmentsB
Read-only
Inspect

Read evidence-backed travel legs with their origin, destination, timing, mode, provider, distance, and linked expense. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
toNo
fromNo
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
movementsNo

TDQS

B3.2/5.0
Behavior4/5

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

Annotations already declare the safe-read profile (readOnlyHint=true, destructiveHint=false, openWorldHint=false), so the description is not required to restate safety. It adds genuinely useful non-schema context: 'evidence-backed' implies data provenance, and the '$0.10; API key required' clause discloses both cost and authentication needs.

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?

A single front-loaded sentence enumerating the payload, followed by a compact parenthetical for cost and auth. Nothing is wasted, though the parenthetical pricing note tucks practical calling information behind a terse aside.

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

Completeness3/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 explained, and the safety profile is covered by annotations. However, with three undocumented parameters at 0% schema coverage and no routing guidance against a large sibling set, an agent lacks the information needed to filter correctly rather than fetch unfiltered.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must carry the burden for 'to', 'from', and 'limit' — and it does not. The origin/destination wording refers to the returned legs, not to how the 'to'/'from' parameters should be populated, and no accepted formats are given.

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

Purpose4/5

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

States a specific verb ('Read') and resource ('travel legs') and enumerates the fields returned (origin, destination, timing, mode, provider, distance, linked expense). This is clear enough to separate it from other read tools like get_expenses or get_photos, but it never names a sibling or explains how it differs from get_travel_history, get_trips, or get_movements-related logging tools.

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

Usage Guidelines2/5

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

There is no statement of when to use this tool versus alternatives such as get_travel_history or log_movement, nor any prerequisite or scoping condition. The only contextual note is a pricing/auth aside, which is not usage guidance.

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

get_pending_repliesGet Pending RepliesA
Read-only
Inspect

Pending Replies (Inbox): the replies the user owes ('who do I owe a reply?'), newest first, or one by reply_id. status: unsent (default; pending + snoozed), sent, dismissed, all. Filter by person_name or person_id. Each reply has reply_id, person_name, person_id (null when unlinked), draft, summary, channel, category, source ids, status, state (unsent | sent | dismissed) and due (owed now; false while snoozed until snooze_until). Read-only. ($0.05; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo1-200, default 50.
statusNo
reply_idNoRead one reply (ignores the filters).
person_idNo
person_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
statusYesThe filter applied: unsent, sent, dismissed or all.
app_urlNo
has_moreYes
pending_repliesYes

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnlyHint/destructiveHint, yet the description adds real context: default ordering, that unsent means pending+snoozed, the state vs due distinction (due=false while snoozed until snooze_until), null person_id when unlinked, plus cost ($0.05) and API-key requirement. That is well beyond what the annotations supply.

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?

Dense but front-loaded: resource and query framing come first, then filters, then field/state semantics, then cost/auth. Every clause carries information; it is packed but not padded, so slightly below maximum for density.

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 read-only list/read tool with an output schema already present, the description supplies everything needed: selection semantics, filtering, state interpretation, cost and auth. Nothing required to invoke it correctly is missing.

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 only 40% (status enum, person_id, person_name are bare), but the description compensates by explaining the status values with semantics (unsent = pending + snoozed by default) and the person filters. It adds meaning over the schema, though it does not restate limit bounds.

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?

States a specific verb and resource ('replies the user owes') with scope (newest first, or one by reply_id), and it is clearly distinguishable from siblings like create_pending_reply, update_pending_reply and resolve_pending_reply. The parenthetical framing 'who do I owe a reply?' makes the resource unambiguous.

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?

Usage context is clear: use for the inbox of owed replies, optionally narrow by status, person_name/person_id, or fetch a single item via reply_id (which ignores filters). It does not explicitly contrast with resolve_pending_reply or list-style siblings, so a 4 rather than 5.

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

get_peopleDayze ContactsA
Read-only
Inspect

List or search the authenticated user's Dayze Contacts (private CRM; table people). query matches literal substrings of name, slug, email, occupation or context tags (no fuzzy fallback). context_tags requires all exact tags; occupation requires a substring. These filters combine with query and search the full owned contact set before pagination. Set wealth_category=reviewed for only explicitly owner-reviewed wealth-category contacts: returns id and name only, even with include_notes=true. That mode searches names only, uses offset rather than cursor, and cannot combine with occupation or context_tags. Without it, each contact includes avatar_url, photo_count, and has_photos; use get_person_photos(person_id) for the full gallery. With financial_details:read, net_worth_assessment includes category, scope, estimated range (when supported), confidence, methodology, caveat, dated source URLs, and review date. Context-only and insufficient-evidence assessments carry no personal number. birthday_precision says which parts of birthday are real: month_day means the year is unknown (stored 1900, or 1904 for Feb 29), year means only the year. Notes omitted by default (has_notes flag); pass include_notes=true for progressive fetch (credential/secret spans are redacted server-side). Supports limit (default 100, max 500) and offset; returns total and truncated. Distinct from public notable People at /people. Advertised name get_people is stable; tools/call also accepts get_contacts / list_contacts. Requires OAuth or a supported scoped credential. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoPage size (default 100, max 500)
queryNoLiteral substring search over name, slug, email, occupation and context tags; with wealth_category=reviewed, name only. No fuzzy fallback.
cursorNo
offsetNoSkip N rows (default 0)
occupationNoRequire this literal substring in the occupation field. Cannot combine with wealth_category.
context_tagsNoRequire every exact context tag, case insensitive (for example ["model"]). Cannot combine with wealth_category.
include_notesNoWhen true, include notes (server-redacted). Default false.
wealth_categoryNoOnly explicitly owner-reviewed wealth-category contacts. Returns id and name only; cannot combine with occupation or context_tags.

Output Schema

ParametersJSON Schema
NameRequiredDescription
limitYes
queryNo
totalYes
offsetYes
peopleYes
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
has_moreNo
no_matchNoTrue when a query or profession filter matched no contacts.
orderingNo
truncatedYes
expires_atNo
match_modeNounfiltered, structured or literal_substring; get_people has no fuzzy fallback.
occupationNo
next_cursorNo
server_timeNo
snapshot_atNo
snapshot_idNo
context_tagsNo
inspect_noteNoHow to cite: link each record with its inspect_url, never a link built from an id; which record types here have no Dayze page.
scan_limitedNoLegacy compatibility field; filtered database searches return false.
include_notesNo
wealth_categoryNoreviewed when the result is restricted to explicitly reviewed wealth-category contacts.

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds genuinely useful behavioral context beyond that: server-side redaction of credential/secret spans, progressive note fetching, offset-vs-cursor switching in reviewed mode, and credential requirements. It is dense but does not detail return-shape or rate limits, so against the lower annotation-driven bar this lands at a solid 3.

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

Conciseness3/5

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

It is a single dense block of many clauses covering modes, filters, redaction and pricing, with no headings or paragraph breaks. Front-loaded purpose is good and most sentences carry real information, but the run-on structure hurts scannability and some details (birthday_precision storage sentinels, advertised-name aliases) sit at the same level as core usage.

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 re-explained. Given 8 optional params, enum, and the reviewed-mode behavior, the description covers auth requirements, redaction, pagination semantics, and sibling distinctions thoroughly enough for correct invocation.

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 description coverage is already 88%, so the schema documents most parameters. The description still adds cross-parameter meaning the schema cannot: how query combines with other filters, that reviewed mode searches names only and uses offset, and that notes are redacted. This exceeds the baseline 3 for high-coverage schemas.

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+resource ('List or search the authenticated user's Dayze Contacts') and immediately scopes it as the private CRM table 'people'. It explicitly distinguishes itself from the public notable People at /people, so an agent can separate it from notable_search/notable_profile without opening a schema.

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

Usage Guidelines5/5

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

States when to use it, the exact filter-combination rules (context_tags requires all tags; occupation cannot combine with wealth_category), the special reviewed mode's restrictions, and points to get_person_photos for the gallery. Alternatives and exclusions are spelled out rather than inferred.

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

get_people_cleanup_resultGet People Cleanup ResultA
Read-only
Inspect

Fetch start_people_cleanup result by cleanup_id. ($0.05; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
cleanup_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusYes
cleanup_idYes

TDQS

A4.2/5.0
Behavior4/5

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

The readOnlyHint and destructiveHint annotations already establish this is a safe read operation. The description adds meaningful extras beyond the annotations: a $0.05 cost and the API key requirement. It does not contradict the annotations.

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

Conciseness5/5

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

The description is a single, tightly written sentence that front-loads the core action, then adds essential operational details (cost and API key). Every element earns its place.

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

Completeness4/5

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

For a simple single-parameter read tool with an output schema and safety annotations, the description covers the key operational details: action, identifier, cost, and auth. It does not explicitly mention whether the cleanup may still be running, but the output schema and straightforward nature of the tool make this a minor gap.

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

Parameters3/5

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

The schema describes cleanup_id only as a required string with no additional semantics, and schema description coverage is 0%. The description ties cleanup_id to start_people_cleanup, which adds some meaning, but it does not explain where the ID comes from or its expected format. Some compensation for the schema gap exists, but it is minimal.

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?

The description uses a specific verb ('Fetch') and a precise resource ('start_people_cleanup result by cleanup_id'). It clearly differentiates this from the sibling start_people_cleanup by indicating it retrieves the outcome of that operation rather than starting a new one.

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?

The intended context is clear: after a cleanup has been started, call this with the cleanup_id to retrieve its result. It does not explicitly list exclusions or alternative tools, but the relationship to start_people_cleanup gives the agent enough context to select it appropriately.

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

get_person_aliasesPerson AliasesA
Read-only
Inspect

List canonical aliases (nicknames) for a CRM person. Pass person_id or name (resolved via aliases). Requires OAuth or a supported scoped credential. ($0.05; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoSurface name if person_id unknown
person_idNoCRM people.id

Output Schema

ParametersJSON Schema
NameRequiredDescription
nameNo
aliasesNo
person_idNo
candidatesNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already mark the operation read-only, and the description adds useful behavioral context: name resolution via aliases, OAuth/scoped credential requirement, and API key cost. No contradiction with annotations.

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

Conciseness5/5

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

Two tight sentences with no waste. The core purpose is front-loaded, and the credential/cost details are compactly appended.

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

Completeness4/5

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

With annotations and an output schema present, the description covers the essential behavioral and operational details. It could be slightly clearer that at least one of person_id or name should be supplied, since the schema marks both as optional.

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 100%, so parameters are already documented. The description adds semantic value by explaining the relationship between person_id and name, and that name is resolved through aliases.

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?

The description opens with a specific verb and resource: 'List canonical aliases (nicknames) for a CRM person.' It clearly specifies the operation and distinguishes it from broader person tools like get_people or resolve_person.

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?

The description gives clear usage context by saying to pass either person_id or name, which tells the agent how to invoke it. It does not explicitly compare against sibling tools, but the intended use is apparent enough.

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

get_person_connectionsGet Person ConnectionsA
Read-only
Inspect

List graph edges for one CRM person. ($0.05; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
person_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
personNo
connectionsNo

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context by noting the $0.05 cost and the API key requirement, which are not present in annotations or schema.

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

Conciseness5/5

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

The description is a single compact sentence with zero filler. It front-loads the core action and resource, then appends the only two operational caveats (cost and API key) in a brief parenthetical.

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

Completeness4/5

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

For a one-parameter read-only tool with an output schema, the description covers the essential information: what it lists, the scope, cost, and auth. It does not mention usage trade-offs against sibling graph-related tools, but this is a minor gap given the simple interface and existing annotations.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It adds that the tool operates on 'one CRM person,' giving some meaning to person_id. However, it does not clarify the expected format of person_id or how it relates to other person identifiers in sibling tools.

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

Purpose4/5

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

The description clearly states the verb and resource: 'List graph edges for one CRM person.' It is specific about operating on a single person's graph edges, though it does not explicitly distinguish itself from sibling tools like get_entity_links or get_life_graph, so it stops short of a 5.

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

Usage Guidelines3/5

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

The phrase 'for one CRM person' implies the tool is for retrieving the graph connections of a specific person, and the mention of API key required and cost gives operational context. However, there is no explicit guidance on when to use this tool versus alternatives such as get_life_graph or get_person_interactions.

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

get_person_interactionsPerson InteractionsA
Read-only
Inspect

Relationship timeline for one CRM person: interactions rows (message/call/meeting/note + extended kinds like visit/gift/stayed_over encoded in summary) plus co-tagged calendar events. Prefer this over dumping people.notes for “when did I last see X?”. Pass person_id or name. Records carry inspect_url (their Dayze page): cite with it, never build a link from an id; a record without one has no page (inspect_note says which). ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoInclusive YYYY-MM-DD filter
fromNoInclusive YYYY-MM-DD filter
kindNoOptional filter: meeting, visit, gift, stayed_over, met, …
nameNo
limitNoMax rows 1–100, default 40
person_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
nameNo
countNo
eventsNo
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
person_idNo
truncatedNo
matched_viaNo
inspect_noteNoHow to cite: link each record with its inspect_url, never a link built from an id; which record types here have no Dayze page.
person_inspect_urlNoThe contact's Dayze page.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only declare the safe-read profile, yet the description adds substantial extra context: cost ($0.10), API key requirement, and the inspect_url citation contract including the edge case of records with no page ('inspect_note says which'). This is real behavioral information an agent cannot get from annotations.

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-loads the core purpose and the 'prefer this over' guidance before the citation rules and cost. It is dense and every clause carries information, though the inspect_url/citation sentence is packed tightly enough to risk being skimmed.

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?

With an output schema present, return shape needn't be restated, and the description still covers the selectors, the extended kinds, the citation contract, and the cost/auth prerequisites. Nothing an agent needs to invoke it correctly is missing.

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 67%, and the description adds the key ambiguity resolution: person_id or name are interchangeable selectors. It also signals the extended 'kind' vocabulary that the schema only hints at with an ellipsis, adding meaning beyond the raw field list.

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?

States a specific verb+resource ('Relationship timeline for one CRM person') and precisely enumerates what is returned: interaction rows (with extended kinds encoded in summary) plus co-tagged calendar events. This distinguishes it from generic siblings like get_interactions and get_events without needing to open 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?

Explicitly routes usage ('Prefer this over dumping people.notes for "when did I last see X?"') and states the selector requirement ('Pass person_id or name'). It gives a clear scenario without naming the closest sibling tool by name as an alternative, keeping it just short of a 5.

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

get_person_neighborhoodPerson NeighborhoodA
Read-only
Inspect

Subgraph around one user-owned person_id — profile (avatar_url, photo_count, has_photos) plus declared connections. Use get_person_photos for the full gallery. Notes omitted unless include_notes=true (redacted). Requires OAuth or a supported scoped credential. ($0.15; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
person_idYesUUID
include_notesNoWhen true, include center.notes (server-redacted). Default false.

Output Schema

ParametersJSON Schema
NameRequiredDescription
centerYesA Dayze person or contact record.
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
connectionsYes
inspect_noteNoHow to cite: link each record with its inspect_url, never a link built from an id; which record types here have no Dayze page.
include_notesNo
connection_countYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/non-destructive, and the description adds genuinely new behavioral context: notes are omitted and redacted unless include_notes=true, and it requires OAuth or a supported scoped credential. It also surfaces a per-call cost of $0.15, which annotations do not convey.

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?

It is a dense but front-loaded set of sentences that leads with the core behavior and uses the alternative, credential, and cost notes as trailing qualifiers. No sentence is filler, though the parenthetical stacking (profile fields, redaction, pricing) makes it slightly crowded.

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

Completeness4/5

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

With an output schema present, return values need no explanation, and the description covers the alternative tool, credential requirement, cost, and notes behavior. A reader still lacks any hint about graph size or scope limits of the neighborhood, which is a minor gap for a subgraph-returning read.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents both parameters including the server-redaction behavior of include_notes. The description's restatement of the notes toggle adds little beyond what the schema provides, so the baseline 3 applies.

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?

The description states a specific verb+resource (a subgraph around one person_id) and enumerates what is returned (profile fields avatar_url, photo_count, has_photos plus declared connections). It explicitly distinguishes itself from get_person_photos, so an agent can tell the two apart without opening a 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?

It routes the agent to get_person_photos for the full gallery, giving a concrete alternative with a selecting condition. It does not spell out explicit when-not-to-use cases or prerequisites beyond credential requirements, so it falls short of the fully explicit bar.

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

get_person_photosPerson PhotosA
Read-only
Inspect

Gallery image URLs for a CRM contact. Returns photos[{ id, url, is_primary, created_at }] plus inline MCP image attachments for chat render. Accepts person_id. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
person_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
photosNo
person_idNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is clear. The description goes beyond annotations by disclosing the exact return structure (photos array with id, url, is_primary, created_at), the fact that inline MCP image attachments are included for chat rendering, and the cost/auth requirements ($0.10; API key required). This adds meaningful behavioral context.

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

Conciseness5/5

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

The description is a single, efficient sentence that front-loads the core function, then provides the return format, attachments, and cost/auth in a compact parenthetical. Every piece of information earns its place with no redundancy or filler.

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?

Given the simplicity of the tool (one parameter, clear purpose) and the presence of an output schema, the description covers everything an agent needs: it states what it does, what it returns, the input, and even cost/auth. It is complete for correct invocation and interpretation of results.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It says 'Accepts person_id,' which is minimal but does imply person_id refers to the CRM contact from the opening. However, it does not elaborate on the type, format, or constraints beyond what the schema already states, so it only marginally adds meaning.

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?

The description clearly states the tool retrieves gallery image URLs for a CRM contact, which is a specific verb+resource. It also describes the return shape and the input parameter, making the purpose unambiguous and differentiating it from sibling tools like get_photos_for_event or get_photos_for_place by the explicit 'CRM contact' context.

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

Usage Guidelines3/5

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

The description provides implied usage context by stating it is for a CRM contact, but it does not explicitly name alternatives or give conditions for when to use this tool versus other photo-related tools such as search_photos or get_photos_for_event. There is no direction on exclusions or when not to use it.

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

get_person_transactionsPerson TransactionsA
Read-only
Inspect

Me↔contact money ledger from individual expenses (paid_to_person_id / income_from_person_id). Requires context.read and financial_details:read. Pass person_id or name. Returns entries + per-currency totals. Reuses existing expenses — no parallel ledger table. Records carry inspect_url (their Dayze page): cite with it, never build a link from an id; a record without one has no page (inspect_note says which). ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoInclusive YYYY-MM-DD filter
fromNoInclusive YYYY-MM-DD filter
nameNoSurface name if person_id unknown
limitNoMax rows 1–200, default 50
person_idNoCRM people.id

Output Schema

ParametersJSON Schema
NameRequiredDescription
nameNo
countNo
totalsNo
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
entriesNo
person_idNo
inspect_noteNoHow to cite: link each record with its inspect_url, never a link built from an id; which record types here have no Dayze page.
person_inspect_urlNoThe contact's Dayze page.

TDQS

A4/5.0
Behavior5/5

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

Beyond the readOnly/openWorld annotations, it discloses required auth scopes, the per-call cost and API key requirement, the return shape (entries + per-currency totals), and the important behavior that records carry inspect_url and must not be linked from an id, with inspect_note indicating missing pages. It also clarifies the ledger reuses existing expenses rather than a parallel table. This is rich disclosure the annotations cannot convey.

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 core purpose and source columns, then auth, then return shape and the inspect_url rule. Dense and telegraphic but nearly every clause carries information. The inspect_url/citation guidance is slightly verbose relative to its importance but still earns its place.

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 fully explained, and the description still summarizes them plus per-currency totals. With auth requirements, cost, key requirement, and the inspect_url/link rule all covered, an agent has everything needed to call and correctly report results.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents to/from, limit, name, and person_id. The description's 'Pass person_id or name' hints at a one-of relationship between two params, adding marginal meaning, but does not explain the inclusive date semantics or limit bounds beyond the schema. Baseline 3 applies.

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

Purpose4/5

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

The description states a specific resource and scope: a money ledger between the user and a contact, sourced from individual expenses via paid_to_person_id / income_from_person_id. That sourcing detail implicitly separates it from general tools like get_transactions or get_expenses. It never names its closest sibling get_money_between_people, so the differentiation is left to inference.

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

Usage Guidelines3/5

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

It gives a concrete usage rule ('Pass person_id or name') and states the required scopes (context.read, financial_details:read), which is real guidance. However it never says when to choose this over get_money_between_people or get_transactions, nor when not to use it. Usage is implied rather than framed against alternatives.

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

get_photoGet PhotoA
Read-only
Inspect

Single photo metadata + secure URL. Returns inline MCP image attachment when available. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
photo_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
photoNoPhoto or entity asset metadata.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds useful context beyond the annotations: it returns a secure URL, may include an inline MCP image attachment, requires an API key, and has a $0.10 cost. This is valuable operational information without contradicting the annotations.

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

Conciseness5/5

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

The description is a single front-loaded sentence covering the core behavior, followed by a compact parenthetical with cost and auth requirements. Every clause contributes meaningful information; there is no filler.

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

Completeness4/5

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

For a simple one-parameter read-only lookup, the description covers the return content, security property, attachment availability, cost, and authentication. An output schema exists, so enumerating metadata fields is unnecessary. Minor gaps include error handling and not-found behavior, but they are not essential for this simple tool.

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

Parameters2/5

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

Schema description coverage is 0%, and the description does not explain photo_id at all—it doesn't state where the ID comes from, expected format, or how it relates to other photo endpoints. With only one parameter, the description should compensate for the missing schema docs, but it doesn't.

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?

The description opens with 'Single photo metadata + secure URL,' which states a specific resource and operation. The 'Single photo' phrasing clearly distinguishes it from collection-oriented siblings like get_person_photos and search_photos.

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

Usage Guidelines3/5

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

The description implies this tool is for retrieving one photo by ID, but it never states when to choose it over related siblings such as get_photos_for_event or get_photos_for_place. There is no explicit when/when-not guidance; the agent must infer usage from the tool name and the word 'Single.'

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

get_photos_for_eventPhotos For EventD
Read-only
Inspect

Assets linked to an event. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
event_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
photosNo
event_idNo

TDQS

D1.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful context: cost ($0.10) and the requirement for an API key. However, it does not explain behavior beyond that, such as what the returned 'assets' represent or any pagination/limits. With annotations carrying the safety burden, the added cost/auth info earns a 3.

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

Conciseness2/5

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

The description is a single short sentence, so it is concise in length, but it is not front-loaded with the most critical information. The core purpose is vague ('Assets linked to an event'), and the useful cost/API key details come after. It is under-specified rather than effectively concise.

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

Completeness1/5

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

Even though the tool is simple (one parameter) and has an output schema, the description is far from complete. It fails to clarify what 'assets' means, does not mention event_id, and does not provide enough context for an agent to correctly invoke the tool or distinguish it from similar tools like get_photos_for_place. The description is wholly inadequate for effective use.

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

Parameters1/5

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

Schema description coverage is 0%, and the description does not mention the event_id parameter at all. The agent is left to infer that event_id identifies an event, but no format, semantics, or relationship to other tools is provided. The description adds no value for the parameter.

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

Purpose2/5

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

The description 'Assets linked to an event.' is a noun phrase, not an explicit action like 'Retrieve' or 'Get'. It is vague about what 'assets' means (photos? other files?) and does not differentiate from siblings such as get_entity_assets or get_photos_for_place. The name suggests photos, but the description says assets, adding confusion.

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

Usage Guidelines1/5

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

There is no guidance on when to use this tool versus alternatives. The description only provides cost and API key requirements, which are not usage guidelines. No mention of scenarios, exclusions, or alternative tools.

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

get_photos_for_placePhotos For PlaceC
Read-only
Inspect

Assets linked to a canonical place. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
place_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
photosNo
place_idNo

TDQS

C2.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safe-read nature is covered. The description adds useful extra context with the $0.10 cost and API-key requirement, and it scopes behavior to 'canonical place' assets, but it discloses little beyond those points.

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?

The description is compact and includes both cost and auth context in a single sentence. However, it reads as a noun phrase rather than a complete operational description, so it is concise but slightly under-specified.

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

Completeness3/5

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

The tool is simple with one parameter and an output schema, and annotations cover the read-only safety profile. Still, the description omits any usage context or parameter clarification, so the agent is left to infer details that could help correct invocation, especially among many similar photographic and place-related tools.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate for the undocumented place_id parameter, but it never mentions place_id or explains what canonical place ID format is expected. While the parameter name is somewhat self-evident, the description adds no semantic value beyond the schema.

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

Purpose3/5

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

The description states a resource scope ('Assets linked to a canonical place') but lacks an explicit verb such as 'retrieves' or 'returns'; the operation is mostly carried by the tool name. It also does not distinguish this from sibling tools like get_photos_for_event, get_person_photos, or get_place_visits, so an agent must infer what makes this tool unique.

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

Usage Guidelines2/5

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

There is no guidance about when to use this tool versus alternatives. The only added context is cost and API-key requirements, which do not help an agent choose between get_photos_for_place, get_photos_for_event, or search_photos. No exclusions or conditions are stated.

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

get_placeGet Place CardA
Read-only
Inspect

Fetch one saved place card (business_contacts) by place_id — address, opening hours, affordability, notes. ($0.05; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
idNo
place_idNo
business_contact_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
placeNoSaved place card.
messageNo
place_idNo
business_contact_idNo

TDQS

A3.9/5.0
Behavior3/5

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

Annotations cover the safety profile (readOnly, non-destructive, closed-world). The description adds pricing ($0.05) and API-key requirement, which are useful quirks beyond the annotations. But it names place_id as the key while the schema exposes three optional identifiers, an unresolved behavioral gap.

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

Conciseness5/5

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

One sentence, em-dash summary of return fields, parenthetical cost and auth. Front-loaded verb+resource with zero filler.

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

Completeness3/5

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

Output schema exists, so return-value detail is not required. But with 0% schema description coverage and three interchangeable-looking ID params, the description should clarify the parameter contract; naming only place_id is insufficient.

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 description coverage is 0% with 3 undocumented params. The description compensates by naming place_id as the lookup key, but is silent on id and business_contact_id, leaving ambiguity about which parameter actually selects the record.

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?

States a specific verb (Fetch one saved place card) plus resource (business_contacts) and enumerates the returned fields (address, opening hours, affordability, notes). Clear against siblings like get_places (list) and get_place_visits.

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

Usage Guidelines3/5

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

Implied usage (single-record lookup by place_id) is clear, but no when-to-use vs get_places, resolve_place, or enrich_place_from_google. The cost and auth note hint at a paid/authenticated path but don't route between alternatives.

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

get_placesList PlacesB
Read-only
Inspect

Known venues: visit-graph places plus saved place cards (saved_places from business_contacts) with address, opening_hours, and affordability ($/$$/$$$). query filters both lists by name. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNo
areaNo
cityNo
nearNoFilter saved cards by area/tag/notes (e.g. Madeira).
limitNo
queryNoName contains, case-insensitive (e.g. "QA Map Probe Tokyo").
countryNo
affordabilityNo$ | $$ | $$$

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
placesNo
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
saved_countNo
inspect_noteNoHow to cite: link each record with its inspect_url, never a link built from an id; which record types here have no Dayze page.
saved_placesNo

TDQS

B3.2/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint, destructiveHint false, closed world), so the bar is lower, and the description adds real operational context: an API key is required and each call costs $0.10. It also discloses the dual-source nature of the result. Missing only details like pagination or default limits.

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?

It is a compact two-clause construction that front-loads what is returned, then the filter and cost/auth caveats. The dense backticked token notation is slightly cryptic, but there is no filler.

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

Completeness3/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 explained, and auth/cost are covered. However, for an 8-parameter listing tool with 38% schema coverage, the ambiguity among the several overlapping geo/tag filters (near vs area vs tag vs city vs country) leaves the definition short of complete.

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

Parameters2/5

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

Schema coverage is only 38%, so the description must carry more of the load, yet it only clarifies `query` (filters both lists by name) and echoes affordability ($/$$/$$$). Filters like tag, area, city, near, limit, and country are undocumented in both places, so the agent cannot distinguish their semantics.

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

Purpose4/5

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

The description gives a specific resource and scope: it returns known venues merged from the visit-graph `places` list and saved place cards (`saved_places`), plus the fields returned. That is clearer than a tautology, but it doesn't name or contrast with siblings like get_place, search, or get_place_visits, leaving the agent to infer the distinction.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no exclusions, and no alternatives named. The only usage-adjacent statement is that `query` filters both lists, which is parameter behavior, not selection guidance. With dozens of get/search/place siblings available, the agent gets no help choosing this one.

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

get_place_visitsPlace VisitsA
Read-only
Inspect

Count confirmed outings at a venue. Resolves aliases first; typed PlaceVisits are primary, and past non-todo events/GPS evidence for the canonical place are reconciled by day. count excludes plans, todos, and separately labelled reconstructed_candidates. Returns visit dates and evidence refs. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
toNo
fromNo
placeYes
place_idNo
person_idsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
placeYes
visitsYes
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
confidenceNo
matched_viaNo
inspect_noteNoHow to cite: link each record with its inspect_url, never a link built from an id; which record types here have no Dayze page.
people_presentNo
resolved_placeNoCanonical place record.
confirmed_countNo
count_semanticsNo
matching_eventsNo
reconstructed_countNo
confirmed_visit_datesNo
resolution_candidatesNo
reconstructed_candidatesNo

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, non-destructive, closed-world), and the description adds real behavioral context: alias resolution happens first, typed PlaceVisits take priority, other evidence is reconciled by day, and certain records are excluded. It also discloses cost ($0.10) and an API-key requirement, which annotations do not provide. Return format details like pagination or caps are not mentioned.

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?

Four dense sentences that front-load the primary action and exclusion rules; the cost/auth note is appropriately placed last. Some internal jargon (reconstructed_candidates, typed PlaceVisits) is unexplained but tolerated for a domain-specific tool.

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

Completeness4/5

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

Since an output schema exists, return-value detail need not be spelled out, and the description nonetheless notes that visit dates and evidence refs come back. The main completeness gap is the total absence of parameter semantics for a five-parameter tool, which leaves an agent guessing about date range and person filtering.

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

Parameters2/5

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

Schema description coverage is 0% and the description never explains any of the five parameters. The alias/canonical-place discussion loosely gestures at 'place'/'place_id', but 'from', 'to', and 'person_ids' – including whether the dates are inclusive and what person_ids filters on – are left entirely undocumented in both schema and description.

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

Purpose4/5

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

States a specific verb+resource (count confirmed outings at a venue) and clarifies what is excluded (plans, todos, reconstructed_candidates). It is distinguishable from siblings like log_place_visit, delete_place_visit, and get_location_history, though it never explicitly names an alternative read tool.

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

Usage Guidelines3/5

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

Usage is implied by the scope statements (confirmed outings, canonical place, exclusions), but there is no explicit when-to-use-this-vs-alternatives guidance such as when to prefer get_location_history, get_location_context, or get_place. Cost and API-key requirements hint at when it is worth calling but are not framed as usage selection criteria.

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

get_residencesList ResidencesA
Read-only
Inspect

Home / residence history separate from trips: trips with metadata.kind=residence (from log_travel) plus optional life_eras. Use for Boylston / Madeira / current home cards. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
toNo
fromNo
limitNo
include_erasNoInclude life_eras rows (default true)

Output Schema

ParametersJSON Schema
NameRequiredDescription
erasNo
countYes
residencesNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so safety is covered. The description adds genuinely useful behavior: a $0.10 cost and API-key requirement, plus the data derivation path. It does not mention rate limits or pagination, keeping it just below top marks.

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?

Two tight, front-loaded sentences with no filler; the core scope comes first and operational details (cost/auth) are appended compactly. Slightly dense but efficient.

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

Completeness3/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 is adequate on purpose, cost, and auth, but with low parameter coverage it leaves the to/from/limit inputs unexplained, falling short of fully complete for a 4-param tool.

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

Parameters2/5

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

Schema coverage is only 25% (only include_eras is documented, matching the 'optional life_eras' mention). The description adds nothing about to/from date semantics or limit behavior, so it fails to compensate for the large documentation gap on three of four parameters.

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?

The description states a specific resource (home/residence history) and explicitly distinguishes it from trips, even disclosing how it is derived (trips with metadata.kind=residence from log_travel plus life_eras). An agent can tell it apart from get_trips/get_travel_history without opening the schema.

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

Usage Guidelines3/5

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

It gives an implied usage cue ('Use for Boylston / Madeira / current home cards') and notes it is separate from trips, but names no explicit alternatives or when-not-to-use conditions relative to get_trips or get_location_history. Usage is inferable but not spelled out.

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

get_sleepGet SleepC
Read-only
Inspect

Sleep: list typed sleep/nap records with duration_minutes. ($0.05; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
toNo
fromNo
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
sleepsNo

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so the description adds value by disclosing the cost ($0.05) and the API key requirement, which are not in the annotations. However, it does not explain behavioral details like date range semantics or pagination, and the phrase 'typed' is ambiguous. Overall it adds some context but leaves important behavioral aspects unaddressed.

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?

The description is a single, concise sentence that front-loads the core purpose. It efficiently includes cost and auth information without fluff. The structure is clean and easy to scan, though it could benefit from a clearer separation of cost/auth and operational details.

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

Completeness2/5

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

With three parameters and zero schema coverage, the description must compensate by explaining how to use the parameters. It fails to do so, leaving critical context (e.g., default date ranges, limit behavior) unspecified. The presence of an output schema mitigates return-format ambiguity, but the overall description is incomplete for safe and correct invocation.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate for the lack of parameter documentation. It does not explain what 'to', 'from', or 'limit' represent. The mention of 'duration_minutes' is a result field, not a parameter. The description provides minimal help in understanding the parameters, leaving users to guess their meaning.

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

Purpose4/5

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

The description clearly states the action (list) and the resource (typed sleep/nap records) and mentions a key field (duration_minutes). It is specific and informative, though it does not explicitly differentiate from the sibling get_sleep_summary, which likely serves a different purpose. The word 'typed' hints at detailed records rather than a summary.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like get_sleep_summary. It does not state whether this is for individual records or aggregated data, nor does it mention any exclusions or preferred contexts. Users must infer usage from the name and description.

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

get_sleep_summarySleep SummaryA
Read-only
Inspect

Sleep: day/week/month totals and averages. ($0.05; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
rangeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
rangeNo
nightsNo
total_minutesNo
average_minutesNo

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds operational details beyond annotations: a $0.05 cost and the need for an API key. This is valuable transparency for an agent deciding whether to invoke the tool. No contradictions with annotations.

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

Conciseness5/5

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

The description is a single, tight sentence that front-loads the core function ('Sleep: day/week/month totals and averages') and then adds cost and auth requirements. There is no fluff; every phrase earns its place.

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

Completeness4/5

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

For a simple read-only summary tool with one parameter and an output schema, the description covers the essential context: operation, time ranges, and operational constraints (cost, API key). Return format is delegated to the output schema, which exists. It is complete enough for an agent to call correctly without ambiguity.

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

Parameters3/5

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

The single parameter 'range' has an enum (day, week, month). The description indirectly references this via 'day/week/month totals and averages', giving context to the parameter. However, with 0% schema description coverage, the description carries the burden, and it adds minimal detail beyond the enum values themselves. Adequate but not rich.

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

Purpose4/5

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

The description clearly states a specific function: retrieving sleep totals and averages for day, week, or month ranges. It implies a summary view, distinguishing it from sibling get_sleep (likely raw logs) and log_sleep (write), though it doesn't explicitly name alternatives.

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

Usage Guidelines2/5

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

No guidance is given on when to use this tool versus alternatives like get_sleep or log_sleep. The only contextual hints are cost and API key requirements, which are operational constraints rather than usage guidance. The description does not specify conditions for choosing summary over raw data.

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

get_trackersHabit TrackersA
Read-only
Inspect

Authenticated user live trackers only; expired countdowns and inactive streaks are omitted. Sobriety/streak trackers remain visible at day 0 after a reset. Merges event-backed trackers with the trackers table when present. Requires OAuth or a supported scoped credential. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
trackersYes

TDQS

A4.3/5.0
Behavior5/5

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

Annotations already mark readOnly and non-destructive, and the description goes further by revealing specific filtering rules, merge logic with event-backed trackers, day-0 visibility after reset, and credential requirements. It also discloses cost ('$0.10'), which is valuable. No contradiction with annotations; the description enriches transparency substantially.

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?

The description is three sentences, front-loaded with the core scope, then exclusions, an exception, merge behavior, and finally auth/cost. It packs valuable info without excess verbosity, though it is a bit dense with multiple clauses.

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?

With an output schema present and zero params, the description covers all necessary behavioral context: filtering, merging, auth, and cost. Nothing critical is missing for an agent to call this correctly. It is complete for a read-only getter.

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?

There are no parameters, so the description does not need to add parameter meaning. The empty input schema is clear, and the description's auth mention is not parameter-related. The baseline for zero parameters is 4, and the description does not detract from it.

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

Purpose4/5

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

The description clearly states the resource (authenticated user's trackers) and the scope (live only, with exclusions). The verb 'get' is implied but name makes it clear. It distinguishes this from other get_* tools by specifying unique filtering and merging behavior, though no sibling specifically competes.

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?

It conveys when to use this tool by defining what is included and excluded (expired countdowns and inactive streaks are omitted), and states the authentication requirement. It does not explicitly contrast with alternatives, but no direct alternative exists among siblings. The contextual detail about reset behavior adds practical usage nuance.

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

get_transactionsGet TransactionsA
Read-only
Inspect

List individual expense/income/transfer rows (includes tags, payment_method). Requires context.read and financial_details:read. Filter with tag=project:… or project=… ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
toNo
tagNoExact tag, e.g. project:max-soko-poker-venture or rail:zelle
fromNo
typeNo
limitNoPage size 1-500, default 100.
cursorNoContinue the same immutable one-hour snapshot; other filters remain frozen.
offsetNoSkip this many rows of a new snapshot (a cursor carries its own).
projectNoProject label or slug → project:{slug}
include_archivedNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
inspect_noteNoHow to cite: link each record with its inspect_url, never a link built from an id; which record types here have no Dayze page.
transactionsNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=false, so the safety profile is covered. The description adds genuinely useful context beyond that: required scopes (context.read, financial_details:read), an API-key requirement, and a $0.10 cost per call.

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?

Compact and front-loaded: the core resource is named first, then auth/cost constraints. Parenthetical asides add minor clutter but every clause carries information; no filler sentences.

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

Completeness4/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-format explanation is unnecessary. Auth requirements, cost, and key filtering patterns are covered, which is the important missing context for a costed, permission-gated read tool. The remaining gap is routing guidance versus sibling list/search tools.

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

Parameters3/5

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

Schema coverage is 56%, and the schema itself documents tag, project, limit, and cursor semantics in more detail than the description. The description only adds the tag/project filter equivalence, which largely restates what the schema says, so it does not fully compensate for the uncovered parameters (from, to, type, include_archived).

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

Purpose4/5

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

States a specific verb and resource with scope: 'List individual expense/income/transfer rows', plus the returned fields (tags, payment_method). It is clear what the tool returns, though it never distinguishes itself from close siblings like get_expenses, get_person_transactions, or search_transactions.

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

Usage Guidelines3/5

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

It gives a prerequisite and filter hint ('Requires context.read and financial_details:read. Filter with tag=project:… or project=…'), which implies usage context. But it offers no when-to-use/when-not guidance and never routes the agent to an alternative such as search_transactions versus a full listing.

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

get_travel_historyTravel HistoryB
Read-only
Inspect

Completed/confirmed travel only. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
toNo
fromNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
tripsNo

TDQS

B3.3/5.0
Behavior4/5

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

Annotations already establish read-only and non-destructive behavior, so the description adds value by disclosing the $0.10 cost, API key requirement, and the data scoping to completed/confirmed travel. This gives an agent useful operational and semantic context beyond the structured annotations.

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

Conciseness5/5

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

The description is extremely concise, with every element earning its place: the scope qualifier, cost, and authentication requirement. It is front-loaded and contains no filler.

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

Completeness2/5

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

Despite the presence of annotations and an output schema, the description fails to explain the two parameters, leaving an agent unable to construct a correct request. The simple nature of the tool and safety annotations are positives, but the complete absence of parameter semantics makes it insufficiently complete.

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

Parameters1/5

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

Schema description coverage is 0% and the description does not mention 'to' or 'from' at all. An agent has no guidance on what these parameters mean (e.g., date range, location bounds) or what format to provide them in, which is a critical gap for correct invocation.

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

Purpose4/5

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

The name 'get_travel_history' combined with the description's scope qualifier 'Completed/confirmed travel only' clearly identifies this as a retrieval operation for a specific subset of travel records. It is not a tautology and adds meaningful clarification, though it does not explicitly differentiate from sibling tools like get_trips or get_location_history.

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

Usage Guidelines3/5

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

The description implies when to use this tool ('completed/confirmed travel only'), which suggests it is not for planned or in-progress travel. However, it does not name specific alternatives or provide explicit when-to-use versus when-not-to-use guidance.

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

get_tripGet TripA
Read-only
Inspect

Single trip with linked places and people. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
trip_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
tripNo
peopleNo
placesNo

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds useful behavioral context beyond annotations by stating the $0.10 cost and API key requirement. It does not describe rate limits or error behavior, but the read-only annotations reduce the burden.

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

Conciseness5/5

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

The description is efficiently front-loaded with the core result, followed by a compact parenthetical covering cost and authentication. Every word contributes necessary information with no redundancy.

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

Completeness4/5

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

For a simple read-only tool with one parameter and an output schema, the description conveys the essential result and operational requirements. It is slightly thin on parameter details and tool differentiation, but the output schema and annotations fill most gaps.

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

Parameters2/5

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

The input schema has a single required trip_id parameter with no description, and schema description coverage is 0%. The description does not mention trip_id or clarify its format or provenance, so the agent must infer meaning from the parameter name alone. The description fails to compensate for the absent schema documentation.

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

Purpose4/5

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

The description clearly identifies the resource as a 'Single trip' and specifies its contents as 'linked places and people.' This distinguishes it from the sibling tool get_trips, which returns multiple trips. The action verb is implied by the title rather than stated in the description, keeping it from a 5.

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

Usage Guidelines3/5

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

The description implies use when a single trip with associated places and people is needed, but it provides no explicit when-to-use guidance or comparison with alternatives like get_trips. The selection is left mostly to inference.

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

get_tripsList TripsA
Read-only
Inspect

User trips with status filter (planned/completed/etc.). Residences also appear here with metadata.kind=residence — prefer get_residences for home history. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
toNo
fromNo
limitNo
cursorNoContinue the same immutable one-hour snapshot; other filters remain frozen.
statusNo
include_archivedNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
tripsNo

TDQS

A4.2/5.0
Behavior5/5

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

The description reveals that results are not pure trips—residences are mixed in with metadata.kind=residence—and adds real-world call constraints ($0.10 cost, API key). These details go beyond the readOnly/destructive annotations and help the agent plan the call and interpret results.

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

Conciseness5/5

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

Three short sentences, front-loaded with the core purpose, followed by the residence caveat and cost/auth note. Every phrase earns its place.

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

Completeness3/5

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

The description is adequate for selection and covers the main caveat, cost, and auth, and an output schema exists. But with six parameters and only 17% schema coverage, the unclear from/to/limit/include_archived semantics keep it from being fully complete.

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

Parameters2/5

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

With schema description coverage at only 17%, the description needed to clarify the five undocumented parameters. It only explains status (and only with 'planned/completed/etc.'), leaving to, from, limit, and include_archived unexplained. The cursor semantics are already in the schema, so that parameter is covered, but the remainder is not.

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?

The definition clearly identifies the resource (user trips) and the primary capability (status filtering), and the phrase 'prefer get_residences' distinguishes it from the closest sibling. The title 'List Trips' supplies the verb, so an agent can tell what calling it returns even before examining the 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?

It gives a concrete when-not-to-use rule: residences appear in the results but home history should be fetched via get_residences. It doesn't explicitly state when to choose this over other list tools like get_travel_history, but the use case is strongly implied by 'User trips with status filter.'

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

import_rideshare_gmailImport Rideshare GmailBInspect

Preview or import completed Lyft and Uber receipts as deduplicated origin-to-destination movements plus linked expenses. dry_run returns the exact proposed records without writing. Requires mail.read on an API key or non-ChatGPT OAuth connection. ChatGPT profiles do not grant mail.read or list this tool. ($0.15; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
emailNo
queryNo
accountNo
dry_runNo
request_idNoClient idempotency key (retries return original result).
max_resultsNo
idempotency_keyNoAlias for request_id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
queryYes
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
resultsYes
scannedYes
skippedYes
importedYes
duplicatesYes
provenanceNoWhich connector wrote the record and which connected Dayze account received it.

TDQS

B3.4/5.0
Behavior4/5

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

Annotations only declare the generic write/non-destructive profile, but the description adds real context: deduplication behavior, exactly what dry_run returns without writing, the required mail.read scope, the profile limitation, and a per-call cost of $0.15. This goes well beyond the annotations, though it does not detail what records are written on a real run.

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?

Four compact sentences, front-loaded with the core action and the preview/write distinction, then auth and cost. Dense but nearly every clause carries needed information; no padding.

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

Completeness3/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, and the description covers auth, cost, and dedup behavior. It remains incomplete on parameter semantics and on how to choose this tool over import_uber_gmail, leaving meaningful gaps for a 7-parameter write tool.

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

Parameters2/5

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

Schema coverage is only 29% and 5 of 7 parameters (email, query, account, max_results, and the dry_run flag's interaction) are undocumented in the schema. The description explains dry_run's semantics but leaves email/query/account/max_results unexplained, so it fails to compensate for the coverage gap.

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

Purpose4/5

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

States a specific verb (import/preview) and resource (completed Lyft and Uber receipts) and describes the transformation into deduplicated origin-to-destination movements plus linked expenses. It does not distinguish itself from the closely overlapping sibling import_uber_gmail, so an agent cannot tell from the description alone which to prefer.

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

Usage Guidelines3/5

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

It clearly explains the dry_run preview-vs-write choice and states auth prerequisites (mail.read via API key or non-ChatGPT OAuth; ChatGPT profiles don't list it). However, it gives no routing guidance against the sibling import_uber_gmail, which appears to cover the same Uber source, leaving the main alternative unaddressed.

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

import_uber_gmailImport Uber GmailAInspect

Search connected Gmail for Uber trip receipts and write log_place_visit rows with sources gmail:uber-{gmail_id} (idempotent). Optional dry_run, max_results, query, account. Requires mail.read on an API key or non-ChatGPT OAuth connection. ChatGPT profiles do not grant mail.read or list this tool. ($0.15; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
emailNo
queryNoOverride Gmail search (default from:uber.com receipt/trip)
accountNo
dry_runNo
request_idNoClient idempotency key (retries return original result).
max_resultsNo
idempotency_keyNoAlias for request_id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
queryYes
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
resultsYes
scannedYes
skippedYes
importedYes
duplicatesYes
provenanceNoWhich connector wrote the record and which connected Dayze account received it.

TDQS

A3.9/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint=false correctly signals a write), the description discloses idempotency, the exact source-row format written, the dry_run option, the required mail.read scope, the fact that ChatGPT profiles cannot use it, and a $0.15 cost. This is exactly the behavioral context annotations cannot convey.

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?

The purpose is front-loaded in the first sentence, followed by parameters, prerequisites, and cost. Dense but no filler; the parenthetical cost note is slightly tacked on but still earns its place.

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

Completeness4/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. Auth requirements, idempotency, write target, and pricing are all covered; the main gap is per-parameter meaning and any error/partial-match behavior, which for a 7-param importer would be helpful.

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

Parameters3/5

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

Schema description coverage is only 43%, and the description only names four optional parameters (dry_run, max_results, query, account) without explaining their semantics. query, request_id, and idempotency_key are documented in the schema, but email, account, dry_run, and max_results remain unexplained in either place.

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

Purpose4/5

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

The description states a concrete compound action: search connected Gmail for Uber trip receipts and write log_place_visit rows tagged gmail:uber-{gmail_id}. The Uber specificity separates it from import_venmo_gmail, though the overlap with the similarly named sibling import_rideshare_gmail is not addressed, so sibling differentiation is partial.

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

Usage Guidelines3/5

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

It gives real prerequisites (mail.read on an API key or non-ChatGPT OAuth, ChatGPT profiles don't list the tool, API key required) which steer the agent, but it never states when to choose this over import_rideshare_gmail or when to use dry_run versus a live write. Usage is implied rather than explicit.

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

import_venmo_gmailImport Venmo GmailAInspect

Search connected Gmail for Venmo receipts and write log_transaction rows with external_id=venmo-gmail-{gmail_id} (idempotent). Optional dry_run, max_results, query, mirror_event, account. Prefer this over calendar-only Money · digs. Requires mail.read on an API key or non-ChatGPT OAuth connection. ChatGPT profiles do not grant mail.read or list this tool. ($0.15; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
emailNoAlias for account
queryNoOverride Gmail search (default from:venmo.com paid/payment)
accountNoMailbox email or connection id
dry_runNo
request_idNoClient idempotency key (retries return original result).
max_resultsNo
mirror_eventNoAlso create Money · calendar annotations
idempotency_keyNoAlias for request_id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
queryYes
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
resultsYes
scannedYes
skippedYes
importedYes
duplicatesYes
provenanceNoWhich connector wrote the record and which connected Dayze account received it.

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 (readOnlyHint=false, destructiveHint=false, openWorldHint=false). It discloses the idempotency key format, dry_run availability, required mail.read scope, that ChatGPT profiles neither grant mail.read nor list the tool, and the $0.15 cost. That is exactly the operational context an agent needs before invoking a write tool.

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 core action and its idempotency guarantee, then conditions and cost. Dense but every clause carries weight; the parenthetical cost/auth notes are slightly crammed but not wasteful.

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, and the description covers the write behavior, idempotency, auth requirements, and profile limitations. Nothing an agent needs to call it correctly is missing.

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?

With 75% schema coverage the schema already documents several params; the description adds the semantics that matter most (idempotent external_id format, dry_run, mirror_event, query, account) and flags them as optional. The email/idempotency_key aliases are left to the schema, which is a minor omission.

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?

States a specific verb+resource: searches connected Gmail for Venmo receipts and writes log_transaction rows. The external_id pattern (venmo-gmail-{gmail_id}) and the sibling imports (import_uber_gmail, import_rideshare_gmail) make the scope unmistakable.

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?

Explicitly routes the agent: 'Prefer this over calendar-only Money · digs,' and states the prerequisite (mail.read on an API key or non-ChatGPT OAuth). It does not explicitly contrast with import_uber_gmail/import_rideshare_gmail, but the resource names make the split self-evident, so this is clear context rather than a full when/when-not matrix.

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

list_clarificationsList ClarificationsB
Read-only
Inspect

Ranked clarification queue: only person-typed mentions + duplicate CRM people. Non-person junk (places, orgs, media, command fragments) is auto-dismissed. Existing contacts auto-link. ($0.05; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoOptional: entity_mention | duplicate_people
limitNoMax rows 1–50, default 15
auto_cleanupNoAuto-dismiss non-person / auto-link existing (default true)

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
messageNo
truncatedNo
clarificationsYes

TDQS

B3.4/5.0
Behavior1/5

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

The description clearly discloses auto-dismissal and auto-linking behavior, plus cost and API key requirements. However, these behaviors contradict the readOnlyHint=true annotation: auto-dismissing non-person junk and auto-linking existing contacts imply state modification. This is an annotation contradiction.

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

Conciseness5/5

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

The description is compact and front-loaded, covering scope, ranking, filtering, side effects, cost, and authentication in just two sentences. There is no filler or redundant restatement of the tool name.

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

Completeness4/5

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

For a list-oriented tool with a full input schema and output schema, the description covers scope, behavior, cost, and prerequisites well. The main gap is the conflict between the described auto-cleanup side effects and the readOnlyHint annotation, which undermines the completeness of the tool's metadata.

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

Parameters3/5

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

Schema description coverage is 100%, so the parameters are already well documented. The description adds context like 'ranked' and reinforces the auto-cleanup behavior, but does not add substantial new meaning beyond what the schema provides.

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

Purpose4/5

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

The description states a specific verb and resource: 'List clarifications' as a ranked queue, and narrows scope to 'only person-typed mentions + duplicate CRM people'. It clearly explains what the tool returns, but it does not explicitly name sibling tools like dismiss_clarification or bulk_dismiss_clarifications to distinguish itself.

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?

The context is clear: this is the ranked clarification queue for person mentions and duplicate people, and the API key requirement is stated. However, it does not explicitly say when to prefer this over sibling tools or when not to use it.

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

list_event_fact_correctionsList Event Fact CorrectionsA
Read-only
Inspect

List the owner’s recent event classification and event-person correction ledger, including undone entries. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
correctionsNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so safety is covered. The description adds genuinely new behavioral context — a $0.10 per-call cost, an API key requirement, and the fact that undone entries are included in results. It does not address result volume or pagination, but the output schema covers return structure.

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

Conciseness5/5

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

A single sentence that front-loads the verb and resource, with cost and auth tucked into a parenthetical where they belong. No filler, no restatement of the title.

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

Completeness4/5

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

For a zero-parameter read tool with an output schema and full annotation coverage, the definition supplies the two non-obvious operating facts (cost, API key) plus result scope. The only soft spot is that 'recent' is never quantified, but that is a minor gap for a list endpoint whose payload is documented by the schema.

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?

The tool takes zero parameters, so the baseline here is 4; there is nothing for the description to add or compensate for. No parameter claims are made that could mislead the agent.

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

Purpose4/5

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

States a specific verb ('List') and a specific resource ('event classification and event-person correction ledger'), and the phrase 'including undone entries' signals a scope distinction from the active-only view a sibling like apply_event_fact_correction or undo_event_fact_correction would produce. It stops short of explicitly naming those siblings, so an agent must still infer which of the four event-fact tools to pick.

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

Usage Guidelines2/5

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

There is no explicit when-to-use statement, no prerequisites, and no routing to alternatives such as get_event_fact_source or undo_event_fact_correction. The word 'recent' and the note about undone entries hint at a review/audit use case, but the agent is left to infer it.

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

list_gmail_accountsList Gmail AccountsA
Read-only
Inspect

List connected Gmail mailboxes for the authenticated user (id, email, is_default). Use account on search_gmail / read_gmail_* / import_*_gmail to pick a mailbox. Connect another inbox at /integrations (multi-mailbox after migration). Requires mail.read on an API key or non-ChatGPT OAuth connection. ChatGPT profiles do not grant mail.read or list this tool. Share tokens cannot call. ($0.05; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
accountsYes
connect_urlYes

TDQS

A4.6/5.0
Behavior5/5

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

Annotations cover the safety profile (readOnly, non-destructive, closed-world), and the description adds substantial value beyond that: required mail.read scope, API-key vs non-ChatGPT OAuth requirement, the ChatGPT-profile exclusion, the share-token exclusion, and the $0.05 cost. This is exactly the auth/eligibility context an agent needs before attempting a call.

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-loads purpose and the returned fields, then usage, then eligibility. Dense but each clause carries information; the parenthetical pricing and 'multi-mailbox after migration' note are slightly cramped but not wasteful.

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 no explanation, and the description fully covers the parts structure cannot: authentication scope, caller eligibility, cost, and how the result feeds sibling tools. Nothing needed to call this correctly is missing.

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?

The tool takes no parameters and the schema is a closed empty object, so there is nothing for the description to disambiguate. The mention of returned fields (id, email, is_default) is output-oriented rather than parameter guidance, leaving the baseline score appropriate.

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?

States a specific verb and resource (list connected Gmail mailboxes) and enumerates the returned fields (id, email, is_default), which no sibling tool does. It is immediately distinguishable from search_gmail, read_gmail_*, and the import_*_gmail tools, which it explicitly positions itself before.

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?

Gives clear operational context: use the returned account value on search_gmail / read_gmail_* / import_*_gmail, and connect additional inboxes at /integrations. It states who cannot call it (ChatGPT profiles, share tokens), but does not frame an explicit when-not-to-use beyond eligibility limits.

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

log_condition_checkinCondition Check-inAInspect

Save a day's check-in for one condition with the same explicit subject_type/person_id. Self check-ins show on the user's Day Card; another person's do not. severity 0-10, note, treatment_done; logged_on defaults today. One per condition/day. ($0.05; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNo
severityNo0 (none) to 10 (worst).
logged_onNoYYYY-MM-DD; default today in the user's time zone.
person_idNoOwned contact id; required for person.
request_idNoClient idempotency key (retries return original result).
condition_idYesFrom get_conditions or create_condition.
subject_typeYesself, or person with person_id.
treatment_doneNoWhat they did for it that day.
idempotency_keyNoAlias for request_id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
checkinNocheckin_id, condition_id, condition_name, logged_on, severity, note, treatment_done.
createdNofalse: that day already had a check-in, and only the fields passed changed.
messageNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
idempotent_replayNotrue when this request_id already ran: the first result, nothing new written.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations only declare this is a non-destructive, closed-world write. The description goes well beyond them by disclosing the self-vs-person visibility rule on the Day Card, the one-per-condition-per-day uniqueness constraint, the logged_on default, the $0.05 cost, and the API key requirement. It stops short of stating the failure mode on a duplicate day's check-in.

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?

The definition is dense and front-loaded, leading with what is saved before moving to visibility, fields, defaults, and cost. The telegraphic semicolon phrasing is efficient but slightly clipped, and the opening clause about 'the same explicit subject_type/person_id' is awkwardly worded.

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

Completeness4/5

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

With an output schema present, return values need no explanation, and the description covers the key operational facts: uniqueness, visibility, field defaults, cost, and auth. The remaining gap is the duplicate-day behavior and how this relates to update_condition for correcting an existing entry.

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

Parameters3/5

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

Schema description coverage is 89%, so the schema already documents severity bounds, the logged_on format/default, the person_id requirement, and the request_id idempotency behavior. The description restates the severity range and logged_on default but adds no syntax or semantics the schema lacks, which is the expected baseline when the schema does the heavy lifting.

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?

The description gives a specific verb and resource ('Save a day's check-in for one condition') plus the scoping constraint that the check-in is tied to a single explicit subject_type/person_id. An agent can distinguish this from create_condition, update_condition, record_health_trend, and log_sleep 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 Guidelines3/5

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

Usage is implied rather than routed: it explains that self check-ins surface on the Day Card while another person's do not, and that only one check-in exists per condition/day. However, it never says what to do when a check-in already exists (update vs. error) or names an alternative tool for reading or amending this data, leaving the agent to infer the workflow.

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

log_eventLog Event (calendar write)AInspect

MUTATES the calendar (non-food events, tasks, sleep). Replies owed ('what to reply to X') go to create_pending_reply. Woke at X: end_time. Requires title plus event_date or date (YYYY-MM-DD, YYYY-MM, or YYYY). A task with no deadline: ask for a date, never fill in today. Soft dates preserve date_precision. A story or anecdote about something that already happened is a moment: use log_moment (with event_id when it is about an event here), not a second event. Optional: event_time (alias time), end_date, end_time, location, description (alias notes), category, visibility, timezone, reminder fields, sharing/people, scoreboard (structured operating status; keep description for notes), and idempotency_key. Sleep with only a wake time ('I woke at 11:15'): category sleep, event_date the day they woke, end_time 11:15 and no event_time. Don't invent a bedtime; add it later with update_event event_time (a bedtime the night before also sets event_date to that night and end_date to the wake day). Timed events default to the profile push-reminder timing; all-day events stay off and explicit reminder_enabled=false opts out. Prefer log_travel for trips/residences. Unknown people do not fail the write. Public events return share_url. Requires API key or OAuth with context scope; share tokens cannot write. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
cityNoStructured city (composed into location if location omitted)
dateNoAlias for event_date.
timeNoAlias for event_time.
withNoAlias for people.
notesNoAlias for description.
titleYesEvent title (required).
amountNoIf set, also writes a /money transaction (dual-write). Prefer log_transaction / import_venmo_gmail for cashflow-first digs.
peopleNoPeople names or person UUIDs to tag (event_people role=with).
sourceNoWith amount: venmo/zelle/…
countryNoStructured country
categoryNoe.g. sleep, funeral, family, work, travel. Stored as events.category and event_type.
currencyNo
end_dateNoOptional end date YYYY-MM-DD (multi-day, or a night that ends the next day).
end_timeNoOptional end time (same formats as event_time). Works without event_time, e.g. a wake time alone.
locationNoFree-text place. Or pass city + country.
timezoneNoIANA timezone for wall-clock display (e.g. America/New_York).
directionNoWith amount: from=received, to=sent
image_urlNoOptional cover image URL for Explore + /e share cards.
person_idNoWith amount: CRM person UUID
event_dateNoStart date YYYY-MM-DD, YYYY-MM, or YYYY (required). Alias: date. For a task, its real due date; if the user gave none, ask. Don't use today.
event_timeNoOptional start time: 8pm, 20:00, or 20:00:00. Alias: time. Leave it out when nobody said it.
event_typeNoOptional event kind (e.g. todo, goal, work). Worked out from category when omitted.
person_idsNoOwned person UUIDs to tag (user-scoped).
request_idNoAlias for idempotency_key (preferred by some clients).
scoreboardNoOperating status as data (not description prose). state is required when the event has no scoreboard yet. On update_event fields merge; a null field clears it; scoreboard null removes the record.
share_withNoDayze profile handles to add as collaborators via shared_events (e.g. ["boof"]). Leading @ stripped.
visibilityNoCalendar visibility. public → appears on /explore and gets share_url https://dayze.com/e/{id}. Default private.private
descriptionNoNotes about the event. Alias: notes.
external_idNoWith amount: idempotency key
person_nameNoOne person to tag, by name.
external_urlNo
people_namesNoAlias for people.
date_precisionNoSoft date precision stored in metadata. YYYY/YYYY-MM dates default to year/month.
idempotency_keyNoOptional client key (max 128 chars). Retries with the same key return the original result instead of creating a duplicate. If omitted, Dayze fingerprints args for ~15 minutes.
source_gmail_idNoGmail message id the event came from (kept in metadata).
reminder_enabledNoTimed events default to a push reminder when omitted. Set false only for an explicit opt-out; all-day events stay off.
mirror_transactionNoDefault true when amount is set; set false to keep calendar-only
reminder_minutes_beforeNoPush lead time. Uses the profile reminder_timing when omitted (fallback 30 minutes).
source_email_participantsNoSender/To/Cc identities from source_gmail_id. Contacts are proposed only on one exact stored email match; shared/unknown/automated addresses stay unresolved. Do not also pass people fields.

Output Schema

ParametersJSON Schema
NameRequiredDescription
eventYesA Dayze calendar event record.
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
people_taggedYes
unresolved_peopleYes
life_state_rebuiltYes
people_name_matchedYes
import_hygiene_flagsYes
people_email_anchoredYes
unresolved_source_peopleYes

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare this is a non-destructive mutation, and the description adds substantial context beyond them: auth requirements ('API key or OAuth with context scope; share tokens cannot write'), cost ($0.10), idempotency behavior, unknown-people handling, public share_url returns, and reminder defaults. No contradiction with annotations.

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

Conciseness3/5

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

The description is a very long, dense paragraph. It is front-loaded with the core purpose, but the wake-time sleep rule and bedtime guidance are restated, and the wall of text is difficult to scan despite the tool's complexity.

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 39-parameter mutation tool with nested objects and an output schema, the description covers auth, cost, error handling, sibling routing, and edge cases thoroughly. Return values need not be explained because an output schema exists, and nothing critical for correct invocation is missing.

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 95%, so the schema already documents nearly all parameters and the baseline is 3. The description still adds semantic rules beyond the schema, such as mapping a wake-time-only sleep entry to category/event_date/end_time, preserving date_precision for soft dates, and clarifying scoreboard versus description, though much parameter detail is redundant with the schema.

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?

The description opens with a specific verb and resource: 'MUTATES the calendar (non-food events, tasks, sleep).' It immediately scopes the tool and distinguishes it from siblings such as create_pending_reply, log_moment, and log_travel.

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

Usage Guidelines5/5

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

Explicit routing rules are given for when to use alternatives: replies owed go to create_pending_reply, stories/anecdotes go to log_moment, and trips/residences go to log_travel. It also gives detailed conditions for tasks without deadlines and sleep entries, leaving little to inference.

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

log_expenseLog ExpenseAInspect

Create an outgoing expense only. For money received (Venmo/Cash App/PayPal/Zelle) use log_transaction with direction=from and type=income. Lending a contact cash: category "IOU lend" + person_id (one call creates the IOU they owe and shows the money out once). ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo
tagsNoOptional tags. Prefer project: / ext: / rail: grammar.
notesNoFree text about the payment. Alias: description.
amountYes
sourceNoPayment rail or app: venmo, zelle, cashapp, card, cash, … Alias: payment_method.
projectNoVenture/project label → stored as project:{slug} tag (e.g. Max Soko poker venture)
categoryNo"IOU repayment" = paying a contact back; "IOU lend" = lending a contact cash (both need person_id).
currencyNo
iou_typeNoloan (default) or invoice. Invoice = unpaid receivable: no Finance outflow on create; payment is income "Invoice payment". Use for invoice/receivable phrasings; "I lent…" → loan.
merchantNoPayee name (defaults when omitted)
person_idNoThe contact paid (needed for "IOU repayment" / "IOU lend").
cash_movedNoWith category "IOU lend": true (default) = cash changed hands as a loan (shows in Finance); false = an owed share, e.g. of a dinner logged as its own expense (IOU only). Ignored for iou_type invoice.
request_idNoClient idempotency key (retries return original result).
descriptionNoAlias for notes.
external_idNoThe provider's id for this payment; dedupes imports. Without a request_id it is required.
person_nameNoThe contact by name, when there is no person_id (IOU categories need one or the other).
client_labelNoOptional free-text client label for an invoice IOU.
payment_methodNoAlias for source.
idempotency_keyNoAlias for request_id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
expenseNoExpense/income transaction row.
messageNo
expense_idNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations declare a non-destructive write with no open-world access. The description goes beyond them by disclosing cost ($0.10), an auth requirement (API key), and the important side effect that one "IOU lend" call creates the receivable and records the outflow simultaneously. It stops short of describing what the response returns, but the added operational context is substantial.

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-loads the core purpose, then alternatives, then the special IOU case, then cost/auth as a trailing parenthetical. Every sentence carries distinct information, though the IOU sentence is dense and could be unpacked slightly.

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

Completeness4/5

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

With an output schema present, return values need no explanation, and the description covers the main outgoing, income-alternative, and IOU flows. Given 19 parameters and the write semantics, the definition is largely sufficient, though it says nothing about the many IOU/invoice-related fields beyond the one lending case.

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

Parameters3/5

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

Schema description coverage is 84%, so the schema already carries most parameter meaning. The description adds cross-parameter semantics by tying category "IOU lend" to person_id and explaining the single-call IOU effect, which is value beyond the per-field descriptions, but this only touches a couple of the 19 parameters.

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?

States a specific verb and resource ("Create an outgoing expense") and immediately bounds scope with "only," which distinguishes it from log_income and the general log_transaction. An agent can tell which tool to reach for 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 Guidelines5/5

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

Explicitly routes the wrong-case to an alternative ("For money received ... use log_transaction with direction=from and type=income") and names the exact parameters to use. It also describes the lending-contact case with the required category/person_id combination, so the when-to-use and when-not-to-use conditions are both covered.

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

log_favorite_songLog Favorite Song (music write)AInspect

MUTATES the authenticated user favorite tracks list at /music. Use when they favorite or save a song — do not store this as a chat memory or in music_preferences. Example: “Henry Mancini - Piano And Strings (1995 Remastered)” → log_favorite_song({ track: "Henry Mancini - Piano And Strings (1995 Remastered)" }) or title + artist. Optional year_note, source_url, and person_id from get_people to link the track to one owned contact. Requires API key or OAuth with scope context. Share tokens cannot write. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoAlias for source_url
titleNoTrack title (required unless track blob parses)
trackNoOptional "Artist - Title (year remaster)" blob
artistNoArtist name (required unless track blob parses)
person_idNoOptional owned contact id from get_people; the track appears on that contact profile and shared history
year_noteNoOptional year or remaster note
request_idNoClient idempotency key (retries return original result).
source_urlNoOptional https link
remaster_noteNoAlias for year_note
idempotency_keyNoAlias for request_id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
trackYesSaved favorite-track record.
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
createdYesTrue when a new favorite was created.
messageYes
track_idYes
provenanceNoWhich connector wrote the record and which connected Dayze account received it.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations only declare readOnlyHint=false, destructiveHint=false, openWorldHint=false. The description goes further by naming the auth requirement (API key or OAuth with scope context), the fact that share tokens cannot write, and the $0.10 cost. It stops short of stating reversibility or what happens on duplicate tracks, so it is strong but not exhaustive.

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-loads the mutation and the store path, then usage, then example, then constraints — a sensible order. Slightly redundant in restating API-key requirement once in prose and again in the trailing '(API key required)' parenthetical.

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

Completeness4/5

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

With an output schema present, return values needn't be described, and idempotency is covered by the request_id schema entry. Auth, cost, exclusions, and the blob format are all present, leaving only edge cases like duplicate handling and reversibility unaddressed.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3 and the description adds only a concrete example of the 'Artist - Title (year remaster)' track blob and the title+artist alternative. The person_id/get_people linkage it mentions is already spelled out in the schema, so most of its parameter value is redundant.

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 the authenticated user favorite tracks list at /music' — and distinguishes the target store from 'music_preferences' and chat memory in the same breath. An agent can tell this apart from log_moment/log_interaction without opening the schema.

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

Usage Guidelines5/5

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

Explicitly states the trigger ('Use when they favorite or save a song') and names the two wrong destinations to avoid (chat memory, music_preferences). That is a when-to-use plus an exclusion, which is the strongest form of routing guidance.

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

log_foodLog Food (diary write)AInspect

MUTATES the authenticated user Food Diary and calendar. Use when they ate or drank — do not store this as a chat memory. Supports dish_items for multiple named dishes with optional price and rating. Example: “I had Mee Pok for late lunch with my parents” → log_food({ what: "Mee Pok", kind: "meal", meal_period: "late lunch", with: ["my parents"] }). Optional: calories (user-stated kilocalories), place/merchant, amount, consumed_at (ISO). Explicit calories override the automatic heuristic. Resolves with/Mum/Dad via person aliases; unknown names do not fail the food write. Tags companions on the mirrored event. Rebuilds life_state. Requires API key or OAuth with scope context. Share tokens cannot write. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNo
whatYesWhat they ate or drank (required). Example: Mee Pok
withNoCompanion names, aliases, ids, or group tokens. "my parents" / Mum / Dad resolve via aliases; "family" expands to CRM rows with family relationship labels
notesNo
placeNoVenue or location
amountNoPrice if mentioned
paid_byNoWho paid (name or alias)
caloriesNoKilocalories explicitly stated by the user; overrides the automatic heuristic and is stored with user provenance
currencyNoISO currency, e.g. SGD
merchantNoRestaurant, stall, or shop
dish_itemsNoOrdered dishes in this entry. Each requires name; price and rating are optional.
person_idsNoOwned person UUIDs to tag (user-scoped)
request_idNoClient idempotency key (retries return original result).
consumed_atNoISO instant; wins over meal_period
meal_periodNoSpoken period when consumed_at is omitted, e.g. "late lunch"
people_namesNoAlias for with
idempotency_keyNoAlias for request_id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
food_idYes
messageYes
event_idYes
food_logYesSaved Food Diary row.
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
people_taggedYes
unresolved_peopleYes
life_state_rebuiltYes

TDQS

A4.4/5.0
Behavior5/5

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

Annotations only cover readOnly/destructive/openWorld, but the description adds substantial behavioral context: it mirrors a calendar event, tags companions on that event, rebuilds life_state, resolves aliases (with/Mum/Dad), tolerates unknown names without failing, and discloses write auth requirements and a $0.10 cost. This is well beyond what the annotations convey.

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?

The mutation and usage cue are front-loaded, and the worked example plus optional-parameter summary are useful rather than padding. It is dense with parenthetical auth and pricing details at the tail, which slightly dilutes scannability but almost every sentence carries information.

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 17-parameter mutation tool with an output schema, the description covers the essentials an agent needs: trigger, exclusions, side effects (calendar mirror, life_state rebuild, companion tagging), alias resolution behavior, auth model, and cost. Return values are legitimately left to the output schema.

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

Parameters3/5

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

Schema description coverage is 88%, so the schema already documents most parameters (what, with, calories, consumed_at, dish_items, etc.). The description largely restates this (calories override the heuristic, dish_items with price/rating, consumed_at wins over meal_period), so it adds only marginal value over the structured schema — the baseline 3 for high coverage is appropriate.

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?

The description leads with a specific verb+resource+'MUTATES the authenticated user Food Diary and calendar', and immediately distinguishes itself from sibling tools by saying 'do not store this as a chat memory'. An agent can tell it apart from update_food, log_expense, and log_moment without opening a 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?

It states the trigger condition ('Use when they ate or drank') and an explicit exclusion ('do not store this as a chat memory'), plus auth constraints ('Requires API key or OAuth'; 'Share tokens cannot write'). It stops short of naming the specific sibling alternatives for adjacent cases (e.g. log_expense for costs), so it lands just below full routing guidance.

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

log_incomeLog IncomeAInspect

Record money received (Stripe, refunds, payroll, Venmo). log_transaction with type income and direction from already set (pass neither). Use external_id for Stripe/Gmail idempotency. A contact paying back an IOU: category "IOU repayment" + person_id (lowers the IOU, shows the money once). A contact lending the user cash: category "IOU lend" + person_id (creates the IOU the user owes, shows the money once). ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo
tagsNoOptional tags. Prefer project: / ext: / rail: grammar.
notesNoFree text about the payment. Alias: description.
amountYes
sourceNo
projectNoVenture/project label → stored as project:{slug} tag (e.g. Max Soko poker venture)
categoryNoe.g. Salary, Gift, Refund. "IOU repayment" and "IOU lend" need person_id.
currencyNo
iou_typeNoloan (default) or invoice. Invoice = unpaid receivable: no Finance outflow on create; payment is income "Invoice payment". Use for invoice/receivable phrasings; "I lent…" → loan.
merchantNo
person_idNo
cash_movedNoWith category "IOU lend": true (default) = cash changed hands as a loan (shows in Finance); false = an owed share, e.g. of a dinner logged as its own expense (IOU only). Ignored for iou_type invoice.
request_idNoClient idempotency key (retries return original result).
descriptionNoAlias for notes.
external_idNo
person_nameNoThe contact by name, when there is no person_id (IOU categories need one or the other).
client_labelNoOptional free-text client label for an invoice IOU.
payment_methodNo
idempotency_keyNoAlias for request_id.
not_iou_repaymentNotrue only when income from a contact with an open IOU is unrelated to it.

Output Schema

ParametersJSON Schema
NameRequiredDescription
typeNo
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
messageNo
event_idNo
directionNo
duplicateNo
expense_idNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
transactionNoExpense/income transaction row.
transaction_idNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations declare the safety profile (non-read-only, non-destructive), and the description adds context annotations don't carry: the $0.10 cost and API-key requirement, plus side effects ('lowers the IOU', 'creates the IOU the user owes', 'shows the money once'). It doesn't cover validation failures or duplicate handling in depth, but the IOU side-effect disclosure is genuinely valuable.

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-loads the core purpose, then adds IOU nuance in compact parenthetical clauses. Dense but every sentence carries actionable content; the IOU pairing is slightly terse but not wasteful.

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

Completeness4/5

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

With an output schema present, return values needn't be described, and the description covers the tricky IOU/idempotency semantics an agent must get right for a 20-param write tool. Minor gaps remain on the many peripheral params, but the critical decision logic is present.

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 only 60%, so the description must compensate, and it does for the highest-risk params: it ties category ('IOU repayment'/'IOU lend') to person_id, explains external_id for Stripe/Gmail idempotency, and clarifies the IOU flow. It leaves several params (source, merchant, currency, payment_method, tags) unexplained, keeping it short of a 5.

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?

States a specific verb+resource ('Record money received') and immediately lists concrete examples (Stripe, refunds, payroll, Venmo). It also explicitly differentiates itself from the sibling log_transaction by noting income/type and direction are pre-set, so an agent can route correctly without opening either 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?

Gives clear when-to-use guidance with two worked scenarios (contact repaying an IOU vs. a contact lending cash), including which category and person_id to supply. It routes the generic case to log_transaction, though it doesn't state explicit exclusions for other income-like tools.

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

log_interactionLog InteractionAInspect

Contacts: log that the user was in touch with a contact ('I replied to Vadim', 'called Mum'): kind message, call, meeting, note, check_in or thought_of. Private to the owner. person_id (an owned contact) or person_name (linked only on one resolve_person match; otherwise nothing is logged and the candidates come back). With reply_id it also marks that Pending Reply sent: this interaction is the reply's one write-back (a later resolve adds no second). summary: one line in your own words, never email text or a subject. occurred_at: when it happened (ISO), default now; not in the future. Never sends anything. Requires API key or OAuth with context.write. ($0.05; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoDefault message.
summaryNoOne line (max 280) in your own words. Never the email body, subject or sender.
reply_idNoA Pending Reply (get_pending_replies) this closes as sent.
person_idNoAn owned contact id.
request_idNoClient idempotency key (retries return original result).
occurred_atNoWhen it happened (ISO date-time). Default now.
person_nameNoThe contact as the user said it ("Vadim"); linked only on one match.
idempotency_keyNoAlias for request_id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
replyYesOne reply the user owes (Inbox → Pending Replies). Dayze never sends it.
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
createdYesFalse when it was already stored (a retry, or the reply's write-back).
messageYes
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
interactionYesThe interaction in the contact's history (private to the owner).
reply_resolvedYesTrue when this call marked the reply sent.
life_state_rebuiltYes

TDQS

A4.6/5.0
Behavior5/5

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

Despite readOnlyHint=false being the only meaningful annotation, the description adds substantial behavioral context: it is private to the owner, it never sends anything, requires API key or OAuth with context.write, costs $0.05, and explains the reply_id write-back rule (a later resolve adds no second). It also discloses the failure mode for person_name resolution ('otherwise nothing is logged and the candidates come back').

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?

Purpose and the enumeration of kinds are front-loaded, and the parenthetical parameter glosses earn their space by carrying constraint detail. The single dense paragraph is efficient but slightly packed, which costs it the top score.

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 explained, and the description still covers auth, cost, privacy, side effects, resolution behavior and idempotency expectations. Nothing an agent needs to invoke this correctly is missing.

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 100%, so the baseline is 3, but the description adds real semantics beyond the schema: the one-match linking rule for person_name, the single-write-back meaning of reply_id, the 'not in the future' constraint on occurred_at, and the 'never email text or a subject' restriction on summary. The request_id/idempotency_key distinction is left entirely to the schema.

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?

The description states a specific verb and resource ('log that the user was in touch with a contact') and enumerates the concrete interaction kinds it handles. Examples ('I replied to Vadim', 'called Mum') make it trivially distinguishable from siblings like log_moment, log_event or log_place_visit.

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?

It gives the trigger conditions and named examples for when to use it, plus the specific relationship to resolve_person and get_pending_replies. It stops short of explicitly excluding near-neighbors such as log_moment/log_event, so the agent must infer those boundaries.

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

log_momentLog Moment (story or memory)AInspect

Save a past story or memory as a private moment. Plans go to log_event; a touchpoint with a contact to log_interaction. Requires title, and moment_date (YYYY-MM-DD, YYYY-MM or YYYY; alias date) unless event_id is given. With event_id (an owned event the story is about) it creates a NEW moment linked to that event and takes the event's date and location when you pass none; the event itself is never changed, converted or deleted, and one event can have many moments. Don't also save the story as an event. Optional: description (the longer story), moment_date_precision (exact, month, year, circa), end_date, moment_type (default memory), location_name (only a place the user said), person_ids (owned contacts; any other id saves nothing), people_names (tag saved contacts only, never created), cover_image_url / media_urls (https links), tags. Always private: there is no visibility argument; the owner shares a moment in Dayze. Fix it later with update_moment. Requires API key or OAuth with context.write. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoAlias for moment_date.
tagsNoOptional short tags (max 20, 40 characters each).
titleYesThe story in a few words (max 200), e.g. "Mia called the moon a banana".
end_dateNoOptional last day YYYY-MM-DD, for a moment that spans days.
event_idNoA calendar event this story is about (owned). Links the new moment to it; the event is not changed.
locationNoAlias for location_name.
media_urlsNoOptional https image links (max 10).
person_idsNoOwned contact ids of people in the story (max 25). An id that isn't the user's saves nothing.
request_idNoClient idempotency key (retries return original result).
descriptionNoThe longer story, in the user's words where possible.
moment_dateNoWhen it happened: YYYY-MM-DD, YYYY-MM or YYYY (alias date). With event_id and no date, the event's date is used. Otherwise required.
moment_timeNoOptional local time-of-day when it happened (HH:mm or HH:mm:ss). Null/empty = date-only. Not the row created_at.
moment_typeNoDefault memory.
people_namesNoNames the user said; tagged only when they match a saved contact (never created). Unmatched names come back in unresolved_people.
location_nameNoWhere it happened, only as the user said it. With event_id and no place, the event's location is used. Alias: location.
cover_image_urlNoOptional https image link for the moment's cover.
idempotency_keyNoAlias for request_id.
moment_date_precisionNoHow exact the date is. YYYY-MM and YYYY default to month and year; circa for "around then".

Output Schema

ParametersJSON Schema
NameRequiredDescription
momentYesA moment: a story or memory, private to the owner. event_id links the event it is about.
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
messageYes
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
invalidatesNo
linked_eventYesThe event this moment links, unchanged by the call; null when none.
people_taggedYes
unresolved_peopleYespeople_names that matched no saved contact (not tagged, not created).
inherited_from_eventYesmoment_date and/or location_name, when taken from the linked event.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations only declare readOnly=false, destructive=false, openWorld=false; the description layers on substantive behavior: moments are always private with no visibility argument, event_id never mutates/converts/deletes the event, one event may hold many moments, and unowned person ids silently save nothing. It stops short of describing response shape or whether a duplicate story is rejected (there is a preview_moment_duplicates sibling that hints at this).

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 purpose and routing before the parameter walkthrough, and most sentences carry behavioral rules. It is dense and restates some schema-visible details (aliases, default moment_type), which trims it below a 5.

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 an 18-parameter mutation tool it covers purpose, alternatives, required/conditional parameters, privacy semantics, side-effect guarantees, auth scope, cost, and a repair path. Output schema exists, so return values need not be spelled out. Only idempotency (request_id/idempotency_key) goes unmentioned, which is minor.

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 100%, so the baseline is 3, but the description adds cross-parameter conditional logic not obvious from the schema: with event_id the event's date and location are inherited 'when you pass none', person_ids must be owned or they save nothing, and people_names only tag existing contacts. That synthesis of interacting defaults is real added value.

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+resource+scope: 'Save a past story or memory as a private moment.' It immediately routes sibling traffic away ('Plans go to log_event; a touchpoint with a contact to log_interaction'), so an agent can distinguish it from log_event and log_interaction without opening schemas.

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

Usage Guidelines5/5

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

Explicit when-to-use and when-not-to-use guidance: plans→log_event, contact interactions→log_interaction, and a hard exclusion 'Don't also save the story as an event.' It also names the follow-up path ('Fix it later with update_moment') and the required auth scope.

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

log_movementLog MovementBInspect

Log one provenance-backed movement segment. Origin, destination, timestamps, source, and external_id are required for a deduplicated route history. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
modeYes
originYes
sourceYes
metadataNo
providerNo
arrived_atYes
confidenceNo
expense_idNo
request_idNoClient idempotency key (retries return original result).
departed_atYes
destinationYes
external_idYes
origin_cityNo
origin_addressNo
origin_countryNo
route_geometryNo
distance_metersNo
geometry_sourceNo
idempotency_keyNoAlias for request_id.
destination_cityNo
duration_secondsNo
source_referenceNo
destination_addressNo
destination_countryNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
createdNo
messageNo
movementNo
duplicateNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
movement_idNo

TDQS

B3.1/5.0
Behavior4/5

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

Annotations already declare this is a non-destructive write with no open-world side effects. The description adds genuinely new operational context the annotations cannot convey: a $0.10 cost per call, an API-key requirement, and that providing the required fields yields deduplicated route history. These are useful invocation-level facts beyond the structured hints.

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?

Two tightly written sentences, front-loaded with the core action, with the cost/auth caveat in a trailing parenthetical. Nothing is wasted, though the space saved comes partly at the expense of parameter detail.

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

Completeness2/5

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

For a 24-parameter mutation tool with nested objects and near-zero schema coverage, the description is thin. An output schema exists so return values need no explanation, and annotations cover safety, but the large set of optional fields (geometry, expense linkage, confidence, idempotency) is left entirely undocumented for an agent to discover on its own.

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

Parameters2/5

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

Schema description coverage is only 8% across 24 parameters, so the schema carries almost none of the semantic burden. The description names five required fields (origin, destination, timestamps, source, external_id) but omits the required 'mode' and says nothing about the ~17 optional parameters (metadata, route_geometry, confidence, expense_id, geometry_source, etc.). It does not compensate for the coverage gap.

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

Purpose4/5

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

The description states a specific verb and resource: 'Log one provenance-backed movement segment.' The 'one segment' scope and 'provenance-backed' qualifier distinguish it meaningfully from broad siblings like log_travel. It stops short of naming a competing tool, but the purpose is unambiguous.

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

Usage Guidelines2/5

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

There is no explicit guidance on when to use log_movement versus log_travel, log_place_visit, or log_event. The mention that certain fields are 'required for a deduplicated route history' hints at a data-quality precondition but does not describe when this tool is the right choice.

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

log_place_visitLog Place VisitAInspect

MUTATES place_visits for map/history digs (Uber dropoff, address evidence). Required: place (or place_id) + arrived_at/date. Optional: departed_at, source (uber|mcp|…), evidence_expense_id (idempotent), city/country/address. Prefer this over stuffing streets only into expenses. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
cityNo
dateNoAlias for arrived_at
nameNoAlias for place
placeNo
sourceNo
addressNo
countryNo
place_idNo
arrived_atNoISO or YYYY-MM-DD
confidenceNo
request_idNoClient idempotency key (retries return original result).
departed_atNo
idempotency_keyNoAlias for request_id.
evidence_event_idNo
evidence_expense_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
placeNoCanonical place record.
visitNoConfirmed same-day outing with visit_date and evidence_refs. A typed place_visits row is primary and carries visit_id (= id); linked event/GPS evidence is reconciled without increasing the count.
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
messageNo
place_idNo
duplicateNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
created_placeNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false and destructiveHint=false, but the description adds meaningful context beyond them: a cost figure ($0.10), an auth requirement (API key required), and idempotency behavior for evidence_expense_id/request_id. It correctly frames the operation as a mutation without contradicting the non-destructive hint.

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 verb and packed into a tight, information-dense block where each clause carries required/optional/cost data. The parenthetical run-ons are slightly dense but nothing is wasted.

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

Completeness4/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 explained. For a 15-parameter mutation tool the description covers the required inputs, the highest-value optionals, cost, and auth, leaving only minor param gaps.

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?

With only 33% schema coverage, the description compensates by naming the required fields (place or place_id, arrived_at/date), key optionals, and even inline enum-like values for source (uber|mcp) that the schema lacks. It leaves a few params (confidence, evidence_event_id) undocumented, so it is not fully compensating.

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?

The description opens with a specific verb+resource ('MUTATES place_visits') and scopes it to a concrete use case ('map/history digs (Uber dropoff, address evidence)'). An agent can immediately distinguish this write tool from read siblings like get_place_visits and from delete_place_visit.

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?

It provides clear usage context and an explicit alternative preference ('Prefer this over stuffing streets only into expenses'), which tells the agent when this tool beats a competing behavior. It stops short of naming sibling tools or stating exclusions, so it is not a full 5.

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

log_sleepLog SleepBInspect

Sleep: log overnight or nap. Cross-midnight OK (e.g. 14:00→03:00 = 13h / 780m). ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
notesNo
sourceNo
qualityNo
ended_atYesISO end
timezoneNo
request_idNoClient idempotency key (retries return original result).
sleep_typeNo
started_atYesISO start
timezone_endNo
timezone_startNo
idempotency_keyNoAlias for request_id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNo
sleepNo
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
messageNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.

TDQS

B3.4/5.0
Behavior4/5

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

Annotations already establish it is a non-read-only, non-destructive, closed-world write. The description adds genuinely new context: cross-midnight handling semantics (14:00→03:00 = 13h) and operational constraints (cost $0.10, API key required). It stops short of describing dedupe behavior, though request_id in the schema partially covers that.

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?

Three dense fragments, front-loaded with purpose then the cross-midnight rule then cost/auth. No filler, though the parenthetical pricing/auth note is a slightly abrupt tack-on.

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

Completeness3/5

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

For a log tool with an output schema (so return values need no explanation) and annotations covering the safety profile, the description covers purpose, edge-case semantics, and operational cost/auth. It remains thin on the many undocumented optional parameters and on how duplicate/near-duplicate entries are handled.

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

Parameters2/5

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

With 11 parameters and only 36% schema description coverage, the description carries most of the burden, yet it only illuminates the required started_at/ended_at pair via the cross-midnight example. The nine undocumented fields (notes, source, quality, timezone variants, sleep_type) get no added meaning.

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

Purpose4/5

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

States a specific verb+resource ('log ... Sleep') and scopes it to new entries ('overnight or nap'), which implicitly contrasts with get_sleep/get_sleep_summary/update_sleep siblings. It never explicitly names those alternatives, so it falls short of a 5.

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

Usage Guidelines3/5

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

The description implies this is the entry-creation path ('log'), but gives no explicit when-to-use vs when-to-update guidance and never names update_sleep as the alternative for correcting an existing record. Usage is inferable from the tool name rather than stated.

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

log_transactionLog TransactionAInspect

Income/expense/transfer write. direction=from + type=income for Venmo/Stripe/refunds received. Positive amount; external_id dedupes imports. Optional project/tags. Zelle always USD. Optional mirror_event creates a calendar Money · annotation (ledger is still the source of truth for /money). IOU repayment ("Mark paid me back $200"): category "IOU repayment" + person_id — one call lowers the IOU and shows the money once (direction from = they paid the user, to = the user paid them). A cash loan ("I lent Mark $200"): category "IOU lend" + person_id — one call creates the IOU and shows the money once on that day (direction to = the user lent them, from = they lent the user); cash_moved: false for an owed share (IOU only). A plain income from a contact with an open IOU is refused unless not_iou_repayment: true; the same money as an already-recorded repayment or loan comes back as duplicate. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo
tagsNoOptional tags. Prefer project: / ext: / rail: grammar.
typeNo
notesNoFree text about the payment. Alias: description.
amountYes
sourceNo
projectNoVenture/project label → stored as project:{slug} tag (e.g. Max Soko poker venture)
categoryNoLedger category (e.g. Salary, Gift, Refund, Transfer in, Food & Dining). "IOU repayment" = a contact paying back a loan IOU; "IOU lend" = a cash loan; "Invoice payment" = collecting an unpaid invoice (need person_id).
currencyNo
iou_typeNoloan (default) or invoice. Invoice = unpaid receivable: no Finance outflow on create; payment is income "Invoice payment". Use for invoice/receivable phrasings; "I lent…" → loan.
merchantNo
directionYes
person_idNo
account_idNoStable provider account identity for imported payments.
cash_movedNoWith category "IOU lend": true (default) = cash changed hands as a loan (shows in Finance); false = an owed share, e.g. of a dinner logged as its own expense (IOU only). Ignored for iou_type invoice.
message_idNo
request_idNoClient idempotency key (retries return original result).
descriptionNoAlias for notes.
external_idNo
person_nameNoThe contact by name, when there is no person_id (IOU categories need one or the other).
client_labelNoOptional free-text client label for an invoice IOU.
mirror_eventNoAlso insert optional Money · calendar event (default false)
payment_methodNo
idempotency_keyNoAlias for request_id.
extractor_versionNo
not_iou_repaymentNotrue only when income from a contact with an open IOU is unrelated to it.

Output Schema

ParametersJSON Schema
NameRequiredDescription
typeNo
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
messageNo
event_idNo
directionNo
duplicateNo
expense_idNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
transactionNoExpense/income transaction row.
transaction_idNo

TDQS

A4.2/5.0
Behavior5/5

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

Annotations only declare it is a non-destructive write; the description adds substantial behavior beyond that: per-call cost ($0.10) and API-key requirement, external_id dedupe for imports, request_id/idempotency_key retry semantics, the refusal of plain income from a contact with an open IOU, duplicate detection for already-recorded repayments, and the mirror_event side effect with the ledger remaining source of truth.

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?

Purpose and cost are front-loaded, and each subsequent clause encodes a distinct business rule rather than filler. It is dense and reads as a run-on, but given the 26-parameter surface the length is largely earned.

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

Completeness4/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 covers the tricky IOU/loan/invoice flows, cost, auth and idempotency, leaving only minor gaps such as currency/Zelle and transfer-type specifics relative to the parameter set.

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?

With 26 params and only 54% schema coverage, the description carries real weight: it explains direction semantics for IOU cases, positive-amount convention, external_id dedupe, optional project/tags, category values ('IOU repayment', 'IOU lend'), cash_moved=true/false meaning, and not_iou_repayment. This meaningfully compensates for the undocumented half of the schema.

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

Purpose4/5

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

Opens with 'Income/expense/transfer write,' a specific verb plus resource that tells the agent this records money movements across all three types. It does not, however, distinguish itself from siblings like log_income, log_expense, record_purchase or record_sale, so the agent cannot tell from the text alone why it should pick this tool over those.

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?

Gives concrete when-to-use routing for real scenarios: 'direction=from + type=income for Venmo/Stripe/refunds received', IOU repayment via category+person_id, cash loan via 'IOU lend', and the refusal condition requiring not_iou_repayment. It stops short of naming alternatives or exclusions against the log_income/log_expense siblings.

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

log_travelLog TravelAInspect

MUTATES trips (+ optional calendar travel event). Prefer this over free-text log_event for map/history. Required: city + start_date. Optional: country, end_date, kind (trip|residence|soft_pin), confidence (confirmed|likely|possible), evidence, title, mirror_event. Soft pins default to status=possible and stay off cities/map until confidence=confirmed. The calendar event is private. Zelle/Venmo money belongs in log_transaction — not here. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
cityYes
dateNoAlias for start_date
kindNo
titleNo
countryNo
end_dateNo
evidenceNoSource note (Gmail id, address, etc.)
confidenceNo
request_idNoClient idempotency key (retries return original result).
start_dateNoYYYY-MM-DD
mirror_eventNoAlso insert category=travel calendar event (default true)
idempotency_keyNoAlias for request_id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
kindNo
noteNo
tripNo
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
messageNo
event_idNo
confidenceNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the annotations (which only cover readOnly/destructive/openWorld), the description discloses soft-pin status behavior (defaults to possible, stays off cities/map until confirmed), calendar event privacy, cost ($0.10), and the API-key requirement. This is rich behavioral context an agent cannot get from structured fields.

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 mutating nature and the sibling routing, then parameters, then caveats. Dense and largely waste-free, though the parameter enumeration reads as a compact block rather than a fully scannable structure.

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?

Given an output schema exists, return values need not be explained, and the description covers behavior, constraints, alternatives, cost, and auth. Nothing needed to call it correctly is missing.

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?

The description enumerates required and optional fields and explains the semantics of the enums (kind, confidence) and soft-pin defaulting, adding meaning beyond the 50%-covered schema. Minor gap: it names start_date as required while the schema only lists city, and omits the date/request_id/idempotency_key aliases.

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?

States a specific verb and resource ("MUTATES trips" plus an optional calendar travel event), and immediately differentiates itself from siblings by naming log_event and log_transaction. An agent can tell what this does without opening the schema.

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

Usage Guidelines5/5

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

Explicitly routes the agent: "Prefer this over free-text log_event for map/history" gives the when, and "Zelle/Venmo money belongs in log_transaction — not here" gives an explicit when-not with the correct alternative. Nothing is left to inference.

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

merge_memoryMerge Exact MemoriesA
Destructive
Inspect

Preview first, 30-day undo. Retire exact duplicates while keeping the named canonical memory. Preview shows every retired id and distinct provenance; the receipt restores all rows for 30 days. Similar wording is refused. Reviewed and reversible: first call preview_destructive_change({ tool: "merge_memory", arguments: { canonical_memory_id, duplicate_memory_ids } }), which stores the exact change without applying it. After the user confirms, call merge_memory with preview_id, restore_window_acknowledged: true and request_id; the reviewed preview is applied exactly and a changed record is refused. Returns restore_id; restore_change({ restore_id }) undoes it for 30 days unless the record was edited since. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
preview_idYespreview_id returned by preview_destructive_change for this tool.
request_idYesRequired idempotency key; retries return the original receipt.
idempotency_keyNoAlias for request_id.
canonical_memory_idNoSurviving memory id, checked against the preview.
restore_window_acknowledgedYesMust be true after reviewing the preview and its 30-day restore window.

Output Schema

ParametersJSON Schema
NameRequiredDescription
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
preview_idNo
provenanceNo
restore_idNoPass to restore_change to undo within restore_window_days.
reversibleNo
idempotent_replayNo
life_state_rebuiltYes
restore_expires_atNo
retired_memory_idsYes
canonical_memory_idYes
restore_window_daysNo

TDQS

A4.4/5.0
Behavior5/5

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

Adds substantial context beyond the annotations: the 30-day undo window, that preview stores the exact change without applying it, that the applied preview is refused if the record changed, the $0.10 cost and API-key requirement, and the idempotency behavior via request_id. This is exactly the behavioral disclosure a destructive tool needs.

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-loads the key traits ('Preview first, 30-day undo') and every clause carries information about the workflow, refusals, undo, and cost. It is dense and slightly telegraphic, but nothing is wasted.

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 explained, yet the description still notes it returns restore_id. Combined with the preview/confirm/undo workflow and refusal conditions, it is complete for a destructive, cost-bearing tool.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all five parameters. The description weaves preview_id, restore_window_acknowledged, and request_id into the workflow but adds no syntax or format detail the schema lacks; baseline 3 applies.

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?

States a specific verb (merge/retire) and resource (exact duplicate memories) with clear scope: 'Retire exact duplicates while keeping the named canonical memory.' An agent can distinguish this from siblings like merge_people or delete_memory from the description alone.

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?

Gives explicit workflow guidance: call preview_destructive_change first, then after user confirmation call merge_memory, and notes that similar (non-exact) wording is refused. It does not compare against alternatives like correct_memory_atom or delete_memory, so it stops short of full when/when-not routing.

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

merge_momentsMerge MomentsA
Destructive
Inspect

Preview first, 30-day undo. Preview with preview_destructive_change({tool:"merge_moments",arguments:{canonical_id,retired_ids}}). Conflicting story, date, place or event links stop the merge. Union people, tags and media. Reviewed and reversible: first call preview_destructive_change({ tool: "merge_moments", arguments: { canonical_id, retired_ids } }), which stores the exact change without applying it. After the user confirms, call merge_moments with preview_id, restore_window_acknowledged: true and request_id; the reviewed preview is applied exactly and a changed record is refused. Returns restore_id; restore_change({ restore_id }) undoes it for 30 days unless the record was edited since. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
preview_idYespreview_id returned by preview_destructive_change for this tool.
request_idYesRequired idempotency key; retries return the original receipt.
retired_idsYes
canonical_idYes
idempotency_keyNoAlias for request_id.
restore_window_acknowledgedYesMust be true after reviewing the preview and its 30-day restore window.

Output Schema

ParametersJSON Schema
NameRequiredDescription
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
retiredNo
canonicalNo
conflictsNo
preview_idNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
restore_idNoPass to restore_change to undo within restore_window_days.
reversibleNo
retired_idsNo
canonical_idNo
idempotent_replayNo
restore_expires_atNo
restore_window_daysNo

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the destructiveHint=true annotation, the description discloses the 30-day restore window, that the reviewed preview is applied exactly, that a changed record is refused, idempotency/retry behavior via request_id, the $0.10 cost, and API-key auth requirement. This is unusually rich behavioral context.

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 two key constraints ('Preview first, 30-day undo'), but the preview_destructive_change call and its arguments are described almost twice, which is redundant. Still, every section carries useful information.

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 destructive, multi-step, costed operation, the description covers the full lifecycle (preview, confirm, apply, restore) plus auth and pricing, and an output schema exists to carry return values like restore_id. Nothing critical is missing.

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?

With 67% schema coverage, the schema already documents preview_id, request_id, and restore_window_acknowledged. The description reinforces these (preview_id must come from preview_destructive_change, restore_window_acknowledged must be true after review) and references canonical_id/retired_ids through the preview-call example, adding meaning but not fully covering every parameter.

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?

States a specific verb and resource ('merge moments') and specifies the exact effect: conflicting story, date, place or event links stop the merge, and people/tags/media are unioned. This is enough for an agent to distinguish it from siblings like merge_people, update_moment, or delete_moment.

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?

The description gives a clear mandatory workflow: preview via preview_destructive_change first, obtain user confirmation, then call with preview_id and restore_window_acknowledged. It does not explicitly compare against alternative merge/dedup siblings, but the when-to-use flow is unambiguous.

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

merge_peopleMerge PeopleA
Destructive
Inspect

Apply a reviewed durable preview atomically; undo_contact_change accepts restore_id for 30 days if unchanged. Fold duplicate CRM contact(s) into primary_person_id (same human, spelling variants). Prefer score_people_duplicates first. Not for “X knows Y” — use link_people for relationships. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
preview_idYesDurable preview_id returned by merge_people_preview; review the 30-day restore window before applying.
request_idNoClient idempotency key (retries return original result).
idempotency_keyNoAlias for request_id.
primary_person_idYes
duplicate_person_idsYes
restore_window_acknowledgedYesMust be true — confirms the 30-day restore window was reviewed before apply.

Output Schema

ParametersJSON Schema
NameRequiredDescription
personNoCRM person record.
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
messageNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
restore_idNo
reversibleNo
merged_person_idsNo
restore_expires_atNo

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already mark it destructive, but the description adds substantial context beyond them: atomic application, the undo path via undo_contact_change with restore_id valid for 30 days if unchanged, the cost ($0.10), and the auth requirement (API key). These are genuinely useful behavioral traits not present in the structured fields.

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?

Dense and mostly front-loaded, with prerequisite and alternative routing clearly stated. The opening clause about atomic apply and undo is slightly awkward as a lead-in, but every sentence carries useful information.

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 destructive, atomic merge with a required preview and a 30-day restore window, the description covers reversibility, prerequisites, alternatives, cost, and auth. An output schema exists, so return-value documentation is correctly omitted.

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 67%, and the description adds meaning beyond it by framing primary_person_id as the fold target and duplicate_person_ids as the 'same human, spelling variants' set, plus tying the preview/restore window to the workflow. It clarifies the two undocumented required parameters but does not detail idempotency behavior.

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?

States a specific verb+resource: 'Fold duplicate CRM contact(s) into primary_person_id (same human, spelling variants).' It also distinguishes itself from siblings by explicitly excluding the relationship case ('Not for "X knows Y" — use link_people'). An agent can identify this as the duplicate-contact merge tool without opening the schema.

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

Usage Guidelines5/5

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

Names both the prerequisite workflow ('Prefer score_people_duplicates first', 'Apply a reviewed durable preview') and the contrasting alternative (link_people for relationships). It clearly communicates when to use this tool and when not to.

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

merge_people_previewMerge People PreviewAInspect

Save a durable restore snapshot without modifying contacts before merge_people. Returns resulting name/aliases, preserved counts, field conflicts, safe_to_merge. ($0.05; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
request_idNoClient idempotency key (retries return original result).
field_choicesNo
idempotency_keyNoAlias for request_id.
primary_person_idYes
duplicate_person_idsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
manifestNo
warningsNo
preview_idNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
reversibleNo
safe_to_mergeYes
resulting_nameNo
field_conflictsNo
photos_preservedNo
primary_person_idYes
resulting_aliasesNo
restore_window_daysNo
graph_edges_preservedNo
interactions_preservedNo
transactions_preservedNo

TDQS

A4.1/5.0
Behavior4/5

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

Goes well beyond the annotations by disclosing the durable restore snapshot side effect, the return fields (name/aliases, preserved counts, field conflicts, safe_to_merge), a cost ($0.05), and an auth requirement (API key). The readOnlyHint=false is consistent with writing a snapshot while leaving contacts untouched.

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

Conciseness5/5

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

Two tightly packed sentences that front-load the core behavior and side effect, with cost and auth appended compactly. No wasted words.

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

Completeness4/5

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

For a preview/dry-run tool with an output schema present, the description covers purpose, side effects, and result shape adequately. The only real gap is parameter semantics, which the low-coverage schema leaves undocumented.

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

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 40%, and the description adds no meaning for primary_person_id, duplicate_person_ids, field_choices, or the idempotency keys. The listed items (name/aliases, preserved counts, conflicts) are return values, not parameters, so the coverage gap is uncompensated.

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?

States a specific verb and resource ('Save a durable restore snapshot'), clarifies it is non-mutating ('without modifying contacts'), and explicitly names the sibling it precedes (merge_people). An agent can distinguish it from merge_people without opening either 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?

The phrase 'before merge_people' clearly establishes when to call this tool and names the alternative, merge_people. It stops short of stating what to do with the result or when to skip the preview, but the primary usage context is explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

normalize_people_applyNormalize People ApplyC
Destructive
Inspect

Apply a normalize_people_preview by preview_id. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
preview_idYes
request_idYes
candidate_hashYes
idempotency_keyNoAlias for request_id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
appliedNo
messageNo
change_idNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With destructiveHint=true and readOnlyHint=false already declared, the description does add two pieces of context annotations cannot convey: a $0.10 cost and an API-key requirement. However, for a destructive mutation it never says what is actually changed or whether the change can be undone, and nothing points at restore_change as a recovery path, which is a notable omission given the sibling exists.

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?

Two short clauses, front-loaded with the verb and the primary identifier; the price and auth note are tucked at the end. Nothing is wasted, though the extreme terseness is partly the cause of the parameter and safety gaps rather than pure economy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/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, but for a destructive, priced mutation with three required parameters the description is thin: it omits the effect of applying, reversibility, and the meaning of candidate_hash/request_id. An agent could invoke it with a valid preview_id yet fail or mis-call because the other required inputs are unexplained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 25% and the description documents just one of four parameters (preview_id). The two other required parameters, candidate_hash and request_id, plus the idempotency_key alias relationship, carry no explanation of format, provenance, or why candidate_hash must be supplied alongside preview_id. This is a real gap for a tool where all three required values must be produced correctly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Apply') and its object ('a normalize_people_preview by preview_id'), which cleanly pairs with the sibling normalize_people_preview and shows this is the commit step of a preview/apply pair. It does not, however, contrast itself against other write siblings like merge_people or commit_life_update, so differentiation is only partial.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The pairing with normalize_people_preview is implied by 'Apply a ...preview', but there is no explicit when-to-use statement, no prerequisite that a preview must exist first, and no guidance on when to abandon the preview instead of applying it. Alternatives are not named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

normalize_people_previewNormalize People PreviewAInspect

Preview whitespace/phone/handle normalization changes (no title-case of stylized names). ($0.05; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
rulesNo
request_idNoClient idempotency key (retries return original result).
idempotency_keyNoAlias for request_id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
changesYes
preview_idYes
provenanceNoWhich connector wrote the record and which connected Dayze account received it.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint=false, destructiveHint=false, openWorldHint=false; the description adds real behavioral context beyond that: a cost of $0.05 and an API-key requirement, plus a scope limitation on what normalization will not touch. It does not say whether a preview artifact is persisted or how long it lasts, but 'preview' here describes the scope of changes shown, not a read-only claim, so it does not conflict with readOnlyHint=false.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One front-loaded sentence plus a compact parenthetical carrying the scope caveat, cost, and auth requirement. Every clause earns its place with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/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 no explanation, and the description covers purpose, scope, cost, and auth. The remaining gaps are the undocumented 'rules' parameter and the lack of routing to the apply sibling, both minor for a zero-required-parameter preview tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%: request_id and idempotency_key are documented in the schema, while the 'rules' array is not described there. The description's 'whitespace/phone/handle' hints at the kinds of rules the parameter accepts, adding marginal value, but it does not explain the rules parameter's format or accepted values.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: previewing normalization (whitespace/phone/handle) changes to people records, plus a scope caveat ('no title-case of stylized names'). It is clearly distinguishable in intent from the apply counterpart, but it never names that sibling (normalize_people_apply), so differentiation is left implicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The word 'Preview' implies this should be run before applying normalization, but the description gives no explicit when-to-use, no prerequisites, and no pointer to normalize_people_apply as the follow-up. Usage is inferable rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

notable_packNotable Knowledge PackA
Read-only
Inspect

DEFAULT for who is X: profile + life_in_days (age/day_number) + similar people + birthday peers. Timeline events include day_number. Prefer this over notable_profile. Example: albert-einstein. ($0.05)

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoYYYY-MM-DD target date
slugYesPerson slug, e.g. albert-einstein
peersNo
similarNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
profileNoPublic notable-person profile.
timelineNo
life_in_daysNoAge and current day-number calculations.
birthday_peersNo
similar_peopleNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint, openWorldHint, and destructiveHint annotations already cover safety, so the bar is lower. The description adds useful behavioral context: the response includes life_in_days with age/day_number, similar people, birthday peers, and timeline events including day_number. It also discloses a $0.05 cost, which is beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single compact, information-dense line. It front-loads the default usage, then packs the key response components, the sibling preference, an example, and pricing without wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity, an existing output schema, and annotations covering safety, the description covers the essential context: primary use case, response composition, preferred alternative, example, and cost. It does not explain all edge cases, but it provides enough for an agent to select and invoke the tool correctly.

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 only 50%, leaving peers and similar without schema descriptions. The description compensates by mapping 'similar people' and 'birthday peers' to the likely similar and peers parameters. It also gives an example slug, albert-einstein, reinforcing the slug parameter's expected format.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies this as the default 'who is X' knowledge pack and lists what it contains (profile, life_in_days, similar people, birthday peers). It distinguishes itself from notable_profile with 'Prefer this over notable_profile.' It lacks a strict verb like 'retrieve' but is still unambiguous about the tool's function.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states when to use this tool: 'DEFAULT for who is X.' It also names the alternative, notable_profile, and directs the agent to prefer this tool over it. This is direct routing guidance that leaves little to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

notable_pack_premiumPremium Notable PackA
Read-only
Inspect

S-tier guaranteed pack (score≥85, timeline≥8, image, embedding). Errors if below bar. Use when you need high-quality, complete notable context. Example slug: elon-musk. ($0.10)

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo
slugYesPerson slug, e.g. elon-musk
peersNo
similarNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
profileNoQuality-gated public notable-person profile.
qualityNoPack quality signals.
timelineNo
life_in_daysNoAge and current day-number calculations.
birthday_peersNo
similar_peopleNo

TDQS

A3.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description adds meaningful behavioral details: guaranteed quality thresholds, error behavior when the quality bar is not met, and a $0.10 cost. This goes well beyond the annotations and gives the agent a concrete contract for expected behavior.

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?

The description is compact and front-loads the most important guarantee, followed by error behavior, usage guidance, an example, and cost. Every fragment adds useful information, though the telegraphic style and slight redundancy between 'S-tier guaranteed' and 'high-quality' prevent a perfect score.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the tool's purpose, quality bar, error behavior, cost, and an example slug, and an output schema is present. However, key optional parameters ('date', 'peers', 'similar') are unexplained, which leaves gaps for an agent trying to use the tool beyond its simplest invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 25%, with only 'slug' documented in the schema. The description repeats the slug example (elon-musk) but provides no meaning for 'date', 'peers', or 'similar', leaving the agent to guess their purpose. Given the low schema coverage, the description should have compensated for these undocumented parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the resource as a premium notable pack with explicit quality guarantees: score≥85, timeline≥8, image, and embedding. It distinguishes this tool from sibling tools like notable_pack by emphasizing the S-tier guarantee and 'Errors if below bar', though it lacks an explicit action verb such as 'retrieves' or 'gets'.

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?

It explicitly states when to use the tool: 'Use when you need high-quality, complete notable context.' It provides clear context but does not name alternatives or specify when not to use it, despite sibling tools like notable_pack and notable_search existing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

notable_profileNotable Person ProfileA
Read-only
Inspect

Bio-only profile JSON by slug (no life-in-days, similar, or birthday peers). Prefer notable_pack for “who is X / age in days / peers”. Example: taylor-swift. ($0.02)

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesPerson slug, e.g. albert-einstein

Output Schema

ParametersJSON Schema
NameRequiredDescription
bioNo
nameYes
slugYes
aboutNo
handleNo
sourcesNo
timelineNo
image_urlNo
birth_dateNo
death_dateNo
occupationNo
profile_urlYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context: it returns only bio data, excludes peer/life-in-days content, and costs $0.02. No contradiction with annotations is present.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The entire description is compact and front-loaded: core behavior first, exclusions and routing second, then a concrete example and pricing. Every clause earns its place with no redundant filler.

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 single-parameter read-only tool with an output schema and clear sibling routing, the description is complete. It tells the agent what the tool returns, what it excludes, when to use a different tool, and even cost. No critical context for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already fully documents the single slug parameter with 100% coverage. The description reinforces that the lookup is by slug and provides a concrete example, but it does not add substantially new semantic information beyond the schema.

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?

The description states a specific action and resource: returning a bio-only profile JSON by slug. It explicitly differentiates itself from notable_pack by listing what it does not include (life-in-days, similar, birthday peers), so an agent can immediately understand its narrow purpose versus siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says to prefer notable_pack for 'who is X / age in days / peers', giving a clear when-not-to-use condition and naming the alternative. The slug-based lookup and example 'taylor-swift' further clarify the intended invocation context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

preview_destructive_changePreview Destructive ChangeAInspect

Review a destructive change before it happens. Stores the exact rows delete_food, delete_place, delete_place_visit, archive_inventory_item, archive_asset, reset_tracker, unlink_people, remove_person_alias, convert_contact_entity, bulk_dismiss_clarifications, delete_memory, delete_moment, merge_moments, merge_memory, correct_memory_atom would delete, archive or overwrite (with their before-state and linked records) without changing anything, and returns preview_id, operations, expires_at (30 minutes) and restore_window_days (30). Show it to the user, then call the named tool with preview_id, restore_window_acknowledged: true and request_id. ($0.05; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
toolYes
argumentsYesThe arguments you would pass to that tool (e.g. { food_id }).
request_idNoClient idempotency key (retries return original result).
idempotency_keyNoAlias for request_id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
toolYes
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
summaryNo
next_stepNo
target_idNo
expires_atNo
operationsNo
preview_idYes
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
reversibleYes
nothing_to_changeNo
restore_window_daysYes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only supply the safety profile (destructiveHint=false, openWorldHint=false); the description adds substantial context beyond them: it captures before-state and linked records, states it changes nothing, discloses the 30-minute preview expiry, the 30-day restore window, the $0.05 cost, and the API-key requirement. This is exactly the behavioral detail the annotations cannot convey.

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-loads the purpose in the opening sentence and the workflow follows logically. The one weakness is that it re-lists all 15 destructive tools, duplicating the enum already present in the schema, which adds length that is not strictly earned.

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 tool with nested objects, an enum, and an output schema (so return values need not be re-explained), the definition still covers the full preview-then-execute lifecycle, expiry, restore window, cost, and auth. An agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75% and the schema already documents the arguments object ('the arguments you would pass to that tool') and request_id as an idempotency key. The description reiterates the tool/arguments relationship and the follow-up call's params (preview_id, restore_window_acknowledged), but that guidance mostly concerns the downstream destructive tool, so this stays at the baseline for a well-covered schema.

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?

States a specific verb and resource ('Review a destructive change before it happens') and immediately scopes the tool by enumerating the 15 mutating operations it covers. An agent can distinguish this preview from the actual destructive siblings without opening a 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?

It gives a clear workflow: preview first, 'Show it to the user, then call the named tool with preview_id, restore_window_acknowledged: true and request_id.' That is strong prescriptive guidance, but it names no when-not conditions and does not address when to prefer this generic preview over dedicated siblings like delete_moment_preview or delete_person_preview.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

preview_moment_duplicatesPreview Moment DuplicatesA
Read-only
Inspect

Group exact Moment duplicates first, then possible near duplicates for human review. Never merges automatically. ($0.05; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesYYYY-MM-DD inclusive
fromYesYYYY-MM-DD inclusive

Output Schema

ParametersJSON Schema
NameRequiredDescription
auto_mergedYes
near_groupsYes
exact_groupsYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds genuinely useful operational context beyond that: it never merges automatically, it costs $0.05, and it requires an API key. Return format and pagination remain unstated, but the output schema likely covers that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, zero waste, with the core action and the no-auto-merge guarantee front-loaded before the cost/auth note. Nothing redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only preview tool with an output schema, an annotations-covered safety profile, and fully documented params, this is close to complete. The only gap is the absence of explicit routing guidance versus merge_moments and other preview tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and both parameters already document the 'YYYY-MM-DD inclusive' format, so the schema carries the burden. The description adds nothing about the date range semantics (e.g. whether it bounds Moment creation date), which is the baseline-3 outcome.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action (group exact duplicates first, then near duplicates) on a specific resource (Moment duplicates), and the preview/review framing separates it from merge_moments. It stops short of explicitly naming the sibling it contrasts with, so the distinction is implied rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'for human review' and 'Never merges automatically' imply this is the step before a merge decision, but the description never says when to pick this over merge_moments, delete_moment_preview, or search_moments. Usage context is inferable but not spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

propose_life_updatePropose Life UpdateBInspect

Propose assertion create/correct without committing (flagged; off by default). ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
valueNo
client_idNo
people_idNo
person_idNo
predicateNo
operationsNo
request_idNo
source_textNo
idempotency_keyNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
enabledNo
messageNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
proposal_idNo
payload_hashNo

TDQS

B3.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only cover the generic safety triad; the description adds meaningful behavior beyond them: it stages a proposal without committing, costs $0.10, and requires an API key. These are non-obvious operational facts. It does not, however, explain what a proposal record does or how it is later committed.

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?

A single terse sentence, front-loaded with the action and the key constraint. Nothing is wasted, though the extreme compression contributes to the ambiguity in 'assertion create/correct'.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter tool with nested objects and 0% schema coverage, the description is far too thin; it omits any parameter or workflow explanation. An output schema exists so return values need not be described, but the input contract is almost entirely unexplained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Nine parameters with 0% schema description coverage and the description supplies essentially no parameter guidance — it does not explain value, predicate, operations, source_text, idempotency_key, or the person/people id fields. With this many undocumented and overlapping params, the description fails to compensate at all.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (propose) and resource (life update/assertion) and crucially adds 'without committing', which distinguishes it from the commit_life_update sibling in the tool list. The jargon 'assertion create/correct' is somewhat cryptic, but the staging intent is clear enough for an agent to recognize.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'flagged; off by default' signals a prerequisite/availability condition, which is useful context. However, it never explicitly tells the agent when to choose this over commit_life_update or what the proposal/commit workflow is, leaving the primary routing decision to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_gmail_attachmentRead Gmail Attachment (read-only)A
Read-only
Inspect

Download one Gmail attachment by message_id + attachment_id (from read_gmail_message.attachments). Returns utf-8 text for text/csv/vcf/vcard; binary types return filename/mime/size + a note (no base64 dump). Optional account. Read-only. Requires mail.read on an API key or non-ChatGPT OAuth connection. ChatGPT profiles do not grant mail.read or list this tool. Share tokens cannot call. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
emailNo
accountNo
message_idYes
attachment_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
attachmentYes
message_idYes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the readOnly/destructive annotations: it discloses the return shape per mime type (utf-8 text for text/csv/vcf/vcard, metadata + note for binaries with no base64 dump), the exact auth scope and connection types, that ChatGPT profiles and share tokens cannot call it, and the $0.10 cost. This is rich behavioral context an agent cannot get from annotations alone.

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-loads the core action and key input source, then layers return behavior, auth, and cost. Dense but every sentence carries information; the parenthetical cost/auth fragments are slightly cramped but not wasteful.

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 read-only attachment fetch with an output schema present, the description covers everything an agent needs: inputs and their origin, per-type return behavior, auth requirements, profile/token restrictions, and cost. Nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage the description must compensate, and it does for three of four params: message_id and attachment_id (with their source) and 'optional account'. The 'email' parameter is never mentioned, and no format/syntax detail is added for any param, leaving a real gap.

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?

States a specific verb (download/read) and resource (one Gmail attachment) with the exact lookup keys (message_id + attachment_id) and where to obtain them (read_gmail_message.attachments). An agent can distinguish this from read_gmail_message and search_gmail 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?

Explicitly states the prerequisite source of the IDs and the auth conditions required to call it (mail.read on API key / non-ChatGPT OAuth; ChatGPT profiles and share tokens cannot call). It gives clear context for when it is usable, but does not name an explicit alternative or a when-not-to-use case beyond auth gating.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_gmail_messageRead Gmail Message (read-only)A
Read-only
Inspect

Read one Gmail message by id from search_gmail. Returns subject, from, canonical date, account-local date_local, time_zone, snippet, plain-text body (truncated), and attachments[] metadata (attachment_id, filename, mime_type, size). Use read_gmail_attachment for text/csv/vcf contents. Optional account when multiple mailboxes. On failure returns code gmail_read_failed with retryable: retry once only when retryable; if the newest message still cannot be read, say so and never present an older one as the latest. Read-only. Requires mail.read on an API key or non-ChatGPT OAuth connection. ChatGPT profiles do not grant mail.read or list this tool. Share tokens cannot call. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoAlias for message_id
emailNoAlias for account
accountNoMailbox selector (email or connection id)
message_idYesGmail message id from search_gmail

Output Schema

ParametersJSON Schema
NameRequiredDescription
messageYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=false, but the description goes far beyond them: it discloses the gmail_read_failed error code, a bounded retry rule ('retry once only when retryable'), and rules against presenting an older message as the latest. It also states the permission model (mail.read via API key/OAuth, ChatGPT profiles excluded, share tokens not allowed) and cost. Very strong, though the return-format list partly duplicates the output schema.

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 purpose, then return shape, alternative, error/retry behavior, and permissions in a compact run. Nearly every clause earns its place, though the returned-field enumeration and the pricing tail add length that the output schema and error contract already partly cover.

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 read tool with an output schema, the description still covers everything an agent needs to call it correctly: id origin, account handling, alternative tool routing, failure code, retry limits, and auth prerequisites. No material gap remains.

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 100%, so the baseline is 3, but the description adds real meaning: message_id provenance ('from search_gmail') and the conditional behavior of account ('Optional account when multiple mailboxes'). The alias parameters (id, email) are left to the schema, which is acceptable given full coverage.

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?

States a specific verb+resource ('Read one Gmail message by id') and immediately scopes it against siblings by naming search_gmail as the id source and read_gmail_attachment as the alternative for attachment contents. An agent can distinguish it from both without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the read-by-id case here and text/csv/vcf extraction to read_gmail_attachment, and notes 'Optional account when multiple mailboxes.' The alternative and the condition selecting it are both stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

record_health_trendRecord Health TrendAInspect

Append a private trend for explicit subject_type self, or a person through a matching condition_id/person_id. Corrections supersede a point and retain history. ($0.05; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
kindYes
unitNoOptional scale/unit, e.g. 0-10, boolean, 1-5, minutes.
valueYesA scalar value. Put its scale or measurement in unit.
metricYesWhat was measured, e.g. severity, completed, energy or duration_minutes.
sourceYesProvenance, e.g. user_reported, condition_checkin, daily_checkin or sleep_record.
person_idNoOwned contact id; required for person.
confidenceYes
request_idNoClient idempotency key (retries return original result).
observed_atYesWhen it applied, as an ISO timestamp.
condition_idNoFrom get_conditions or create_condition.
subject_typeYesself, or person with person_id.
supersedes_idNoThe effective trend point this correction replaces.
idempotency_keyNoAlias for request_id.
correction_reasonNoRequired with supersedes_id; what was wrong with the prior point.

Output Schema

ParametersJSON Schema
NameRequiredDescription
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
createdNo
messageNo
correctedNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
trend_pointNo
trend_point_idNo
idempotent_replayNotrue when this request_id already ran: the first result, nothing new written.
superseded_trend_pointNo

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover only the safety profile (readOnly=false, destructive=false, openWorld=false), while the description adds substantive behavioral context the agent could not get elsewhere: the entry is private, corrections supersede a point but retain history, and the call costs $0.05 and requires an API key.

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?

Three tight sentences that front-load the core action and put the cost/auth constraint last; the opening clause is slightly awkward in phrasing but contains no filler.

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 14-parameter mutation tool with an output schema present, the description covers the safety, privacy, cost, auth, and correction semantics an agent needs; remaining field details are well served by the 86%-covered schema.

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 description coverage is already 86% (baseline 3), and the description adds meaning on top: it ties subject_type to the condition_id/person_id pairing and clarifies that supersedes replaces a prior effective point with history retained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (append) and resource (a private health trend point), and scopes it to subject_type self or a person. It is clearly distinguishable from the read-side sibling get_health_trends, though it never names that sibling explicitly.

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?

Gives the routing condition for the two subject types (self vs person via matching condition_id/person_id) and explains the correction path with supersedes. It does not name alternatives or exclusions, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

record_purchaseRecord PurchaseAInspect

Atomic expense + optional inventory item creation. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoYYYY-MM-DD; default today.
nameYesWhat was bought (also the Inventory item name). Alias: merchant.
amountYes
categoryNoExpense category (default purchase); also the item category when inventory_details has none.
currencyNoISO 4217; default USD.
merchantNoWhere it was bought; stands in for name when name is missing.
request_idNoClient idempotency key (retries return original result).
idempotency_keyNoAlias for request_id.
create_inventoryNofalse = the expense only, no Inventory item (default true).
inventory_detailsNoThe Inventory item: category, brand, model, condition, notes.

Output Schema

ParametersJSON Schema
NameRequiredDescription
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
messageNo
expense_idNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
transactionNoExpense/income transaction row.
inventory_idNo

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (not read-only, non-destructive, closed-world), and the description adds genuinely non-structured context: the operation is atomic, costs $0.10, and requires an API key. No failure modes or rollback behavior are described, so it stops short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact clauses, front-loaded with the core capability and immediately followed by cost and auth requirements. Nothing is wasted and no sentence is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 10 parameters, a nested object, and an output schema, the description's job is mainly routing and cost/auth context, which it delivers. The one gap is that it does not indicate what happens when create_inventory=true and inventory creation fails after the expense is written, a meaningful concern for an 'atomic' claim.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 90%, so the schema already documents name/merchant aliasing, currency defaults, idempotency keys, and the nested inventory_details fields. The description adds only the high-level existence of the optional inventory item, which the schema covers in more detail. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource pair ('expense + optional inventory item creation') plus the atomic coordination between them, which distinguishes it from simple single-resource loggers. However it never names the sibling tools (log_expense, add_inventory_item) it overlaps with, so the agent must infer the boundary from the sibling list alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance is given: nothing says to prefer this over log_expense when inventory is not needed, or over add_inventory_item when no expense results. The only hint is 'optional inventory item creation', which leaves the selection criteria implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

record_saleRecord SaleBInspect

Mark inventory sold + record sale proceeds with gain/loss. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoAlias for sold_at.
notesNo
amountYesSale proceeds.
sold_atNoYYYY-MM-DD; default today. Alias: date.
currencyNoISO 4217; default USD.
request_idNoClient idempotency key (retries return original result).
marketplaceNoWhere it sold (the income row's merchant; default "sale").
inventory_idYesThe item sold (get_inventory / search_inventory).
idempotency_keyNoAlias for request_id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
messageNo
expense_idNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
inventory_idNo
realized_gain_lossNo

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish the read-only/destructive profile, and the description adds two things structured data doesn't: a cost figure ($0.10) and an API-key requirement. It still omits that an income/merchant row is created and that retries are idempotent, but that is genuinely useful added context.

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?

A single front-loaded sentence with a compact parenthetical for cost and auth. Nothing wasted, though it is arguably too terse given the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists, so return values need no explanation. However, for a 9-parameter mutation that links inventory to financial records, the description doesn't explain the side effects (inventory marked sold, income row created), idempotency, or prerequisites that an agent would want before calling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 89%, so the descriptions on inventory_id, amount, sold_at, currency, marketplace, and request_id already carry the meaning. The description itself contributes nothing about the 9 parameters, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource pair: marking an inventory item sold and recording sale proceeds with gain/loss. This distinguishes it from siblings like record_purchase or log_income, though it doesn't explicitly name those alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no when-to-use guidance and never mentions alternatives such as record_purchase, log_income, or log_transaction. The only routing hint ('get_inventory / search_inventory') lives in the schema, not the description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_person_aliasRemove Person AliasA
Destructive
Inspect

Preview first, 30-day undo. Remove one alias from a CRM person. Reviewed and reversible: first call preview_destructive_change({ tool: "remove_person_alias", arguments: { person_id, alias } }), which stores the exact change without applying it. After the user confirms, call remove_person_alias with preview_id, restore_window_acknowledged: true and request_id; the reviewed preview is applied exactly and a changed record is refused. Returns restore_id; restore_change({ restore_id }) undoes it for 30 days unless the record was edited since. Restore brings back the alias with its kind, source and confidence. ($0.05; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
aliasYes
person_idYes
preview_idYespreview_id returned by preview_destructive_change for this tool.
request_idYesRequired idempotency key; retries return the original receipt.
idempotency_keyNoAlias for request_id.
restore_window_acknowledgedYesMust be true after reviewing the preview and its 30-day restore window.

Output Schema

ParametersJSON Schema
NameRequiredDescription
aliasNo
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
messageNo
removedNo
change_idNo
person_idNo
preview_idNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
restore_idNoPass to restore_change to undo within restore_window_days.
reversibleNo
idempotent_replayNo
restore_expires_atNo
restore_window_daysNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, but the description goes well beyond by disclosing the 30-day reversible restore window, that a changed record is refused, the idempotency/retry behavior, cost ($0.05) and API key requirement. This is unusually rich behavioral context for a destructive operation.

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-loads the key constraint ('Preview first, 30-day undo') and every sentence carries workflow or safety information. It is dense and long for one paragraph, but little is wasted.

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?

Covers the full preview-confirm-apply-restore lifecycle, cost, auth and refusal semantics; an output schema exists so return-value detail is unnecessary. An agent has everything needed to invoke this destructive tool safely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%, and the schema already documents preview_id, request_id and restore_window_acknowledged. The description explains their role in the workflow but adds no syntax or format detail for person_id/alias beyond the schema. Baseline 3 is appropriate.

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?

States a specific verb+resource ('Remove one alias from a CRM person'), which cleanly distinguishes it from the sibling add_person_alias and update_person_alias. An agent can identify the operation without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit ordered workflow: preview first via preview_destructive_change, get user confirmation, then call with preview_id and restore_window_acknowledged. It names the exact prerequisite tool and the condition for proceeding, and points to restore_change for undo.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reset_trackerReset Streak TrackerA
Destructive
Inspect

Preview first, 30-day undo. Resets a sobriety/streak tracker for the authenticated user (sets current value to 0 and restarts the clock). Prefer tracker_id from get_trackers, or tracker_title fuzzy match; optional reset_at (ISO) and note go in the preview arguments. Rebuilds life_state. Reviewed and reversible: first call preview_destructive_change({ tool: "reset_tracker", arguments: { tracker_id } }), which stores the exact change without applying it. After the user confirms, call reset_tracker with preview_id, restore_window_acknowledged: true and request_id; the reviewed preview is applied exactly and a changed record is refused. Returns restore_id; restore_change({ restore_id }) undoes it for 30 days unless the record was edited since. Restore puts back the previous start date, streak and reset count. Requires API key or OAuth with context.delete. Share tokens cannot write. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNoOptional note stored in tracking history
titleNoAlias of tracker_title
reset_atNoISO datetime of the reset (default now)
preview_idYespreview_id returned by preview_destructive_change for this tool.
request_idYesRequired idempotency key; retries return the original receipt.
tracker_idNoEvent UUID of the tracker
tracker_titleNoTitle match when id unknown
idempotency_keyNoAlias for request_id.
restore_window_acknowledgedYesMust be true after reviewing the preview and its 30-day restore window.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNo
errorNo
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
messageNo
preview_idNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
reset_dateNo
reset_timeNo
restore_idNoPass to restore_change to undo within restore_window_days.
reversibleNo
tracker_idNo
invalidatesNo
previous_daysNo
tracker_titleNo
idempotent_replayNo
life_state_rebuiltNo
restore_expires_atNo
restore_window_daysNo
tracker_reset_countNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this destructive, and the description adds substantial context beyond them: preview-first requirement, exact application semantics, refusal of changed records, life_state rebuild, the 30-day restore window, restore behavior (start date, streak, reset count), auth scope context.delete, and cost. This is rich behavioral disclosure.

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 two key facts ('Preview first, 30-day undo') and every sentence carries operational weight. It is dense and long, but there is little filler; the length is driven by the multi-step workflow rather than redundancy.

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 needn't be described, yet the description still explains the restore_id it returns and how restore_change consumes it. Combined with auth, cost, and the preview/confirm workflow, nothing needed to call this correctly is missing.

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 100%, so the baseline is 3, but the description adds genuine meaning: tracker_id is preferred over tracker_title fuzzy match, and reset_at/note belong in the preview arguments rather than the final call, which the schema does not clarify. This goes beyond the structured fields.

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?

States a specific verb and resource ('Resets a sobriety/streak tracker... sets current value to 0 and restarts the clock'), and distinguishes itself from sibling get_trackers by naming it as the source of tracker_id. An agent can identify exactly what this does versus the read-side trackers tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit ordered workflow: first call preview_destructive_change, then after user confirmation call reset_tracker with the required fields. It also names get_trackers as the preferred source for tracker_id and states the exclusion that share tokens cannot write.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

resolve_clarificationResolve ClarificationBInspect

Link a clarification surface to an existing person. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
person_idNo
request_idNoClient idempotency key (retries return original result).
person_nameNo
idempotency_keyNoAlias for request_id.
clarification_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
messageNo
resolvedNo
person_idNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare a non-destructive write (readOnlyHint=false, destructiveHint=false), so the safety profile is covered. The description adds genuinely useful operational context not in the annotations: the $0.10 cost and API key requirement. It does not explain what happens to the clarification afterward or what auth scope is needed.

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?

A single front-loaded sentence with the action first and cost/auth details in a compact parenthetical. No wasted words, though the parenthetical is terse enough that it could be integrated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/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, and annotations cover the safety profile. However, the description omits the resolve-vs-dismiss decision and the person_id/person_name disambiguation, which an agent needs to call this correctly among its siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 40%, so the description must compensate but does not. It hints at linking to 'an existing person' (person_id/person_name) but never explains the relationship between person_id and person_name, nor the role of clarification_id beyond the required marker. Three of five parameters remain undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (link) and resources (clarification surface to an existing person), which is clearer than a tautology. It does not explicitly distinguish itself from close siblings like dismiss_clarification or resolve_person, but the action is identifiable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to resolve versus dismiss a clarification, nor any prerequisites or exclusions. The agent must infer usage from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

resolve_pending_replyResolve Pending ReplyAInspect

Pending Replies: mark a reply done: sent (default; the user replied, logged privately in the contact's history) or dismissed. Dayze sends nothing. By reply_id, or person_name / person_id when that person has exactly one unsent reply (otherwise the candidates come back and nothing changes). Marking sent writes one private interaction for the linked contact (not for an unlinked reply, and not twice); interaction in the result says what was written. Reopen with update_pending_reply status pending. Requires API key or OAuth with context.write. ($0.05; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
outcomeNo
reply_idNo
person_idNo
request_idNoClient idempotency key (retries return original result).
person_nameNo
idempotency_keyNoAlias for request_id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
replyYesOne reply the user owes (Inbox → Pending Replies). Dayze never sends it.
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
messageYes
outcomeYessent or dismissed
resolvedYesTrue when this call changed the reply.
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
interactionNoThe contact-history write-back of a reply marked sent by this call; null when nothing was marked sent now.
already_resolvedYes
life_state_rebuiltYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial context beyond the annotations: Dayze sends nothing, marking sent writes one private interaction for the linked contact (not for unlinked replies, not twice), the result reports the interaction, reopening is possible, and it requires API key or OAuth with context.write plus a $0.05 cost. Annotations only say write/non-destructive/non-open-world.

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?

Dense but front-loaded, leading with the action and outcomes before the lookup rules and side effects. Parenthetical clauses are information-bearing rather than filler, though the single long paragraph could be broken up for easier 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?

An output schema exists, so return values need no explanation, and the description still covers side effects, auth, cost, and failure behavior. Nothing an agent needs to invoke this correctly is missing.

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?

With only 33% schema coverage, the description compensates well: it defines the outcome enum semantics (sent default vs dismissed), the meaning of reply_id, and the conditional constraint on person_name/person_id. request_id/idempotency_key are left to the schema, which already documents them.

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?

States a specific verb (mark done) on a specific resource (pending reply), with the two outcomes named explicitly. It clearly distinguishes itself from siblings create_pending_reply, get_pending_replies, and update_pending_reply.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit selection rules: use reply_id, or person_name/person_id only when that person has exactly one unsent reply, otherwise candidates are returned and nothing changes. It also names update_pending_reply as the way to reopen, so the agent knows both the when and the when-not.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

resolve_personResolve ContactA
Read-only
Inspect

Resolve a nickname or surface name to a Dayze Contacts row via person_aliases → exact name → slug → unique substring. Returns avatar_url, photo_count, has_photos, and photos[{url,is_primary}] preview; use get_person_photos for full gallery. With financial_details:read, net_worth_assessment has the same sourced fields as the Contacts card; context-only evidence carries no personal number. Notes omitted unless include_notes=true (redacted). Prefer this before money or relationship tools when the agent only has a nickname. Advertised name resolve_person is stable; tools/call also accepts resolve_contact. ($0.05; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesNickname or display name to resolve
queryNoAlias for name
include_notesNoInclude redacted notes (default false)

Output Schema

ParametersJSON Schema
NameRequiredDescription
queryNo
personNo
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
aliasesNo
resolvedNo
candidatesNo
matched_viaNo
inspect_noteNoHow to cite: link each record with its inspect_url, never a link built from an id; which record types here have no Dayze page.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish the safe read profile (readOnlyHint, destructiveHint=false, closed world), and the description adds substantial non-obvious behavior: the financial_details:read scope requirement, that context-only evidence carries no personal number, that notes are omitted/redacted unless include_notes=true, the $0.05 cost, and API-key requirement. It also discloses the resolve_contact alias accepted at tools/call, which is operationally important.

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-loads the core purpose and resolution chain, then layers return preview, auth scope, notes behavior, routing advice, alias, and cost. Dense but every clause carries distinct information; only slight compression loss from packing cost/alias into the same block.

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?

With an output schema present, return values need not be explained, yet the description still previews the key fields (avatar_url, photo_count, has_photos, photos[]). Combined with auth scope, redaction rules, cost, and sibling routing, an agent has everything needed to call it correctly.

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 100%, so the baseline is 3; the description goes beyond by clarifying the redaction semantics of include_notes and the alias behavior of name/query ('nickname or surface name to resolve'). This adds meaning about what the parameters actually trigger, though it does not explain the query-vs-name precedence.

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?

States a precise verb+resource ('Resolve a nickname or surface name to a Dayze Contacts row') and even spells out the resolution precedence chain (aliases → exact name → slug → unique substring). It differentiates from siblings by naming get_person_photos as the full-gallery alternative and by scoping the tool to the nickname case, so an agent can distinguish it from get_people or get_person_connections.

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?

Explicitly routes usage: 'Prefer this before money or relationship tools when the agent only has a nickname,' and points to get_person_photos for the full gallery. It gives clear positive context but no explicit when-not (e.g., what to use when you already have a stable person id), so it falls just short of full alternative coverage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

resolve_placeResolve PlaceB
Read-only
Inspect

Canonicalize a venue name via place aliases and fuzzy match. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
placeNo
queryNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
placeNoCanonical place record.
queryYes
resolvedYes
candidatesNo
matched_viaNo

TDQS

B3.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish read-only and non-destructive behavior. The description adds meaningful context beyond those annotations, including the API key requirement, a $0.10 cost, and the fuzzy-match mechanism. This helps an agent anticipate side conditions before invoking the tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The entire description is one compact sentence that front-loads the core purpose and includes the most critical operational caveats (cost and API key). There is no wasted wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having an output schema and safety annotations, the description leaves a major gap: with three optional parameters and no parameter descriptions, an agent cannot confidently determine which input to provide. The description is too sparse to support correct invocation in all plausible cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not explain the roles of 'name', 'place', or 'query'. Although 'venue name' hints that 'name' is likely the core input, it is unclear how the three parameters relate and when each should be supplied.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Canonicalize a venue name via place aliases and fuzzy match.' This clearly conveys the operation, though it does not explicitly contrast with sibling tools such as resolve_person, so it stops short of full differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided about when to use this tool versus alternatives like get_places, resolve_person, or search. The only usage-related details are the API key requirement and cost, which are prerequisites rather than selection criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

restore_changeRestore ChangeAInspect

Undo a reviewed destructive change by restore_id within 30 days: deleted rows come back with their links, archived or overwritten fields revert, and inserted history rows are removed. Refuses if the record was edited since; repeats are no-ops. Call-time aliases: restore_food, restore_place, restore_inventory_item, restore_asset, restore_tracker, restore_memory. Contact deletes/merges use undo_contact_change; event/expense/trip archives use restore_event/restore_expense/restore_trip. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
request_idNoOptional idempotency key.
restore_idYesrestore_id returned by the destructive tool.
idempotency_keyNoAlias for request_id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
toolNo
undoneNo
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
messageNo
restoredNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
restore_idNo
linked_rows_skippedNo
operations_revertedNo
linked_rows_relinkedNo
linked_rows_reinsertedNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations are sparse (only readOnlyHint=false, destructiveHint=false), and the description carries the real behavioral burden: 30-day limit, refusal on subsequent edits, idempotent repeats as no-ops, exact restoration semantics, plus cost ($0.10) and auth (API key required). This is far more than the annotations convey.

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 core action and constraints, then aliases and routing. Dense with multiple clauses but each sentence carries routing, constraint, or behavioral value; the alias list is long yet useful for name resolution.

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 no explanation. Given a 3-param mutation tool with siblings named restore_*, undo_*, and archive_* tools, the description supplies eligibility window, failure conditions, idempotency, alternatives, cost, and auth — everything needed to call it correctly.

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 100%, so the baseline is 3, but the description adds meaning: it clarifies restore_id originates from the destructive tool and that repeats (tied to request_id/idempotency_key) are no-ops. It does not, however, explain the request_id vs idempotency_key alias relationship beyond the schema.

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?

States a specific verb (undo/restore) and resource (a reviewed destructive change keyed by restore_id), and describes concretely what is restored: deleted rows with links, archived/overwritten fields, and removal of inserted history rows. It clearly distinguishes itself from siblings by naming the alternatives for other undo cases.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent: contact deletes/merges use undo_contact_change, event/expense/trip archives use restore_event/restore_expense/restore_trip. It also states the 30-day eligibility window and that it refuses if the record was edited since, so when-to-use and when-not-to-use are both covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

restore_cleanuprestore cleanupAInspect

Restore an archive or normalization receipt. Requires restore_id and request_id. Receipts stay restorable for at least 30 days (archived rows are retained, not purged). Refuses intervening edits; repeats are no-ops. ($0; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
request_idYes
restore_idYes
idempotency_keyNoAlias for request_id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
rowsNo
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
changedNo
expires_atNo
preview_idNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
restore_idNo
server_timeNo
candidate_hashNo

TDQS

A3.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations (which only declare readOnlyHint=false, destructiveHint=false, openWorldHint=false). It discloses the 30-day retention guarantee, that archived rows are retained rather than purged, that intervening edits cause refusal, that repeat calls are idempotent no-ops, the $0 cost, and the API key requirement. That is rich operational context for a mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tight sentences, each carrying distinct information (action, required inputs, retention window, conflict/idempotency behavior, cost/auth). Front-loaded with the action and free of padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/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, and the description covers retention, idempotency, conflict handling, cost, and auth. The one gap is provenance of restore_id/request_id, which the agent must infer from a preceding cleanup/normalize call.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 33% and the description merely restates that restore_id and request_id are required. It does not explain what a restore_id is, where the caller obtains it, or how idempotency_key relates (that alias is documented only in the schema). With low coverage, the description should compensate but does not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Restore an archive or normalization receipt.' This distinguishes it from entity-specific restores like restore_event or restore_trip, which recover deleted records rather than operation receipts. It is clear but doesn't explicitly name the sibling it differs from.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The mention of 'receipt' implies this is used after a cleanup/normalization operation (cleanup_apply, normalize_people_apply), but no when-to-use or when-not-to-use guidance is stated. The 30-day window gives a useful temporal condition, yet the choice between this and restore_change/restore_event is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

restore_eventrestore eventAInspect

Restore an archive or normalization receipt. Requires restore_id and request_id. Receipts stay restorable for at least 30 days (archived rows are retained, not purged). Refuses intervening edits; repeats are no-ops. ($0; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
request_idYes
restore_idYes
idempotency_keyNoAlias for request_id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
rowsNo
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
changedNo
expires_atNo
preview_idNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
restore_idNo
server_timeNo
candidate_hashNo

TDQS

A4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=false). The description adds real behavioral context beyond that: a 30-day restorability window with rows retained rather than purged, refusal of intervening edits, idempotent repeats, zero cost, and API-key auth. This is exactly the extra context annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, front-loaded with the action and its required inputs, then the retention, conflict, idempotency, and cost/auth facts. No waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/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 needn't be described. The description covers retention, conflict handling, idempotency, and auth for a mutation tool, leaving only the meaning of the two identifiers under-specified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 33% (only idempotency_key is documented), so the description partially compensates by naming the two required parameters. But it never explains what restore_id or request_id actually identify, so the semantics remain thin relative to the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Restore') and resource ('archive or normalization receipt'), which is clearer than a bare tautology. It doesn't explicitly differentiate from the many restore_* siblings (restore_change, restore_cleanup, restore_expense, restore_trip), though the naming implies the target is an event.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides prerequisites ('Requires restore_id and request_id') and two behavioral conditions (refuses intervening edits, repeats are no-ops), which implies when the call succeeds. However, it never says when to choose restore_event over restore_change or the other restore siblings, leaving routing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

restore_expenserestore expenseAInspect

Restore an archive or normalization receipt. Requires restore_id and request_id. Receipts stay restorable for at least 30 days (archived rows are retained, not purged). Refuses intervening edits; repeats are no-ops. ($0; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
request_idYes
restore_idYes
idempotency_keyNoAlias for request_id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
rowsNo
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
changedNo
expires_atNo
preview_idNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
restore_idNo
server_timeNo
candidate_hashNo

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=false and openWorldHint=false, but the description adds real value beyond them: a 30-day retention window with archived rows retained rather than purged, refusal of intervening edits, idempotent repeats, $0 cost, and API-key auth. These behavioral constraints are not derivable from the structured fields.

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?

Tight, front-loaded paragraph: the core action comes first, followed by prerequisites, then behavioral caveats and cost/auth in a parenthetical. Every clause carries information; only the redundant restatement of required parameters is arguably wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/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 no explanation, and annotations cover the safety profile. Combined with retention windows, idempotency semantics, and auth requirements, the description is nearly complete for a 3-parameter recovery tool; only the origin of restore_id is left unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33% (only idempotency_key is documented). The description restates that restore_id and request_id are required, which the schema's required array already conveys, and adds no format, provenance, or relationship detail for those two ids. It does not compensate for the coverage gap, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (restore) and resource (archive or normalization receipt) so the agent knows this reverses prior archival/normalization work. It does not explicitly name the sibling recovery tools (restore_change, restore_cleanup, restore_event, restore_trip), but the expense-scoped name and the 'receipt' framing make the target unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Prerequisites are stated (restore_id and request_id required) and it clarifies that repeats are no-ops, which implies when re-issuing is safe. However, it never says when to choose this over restore_change/restore_cleanup or how an agent obtains the restore_id in the first place, leaving the routing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

restore_triprestore tripAInspect

Restore an archive or normalization receipt. Requires restore_id and request_id. Receipts stay restorable for at least 30 days (archived rows are retained, not purged). Refuses intervening edits; repeats are no-ops. ($0; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
request_idYes
restore_idYes
idempotency_keyNoAlias for request_id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
rowsNo
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
changedNo
expires_atNo
preview_idNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
restore_idNo
server_timeNo
candidate_hashNo

TDQS

A3.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial behavior beyond annotations: a 30-day restorability window with retained (not purged) rows, idempotent repeat semantics, refusal when intervening edits exist, $0 cost, and API-key auth. Annotations only cover the safety profile (non-read-only, non-destructive, closed-world), so this text carries real added value.

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?

Compact and front-loaded: purpose first, then required inputs, then the retention/idempotency constraints and cost/auth note. Every clause carries information, though the parenthetical pricing/auth tail is slightly telegraphic.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with an output schema (so return values needn't be described) and safety annotations already in place, the description covers retention, idempotency, edit-conflict behavior, cost, and auth. The main remaining gap is how to source restore_id/request_id, which is a minor omission.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 33% and neither restore_id nor request_id is documented in the schema, so the description compensates by naming both as required and implying idempotency via 'repeats are no-ops'. It still doesn't explain what a restore_id is or where the agent obtains one, so it only partially fills the gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Restore) and resource (archive/receipt), and 'Restore an archive' clearly reads as the inverse of the sibling archive_trip. The phrase 'or normalization receipt' is slightly muddy since the tool is trip-scoped, but an agent can still tell what it does without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: the agent infers this is the undo path for archive_trip, and conditions like 'Refuses intervening edits' and 'repeats are no-ops' hint at when it succeeds. It never explicitly names archive_trip or tells the agent when NOT to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

score_people_duplicatesScore People DuplicatesA
Read-only
Inspect

Score likely CRM duplicate pairs before merge_people. ($0.05; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
person_idNoScore against one person; omit for global scan.
min_probabilityNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
candidatesYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context beyond annotations by mentioning the $0.05 cost and API key requirement, which are important for an agent deciding whether to invoke the tool. It does not contradict the read-only/destructive hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single efficient sentence that front-loads the core action and includes essential cost/auth details without padding. Every element earns its place, and the structure makes the tool's purpose immediately scannable. No redundant or vague wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is adequate for understanding the tool's role and the fact that it is a non-destructive, paid, API-key-gated scoring step. However, it leaves limit and min_probability unexplained, which is a real gap given the sparse schema coverage. The output schema and annotations soften the omission, but parameter behavior is still under-specified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33%; only person_id has a description. The tool description does not compensate by explaining limit or min_probability, leaving their semantics undocumented. The phrase 'score likely CRM duplicate pairs' adds no specific parameter meaning, so the description falls short on parameter guidance.

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?

The description states a specific verb ('score'), a clear resource ('likely CRM duplicate pairs'), and a sequencing relationship ('before merge_people'). This distinguishes it from merge_people and makes the tool's role immediately understandable. The title reinforces the same purpose without adding ambiguity.

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?

The phrase 'before merge_people' provides clear workflow context, indicating this tool is a pre-merge step. It does not explicitly name alternatives or say when not to use it, but the intended placement in the duplicate-handling flow is clear. This meets the 'clear context, no exclusions' level.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_gmailSearch Gmail (read-only)A
Read-only
Inspect

Search one of the authenticated user's connected Gmail inboxes (read-only). Reuses Integrations hub Gmail (service_connections provider=gmail). Optional account/email selects a mailbox when multiple are connected — call list_gmail_accounts first. Prefer Gmail operators: from:, subject:, is:unread, newer_than:7d, has:attachment. For clock-time constraints, pass after/before as account-local civil datetimes; the tool converts them to precise UTC instants. Returns id, subject, from, canonical date, account-local date_local, time_zone, and snippet only (no body), newest first (newest_first: true). For the latest / most recent email from someone, query from: alone, without quoted topic phrases (the newest reply often lacks them); a from: + topic search with no match from the last 7 days also searches the sender alone and marks those messages sender_only (see note). Follow up with read_gmail_message. Cannot send, archive, or delete. Never invent email contents. If Gmail is not connected, connect at /integrations. Requires mail.read on an API key or non-ChatGPT OAuth connection. ChatGPT profiles do not grant mail.read or list this tool. Share tokens cannot call this tool. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoAlias for query
afterNoExclusive lower bound as account-local YYYY-MM-DDTHH:mm, or an offset-aware ISO instant
emailNoAlias for account
queryYesGmail search query, e.g. "is:unread newer_than:7d", "from:airline subject:itinerary", "receipt newer_than:30d"
beforeNoExclusive upper bound as account-local YYYY-MM-DDTHH:mm, or an offset-aware ISO instant
accountNoMailbox email, connection id, or Google subject (from list_gmail_accounts)
max_resultsNoMax messages to return (default 10, max 20)

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNoWhat the ranking means for a "latest email" answer.
afterNo
queryYes
beforeNo
accountNo
messagesYes
time_zoneYes
newest_firstYesMessages are ranked newest first by received time.
sender_checkNoA from: + topic search with no recent match also searched the sender alone (one extra search).
unavailable_countNoMatches whose details could not be loaded; one may be newer.
result_size_estimateYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only/non-destructive, but the description adds substantial context: only id/subject/from/date/date_local/time_zone/snippet are returned (no body), newest-first ordering, the sender_only fallback when a from:+topic search misses, auth requirements (mail.read on API key or non-ChatGPT OAuth), ChatGPT profiles not granting access, share tokens blocked, and connection setup at /integrations.

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 purpose and scoping, then constraints and behavior. Dense but every clause carries information; a few parenthetical asides (the $0.10 cost, the sender_only 'see note' cross-reference) make it longer than ideal, though nothing is truly filler.

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?

Given an output schema exists, return fields need not be explained yet it still summarizes them, and it covers auth, prerequisites, cost, and a behavioral edge case (sender-only fallback). Nothing an agent needs to invoke this correctly is missing.

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 100%, so the baseline is 3, but the description adds real meaning beyond the schema: after/before are account-local civil datetimes converted to precise UTC instants (an execution behavior not visible in the schema), the account/email alias relationship, and practical query-construction guidance. It stops short of documenting max_results' 20 cap in prose, but that is already in the schema.

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?

States a specific verb+resource with scope ('search one of the authenticated user's connected Gmail inboxes, read-only'), and distinguishes itself from siblings by naming list_gmail_accounts, read_gmail_message, and the import_*_gmail tools it is not. An agent can route correctly without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use guidance (call list_gmail_accounts first when multiple mailboxes; follow up with read_gmail_message), operator preferences (from:, subject:, is:unread, newer_than:7d), and a specific alternative query pattern for the latest email from a sender. Also states exclusions: cannot send, archive, or delete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_inventorySearch InventoryA
Read-only
Inspect

Search owned Inventory by name, brand, model, notes or reference number (query), with the same filters as get_inventory. Returns photo_count, has_photos, cover_url; when empty, photo_hint explains upload_asset linkage. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo1-200, default 50
queryNoMatch name, brand, model, notes or reference number.
offsetNo
statusNo
sort_byNo
categoryNoe.g. electronics, watches, clothing
include_archivedNoInclude archived and no-longer-owned items.
include_sensitiveNoAPI keys only: include stored identifiers. Ignored for connectors without pii:read.

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
itemsNo
queryNo

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safe read-only, non-destructive, closed-world profile. The description adds value on top: a cost ($0.10), an auth requirement (API key), and the special empty-result behavior where photo_hint explains the upload_asset linkage. It does not cover pagination or rate behavior, but the additions are meaningful given annotations carry safety.

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?

One front-loaded sentence packs scope, match fields, output fields, edge-case behavior, cost, and auth without redundancy. The parenthetical cramming is dense but every clause earns its place; no filler sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/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 needn't be explained, yet the description still flags photo_count/has_photos/cover_url and the empty-case photo_hint. Cost and auth are disclosed. The one gap is that 'same filters as get_inventory' offloads filter semantics to a sibling the agent must look up, which weakens completeness for this 8-param tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 63%. The description reinforces the query field's match set (name, brand, model, notes, reference number), which aligns with the schema. It adds no syntax or defaults for limit/offset/sort_by/status/category/include_archived/include_sensitive, so it only marginally compensates for the coverage gap; baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Search) and resource (owned Inventory) and enumerates the searchable fields via the query parameter. It gestures at differentiation from get_inventory ('same filters as get_inventory') but never plainly states what search does that get_inventory doesn't, leaving that inference to the agent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied: use this to match against name/brand/model/notes/reference. The reference to get_inventory's filters hints at a sibling relationship but gives no explicit when-to-use-this-vs-get_inventory/when-not rule or exclusions, so routing is left partly to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_momentsSearch MomentsA
Read-only
Inspect

Search only owned Moment stories and titles within an optional date range. Returns stable moment_ids. ($0.05; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoYYYY-MM-DD inclusive
fromNoYYYY-MM-DD inclusive
limitNo
queryYes
offsetNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
momentsYes
next_offsetYes
search_modeYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly=true, destructive=false and openWorld=false, so safety is covered. The description adds genuinely new behavioral context beyond the annotations: a per-call cost ($0.05), an API-key auth requirement, and the fact that returned moment_ids are stable (useful for later update/delete/merge calls).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short, front-loaded sentences with no filler: scope first, then the return artifact, then cost/auth. Every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/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 structure need not be explained, and cost/auth/pagination-relevant context is partly covered. The main gap is pagination and result-ordering semantics for limit/offset, which are not addressed anywhere given the low schema coverage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 40% (only 'to' and 'from' have descriptions; query, limit and offset have none). The description reinforces that the date range is optional, which is a small addition, but it adds no semantics for limit/offset pagination or query matching behavior, leaving half the parameters undocumented in both places.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Search) and resource (Moment stories and titles) plus a scope qualifier ('only owned'), so the agent knows this is a text search over the user's own moments. It does not, however, explicitly contrast itself with siblings like get_moments or the generic search tool, so differentiation is left partly to inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'only owned' scoping and 'optional date range' hint at when this is appropriate, but the description never says when not to use it or names an alternative (e.g., get_moments for ID lookup, merge_moments/preview_moment_duplicates for dedup). Usage is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_photosSearch PhotosB
Read-only
Inspect

Search person photos and entity assets by query/metadata. Returns inline MCP image attachments. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoInclusive YYYY-MM-DD: photos added on or before this day (UTC).
fromNoInclusive YYYY-MM-DD: photos added on or after this day (UTC).
limitNoMax photos 1-50, default 20.
queryNo
place_idNo
person_idsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
queryNo
photosNo

TDQS

B3.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the read-only safety profile, but the description adds genuinely useful traits beyond them: the return payload is inline MCP image attachments, and it discloses a $0.10 cost and an API key requirement. These are exactly the kind of operational facts an agent needs and cannot get from the schema.

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?

Three tight sentences, front-loaded with the core action, then return format, then cost/auth. Nothing is wasted, though the sentences are more parallel facts than a prioritized narrative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/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 needn't be explained, and the inline-attachment note compensates nicely. But with 6 parameters, 0 required, and half undocumented, the definition leaves the agent without enough semantic grounding to form an effective query.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 50%: query, place_id, and person_ids have no descriptions. The phrase 'by query/metadata' only loosely gestures at the query param and does nothing to explain person_ids or place_id, so the description fails to compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (search) and resource (person photos and entity assets) plus the retrieval mechanism (query/metadata). However it never distinguishes itself from close siblings like get_person_photos, get_photos_for_event, or get_photos_for_place, so an agent can't tell which one to pick from purpose alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance or routing to alternatives. The '$0.10; API key required' note is a cost/precondition, not usage context, and it doesn't say when this general search should be preferred over the many more specific photo siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_transactionsSearch TransactionsA
Read-only
Inspect

Search individual transaction rows by merchant/description/category, or exact tag (project:/ext:/rail:). Requires context.read and financial_details:read. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNo
limitNoPage size 1-500, default 100.
queryNo
cursorNoContinue the same immutable one-hour snapshot; other filters remain frozen.
offsetNoSkip this many rows of a new snapshot (a cursor carries its own).
projectNo
include_archivedNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
queryNo
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
inspect_noteNoHow to cite: link each record with its inspect_url, never a link built from an id; which record types here have no Dayze page.
transactionsNo

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes beyond the read-only/destructive annotations by disclosing required scopes (context.read, financial_details:read), a per-call cost ($0.10), and API-key auth. These are genuinely useful operational facts an agent can't get from structured fields. It stops short of describing snapshot/pagination behavior, which is left to the schema.

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?

One dense sentence front-loads the core search capability, then appends auth/cost requirements. No wasted words, though the parenthetical auth/cost tail is compact enough to be easily missed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/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 no explanation, and the description covers purpose, scopes, cost, and key filter semantics. The main gap is the absence of sibling routing guidance (get_transactions vs this search).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Adds real meaning to the undocumented 'tag' param by naming the exact prefix syntax (project:/ext:/rail:) and clarifies that query covers merchant/description/category. However, with only 43% schema coverage, limit, cursor, offset, project, and include_archived remain unaddressed in the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Search) and resource (individual transaction rows) and enumerates the searchable fields (merchant/description/category, exact tag). 'Individual transaction rows' implicitly distinguishes it from aggregate siblings like get_transactions, though it never names an alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the presence of a query/tag filter signals 'use this when you have search criteria.' It never states when to prefer this over get_transactions, get_person_transactions, or the generic search, nor any exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_primary_person_nameSet Primary Person NameAInspect

Rename a CRM contact’s canonical name and refresh slug. By default preserves the old name as a former_name alias. Prefer this over create+merge for spelling fixes. Dayze is the context layer — bounded mutation only. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
person_idYes
request_idNoClient idempotency key (retries return original result).
idempotency_keyNoAlias for request_id.
preserve_old_name_as_aliasNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
personNoCRM person record.
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
messageNo
change_idNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
previous_nameNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=false and openWorldHint=false, and the description adds real context: the slug is refreshed as a side effect, the old name is retained as a former_name alias by default, the operation is a 'bounded mutation', it costs $0.10 and needs an API key. The 'Dayze is the context layer' line is vague filler, but the side-effect disclosure is genuinely useful beyond the annotations.

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 action and its main side effect, then the routing rule, then operational notes. Mostly tight, but 'Dayze is the context layer — bounded mutation only' is promotional padding that does not help an agent invoke the tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present the description needn't explain return values, and the annotations cover the safety profile. What it supplies — alias retention, slug refresh, cost, auth — is close to sufficient; the only real gap is not distinguishing itself from the alias/update_person siblings that a caller would weigh against it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 40%, and the schema leaves preserve_old_name_as_alias undocumented — the description usefully supplies its default ('By default preserves the old name as a former_name alias'). It says nothing about request_id/idempotency_key beyond what the schema already states, so it only partially compensates for the coverage gap.

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?

Names a specific verb+resource pair ('rename a CRM contact's canonical name') and states the secondary effect ('refresh slug'), which is more than a restatement of the tool name. It also differentiates itself from the create+merge path, so an agent can place it relative to siblings like merge_people without opening a 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?

'Prefer this over create+merge for spelling fixes' is an explicit routing rule naming the alternative and the condition that selects it. However it is silent on the neighbouring alias tools (add_person_alias, update_person_alias, update_person), so an agent still has to guess whether a name change belongs here or in those.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

start_people_cleanupStart People CleanupAInspect

Server-side cleanup audit. Records the audit run and returns a review queue; it never changes, merges or deletes contacts, so there is nothing to undo. Apply candidates with merge_people_preview → merge_people or normalize_people_preview → normalize_people_apply (both reversible for 30 days). ($0.15; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
checksNo
request_idNoClient idempotency key (retries return original result).
idempotency_keyNoAlias for request_id.
auto_merge_thresholdNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusNo
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
messageNo
cleanup_idNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
auto_merged_countNo
items_needing_approvalNo

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false and destructiveHint=false; the description is consistent with that, spelling out that it never changes, merges, or deletes contacts and that there is nothing to undo. It also adds cost ($0.15), the API key requirement, and the 30-day reversibility window of the follow-up apply tools — meaningful context beyond the annotations.

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-loads the core behavior ('server-side cleanup audit... returns a review queue') and then packs the non-destructiveness, the follow-up pipeline, cost, and auth into a compact block. No filler sentences, though the final parenthetical mixes two unrelated facts (price and auth).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need no explanation, and the description covers safety, cost, auth, and downstream workflow. The gap is the undocumented checks and auto_merge_threshold parameters, which leaves this otherwise complete definition with one blind spot.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 50%: request_id and idempotency_key are documented in the schema, but checks and auto_merge_threshold have no schema description and are not mentioned in the description either. auto_merge_threshold in particular sounds consequential and sits awkwardly beside the claim of never merging contacts, and the description does nothing to clarify it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: a server-side cleanup audit that records a run and returns a review queue. It names the downstream apply tools, so an agent can see its place in the pipeline, but it never distinguishes itself from close siblings like audit_people, cleanup_preview, or score_people_duplicates.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives the post-cleanup workflow (merge_people_preview → merge_people, normalize_people_preview → normalize_people_apply), which is genuinely useful routing. However, it never says when to start this tool versus audit_people, cleanup_preview, or find_identity_candidates, so selection guidance is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

undo_contact_changeUndo Contact ChangeA
Destructive
Inspect

Reverse a reversible contact change (rename, alias, identity, classify, link). For merges, deletes, unlink_people, remove_person_alias and convert_contact_entity, pass restore_id as change_id within 30 days. Restore rejects later edits rather than overwriting them. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
change_idYes
request_idNoClient idempotency key (retries return original result).
idempotency_keyNoAlias for request_id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
undoneNo
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
messageNo
change_idNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
not_restoredNoFields the undo left as they are, e.g. the birthday of an update_person saved before MCP 1.41.5.

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations (readOnlyHint=false, destructiveHint=true, openWorldHint=false) by disclosing the 30-day reversibility window, the non-overwriting conflict behavior ('rejects later edits rather than overwriting them'), the $0.10 cost, and the API-key requirement. These are exactly the operational constraints an agent needs before invoking a reversing mutation.

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?

Three tight sentences, front-loaded with the core action and its scope before the parameter-mapping rule and cost/auth footer. Dense and mostly waste-free, though the merge/delete sentence packs several operation names into one clause.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/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 no explanation, and the description covers the key gating factors: eligible change types, time limit, conflict semantics, cost, and auth. The only gap is the absence of explicit guidance on choosing between this and the generic restore_change sibling.

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 67%, and the description compensates for the undocumented required change_id by explaining where its value comes from (the restore_id returned by the originating change). request_id/idempotency_key are already described in the schema, so no further credit there.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Reverse a reversible contact change') and enumerates the covered change types (rename, alias, identity, classify, link), which scopes it against the broader restore_change/restore_event/restore_expense/restore_cleanup family. It never names those siblings directly, so differentiation is inferred from the 'contact' scope rather than stated.

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?

Gives concrete when-to-use context: the 30-day window, and the specific upstream operations (merges, deletes, unlink_people, remove_person_alias, convert_contact_entity) whose restore_id must be fed in as change_id. It does not explicitly tell the agent when NOT to use it or which sibling restore tool to prefer instead, so routing to restore_change remains ambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

undo_event_fact_correctionUndo Event Fact CorrectionAInspect

Undo an owned event fact correction by ledger ID. Supply request_id for safe retries. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
request_idYes
correction_idYes
idempotency_keyNoAlias for request_id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
statusNo
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
recordStateNo
correctionIdNo

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and destructiveHint=false, so the write-but-non-destructive profile is covered. The description adds genuinely useful context the annotations lack: the $0.10 cost, the API-key requirement, and the retry-safety semantics of request_id. It stops short of 5 because it never says what state is restored or what happens to the original correction record.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact clauses, front-loaded with the action and resource, then the retry rule, then cost/auth. No filler, and every element is actionable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be described, and the annotations cover the safety profile. The description rounds this out with cost, auth, and idempotency. It is slightly incomplete in not clarifying the correction_id vs 'ledger ID' terminology or any permission requirements.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 33%, so the description must compensate. It explains request_id's role (retry safety), but it refers to the identifier as 'ledger ID' while the schema names the required field correction_id, an inconsistency that adds ambiguity rather than clarity. The idempotency_key alias is documented only in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (undo an event fact correction) plus a scoping qualifier ('owned') and the lookup key ('by ledger ID'). It is clearly the inverse of the sibling apply_event_fact_correction, though it never names that sibling explicitly, so it stops short of full sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The line 'Supply request_id for safe retries' gives one concrete usage rule (idempotent retry), but there is no guidance on when to undo versus re-apply, restore, or use list_event_fact_corrections first. Usage is implied rather than framed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_assetUpdate AssetAInspect

Patch role, metadata, description, or parent_asset_id (e.g. mark as processed). ($0.08; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
roleNooriginal | cover | thumbnail | …
asset_idYes
filenameNo
metadataNoFree-form metadata, merged into the stored metadata (metadata.source becomes the asset source).
asset_typeNo
request_idNoClient idempotency key (retries return original result).
descriptionNo
idempotency_keyNoAlias for request_id.
parent_asset_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
assetNo
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
messageNo
updatedNo
asset_idNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and destructiveHint=false, so safety is covered; the description adds valuable non-annotation context in the form of cost ($0.08) and an auth requirement (API key). It does not, however, explain partial-patch merge semantics for unspecified fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tight sentence leads with the action and fields, with the cost/auth caveat parenthetically appended. No filler; every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/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 needn't be explained, but for a 9-parameter mutation tool with 44% schema coverage the description is thin, omitting filename/asset_type semantics and any note on merge behavior for metadata.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 44%, so the description must carry more weight, yet it names just 4 of 9 parameters (role, metadata, description, parent_asset_id) and says nothing about filename or asset_type. It adds the 'mark as processed' role hint, but leaves the coverage gap only partly filled.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Patch') and resource ('asset') and enumerates the mutable fields (role, metadata, description, parent_asset_id), which distinguishes it from sibling reads like get_asset and creation tools like upload_asset/attach_asset. It stops short of explicitly naming which sibling it is not.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The example '(e.g. mark as processed)' gives a concrete scenario, implying when to reach for it, but there is no explicit guidance on when to prefer alternatives such as archive_asset or attach_asset, and no exclusions or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_conditionUpdate ConditionAInspect

Patch a condition by condition_id with its explicit subject_type (and person_id for a contact). The subject must match. Patch status, confirmation_status, source or condition fields; omitted fields stay untouched and null clears nullable text. Never infer active/confirmed. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoWhat the user calls it, in their words (e.g. "Blurry near vision"). Never a diagnosis they did not give.
notesNo
sourceNoProvenance, e.g. user_reported. Default user_reported.
statusNosuspected (default for a new one) | active | improving | resolved.
symptomsNoWhat they notice, e.g. "Blurry at near distance, worse in the evening".
body_areaNoWhere, e.g. "Left eye".
person_idNoOwned contact id; required for person.
request_idNoClient idempotency key (retries return original result).
started_onNoYYYY-MM-DD it started (onset). Default for a new one: today.
treatmentsNoWhat they use or do for it.
condition_idYesFrom get_conditions or create_condition.
subject_typeYesself, or person with person_id.
tracking_focusNoWhat to watch on each check-in.
idempotency_keyNoAlias for request_id.
confirmation_statusNounconfirmed | reported (default) | confirmed; never infer confirmed.

Output Schema

ParametersJSON Schema
NameRequiredDescription
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
messageNo
conditionNoA private condition with explicit subject_type/person_id, source and confirmation_status.
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
condition_idNo
changed_fieldsNo
idempotent_replayNotrue when this request_id already ran: the first result, nothing new written.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint=false and destructiveHint=false; the description goes further by stating patch semantics (omitted fields untouched, null clears nullable text), an explicit safety rule (never infer active/confirmed), the auth requirement (API key required) and cost ($0.10). This is meaningful disclosure beyond the structured fields, though reversibility and error behavior are not covered.

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?

One dense paragraph, front-loaded with the identifying keys before the patch semantics and the invariant. Every sentence carries information (semantics, invariant, auth/cost), though the parenthetical cost/API-key tail is slightly tacked on.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be described, and the annotations plus description cover the safety profile, patching rules, and required identity fields for a 15-parameter mutation. What is missing is only guidance on alternatives (create_condition) and what happens on a subject mismatch (error vs no-op).

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 already 93%, so the baseline is 3. The description adds genuine semantics on top: explicit subject_type matching, person_id for contacts, and the null-vs-omitted distinction that the schema does not state per-parameter. It stops short of touching the many optional text fields (name, notes, symptoms, treatments).

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?

States a specific verb and resource (patch a condition) plus the identity mechanics (condition_id with its explicit subject_type). It is clearly distinguishable from the create_condition and log_condition_checkin siblings, and the 'subject must match' clause tells the agent what the call is keyed on.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It implies usage (patching an existing, already-identified condition) and gives invariants such as 'Never infer active/confirmed' and 'omitted fields stay untouched'. However it never explicitly names the alternative (create_condition) or states the when-not-to-use condition, so routing between siblings is left partly to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_current_locationUpdate Current LocationAInspect

MUTATES where the user is now: profiles.location + polaris current_city/country (same as in-app Dayze chat). Pass location ("The Madeira, Singapore") and/or city+country; optional place/venue + lat/lon records a fresh location_visits check-in so get_location_context returns is_current. set_home defaults true; check_in defaults true when place or coordinates are set. Does not invent GPS when omitted. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
cityNo
placeNoVenue / residence name (e.g. The Madeira)
venueNoAlias for place
addressNo
countryNo
check_inNoWrite a location_visits row when place or coordinates are set (default true in that case)
latitudeNo
locationNoFreeform “City, Country” or “Venue, City, Country”
set_homeNoAlso write profiles.location / home_location (default true)
longitudeNo
request_idNo
idempotency_keyNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
placeNo
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
contextNoFresh get_location_context after write.
messageNo
updatedNo
check_inNo
locationNo
set_homeNo
visit_idNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
current_cityNo
current_countryNo

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint=false correctly signals a write), the description discloses concrete side effects: writing profiles.location, polaris city/country, and a location_visits check-in; default values for set_home and check_in; that no GPS is invented when omitted; plus cost ($0.10) and API-key auth requirement. This is rich, actionable behavioral context.

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?

The critical fact (MUTATES current location) is front-loaded, and there is little filler. It is dense to the point of being run-on with stacked parentheticals, but every clause carries information about defaults, side effects, or cost.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/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, and the annotations cover the safety profile. The description fills the remaining gaps (defaults, check-in behavior, cost, auth) adequately for a 12-parameter mutation tool, though the undocumented auxiliary params leave a small gap.

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?

With only 42% schema coverage across 12 params, the description compensates well: it explains the location format with an example, the place/venue alias, the interaction between place/coordinates and check_in, and the set_home default. It leaves address, request_id, and idempotency_key implicit, but the key decision-driving parameters are covered.

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?

The description opens with a specific verb and resource ("MUTATES where the user is now") and names the exact fields touched (profiles.location, polaris current_city/country, location_visits). It distinguishes itself from the read sibling get_location_context and the historical log_place_visit, so an agent can identify it without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear context (mirrors in-app Dayze chat; updates current location) and describes parameter combinations, but never states when to choose this tool over alternatives such as log_place_visit or log_movement. Usage is implied rather than routed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_eventUpdate Event (calendar patch)AInspect

MUTATES one existing calendar event the authenticated user owns. Required: event_id (UUID). Optional patch (same fields as log_event): title, date / event_date, time / event_time, end_date, end_time, location, description (alias notes), category, external_url, image_url, timezone, visibility, people / with / person_ids, scoreboard (merged; null clears). Adds a bedtime to a wake-only sleep: event_time (and event_date / end_date when it was the night before). Unknown or other-user event_id returns an error and does not create a row. For food-diary meals, prefer update_food (it syncs the mirrored event). Rebuilds life_state. Requires API key or OAuth with scope context. Share tokens cannot write. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoAlias for event_date.
timeNoAlias for event_time.
withNoAlias for people.
notesNoAlias for description.
titleNoUpdated title (replaces). Cannot be empty.
peopleNoPeople names or person UUIDs to add (event_people role=with). Does not remove existing tags.
categoryNoe.g. sleep, funeral, family, work, travel. Stored as events.category and event_type.
end_dateNoOptional end date YYYY-MM-DD (multi-day, or a night that ends the next day).
end_timeNoOptional end time (same formats as event_time).
event_idYesUUID of a calendar event the authenticated user owns
locationNoEmpty or null clears
timezoneNoIANA timezone for wall-clock display. Empty or null clears.
image_urlNoCover image URL. Empty or null clears.
event_dateNoStart date YYYY-MM-DD, YYYY-MM, or YYYY. Alias: date.
event_timeNoStart time: 8pm, 20:00, or 20:00:00. Empty or null clears. Alias: time.
person_idsNoOwned person UUIDs to tag (user-scoped).
request_idNoClient idempotency key (retries return original successful result).
scoreboardNoOperating status as data (not description prose). state is required when the event has no scoreboard yet. On update_event fields merge; a null field clears it; scoreboard null removes the record.
visibilityNoUpdates both events.visibility and the enforced events.is_private flag.
descriptionNoNotes about the event (replaces). Empty or null clears. Alias: notes.
person_nameNoOne person to tag, by name.
external_urlNo
people_namesNoAlias for people.
date_precisionNoSoft date precision stored in metadata.
idempotency_keyNoAlias for request_id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
eventYesA Dayze calendar event record.
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.
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
people_taggedYes
unresolved_peopleYes
life_state_rebuiltYes

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 by disclosing side effects ('Rebuilds life_state'), auth requirements ('Requires API key or OAuth with scope context. Share tokens cannot write'), failure semantics ('Unknown or other-user event_id returns an error and does not create a row'), cost ($0.10), and merge/null-clear behavior on scoreboard.

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 mutating nature and required param, then drops into auth, error, cost, and alternative info in dense sentences. Slight redundancy in re-listing patch field aliases that the schema already documents, but on a 25-parameter tool that enumeration aids 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?

An output schema exists, so return values need not be described. Auth, cost, error behavior, side effects, null/merge semantics, and a sibling alternative are all covered, leaving nothing material missing for correct invocation.

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 96%, so the baseline is 3, but the description adds genuine domain semantics the schema lacks: scoreboard fields merge with null clearing/removing, and the wake-only-sleep rule ('Adds a bedtime to a wake-only sleep: event_time...') is a real usage rule not encoded in any property description.

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?

States a specific verb ('MUTATES'), resource ('one existing calendar event'), and ownership scope ('the authenticated user owns'). This distinguishes it cleanly from log_event, delete_event, archive_event, and restore_event in the sibling list.

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?

Names a concrete alternative with a condition: 'For food-diary meals, prefer update_food (it syncs the mirrored event).' It also states the failure condition for a bad event_id. It stops short of routing between log_event, commit_life_update, or archive_event, so it's clear but not exhaustive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_expenseUpdate ExpenseCInspect

PATCH an expense row. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoYYYY-MM-DD expense_date
tagsNo
notesNo
amountNo
sourceNoAlias of payment_method
projectNoVenture label → project:{slug} tag
categoryNo
currencyNo
merchantNo
expense_idYes
request_idNoClient idempotency key (retries return original result).
descriptionNo
external_idNoOptional; merges ext:{source}:{id} into tags
payment_methodNoe.g. venmo, cash, card
idempotency_keyNoAlias for request_id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
changedNo
expenseNoExpense/income transaction row.
messageNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.

TDQS

C2.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds genuinely new context — a $0.10 per-call cost and an API key requirement — but says nothing about partial-update semantics or whether omitted fields are preserved.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short fragments with the operation front-loaded and zero waste. However, the brevity comes at the cost of substance for a 15-parameter mutation tool, so it reads as under-specified rather than efficiently concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/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 no explanation. But for a 15-parameter mutation tool at 47% schema coverage, the agent still lacks the field-level and partial-update guidance needed to call it correctly, leaving the definition materially incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 47% and the description names no parameter behavior at all, so it does not compensate for the gap. Fields like tags, notes, amount, category, currency, merchant, and description are undocumented in both places, and the PATCH/partial-update contract is never explained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('PATCH an expense row'), so an agent knows this mutates an existing expense. It does not differentiate from closely related siblings such as log_expense, archive_expense, or restore_expense, leaving the agent to infer the boundary. Clear but not sibling-aware.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no alternatives, and no exclusions. With siblings like log_expense (create), archive_expense (soft-delete), and restore_expense nearby, an agent gets no routing help for choosing update_expense over them.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_foodUpdate Food (diary patch)AInspect

MUTATES one existing Food Diary row the authenticated user owns. Required: food_id (UUID). Optional patch (same fields as log_food): what, kind, dish_items, place, merchant, notes, append_notes (concat), consumed_at (ISO instant) / meal_period (profile TZ), amount, currency, paid_by / payment_method, with / people_names / person_ids. dish_items replaces the complete ordered dish list. Unknown or other-user food_id returns an error and does not create a row. 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)

ParametersJSON 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 (name or alias)
currencyNoISO currency, e.g. SGD
merchantNoRestaurant, stall, or shop. Empty or null clears
dish_itemsNoComplete replacement ordered dish list; [] clears it.
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_methodNoAlias of paid_by for expense-style agents
idempotency_keyNoAlias for request_id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
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
unresolved_peopleYes
life_state_rebuiltYes

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 by disclosing side effects (syncs the mirrored calendar event, rebuilds life_state), auth constraints (API key/OAuth scope, share tokens cannot write), error behavior for unknown/other-user food_id, and mutation semantics like append_notes concatenation and dish_items full replacement. Annotation says destructiveHint=false and nothing here contradicts that.

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?

Dense but front-loaded, with the core mutation scope stated first. Each clause carries information (auth, side effects, param semantics), though it runs long and could be broken up for readability.

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?

With an output schema present and annotations covering safety, the description supplies everything else an agent needs: required field, auth requirements, error conditions, side effects, and mutation semantics. Nothing material is missing for a 25-param mutation tool.

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 96%, so the schema already documents most parameters. The description adds grouping (same fields as log_food), precedence (consumed_at wins over meal_period), and concat-vs-replace distinctions for notes and dish_items, giving useful meaning beyond the schema.

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?

Starts with a specific verb and scope ('MUTATES one existing Food Diary row the authenticated user owns'), which cleanly separates it from log_food (create) and delete_food (remove). The required food_id (UUID) and ownership constraint make the resource unambiguous.

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?

Implies update-vs-create semantics and clarifies it will not fall back to creating a row ('does not create a row'), effectively routing the agent to log_food for new entries. It also states auth requirements (API key/OAuth; share tokens cannot write). No explicit 'use X instead when' routing, but context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_inventory_itemUpdate Inventory ItemAInspect

Patch one owned Inventory item, found by inventory_id or by nickname: what the user calls it ("MacBook", "work laptop"), matched to exactly one of their active items by nickname, name or model, so there is no need to look it up first; several matches are refused with the candidates and nothing changes. Fields you leave out are untouched. specs merge per key (null removes a key), so updating memory keeps storage. state records a new observation (observed_at, source, confidence) and never changes specs or notes; a key already observed more recently is kept. spec_template switches or clears (null) the template. A status like sold or donated moves it out of the active list; to archive, use archive_inventory_item. Never add device or account identifiers. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoWhat the user calls the item, e.g. "MacBook Pro 14 (2023)".
tagsNoReplaces the tag list.
brandNo
modelNo
notesNoFree text from the user.
specsNoStable facts, by the template's field names (computer.v1: nickname, manufacturer, model_name, model_identifier, year, primary_uses, capability_tags, product_family, form_factor, chip, cpu, architecture, performance_cores, efficiency_cores, total_cores, threads, gpu, gpu_cores, gpu_memory_bytes, neural_engine_cores, memory_bytes, memory, storage_devices, display, ports). Merged per key on update; null removes a key; other keys are kept as written. Only what the user or the device says, never inferred from a model name. Never device or account identifiers.
stateNoChanging facts, as one observation: observed_at (ISO, default now), source (e.g. user_reported, system_profiler), confidence (0-1), and values such as os { name, version, build }, available_storage_bytes, battery, security { sip, gatekeeper, filevault }, services { bluebubbles: { installed_version, running, configured, blockers, checked_at } }. Merged per key; a key observed more recently is kept. Never changes specs or notes. Never device or account identifiers.
statusNoDefault owned. To archive, use archive_inventory_item.
subtypeNoSpecific kind: laptop, sweatshirt, guitar. Alias: item_type.
categoryNoelectronics | instruments | clothing | shoes | bags | accessories | jewelry | watches | collectibles | sports | health | home | tools | vehicles | furniture | other. Computers, phones and cameras are electronics; synths are instruments. Defaults to the spec_template's category, else other.
currencyNoISO 4217, e.g. USD, SGD. Default USD.
locationNoWhere it is kept.
nicknameNoIn place of inventory_id: what the user calls the item ("MacBook", "work laptop"), matched to exactly one of their active items by nickname, name or model. Several matches are refused with the candidates. To rename it, set specs.nickname.
conditionNo
item_typeNoAlias for subtype (the stored column).
request_idNoClient idempotency key (retries return original result).
inventory_idNoThe item id from add_inventory_item, get_inventory or search_inventory.
acquired_dateNoYYYY-MM-DD it came into the user's life (gift, inheritance). add_inventory_item also stores it as purchase_date when none is given.
acquired_fromNoShop or person it came from.
current_valueNoAlias for estimated_value (the stored column).
purchase_dateNoYYYY-MM-DD
spec_templateNoWhich typed fields specs uses. Templates are listed in docs/MCP_LIFE_GRAPH.md. null (update) clears it.
purchase_priceNo
estimated_valueNoWhat it is worth now. Alias: current_value.
idempotency_keyNoAlias for request_id.
acquisition_typeNopurchase | gift | inheritance | …
reference_numberNoManufacturer reference or model number (e.g. a watch reference).
subtype_confidenceNo0-1, when the subtype is a guess.
specs_schema_versionNoLayout of specs and state. Only 1 (the default).

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemNoInventory item record. With specs: spec_template, specs, state (a timestamped snapshot), state_freshness and capability_summary.
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
changedNo
messageNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
state_noteNo
inventory_idNo
resolved_fromNoPHI-448: present when nickname found the item: the nickname sent and matched_on (nickname, name or model).
changed_fieldsNoColumns set, and the specs / state keys written.
idempotent_replayNo
state_not_appliedNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial behavior beyond annotations: omitted fields are untouched, specs merge per key with null removal, state is recorded as an observation and never changes specs or notes, newer observations win, and status changes move an item out of the active list. It also discloses cost and API-key requirements.

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?

The purpose is front-loaded and the dense semicolon-heavy structure fits a complex update tool, but the paragraph is long and could be slightly more scannable. Most clauses earn their place by carrying operational detail.

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?

Given the output schema, annotations, and high schema coverage, the description is complete for correct invocation. It covers lookup, partial-update semantics, merge behavior, status side effects, archiving alternative, and cost/auth constraints.

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 already 86%, so the baseline is 3, but the description adds cross-parameter meaning: nickname matching behavior, specs merge semantics, state observation semantics, spec_template switching or clearing, and status effects. It does not individually clarify every one of the 29 parameters, but it meaningfully enriches the most complex ones.

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?

States a specific verb and resource: 'Patch one owned Inventory item.' It clearly distinguishes the tool from archive_inventory_item and explains the two lookup paths, inventory_id or nickname, so an agent can identify the operation immediately.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use nickname instead of looking up an id, what happens on multiple matches, and when to use the sibling archive_inventory_item instead. It also gives a clear exclusion: never add device or account identifiers.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_momentUpdate Moment (patch a story)AInspect

Patch one owned moment by moment_id (from log_moment); fields left out are untouched. It stays private. Requires moment_id. Patchable: title, description, moment_date, moment_date_precision, end_date, moment_type, location_name, people, event_id, images, tags. Unknown or other-user moment_id returns an error and creates nothing. person_ids / people_names, media_urls and tags replace the stored list ([] clears); event_id links an owned event (the event is not changed), empty or null unlinks. Visibility is not an argument. Returns changed_fields. Requires API key or OAuth with context.write. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoAlias for moment_date.
tagsNoReplaces the tags. [] clears.
titleNoNew title (max 200). Cannot be empty.
end_dateNoYYYY-MM-DD. Empty or null clears.
event_idNoLink the moment to an owned event (the event is not changed). Empty or null unlinks.
locationNoAlias for location_name.
moment_idYesUUID of a moment the user owns (from log_moment).
media_urlsNoReplaces the image links. [] clears.
person_idsNoReplaces the tagged people (with people_names). [] clears. Owned contact ids only.
request_idNoClient idempotency key (retries return original result).
descriptionNoReplaces the story text. Empty or null clears.
moment_dateNoYYYY-MM-DD, YYYY-MM or YYYY (alias date).
moment_timeNoOptional local HH:mm or HH:mm:ss. Empty or null clears (date-only).
moment_typeNoDefault memory.
people_namesNoReplaces the tagged people (with person_ids); names match saved contacts only.
location_nameNoReplaces the place. Empty or null clears. Alias: location.
cover_image_urlNohttps image link. Empty or null clears.
idempotency_keyNoAlias for request_id.
moment_date_precisionNoHow exact the date is. YYYY-MM and YYYY default to month and year; circa for "around then".

Output Schema

ParametersJSON Schema
NameRequiredDescription
momentYesA moment: a story or memory, private to the owner. event_id links the event it is about.
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
messageYes
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
invalidatesNo
people_taggedYes
changed_fieldsYesThe columns this call changed; empty when nothing differed.
unresolved_peopleYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare the generic readOnly/openWorld/destructive flags; the description supplies the real behavioral detail an agent needs: list fields replace wholesale with [] clearing, event_id links without mutating the event and null unlinks, visibility is not accepted, the response contains changed_fields, and the call requires an API key or OAuth with context.write at $0.10. That is substantial context beyond the structured fields.

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 action, identifier and patch semantics, then constraints, then side effects, then auth/cost. Every sentence carries information, though the parenthetical cost/auth clause and the long patchable-field list make it dense; a slightly tighter grouping would read better.

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?

With 19 parameters, an output schema (which covers changed_fields) and safety annotations already present, the description fills the remaining gaps: error behavior, list replacement, link/unlink semantics, auth requirements and pricing. Nothing material is missing for correct invocation.

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 100%, so the baseline is 3, but the description adds real meaning: it enumerates which fields are patchable, explains the replace-and-clear semantics for people/media/tags, and clarifies event_id link/unlink behavior. Minor cost: it uses loose field names ('people', 'images') where the schema uses person_ids/people_names and media_urls, so the mapping takes a moment.

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?

States a specific verb+resource+scope: 'Patch one owned moment by moment_id (from log_moment)'. The parenthetical source hint and the 'owned' qualifier let an agent distinguish this from log_moment (create), delete_moment (remove) and merge_moments 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?

Gives clear context: patch semantics ('fields left out are untouched'), the required identifier, and the failure mode for unknown/other-user ids ('returns an error and creates nothing'). It also rules out visibility editing ('Visibility is not an argument'), which routes the agent elsewhere, but it never names the sibling tool that does handle visibility, so the routing is implicit rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_notableUpdate Notable (catalog write)AInspect

MUTATES public notable_people. Superuser only. Patch by slug (bio, about, occupation, birth_place, birth_date, net_worth, residence, before_fame, trivia, family_life, zodiac, flag). Rejects unknown fields. No create/delete. Stamps last_updated_via=mcp. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
bioNo
flagNo
slugYesNotable person slug (e.g. taylor-swift)
aboutNo
triviaNo
zodiacNo
net_worthNo
residenceNo
birth_dateNoYYYY, YYYY-MM, or YYYY-MM-DD. Null/empty clears
occupationNo
request_idNoClient idempotency key (retries return original result).
before_fameNo
birth_placeNo
family_lifeNo
idempotency_keyNoAlias for request_id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
personYesUpdated notable catalog row (name, slug).
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.
provenanceNoWhich connector wrote the record and which connected Dayze account received it.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial behavior beyond the annotations: superuser-only authorization, partial-patch semantics, rejection of unknown fields, the last_updated_via=mcp stamp side effect, cost, and API-key requirement. The 'MUTATES' language is consistent with destructiveHint=false (patch-only, no delete), so there is no contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense and front-loaded: scope, auth, key, field list, exclusions, side effects, and cost each get a clause with zero filler. Nothing can be trimmed without losing a distinct fact.

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. Combined with the annotations, the description covers auth, mutation semantics, side effects, and cost — everything an agent needs to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 27%, so the description should compensate, but it mostly enumerates the patchable field names (bio, about, occupation, ...) that already appear as schema properties. It adds no format or semantic detail and never mentions the request_id/idempotency_key parameters, which are the ones carrying retry semantics.

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?

States a specific verb (MUTATES / Patch) and resource (public notable_people), plus the exact patch key (slug) and the updatable field set. It also carves out scope by declaring 'No create/delete', which separates it from the many create_/delete_ siblings.

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?

Gives clear preconditions (Superuser only, API key required, $0.10 cost) and a scope exclusion (no create/delete). It does not name a specific alternative for creating or deleting notable people (e.g. create_person), so routing is implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_pending_replyUpdate Pending ReplyAInspect

Pending Replies: change one reply by reply_id: its draft (replaces; null clears), summary, channel, category, received_at, person (person_id, or person_name linked only on one match), source, or status pending (reopen / unsnooze) or snoozed with snooze_until. Unknown or other-user reply_id returns not_found. To mark it sent or dismissed use resolve_pending_reply. Never sends anything. Requires API key or OAuth with context.write. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
draftNoThe reply text to send later, max 20,000 characters. Replaces the saved draft; empty or null clears. Alias: draft_message.
sourceNoThe email the reply answers, as ids only (e.g. a search_gmail id is a message_id). Never a subject, sender or text. On update, null clears it.
statusNo
channelNoWhere to reply: whatsapp, email, sms, call, imessage, telegram, instagram, facebook, signal, linkedin, twitter, slack, teams, work_email, zoom, dayze, other. Default email when source is set, else other.
summaryNoOne line (max 280) in your own words: what the reply is about. Never paste the email body, subject line or sender address.
categoryNo
reply_idYesFrom create_pending_reply or get_pending_replies.
person_idNo
request_idNoClient idempotency key (retries return original result).
person_nameNo
received_atNo
snooze_untilNoISO date-time, with status snoozed.
draft_messageNoAlias for draft.
idempotency_keyNoAlias for request_id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
replyYesOne reply the user owes (Inbox → Pending Replies). Dayze never sends it.
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
messageYes
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
person_linkNoWhether a contact was linked. Linked only on one resolve_person match or an owned person_id.
source_savedYes
changed_fieldsYes
life_state_rebuiltYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations (readOnlyHint=false, destructiveHint=false, openWorldHint=false) by disclosing null-clears semantics, that unknown or other-user reply_id returns not_found, auth requirements (API key or OAuth with context.write), and cost ($0.10). These are exactly the operational facts an agent needs.

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?

Dense but front-loaded, with the resource and primary action stated first and the alternative/auth/cost clauses trailing. Nearly every clause carries information; the parenthetical field list is long but earns its place for a 14-parameter tool.

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 mutation tool with a nested source object and an output schema, the description supplies the missing pieces: field semantics, error behavior, auth, cost, and the sibling routing. Nothing an agent needs to call it correctly is absent.

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 64%, and the description adds real meaning: null clears the draft, person_name links only on a single match, status pending means reopen/unsnooze while snoozed requires snooze_until. It doesn't cover every parameter (e.g., request_id/idempotency, category) but the semantic additions exceed what the schema alone conveys.

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?

States a specific verb (change/update) on a specific resource (one pending reply identified by reply_id) and enumerates the mutable fields. It explicitly differentiates itself from resolve_pending_reply, so an agent can route without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the alternative and the condition selecting it: 'To mark it sent or dismissed use resolve_pending_reply.' It also states the negative scope ('Never sends anything') and the reopen/unsnooze semantics for status, leaving no inference needed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_personUpdate Contact (CRM write)AInspect

MUTATES one owned Dayze contact by person_id. A context_tags-only patch is supported; send the full desired tag array (a repeat is a no-op). For personal-write OAuth send request_id, a unique string for each new write; reuse it for an exact retry. Fields left out are untouched. undo_contact_change(change_id) reverts a change. Requires context.write; share tokens cannot write. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoRename contact (also refreshes URL slug). Prefer this over create+merge for spelling fixes
tierNoRelationship priority. VIP stays in inner_circle even when not favorited
notesNoReplaces people.notes (does not append). Empty or null clears
birthdayNoYYYY, YYYY-MM, YYYY-MM-DD, or MM-DD / --MM-DD (year unknown; 02-29 ok). Null/empty clears
person_idYesUUID of a person the authenticated user owns
request_idNoRequired on personal-write OAuth. Unique for a new write; reuse for an exact retry.
is_favoriteNoFavorite flag. Favorites (and VIP) appear in get_context_pack inner_circle
context_tagsNoContexts such as Work, Personal, Family, plus custom tags
relationshipNoRelationship label (friend, sister, …). Empty or null clears
relationshipsNoWho they are to the user, in primary-first order (for example Friend + Client)
idempotency_keyNoAlias for request_id.
preserve_old_name_as_aliasNoWhen renaming, keep the previous name as a former_name alias (default true)

Output Schema

ParametersJSON Schema
NameRequiredDescription
personYesA Dayze person or contact record.
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.
change_idNoPass to undo_contact_change to revert this change, birthday and birthday_precision included.
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
former_name_aliasNoAfter a rename that keeps the old name (preserve_old_name_as_alias, default true): alias, saved, and reason when it could not be kept.
life_state_rebuiltYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial context beyond the annotations: partial-update semantics (omitted fields untouched), full-array replacement for context_tags, idempotency/retry behavior for request_id, the undo path, and hard auth constraints (context.write required, share tokens cannot write). Cost and API-key requirements are also disclosed — more than the non-destructive annotation conveys.

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-loads the mutation scope, then packs idempotency, partial-update rules, undo, and auth/prerequisites efficiently. Dense but every sentence carries weight; slightly telegraphic ending with cost and API-key notes.

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 12-parameter mutation tool with an output schema (so return values need no explanation), the description closes the important gaps: auth requirements, idempotency, partial-update semantics, and a revert path. Nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all 12 parameters and the baseline is 3. The description adds real semantics for context_tags (full-array semantics, repeats are no-ops) but repeats rather than extends the schema's request_id/idempotency explanation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and scope — 'MUTATES one owned Dayze contact by person_id' — so the agent knows it is a targeted partial update rather than an identity/alias edit. It does not explicitly distinguish itself from close siblings like update_person_identity or update_person_alias, which would have earned a 5.

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?

Gives clear operational context: context_tags-only patches are allowed, fields left out are untouched, request_id is required for personal-write OAuth, and undo goes through undo_contact_change. It stops short of naming alternatives for the fields it does not cover (e.g. identity vs alias tools), so no explicit exclusion routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_person_aliasUpdate Person AliasBInspect

Update alias_kind/source/display for an existing alias. ($0.05; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
aliasYes
sourceNo
person_idYes
alias_kindNo
request_idNoClient idempotency key (retries return original result).
alias_displayNo
idempotency_keyNoAlias for request_id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
aliasNo
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
messageNo
change_idNo
person_idNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this is a non-read-only, non-destructive, non-open-world mutation. The description adds genuinely useful context beyond them: a per-call cost ($0.05) and the API-key requirement. However, it says nothing about reversibility, behavior when the alias does not exist, or which fields are optional, so the disclosure remains partial.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence plus a compact parenthetical, with the core action front-loaded. Every element carries information and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/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. For a 7-parameter mutation tool with low schema coverage, the description covers cost and auth but omits required-parameter semantics and error/edge-case behavior, leaving it only marginally complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 29%, so most parameters are undocumented in the schema. The description names alias_kind/source/display, mapping to three properties, but leaves the required person_id and alias and the idempotency parameters unexplained, so it only partially compensates for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Update) and resource (an existing alias), and enumerates the fields that can change (alias_kind/source/display), so the operation is unambiguous. It does not explicitly contrast itself with the sibling add_person_alias or remove_person_alias, but the 'existing alias' phrasing implies the distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no mention of when to prefer add_person_alias/remove_person_alias, and no prerequisite stated beyond the API key. The agent must infer from the name that this only applies to an alias that already exists.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_person_identityUpdate Person IdentityAInspect

Patch identity fields (legal/preferred name, pronouns, social handles, user_relationships[]). Never infer sensitive identity from appearance. Confirmed user_relationships are preserved unless force=true. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNo
aliasesNo
websiteNo
pronounsNo
person_idYes
legal_nameNo
request_idNoClient idempotency key (retries return original result).
preferred_nameNo
social_handlesNo
idempotency_keyNoAlias for request_id.
user_relationshipsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
personNo
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
changedNo
messageNo
change_idNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations mark this as a non-read-only, non-destructive mutation with a bounded scope; the description adds real behavior beyond that: confirmed user_relationships are preserved unless force=true, a cost ($0.10), and an auth requirement (API key). It doesn't describe reversibility or return behavior, but with annotations covering the safety profile this is solid added context.

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 scope, then cautions, then cost/auth in parentheses. Three dense sentences carry a lot of information with little waste, though the parenthetical price/auth note is slightly tacked on.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/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 needn't be described, and annotations cover the safety profile. Still, for an 11-parameter tool with 18% schema coverage, the description leaves several parameters and any conflict/precondition handling (e.g. aliases vs the dedicated alias tools) unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 18%, so the description must compensate, and it partially does by naming legal_name, preferred_name, pronouns, social_handles, user_relationships, and the semantics of force. It leaves aliases, website, request_id, and idempotency_key unexplained, so several parameters remain undocumented in both places.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Patch) and resource (identity fields) and enumerates the affected fields (legal/preferred name, pronouns, social handles, user_relationships[]). It is clearly distinguishable from sibling mutations like update_person, update_person_alias, and set_primary_person_name, though it never names them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is an implicit usage constraint in 'Never infer sensitive identity from appearance' and a conditional rule for force=true, which guides behavior. However, it gives no explicit when-to-use vs the closely related siblings update_person, update_person_alias, or add_person_alias, leaving the agent to infer routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_placeUpdate Place CardAInspect

Patch a saved place card by place_id / business_contact_id. Unspecified fields stay unchanged (hours, affordability, address, notes, …). ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
idNo
areaNo
cityNo
nameNo
tagsNo
hoursNo
notesNo
phoneNo
addressNo
countryNo
websiteNo
categoryNo
latitudeNo
place_idNo
longitudeNo
request_idNoClient idempotency key (retries return original result).
descriptionNo
price_levelNo
hours_sourceNo
affordabilityNo
opening_hoursNo
phone_numbersNo
idempotency_keyNoAlias for request_id.
business_contact_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
placeNoSaved place card.
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
messageNo
updatedNo
place_idNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
business_contact_idNo

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare a non-read-only, non-destructive, closed-world mutation. The description adds genuinely useful context beyond that: partial-update semantics ('unspecified fields stay unchanged'), the cost ($0.10), and the API key requirement. It stops short of stating permissions or reversibility.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences: the operation and its patch semantics are front-loaded, and cost/auth are tucked into a parenthetical. No filler; every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/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 handling is covered, and patch semantics plus auth/cost are stated. However, with 24 parameters at 8% coverage and no field-level guidance, the definition leaves the agent materially under-informed about what it can actually set.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 8% across 24 parameters, so the description must carry the load but mostly does not. It identifies the two targeting ids and names a few writable fields (hours, affordability, address, notes), but leaves all other parameters — including confusable pairs like hours vs opening_hours, phone vs phone_numbers, price_level vs affordability — undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (patch) and resource (saved place card) plus the identifiers used to target it (place_id / business_contact_id). An agent can distinguish it from create_place, delete_place, get_place, and resolve_place, though no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'patch ... unspecified fields stay unchanged' phrasing implies this is for modifying an existing place, but there is no explicit when-to-use vs create_place, resolve_place, or enrich_place_from_google, and no prerequisites stated beyond an API key.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_sleepUpdate SleepBInspect

Sleep: patch an existing sleep record by sleep_id. ($0.10; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
notesNo
qualityNo
ended_atNo
sleep_idYes
timezoneNo
request_idNoClient idempotency key (retries return original result).
sleep_typeNo
started_atNo
idempotency_keyNoAlias for request_id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNo
sleepNo
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
messageNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuinely useful non-annotation context — a per-call cost of $0.10 and an API-key requirement — and the word 'patch' implies partial update semantics, but it does not say what happens to omitted fields or whether edits are reversible.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One compact sentence with the operation and key front-loaded, followed by the cost/auth constraint. Nothing is padded and no sentence is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/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 no explanation, and the annotations cover safety. What is missing is coverage of the six undocumented update fields and any note on error or retry behavior, which matters for a 9-parameter mutation endpoint.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 22%: request_id and idempotency_key are documented in the schema, but notes, quality, ended_at, timezone, sleep_type and started_at carry no descriptions anywhere. The description mentions only sleep_id and does not compensate for the gap, though 'patch' does convey that unspecified fields are left unchanged.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb (patch/update) and resource (an existing sleep record) and identifies the key (sleep_id), which cleanly separates it from log_sleep (create) and get_sleep (read). It does not name those siblings explicitly, so an agent must infer the distinction from the verb.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It says the record must already exist ('patch an existing sleep record'), which is a minimal usage condition, but gives no guidance on when to use this versus log_sleep or get_sleep, and no prerequisites beyond the API key note. The agent is left to infer routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

upload_assetUpload AssetAInspect

Upload image bytes to Dayze storage (normally re-encoded as WebP; original_preserved and metadata_stripped describe the saved bytes). Accepts image_base64, url, or ChatGPT file object image ({download_url, file_id}). Returns asset_id, content_type, byte_size, view_url after bytes are confirmed. Temporary ChatGPT download URLs are never stored. For inventory item photos: pass entity_type=inventory, entity_id=inventory_id, role=photo. For receipt photos: entity_type=expense|event, role=receipt. Or upload then attach_asset. ($0.15; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoRemote image URL to fetch and store.
roleNooriginal | cover | thumbnail | …
imageNoChatGPT chat attachment. Prefer this for images from the conversation; API clients may still use image_base64 or url.
filenameNo
metadataNoFree-form metadata, merged into the stored metadata (metadata.source becomes the asset source).
entity_idNo
mime_typeNoimage/jpeg, image/png, image/webp, … Alias: content_type.
asset_typeNophoto | receipt | certificate | document | thumbnail | …
request_idNoClient idempotency key (retries return original result).
descriptionNo
entity_typeNoevent | expense | place | person | inventory (inventory_item maps to inventory) | …
content_typeNoAlias for mime_type.
image_base64NoBase64 image bytes (optional data: URL prefix).
idempotency_keyNoAlias for request_id.
parent_asset_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
assetNo
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
messageNo
asset_idNo
view_urlNo
byte_sizeNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
content_typeNo
metadata_strippedNo

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare non-readonly/non-destructive/non-open-world. The description goes well beyond that, disclosing the re-encoding to WebP, the original_preserved and metadata_stripped semantics, that temporary ChatGPT download URLs are never stored, confirmation of bytes before return, plus cost ($0.15) and API key requirement.

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-loads the core action and packs input forms, return values, storage caveats, and entity recipes into a compact block with little waste. It is dense to the point of feeling crammed, which keeps it just below a perfect score.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 15-parameter tool with a nested input object and an output schema, the description covers the essential concerns: accepted inputs, return fields, storage behavior, cost, auth, and entity-attachment recipes. Minor gaps remain around idempotency and secondary params, which the schema covers anyway.

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 73% (baseline 3), and the description adds genuine meaning: it explains the three alternative input paths (image_base64, url, or the ChatGPT image object with download_url/file_id) and gives concrete entity_type/entity_id/role values for real scenarios. It does not document request_id/idempotency or parent_asset_id, so not a 5.

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?

States a specific verb and resource (upload image bytes to Dayze storage) and describes the storage transform (normally re-encoded as WebP). It clearly sits apart from siblings like attach_asset (which it names) and update_asset, so an agent can route correctly without opening schemas.

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?

Provides explicit when-to-use recipes (inventory item photos: entity_type=inventory, entity_id, role=photo; receipt photos: entity_type=expense|event, role=receipt) and names the follow-on alternative attach_asset. It lacks any exclusions and does not differentiate itself from the close sibling upload_photo, so it falls short of a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

upload_photoUpload PhotoAInspect

Upload a photo to a Life Graph entity you have (event, expense, place, person, inventory, …). Accepts image_base64, url, or ChatGPT file object image ({download_url, file_id}). Normally re-encodes as WebP; original_preserved and metadata_stripped describe the saved bytes. Partial results include an asset_id for repair: call upload_photo with asset_id and a new request_id, without image bytes. Answers attached: true only after readback confirms asset id, content_type, byte_size, and a viewable URL on the record — never from OCR text alone. Mobile file references without download_url fail clearly (attached: false). Person uploads also write the CRM gallery (person_photos) and avatar when set_as_avatar=true. ($0.15; API key required)

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoRemote image URL to fetch and store.
roleNooriginal | cover | thumbnail | receipt | … (photo is stored as original). set_as_avatar implies cover.
imageNoChatGPT chat attachment. Prefer this for images from the conversation; API clients may still use image_base64 or url.
titleNo
asset_idNoRepair saved upload: new request_id, no image bytes.
filenameNo
entity_idYes
mime_typeNoAlias for content_type.
request_idNoClient idempotency key (retries return original result).
descriptionNo
entity_typeYes
content_typeNo
image_base64NoBase64 image bytes (optional data: URL prefix).
set_as_avatarNo
idempotency_keyNoAlias for request_id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
urlNo
assetNo
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
messageNo
asset_idNo
attachedNo
photo_idNo
view_urlNo
byte_sizeNo
entity_idNo
optimizedNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
entity_typeNo
content_typeNo
avatar_updatedNo
metadata_strippedNo

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With annotations only covering the safety profile (not readOnly, not destructive, not openWorld), the description carries the rest: WebP re-encoding, what original_preserved/metadata_stripped mean, the readback-verification contract for attached:true, the explicit mobile-reference failure mode, person-tier side effects on person_photos and avatar, and cost/auth. This is unusually rich disclosure beyond structured fields.

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?

Dense but front-loaded: purpose and accepted inputs come first, then verification semantics, then repair/side-effect/cost details. Nearly every sentence carries operational weight. It is a single long paragraph, which slightly hurts scannability.

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 15-param mutation tool with an output schema present, the description supplies the missing operational context: idempotent repair flow, readback-conditioned success, failure mode, and side effects. An agent has everything needed to call it correctly and interpret partial results.

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 53%, so the description must add value, and it does: it frames the mutually exclusive input forms (image_base64, url, ChatGPT file object), explains asset_id as the repair-only path, and ties set_as_avatar to cover/avatar behavior. It does not document several lower-traffic params (title, filename, description, role values), leaving some gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Upload a photo to a Life Graph entity') and enumerates supported entity types (event, expense, place, person, inventory). An agent can immediately tell what the tool does. It does not, however, contrast itself with the sibling upload_asset, which is the closest alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives one concrete usage path: repair a partial result by calling with asset_id plus a new request_id and no image bytes. It also implies format preferences (three accepted input forms). But it never says when NOT to use this or names upload_asset as the generic alternative, so alternative selection is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool update
    • Changedget_people1 field changed
      • changedOutput schema / properties / scan_limited / description
        Previous value: -"A filtered live scan stopped after 5,000 contacts; total is then a lower bound and no_match is false."New value: +"Legacy compatibility field; filtered database searches return false."
  2. 4 tool updates
    • Addedapply_event_fact_correction
    • Addedget_event_fact_source
    • Addedlist_event_fact_corrections
    • Addedundo_event_fact_correction
  3. 5 tool updates
    • Changedadd_inventory_item2 fields changed
      • changedInput schema / properties / status / description
        Previous value: -"wishlist | ordered | owned | listed_for_sale | sold | returned | lost | disposed | donated. Default owned. To archive, use archive_inventory_item."New value: +"Default owned. To archive, use archive_inventory_item."
      • addedInput schema / properties / status / enum
        Added value: +[
        +  "wishlist",
        +  "ordered",
        +  "owned",
        +  "listed_for_sale",
        +  "sold",
        +  "returned",
        +  "lost",
        +  "disposed",
        +  "donated"
        +]
    • Addedget_fundraising_candidates
    • Changedget_inventory2 fields changed
      • removedInput schema / properties / status / description
        Removed value: -"wishlist | ordered | owned | listed_for_sale | sold | returned | lost | disposed | donated | archived"
      • addedInput schema / properties / status / enum
        Added value: +[
        +  "wishlist",
        +  "ordered",
        +  "owned",
        +  "listed_for_sale",
        +  "sold",
        +  "returned",
        +  "lost",
        +  "disposed",
        +  "donated",
        +  "archived"
        +]
    • Changedsearch_inventory2 fields changed
      • removedInput schema / properties / status / description
        Removed value: -"wishlist | ordered | owned | listed_for_sale | sold | returned | lost | disposed | donated | archived"
      • addedInput schema / properties / status / enum
        Added value: +[
        +  "wishlist",
        +  "ordered",
        +  "owned",
        +  "listed_for_sale",
        +  "sold",
        +  "returned",
        +  "lost",
        +  "disposed",
        +  "donated",
        +  "archived"
        +]
    • Changedupdate_inventory_item2 fields changed
      • changedInput schema / properties / status / description
        Previous value: -"wishlist | ordered | owned | listed_for_sale | sold | returned | lost | disposed | donated. Default owned. To archive, use archive_inventory_item."New value: +"Default owned. To archive, use archive_inventory_item."
      • addedInput schema / properties / status / enum
        Added value: +[
        +  "wishlist",
        +  "ordered",
        +  "owned",
        +  "listed_for_sale",
        +  "sold",
        +  "returned",
        +  "lost",
        +  "disposed",
        +  "donated"
        +]
  4. 1 tool update
    • Changedupload_photo2 fields changed
      • changedInput schema / anyOf
        Previous value: -[
        -  {
        -    "required": [
        -      "image_base64"
        -    ]
        -  },
        -  {
        -    "required": [
        -      "url"
        -    ]
        -  },
        -  {
        -    "required": [
        -      "image"
        -    ]
        -  }
        -]New value: +[
        +  {
        +    "required": [
        +      "image_base64"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "url"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "image"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "asset_id"
        +    ]
        +  }
        +]
      • addedInput schema / properties / asset_id
        Added value: +{
        +  "description": "Repair saved upload: new request_id, no image bytes.",
        +  "type": "string"
        +}
  5. 2 tool updates
    • Changedget_people9 fields changed
      • addedInput schema / properties / context_tags
        Added value: +{
        +  "description": "Require every exact context tag, case insensitive (for example [\"model\"]). Cannot combine with wealth_category.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / occupation
        Added value: +{
        +  "description": "Require this literal substring in the occupation field. Cannot combine with wealth_category.",
        +  "type": "string"
        +}
      • changedInput schema / properties / query / description
        Previous value: -"Literal substring search over contact name, slug, or email; with wealth_category=reviewed, name only. No fuzzy fallback."New value: +"Literal substring search over name, slug, email, occupation and context tags; with wealth_category=reviewed, name only. No fuzzy fallback."
      • changedInput schema / properties / wealth_category / description
        Previous value: -"Only contacts with an explicit owner-reviewed wealth-category decision. Returns id and name only."New value: +"Only explicitly owner-reviewed wealth-category contacts. Returns id and name only; cannot combine with occupation or context_tags."
      • addedOutput schema / properties / context_tags
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / match_mode / description
        Previous value: -"unfiltered or literal_substring; get_people has no fuzzy fallback."New value: +"unfiltered, structured or literal_substring; get_people has no fuzzy fallback."
      • changedOutput schema / properties / no_match / description
        Previous value: -"True when a non-empty query matched no contacts."New value: +"True when a query or profession filter matched no contacts."
      • addedOutput schema / properties / occupation
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / scan_limited
        Added value: +{
        +  "description": "A filtered live scan stopped after 5,000 contacts; total is then a lower bound and no_match is false.",
        +  "type": "boolean"
        +}
    • Changedupdate_person1 field changed
      • changedInput schema / properties / request_id / description
        Previous value: -"Client idempotency key (retries return original result)."New value: +"Required on personal-write OAuth. Unique for a new write; reuse for an exact retry."
  6. 10 tool updates
    • Addeddelete_moment
    • Addeddelete_moment_preview
    • Addedget_moments
    • Changedlog_moment10 fields changed
      • addedOutput schema / properties / moment / properties / ai_summary
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / moment / properties / is_featured
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / moment / properties / is_pinned
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / moment / properties / is_recurring
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / moment / properties / location_lat
        Added value: +{
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / moment / properties / location_lng
        Added value: +{
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / moment / properties / location_place_id
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / moment / properties / merged_provenance
        Added value: +{
        +  "items": {
        +    "additionalProperties": true,
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / moment / properties / recurrence_rule
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / moment / properties / sentiment
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
    • Addedmerge_moments
    • Changedpreview_destructive_change1 field changed
      • changedInput schema / properties / tool / enum
        Previous value: -[
        -  "delete_food",
        -  "delete_place",
        -  "delete_place_visit",
        -  "archive_inventory_item",
        -  "archive_asset",
        -  "reset_tracker",
        -  "unlink_people",
        -  "remove_person_alias",
        -  "convert_contact_entity",
        -  "bulk_dismiss_clarifications",
        -  "delete_memory",
        -  "merge_memory",
        -  "correct_memory_atom"
        -]New value: +[
        +  "delete_food",
        +  "delete_place",
        +  "delete_place_visit",
        +  "archive_inventory_item",
        +  "archive_asset",
        +  "reset_tracker",
        +  "unlink_people",
        +  "remove_person_alias",
        +  "convert_contact_entity",
        +  "bulk_dismiss_clarifications",
        +  "delete_memory",
        +  "delete_moment",
        +  "merge_moments",
        +  "merge_memory",
        +  "correct_memory_atom"
        +]
    • Addedpreview_moment_duplicates
    • Changedsearch1 field changed
      • addedInput schema / properties / entity_type
        Added value: +{
        +  "description": "Route a Moment query to search_moments.",
        +  "enum": [
        +    "moment"
        +  ],
        +  "type": "string"
        +}
    • Addedsearch_moments
    • Changedupdate_moment10 fields changed
      • addedOutput schema / properties / moment / properties / ai_summary
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / moment / properties / is_featured
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / moment / properties / is_pinned
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / moment / properties / is_recurring
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / moment / properties / location_lat
        Added value: +{
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / moment / properties / location_lng
        Added value: +{
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / moment / properties / location_place_id
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / moment / properties / merged_provenance
        Added value: +{
        +  "items": {
        +    "additionalProperties": true,
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / moment / properties / recurrence_rule
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / moment / properties / sentiment
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
  7. 1 tool update
    • Changedget_people3 fields changed
      • changedInput schema / properties / query / description
        Previous value: -"Literal substring search over contact name, slug, or email. No fuzzy fallback."New value: +"Literal substring search over contact name, slug, or email; with wealth_category=reviewed, name only. No fuzzy fallback."
      • addedInput schema / properties / wealth_category
        Added value: +{
        +  "description": "Only contacts with an explicit owner-reviewed wealth-category decision. Returns id and name only.",
        +  "enum": [
        +    "reviewed"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / wealth_category
        Added value: +{
        +  "description": "reviewed when the result is restricted to explicitly reviewed wealth-category contacts.",
        +  "type": "string"
        +}
  8. 3 tool updates
    • Addedcorrect_memory_atom
    • Addedmerge_memory
    • Changedpreview_destructive_change1 field changed
      • changedInput schema / properties / tool / enum
        Previous value: -[
        -  "delete_food",
        -  "delete_place",
        -  "delete_place_visit",
        -  "archive_inventory_item",
        -  "archive_asset",
        -  "reset_tracker",
        -  "unlink_people",
        -  "remove_person_alias",
        -  "convert_contact_entity",
        -  "bulk_dismiss_clarifications",
        -  "delete_memory"
        -]New value: +[
        +  "delete_food",
        +  "delete_place",
        +  "delete_place_visit",
        +  "archive_inventory_item",
        +  "archive_asset",
        +  "reset_tracker",
        +  "unlink_people",
        +  "remove_person_alias",
        +  "convert_contact_entity",
        +  "bulk_dismiss_clarifications",
        +  "delete_memory",
        +  "merge_memory",
        +  "correct_memory_atom"
        +]
  9. 90 tool updates
    • Changedadd_inventory_item2 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"
        +}
    • Changedadd_inventory_valuation2 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"
        +}
    • Changedadd_person_alias2 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"
        +}
    • Changedarchive_asset2 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"
        +}
    • Changedarchive_event2 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"
        +}
    • Changedarchive_expense2 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"
        +}
    • Changedarchive_inventory_item2 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"
        +}
    • Changedarchive_trip2 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"
        +}
    • Changedattach_asset2 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"
        +}
    • Changedattach_food_photo2 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"
        +}
    • Changedbackfill_place_names2 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"
        +}
    • Changedbulk_dismiss_clarifications2 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"
        +}
    • Changedclassify_contact2 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"
        +}
    • Changedcleanup_apply2 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"
        +}
    • Changedcleanup_preview2 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"
        +}
    • Changedcommit_life_update2 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"
        +}
    • Changedconvert_contact_entity2 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"
        +}
    • Changedcreate_condition2 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"
        +}
    • Changedcreate_pending_reply2 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"
        +}
    • Changedcreate_person2 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"
        +}
    • Changedcreate_place2 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"
        +}
    • Changeddelete_event2 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"
        +}
    • Changeddelete_food2 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"
        +}
    • Changeddelete_memory2 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"
        +}
    • Changeddelete_person2 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"
        +}
    • Changeddelete_person_preview2 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"
        +}
    • Changeddelete_place2 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"
        +}
    • Changeddelete_place_visit2 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"
        +}
    • Changeddismiss_clarification2 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"
        +}
    • Changedenrich_place_from_google2 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"
        +}
    • Changedimport_rideshare_gmail2 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"
        +}
    • Changedimport_uber_gmail2 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"
        +}
    • Changedimport_venmo_gmail2 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"
        +}
    • Changedlink_entities2 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"
        +}
    • Changedlink_inventory_person2 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"
        +}
    • Changedlink_people2 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"
        +}
    • Changedlog_condition_checkin2 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"
        +}
    • Changedlog_event2 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"
        +}
    • Changedlog_expense2 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"
        +}
    • Changedlog_favorite_song2 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"
        +}
    • Changedlog_food2 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"
        +}
    • Changedlog_income2 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"
        +}
    • Changedlog_interaction2 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"
        +}
    • Changedlog_moment2 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"
        +}
    • Changedlog_movement2 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"
        +}
    • Changedlog_place_visit2 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"
        +}
    • Changedlog_sleep2 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"
        +}
    • Changedlog_transaction2 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"
        +}
    • Changedlog_travel2 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"
        +}
    • Changedmerge_people2 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"
        +}
    • Changedmerge_people_preview2 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"
        +}
    • Changednormalize_people_apply2 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"
        +}
    • Changednormalize_people_preview2 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"
        +}
    • Changedpreview_destructive_change2 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"
        +}
    • Changedpropose_life_update2 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"
        +}
    • Changedrecord_health_trend2 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"
        +}
    • Changedrecord_purchase2 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"
        +}
    • Changedrecord_sale2 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"
        +}
    • Changedremove_person_alias2 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"
        +}
    • Changedreset_tracker2 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"
        +}
    • Changedresolve_clarification2 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"
        +}
    • Changedresolve_pending_reply2 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"
        +}
    • Changedrestore_change2 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"
        +}
    • Changedrestore_cleanup2 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"
        +}
    • Changedrestore_event2 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"
        +}
    • Changedrestore_expense2 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"
        +}
    • Changedrestore_trip2 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"
        +}
    • Changedsearch2 fields changed
      • changedInput schema / properties / from / description
        Previous value: -"Inclusive YYYY-MM-DD start for structured food search. Pair with to."New value: +"Inclusive account-local YYYY-MM-DD lower bound for all search routes. May be used alone."
      • changedInput schema / properties / to / description
        Previous value: -"Inclusive YYYY-MM-DD end for structured food search. Pair with from."New value: +"Inclusive account-local YYYY-MM-DD upper bound for all search routes. May be used alone."
    • Changedset_primary_person_name2 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"
        +}
    • Changedstart_people_cleanup2 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"
        +}
    • Changedundo_contact_change2 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"
        +}
    • Changedunlink_people2 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"
        +}
    • Changedupdate_asset2 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"
        +}
    • Changedupdate_condition2 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"
        +}
    • Changedupdate_current_location2 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"
        +}
    • Changedupdate_event2 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"
        +}
    • Changedupdate_expense2 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"
        +}
    • Changedupdate_food2 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"
        +}
    • Changedupdate_inventory_item2 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"
        +}
    • Changedupdate_moment2 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"
        +}
    • Changedupdate_notable2 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"
        +}
    • Changedupdate_pending_reply2 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"
        +}
    • Changedupdate_people_link2 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"
        +}
    • Changedupdate_person2 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"
        +}
    • Changedupdate_person_alias2 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"
        +}
    • Changedupdate_person_identity2 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"
        +}
    • Changedupdate_place2 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"
        +}
    • Changedupdate_sleep2 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"
        +}
    • Changedupload_asset2 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"
        +}
    • Changedupload_photo2 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"
        +}
  10. 1 tool update
    • Changedget_interactions1 field changed
      • addedOutput schema / properties / degraded
        Added value: +{
        +  "type": "boolean"
        +}
  11. 2 tool updates
    • Changedupload_asset6 fields changed
      • changedInput schema / anyOf
        Previous value: -[
        -  {
        -    "required": [
        -      "image_base64"
        -    ]
        -  },
        -  {
        -    "required": [
        -      "url"
        -    ]
        -  }
        -]New value: +[
        +  {
        +    "required": [
        +      "image_base64"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "url"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "image"
        +    ]
        +  }
        +]
      • changedInput schema / properties / entity_type / description
        Previous value: -"event | place | person | inventory (inventory_item maps to inventory) | …"New value: +"event | expense | place | person | inventory (inventory_item maps to inventory) | …"
      • addedInput schema / properties / image
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "ChatGPT chat attachment. Prefer this for images from the conversation; API clients may still use image_base64 or url.",
        +  "properties": {
        +    "download_url": {
        +      "description": "Temporary HTTPS URL ChatGPT provides for this file.",
        +      "type": "string"
        +    },
        +    "file_id": {
        +      "description": "ChatGPT file id (not a Dayze asset_id).",
        +      "type": "string"
        +    },
        +    "file_name": {
        +      "description": "Optional original filename from ChatGPT.",
        +      "type": "string"
        +    },
        +    "mime_type": {
        +      "description": "Optional MIME type from ChatGPT.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "download_url",
        +    "file_id"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / byte_size
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / content_type
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / view_url
        Added value: +{
        +  "type": "string"
        +}
    • Changedupload_photo6 fields changed
      • changedInput schema / anyOf
        Previous value: -[
        -  {
        -    "required": [
        -      "image_base64"
        -    ]
        -  },
        -  {
        -    "required": [
        -      "url"
        -    ]
        -  }
        -]New value: +[
        +  {
        +    "required": [
        +      "image_base64"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "url"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "image"
        +    ]
        +  }
        +]
      • addedInput schema / properties / image
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "ChatGPT chat attachment. Prefer this for images from the conversation; API clients may still use image_base64 or url.",
        +  "properties": {
        +    "download_url": {
        +      "description": "Temporary HTTPS URL ChatGPT provides for this file.",
        +      "type": "string"
        +    },
        +    "file_id": {
        +      "description": "ChatGPT file id (not a Dayze asset_id).",
        +      "type": "string"
        +    },
        +    "file_name": {
        +      "description": "Optional original filename from ChatGPT.",
        +      "type": "string"
        +    },
        +    "mime_type": {
        +      "description": "Optional MIME type from ChatGPT.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "download_url",
        +    "file_id"
        +  ],
        +  "type": "object"
        +}
      • changedInput schema / properties / role / description
        Previous value: -"original | cover | thumbnail | … (photo is stored as original). set_as_avatar implies cover."New value: +"original | cover | thumbnail | receipt | … (photo is stored as original). set_as_avatar implies cover."
      • addedOutput schema / properties / byte_size
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / content_type
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / view_url
        Added value: +{
        +  "type": "string"
        +}
  12. 1 tool update
    • Changedget_berklee_relationship_map2 fields changed
      • addedOutput schema / properties / correction_history_available
        Added value: +{
        +  "type": "boolean"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "account",
        -  "period",
        -  "filters",
        -  "people",
        -  "facets",
        -  "record_count",
        -  "excluded_sensitive_record_count",
        -  "active_correction_count",
        -  "correction_history_count",
        -  "truncated",
        -  "caveats"
        -]New value: +[
        +  "account",
        +  "period",
        +  "filters",
        +  "people",
        +  "facets",
        +  "record_count",
        +  "excluded_sensitive_record_count",
        +  "correction_history_available",
        +  "active_correction_count",
        +  "correction_history_count",
        +  "truncated",
        +  "caveats"
        +]
  13. 3 tool updates
    • Changedget_location_history1 field changed
      • changedOutput schema / properties / visits / items / description
        Previous value: -"Normalized place visit. visit_id (= id) is the place_visits row id delete_place_visit takes; null on event/GPS evidence rows."New value: +"Confirmed same-day outing with visit_date and evidence_refs. A typed place_visits row is primary and carries visit_id (= id); linked event/GPS evidence is reconciled without increasing the count."
    • Changedget_place_visits9 fields changed
      • addedOutput schema / properties / confirmed_count
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / confirmed_visit_dates
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / count_semantics
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / matched_via
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / reconstructed_candidates
        Added value: +{
        +  "items": {
        +    "additionalProperties": true,
        +    "description": "Unconfirmed completed-trip evidence with confidence and source; never included in count.",
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / reconstructed_count
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / resolution_candidates
        Added value: +{
        +  "items": {
        +    "additionalProperties": true,
        +    "description": "Ambiguous canonical place matches; count stays empty.",
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / resolved_place
        Added value: +{
        +  "additionalProperties": true,
        +  "description": "Canonical place record.",
        +  "type": [
        +    "object",
        +    "null"
        +  ]
        +}
      • changedOutput schema / properties / visits / items / description
        Previous value: -"Normalized place visit. visit_id (= id) is the place_visits row id delete_place_visit takes; null on event/GPS evidence rows."New value: +"Confirmed same-day outing with visit_date and evidence_refs. A typed place_visits row is primary and carries visit_id (= id); linked event/GPS evidence is reconciled without increasing the count."
    • Changedlog_place_visit1 field changed
      • changedOutput schema / properties / visit / description
        Previous value: -"Normalized place visit. visit_id (= id) is the place_visits row id delete_place_visit takes; null on event/GPS evidence rows."New value: +"Confirmed same-day outing with visit_date and evidence_refs. A typed place_visits row is primary and carries visit_id (= id); linked event/GPS evidence is reconciled without increasing the count."
  14. 1 tool update
    • Changedget_berklee_relationship_map3 fields changed
      • addedOutput schema / properties / active_correction_count
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / correction_history_count
        Added value: +{
        +  "type": "number"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "account",
        -  "period",
        -  "filters",
        -  "people",
        -  "facets",
        -  "record_count",
        -  "excluded_sensitive_record_count",
        -  "truncated",
        -  "caveats"
        -]New value: +[
        +  "account",
        +  "period",
        +  "filters",
        +  "people",
        +  "facets",
        +  "record_count",
        +  "excluded_sensitive_record_count",
        +  "active_correction_count",
        +  "correction_history_count",
        +  "truncated",
        +  "caveats"
        +]
  15. 10 tool updates
    • Changedcreate_condition6 fields changed
      • addedInput schema / properties / confirmation_status
        Added value: +{
        +  "description": "unconfirmed | reported (default) | confirmed; never infer confirmed.",
        +  "enum": [
        +    "unconfirmed",
        +    "reported",
        +    "confirmed"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / person_id
        Added value: +{
        +  "description": "Owned contact id; required for person.",
        +  "type": "string"
        +}
      • addedInput schema / properties / source
        Added value: +{
        +  "description": "Provenance, e.g. user_reported. Default user_reported.",
        +  "type": "string"
        +}
      • addedInput schema / properties / subject_type
        Added value: +{
        +  "description": "self, or person with person_id.",
        +  "enum": [
        +    "self",
        +    "person"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "name"
        -]New value: +[
        +  "name",
        +  "subject_type"
        +]
      • changedOutput schema / properties / condition / description
        Previous value: -"An owner health condition: condition_id, name, status, confirmed, sensitivity, symptoms, body_area, started_on, resolved_on, tracking_focus, treatments, notes, latest_checkin."New value: +"A private condition with explicit subject_type/person_id, source and confirmation_status."
    • Addedget_berklee_relationship_map
    • Changedget_conditions6 fields changed
      • addedInput schema / properties / person_id
        Added value: +{
        +  "description": "Owned contact id; required for person.",
        +  "type": "string"
        +}
      • addedInput schema / properties / subject_type
        Added value: +{
        +  "description": "self, or person with person_id.",
        +  "enum": [
        +    "self",
        +    "person"
        +  ],
        +  "type": "string"
        +}
      • changedOutput schema / properties / condition / description
        Previous value: -"An owner health condition: condition_id, name, status, confirmed, sensitivity, symptoms, body_area, started_on, resolved_on, tracking_focus, treatments, notes, latest_checkin."New value: +"A private condition with explicit subject_type/person_id, source and confirmation_status."
      • changedOutput schema / properties / conditions / items / description
        Previous value: -"An owner health condition: condition_id, name, status, confirmed, sensitivity, symptoms, body_area, started_on, resolved_on, tracking_focus, treatments, notes, latest_checkin."New value: +"A private condition with explicit subject_type/person_id, source and confirmation_status."
      • addedOutput schema / properties / person_id
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / subject_type
        Added value: +{
        +  "description": "self or person.",
        +  "type": "string"
        +}
    • Addedget_health_trends
    • Changedlog_condition_checkin3 fields changed
      • addedInput schema / properties / person_id
        Added value: +{
        +  "description": "Owned contact id; required for person.",
        +  "type": "string"
        +}
      • addedInput schema / properties / subject_type
        Added value: +{
        +  "description": "self, or person with person_id.",
        +  "enum": [
        +    "self",
        +    "person"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "condition_id"
        -]New value: +[
        +  "condition_id",
        +  "subject_type"
        +]
    • Changedlog_expense3 fields changed
      • changedInput schema / properties / cash_moved / description
        Previous value: -"With category \"IOU lend\": true (default) = cash changed hands as a loan (shows in Finance); false = an owed share, e.g. of a dinner logged as its own expense (IOU only)."New value: +"With category \"IOU lend\": true (default) = cash changed hands as a loan (shows in Finance); false = an owed share, e.g. of a dinner logged as its own expense (IOU only). Ignored for iou_type invoice."
      • addedInput schema / properties / client_label
        Added value: +{
        +  "description": "Optional free-text client label for an invoice IOU.",
        +  "type": "string"
        +}
      • addedInput schema / properties / iou_type
        Added value: +{
        +  "description": "loan (default) or invoice. Invoice = unpaid receivable: no Finance outflow on create; payment is income \"Invoice payment\". Use for invoice/receivable phrasings; \"I lent…\" → loan.",
        +  "type": "string"
        +}
    • Changedlog_income3 fields changed
      • changedInput schema / properties / cash_moved / description
        Previous value: -"With category \"IOU lend\": true (default) = cash changed hands as a loan (shows in Finance); false = an owed share, e.g. of a dinner logged as its own expense (IOU only)."New value: +"With category \"IOU lend\": true (default) = cash changed hands as a loan (shows in Finance); false = an owed share, e.g. of a dinner logged as its own expense (IOU only). Ignored for iou_type invoice."
      • addedInput schema / properties / client_label
        Added value: +{
        +  "description": "Optional free-text client label for an invoice IOU.",
        +  "type": "string"
        +}
      • addedInput schema / properties / iou_type
        Added value: +{
        +  "description": "loan (default) or invoice. Invoice = unpaid receivable: no Finance outflow on create; payment is income \"Invoice payment\". Use for invoice/receivable phrasings; \"I lent…\" → loan.",
        +  "type": "string"
        +}
    • Changedlog_transaction4 fields changed
      • changedInput schema / properties / cash_moved / description
        Previous value: -"With category \"IOU lend\": true (default) = cash changed hands as a loan (shows in Finance); false = an owed share, e.g. of a dinner logged as its own expense (IOU only)."New value: +"With category \"IOU lend\": true (default) = cash changed hands as a loan (shows in Finance); false = an owed share, e.g. of a dinner logged as its own expense (IOU only). Ignored for iou_type invoice."
      • changedInput schema / properties / category / description
        Previous value: -"Ledger category (e.g. Salary, Gift, Refund, Transfer in, Food & Dining). \"IOU repayment\" = a contact paying back an IOU; \"IOU lend\" = a cash loan to or from a contact (both need person_id)."New value: +"Ledger category (e.g. Salary, Gift, Refund, Transfer in, Food & Dining). \"IOU repayment\" = a contact paying back a loan IOU; \"IOU lend\" = a cash loan; \"Invoice payment\" = collecting an unpaid invoice (need person_id)."
      • addedInput schema / properties / client_label
        Added value: +{
        +  "description": "Optional free-text client label for an invoice IOU.",
        +  "type": "string"
        +}
      • addedInput schema / properties / iou_type
        Added value: +{
        +  "description": "loan (default) or invoice. Invoice = unpaid receivable: no Finance outflow on create; payment is income \"Invoice payment\". Use for invoice/receivable phrasings; \"I lent…\" → loan.",
        +  "type": "string"
        +}
    • Addedrecord_health_trend
    • Changedupdate_condition6 fields changed
      • addedInput schema / properties / confirmation_status
        Added value: +{
        +  "description": "unconfirmed | reported (default) | confirmed; never infer confirmed.",
        +  "enum": [
        +    "unconfirmed",
        +    "reported",
        +    "confirmed"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / person_id
        Added value: +{
        +  "description": "Owned contact id; required for person.",
        +  "type": "string"
        +}
      • addedInput schema / properties / source
        Added value: +{
        +  "description": "Provenance, e.g. user_reported. Default user_reported.",
        +  "type": "string"
        +}
      • addedInput schema / properties / subject_type
        Added value: +{
        +  "description": "self, or person with person_id.",
        +  "enum": [
        +    "self",
        +    "person"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "condition_id"
        -]New value: +[
        +  "condition_id",
        +  "subject_type"
        +]
      • changedOutput schema / properties / condition / description
        Previous value: -"An owner health condition: condition_id, name, status, confirmed, sensitivity, symptoms, body_area, started_on, resolved_on, tracking_focus, treatments, notes, latest_checkin."New value: +"A private condition with explicit subject_type/person_id, source and confirmation_status."
  16. 4 tool updates
    • Changedcreate_condition1 field changed
      • changedOutput schema / properties / condition / description
        Previous value: -"A private health condition: condition_id, name, status, confirmed, symptoms, body_area, started_on, resolved_on, tracking_focus, treatments, notes, latest_checkin."New value: +"An owner health condition: condition_id, name, status, confirmed, sensitivity, symptoms, body_area, started_on, resolved_on, tracking_focus, treatments, notes, latest_checkin."
    • Changedget_conditions2 fields changed
      • changedOutput schema / properties / condition / description
        Previous value: -"A private health condition: condition_id, name, status, confirmed, symptoms, body_area, started_on, resolved_on, tracking_focus, treatments, notes, latest_checkin."New value: +"An owner health condition: condition_id, name, status, confirmed, sensitivity, symptoms, body_area, started_on, resolved_on, tracking_focus, treatments, notes, latest_checkin."
      • changedOutput schema / properties / conditions / items / description
        Previous value: -"A private health condition: condition_id, name, status, confirmed, symptoms, body_area, started_on, resolved_on, tracking_focus, treatments, notes, latest_checkin."New value: +"An owner health condition: condition_id, name, status, confirmed, sensitivity, symptoms, body_area, started_on, resolved_on, tracking_focus, treatments, notes, latest_checkin."
    • Changedlog_event2 fields changed
      • addedInput schema / anyOf
        Added value: +[
        +  {
        +    "required": [
        +      "event_date"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "date"
        +    ]
        +  }
        +]
      • changedInput schema / required
        Previous value: -[
        -  "title",
        -  "event_date"
        -]New value: +[
        +  "title"
        +]
    • Changedupdate_condition1 field changed
      • changedOutput schema / properties / condition / description
        Previous value: -"A private health condition: condition_id, name, status, confirmed, symptoms, body_area, started_on, resolved_on, tracking_focus, treatments, notes, latest_checkin."New value: +"An owner health condition: condition_id, name, status, confirmed, sensitivity, symptoms, body_area, started_on, resolved_on, tracking_focus, treatments, notes, latest_checkin."
  17. 2 tool updates
    • Changedlog_moment1 field changed
      • addedInput schema / properties / moment_time
        Added value: +{
        +  "description": "Optional local time-of-day when it happened (HH:mm or HH:mm:ss). Null/empty = date-only. Not the row created_at.",
        +  "type": "string"
        +}
    • Changedupdate_moment1 field changed
      • addedInput schema / properties / moment_time
        Added value: +{
        +  "description": "Optional local HH:mm or HH:mm:ss. Empty or null clears (date-only).",
        +  "type": "string"
        +}
  18. 2 tool updates
    • Changedcreate_person4 fields changed
      • addedOutput schema / properties / code
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / hygiene_flags
        Added value: +{
        +  "items": {
        +    "additionalProperties": true,
        +    "description": "Import hygiene skip/review flags.",
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / message / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +"string"
      • addedOutput schema / properties / skipped
        Added value: +{
        +  "type": "boolean"
        +}
    • Changedlog_event6 fields changed
      • addedInput schema / properties / source_email_participants
        Added value: +{
        +  "description": "Sender/To/Cc identities from source_gmail_id. Contacts are proposed only on one exact stored email match; shared/unknown/automated addresses stay unresolved. Do not also pass people fields.",
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "email": {
        +        "type": "string"
        +      },
        +      "name": {
        +        "type": "string"
        +      },
        +      "role": {
        +        "enum": [
        +          "sender",
        +          "to",
        +          "cc",
        +          "participant"
        +        ],
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "email"
        +    ],
        +    "type": "object"
        +  },
        +  "maxItems": 50,
        +  "type": "array"
        +}
      • addedOutput schema / properties / import_hygiene_flags
        Added value: +{
        +  "items": {
        +    "additionalProperties": true,
        +    "description": "Import skip/review flags.",
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / people_email_anchored
        Added value: +{
        +  "items": {
        +    "additionalProperties": true,
        +    "description": "Proposed exact unique-email anchors.",
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / people_name_matched
        Added value: +{
        +  "items": {
        +    "additionalProperties": true,
        +    "description": "Proposed confidence-0.7 full-name matches.",
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / unresolved_source_people
        Added value: +{
        +  "items": {
        +    "additionalProperties": true,
        +    "description": "Source participants that were not linked.",
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "event",
        -  "people_tagged",
        -  "unresolved_people",
        -  "life_state_rebuilt"
        -]New value: +[
        +  "event",
        +  "people_tagged",
        +  "unresolved_people",
        +  "people_name_matched",
        +  "people_email_anchored",
        +  "unresolved_source_people",
        +  "import_hygiene_flags",
        +  "life_state_rebuilt"
        +]
  19. 1 tool update
    • Changedlog_favorite_song1 field changed
      • addedInput schema / properties / person_id
        Added value: +{
        +  "description": "Optional owned contact id from get_people; the track appears on that contact profile and shared history",
        +  "type": "string"
        +}

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    B
    maintenance
    Provides a unified context layer for AI agents, enabling ranked search, file management, context bundles, database queries, and connected source access through MCP, all scoped to organizational permissions with citations.
    -
  • F
    license
    Not graded
    quality
    D
    maintenance
    Compiles and routes context from trust-domain sources (session, workdir, knowledge, shared) into unified, trust-tagged context envelopes for agents, without storing any data itself.
    -
  • F
    license
    A
    quality
    Not graded
    maintenance
    A Context-as-a-Service MCP server that maintains structured, graph-based context for Shopify apps by extracting and summarizing data from web sources and help centers. It enables multi-agent systems to retrieve isolated, provenance-backed context slices or starter bundles via push and pull mechanisms.
    5
    -
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.