Servidor MCP

Dayze — Life Context

com.dayze/life-context
Conocimiento y documentación Productividad Público y accesible MCP 2026-07-28

Qué hace este MCP

Provides authenticated personal life-context data and tools for contacts, memories, events, expenses, trips, assets, places, and provenance.

add_inventory_item
Add Inventory Item
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)
Esquema de entrada
{'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'description': 'What the user calls the item, e.g. "MacBook Pro 14 (2023)".'}, 'tags': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Replaces the tag list.'}, 'brand': {'type': 'string'}, 'model': {'type': 'string'}, 'notes': {'type': 'string', 'description': 'Free text from the user.'}, 'specs': {'type': 'object', 'description': "Stable 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."}, 'state': {'type': 'object', 'description': 'Changing 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.'}, 'status': {'type': 'string', 'description': 'wishlist | ordered | owned | listed_for_sale | sold | returned | lost | disposed | donated. Default owned. To archive, use archive_inventory_item.'}, 'subtype': {'type': 'string', 'description': 'Specific kind: laptop, sweatshirt, guitar. Alias: item_type.'}, 'category': {'type': 'string', 'description': "electronics | 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."}, 'currency': {'type': 'string', 'description': 'ISO 4217, e.g. USD, SGD. Default USD.'}, 'location': {'type': 'string', 'description': 'Where it is kept.'}, 'condition': {'enum': ['new', 'excellent', 'good', 'worn', 'needs_repair', 'retired'], 'type': 'string'}, 'item_type': {'type': 'string', 'description': 'Alias for subtype (the stored column).'}, 'person_ids': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Contacts to link: purchased_from, or inherited_from when acquisition_type is inheritance.'}, 'request_id': {'type': 'string', 'description': 'Client idempotency key (retries return original result).'}, 'acquired_date': {'type': 'string', 'description': "YYYY-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_from': {'type': 'string', 'description': 'Shop or person it came from.'}, 'current_value': {'type': 'number', 'description': 'Alias for estimated_value (the stored column).'}, 'purchase_date': {'type': 'string', 'description': 'YYYY-MM-DD'}, 'spec_template': {'enum': ['computer.v1', 'phone.v1', 'camera.v1', 'synth.v1'], 'type': 'string', 'description': 'Which typed fields specs uses. Templates are listed in docs/MCP_LIFE_GRAPH.md. null (update) clears it.'}, 'purchase_price': {'type': 'number'}, 'estimated_value': {'type': 'number', 'description': 'What it is worth now. Alias: current_value.'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}, 'acquisition_type': {'type': 'string', 'description': 'purchase | gift | inheritance | …'}, 'reference_number': {'type': 'string', 'description': 'Manufacturer reference or model number (e.g. a watch reference).'}, 'subtype_confidence': {'type': 'number', 'description': '0-1, when the subtype is a guess.'}, 'specs_schema_version': {'type': 'integer', 'description': 'Layout of specs and state. Only 1 (the default).'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'item': {'type': 'object', 'description': 'Inventory item record. With specs: spec_template, specs, state (a timestamped snapshot), state_freshness and capability_summary.', 'additionalProperties': True}, 'message': {'type': ['string', 'null']}, 'inventory_id': {'type': 'string'}, 'idempotent_replay': {'type': 'boolean', 'description': 'true when this request_id already ran: the first result, nothing new written.'}, 'people_not_linked': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': True}
add_inventory_valuation
Add Inventory Valuation
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)
Esquema de entrada
{'type': 'object', 'required': ['inventory_id', 'value'], 'properties': {'notes': {'type': 'string'}, 'value': {'type': 'number', 'description': 'What it is worth.'}, 'source': {'type': 'string', 'description': 'Where the value comes from: appraisal, listing, estimate, …'}, 'currency': {'type': 'string', 'description': 'ISO 4217, default USD.'}, 'valued_at': {'type': 'string', 'description': 'ISO date or date-time; default now.'}, 'confidence': {'type': 'number', 'description': '0-1'}, 'request_id': {'type': 'string', 'description': 'Client idempotency key (retries return original result).'}, 'inventory_id': {'type': 'string', 'description': 'The item id from add_inventory_item, get_inventory or search_inventory.'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'message': {'type': ['string', 'null']}, 'valuation': {'type': 'object', 'additionalProperties': True}, 'inventory_id': {'type': 'string'}, 'idempotent_replay': {'type': 'boolean'}}, 'additionalProperties': True}
add_person_alias
Add Person Alias
Add a nickname/payment handle/misspelling alias for one CRM person. ($0.05; API key required)
Esquema de entrada
{'type': 'object', 'required': ['person_id', 'alias'], 'properties': {'alias': {'type': 'string'}, 'source': {'type': 'string'}, 'person_id': {'type': 'string'}, 'alias_kind': {'type': 'string'}, 'request_id': {'type': 'string', 'description': 'Client idempotency key (retries return original result).'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'alias': {'type': 'string'}, 'aliases': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'message': {'type': ['string', 'null']}, 'change_id': {'type': ['string', 'null']}, 'person_id': {'type': 'string'}}, 'additionalProperties': True}
archive_asset
Archive Asset
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)
Destructivo
Esquema de entrada
{'type': 'object', 'required': ['asset_id', 'preview_id', 'restore_window_acknowledged', 'request_id'], 'properties': {'asset_id': {'type': 'string'}, 'preview_id': {'type': 'string', 'description': 'preview_id returned by preview_destructive_change for this tool.'}, 'request_id': {'type': 'string', 'description': 'Required idempotency key; retries return the original receipt.'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}, 'restore_window_acknowledged': {'type': 'boolean', 'description': 'Must be true after reviewing the preview and its 30-day restore window.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'asset': {'type': 'object', 'additionalProperties': True}, 'message': {'type': ['string', 'null']}, 'archived': {'type': 'boolean'}, 'asset_id': {'type': 'string'}, 'preview_id': {'type': 'string'}, 'restore_id': {'type': 'string', 'description': 'Pass to restore_change to undo within restore_window_days.'}, 'reversible': {'type': 'boolean'}, 'idempotent_replay': {'type': 'boolean'}, 'restore_expires_at': {'type': 'string'}, 'restore_window_days': {'type': 'number'}}, 'additionalProperties': True}
archive_event
archive event
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)
Destructivo
Esquema de entrada
{'type': 'object', 'required': ['event_id', 'request_id'], 'properties': {'reason': {'type': 'string'}, 'event_id': {'type': 'string'}, 'request_id': {'type': 'string'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'rows': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'changed': {'type': 'boolean'}, 'expires_at': {'type': 'string'}, 'preview_id': {'type': 'string'}, 'restore_id': {'type': 'string'}, 'server_time': {'type': 'string'}, 'candidate_hash': {'type': 'string'}}, 'additionalProperties': True}
archive_expense
archive expense
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)
Destructivo
Esquema de entrada
{'type': 'object', 'required': ['expense_id', 'request_id'], 'properties': {'reason': {'type': 'string'}, 'expense_id': {'type': 'string'}, 'request_id': {'type': 'string'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'rows': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'changed': {'type': 'boolean'}, 'expires_at': {'type': 'string'}, 'preview_id': {'type': 'string'}, 'restore_id': {'type': 'string'}, 'server_time': {'type': 'string'}, 'candidate_hash': {'type': 'string'}}, 'additionalProperties': True}
archive_inventory_item
Archive Inventory Item
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)
Destructivo
Esquema de entrada
{'type': 'object', 'required': ['inventory_id', 'preview_id', 'restore_window_acknowledged', 'request_id'], 'properties': {'reason': {'type': 'string', 'description': 'Why it is archived (kept on the receipt).'}, 'preview_id': {'type': 'string', 'description': 'preview_id returned by preview_destructive_change for this tool.'}, 'request_id': {'type': 'string', 'description': 'Required idempotency key; retries return the original receipt.'}, 'inventory_id': {'type': 'string', 'description': 'The item id from add_inventory_item, get_inventory or search_inventory.'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}, 'restore_window_acknowledged': {'type': 'boolean', 'description': 'Must be true after reviewing the preview and its 30-day restore window.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'message': {'type': ['string', 'null']}, 'archived': {'type': 'boolean'}, 'preview_id': {'type': 'string'}, 'restore_id': {'type': 'string', 'description': 'Pass to restore_change to undo within restore_window_days.'}, 'reversible': {'type': 'boolean'}, 'inventory_id': {'type': 'string'}, 'idempotent_replay': {'type': 'boolean'}, 'restore_expires_at': {'type': 'string'}, 'restore_window_days': {'type': 'number'}}, 'additionalProperties': True}
archive_trip
archive trip
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)
Destructivo
Esquema de entrada
{'type': 'object', 'required': ['trip_id', 'request_id'], 'properties': {'reason': {'type': 'string'}, 'trip_id': {'type': 'string'}, 'request_id': {'type': 'string'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'rows': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'changed': {'type': 'boolean'}, 'expires_at': {'type': 'string'}, 'preview_id': {'type': 'string'}, 'restore_id': {'type': 'string'}, 'server_time': {'type': 'string'}, 'candidate_hash': {'type': 'string'}}, 'additionalProperties': True}
attach_asset
Attach Asset
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)
Esquema de entrada
{'type': 'object', 'required': ['entity_type', 'entity_id'], 'properties': {'url': {'type': 'string', 'description': 'A web link (https://…) to an image. Not a storage path: upload a file, then attach its asset_id.'}, 'role': {'enum': ['original', 'processed', 'thumbnail', 'cover', 'document', 'receipt', 'certificate', 'photo', 'other'], 'type': 'string', 'description': 'original | cover | thumbnail | …'}, 'asset_id': {'type': 'string'}, 'metadata': {'type': 'object', 'description': 'Free-form metadata, merged into the stored metadata (metadata.source becomes the asset source).'}, 'entity_id': {'type': 'string'}, 'asset_type': {'type': 'string'}, 'request_id': {'type': 'string', 'description': 'Client idempotency key (retries return original result).'}, 'description': {'type': 'string', 'description': 'Caption for the attached asset (kept on a linked copy too).'}, 'entity_type': {'type': 'string'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'asset': {'type': 'object', 'additionalProperties': True}, 'message': {'type': ['string', 'null']}, 'asset_id': {'type': 'string'}, 'attached': {'type': 'boolean'}}, 'additionalProperties': True}
attach_food_photo
Attach Food Photo (Food Diary photo)
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)
Esquema de entrada
{'type': 'object', 'required': ['food_id'], 'properties': {'url': {'type': 'string', 'description': 'Public https image URL to fetch and store. Use this or image_base64.'}, 'food_id': {'type': 'string', 'description': 'UUID of a Food Diary row the authenticated user owns'}, 'filename': {'type': 'string', 'description': 'Optional original filename'}, 'request_id': {'type': 'string', 'description': 'Client idempotency key (retries return original result).'}, 'image_base64': {'type': 'string', 'description': 'Image bytes as base64 (optional data:image/...;base64, prefix). Use this or url.'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}, 'keep_consumed_at': {'type': 'boolean', 'description': 'true keeps the entry time even if the photo EXIF has a capture time'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['food_id', 'photo_url', 'replaced', 'previous_photo_url', 'consumed_at', 'consumed_at_changed', 'event_id', 'photo', 'life_state_rebuilt'], 'properties': {'photo': {'type': 'object', 'description': 'Stored image summary (mime_type, file_size_bytes, taken_at).', 'additionalProperties': True}, 'food_id': {'type': 'string'}, 'event_id': {'type': ['string', 'null']}, 'replaced': {'type': 'boolean', 'description': 'True when the entry already had a photo.'}, 'photo_url': {'type': 'string', 'description': 'Stored photo URL, re-read from the Food Diary row.'}, 'consumed_at': {'type': 'string'}, 'life_state_rebuilt': {'type': 'boolean'}, 'previous_photo_url': {'type': ['string', 'null']}, 'consumed_at_changed': {'type': 'boolean', 'description': 'True when photo EXIF moved the entry time.'}}, 'additionalProperties': False}
audit_people
Audit People (compact)
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)
Solo lectura
Esquema de entrada
{'type': 'object', 'properties': {'limit': {'type': 'number'}, 'checks': {'type': 'array', 'items': {'type': 'string'}}, 'min_confidence': {'type': 'number'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['candidates', 'summary', 'count'], 'properties': {'count': {'type': 'number'}, 'summary': {'type': 'object', 'additionalProperties': True}, 'guidance': {'type': 'string'}, 'candidates': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}}, 'additionalProperties': True}
backfill_place_names
Backfill Place Names
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)
Esquema de entrada
{'type': 'object', 'properties': {'limit': {'type': 'number', 'description': 'Max targets this run (1–100, default 25).'}, 'cursor': {'type': 'string', 'description': 'Resume token from a previous next_cursor.'}, 'dry_run': {'type': 'boolean'}, 'request_id': {'type': 'string', 'description': 'Client idempotency key (retries return original result).'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'done': {'type': 'boolean'}, 'named': {'type': 'number'}, 'quota': {'type': 'object', 'description': 'Per-account monthly Places usage.', 'additionalProperties': True}, 'message': {'type': ['string', 'null']}, 'next_cursor': {'type': ['string', 'null']}, 'rate_limited': {'type': 'boolean'}, 'skipped_named': {'type': 'number'}, 'skipped_no_match': {'type': 'number'}}, 'additionalProperties': True}
bulk_dismiss_clarifications
Bulk Dismiss Clarifications
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)
Destructivo
Esquema de entrada
{'type': 'object', 'required': ['preview_id', 'restore_window_acknowledged', 'request_id'], 'properties': {'reason': {'type': 'string'}, 'preview_id': {'type': 'string', 'description': 'preview_id returned by preview_destructive_change for this tool.'}, 'request_id': {'type': 'string', 'description': 'Required idempotency key; retries return the original receipt.'}, 'entity_type': {'type': 'string'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}, 'restore_window_acknowledged': {'type': 'boolean', 'description': 'Must be true after reviewing the preview and its 30-day restore window.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'message': {'type': ['string', 'null']}, 'dismissed': {'type': 'number'}, 'preview_id': {'type': 'string'}, 'restore_id': {'type': 'string', 'description': 'Pass to restore_change to undo within restore_window_days.'}, 'reversible': {'type': 'boolean'}, 'idempotent_replay': {'type': 'boolean'}, 'restore_expires_at': {'type': 'string'}, 'restore_window_days': {'type': 'number'}}, 'additionalProperties': True}
classify_contact
Classify Contact
Set entity_type (person/company/merchant/…) on a CRM row without losing transactions or links. ($0.10; API key required)
Esquema de entrada
{'type': 'object', 'required': ['entity_type'], 'properties': {'source': {'type': 'string'}, 'entity_id': {'type': 'string'}, 'person_id': {'type': 'string'}, 'confidence': {'type': 'number'}, 'request_id': {'type': 'string', 'description': 'Client idempotency key (retries return original result).'}, 'entity_type': {'type': 'string'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}, 'identity_status': {'type': 'string'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'person': {'type': 'object', 'additionalProperties': True}, 'message': {'type': ['string', 'null']}, 'change_id': {'type': ['string', 'null']}}, 'additionalProperties': True}
cleanup_apply
cleanup apply
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)
Destructivo
Esquema de entrada
{'type': 'object', 'required': ['preview_id', 'candidate_hash', 'request_id'], 'properties': {'preview_id': {'type': 'string'}, 'request_id': {'type': 'string'}, 'candidate_hash': {'type': 'string'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'rows': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'changed': {'type': 'boolean'}, 'expires_at': {'type': 'string'}, 'preview_id': {'type': 'string'}, 'restore_id': {'type': 'string'}, 'server_time': {'type': 'string'}, 'candidate_hash': {'type': 'string'}}, 'additionalProperties': True}
cleanup_preview
cleanup preview
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)
Esquema de entrada
{'type': 'object', 'required': ['family'], 'properties': {'family': {'enum': ['events', 'expenses', 'trips'], 'type': 'string'}, 'request_id': {'type': 'string', 'description': 'Client idempotency key (retries return original result).'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'rows': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'changed': {'type': 'boolean'}, 'expires_at': {'type': 'string'}, 'preview_id': {'type': 'string'}, 'restore_id': {'type': 'string'}, 'server_time': {'type': 'string'}, 'candidate_hash': {'type': 'string'}}, 'additionalProperties': True}
commit_life_update
Commit Life Update
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)
Destructivo
Esquema de entrada
{'type': 'object', 'required': ['proposal_id', 'payload_hash', 'owner_session_id'], 'properties': {'request_id': {'type': 'string'}, 'proposal_id': {'type': 'string'}, 'payload_hash': {'type': 'string'}, 'idempotency_key': {'type': 'string'}, 'owner_session_id': {'type': 'string'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'enabled': {'type': 'boolean'}, 'message': {'type': ['string', 'null']}, 'assertionIds': {'type': 'array', 'items': {'type': 'string'}}, 'graphVersion': {'type': 'number'}}, 'additionalProperties': True}
compare_lives
Compare Two Lives
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)
Solo lectura Acceso externo
Esquema de entrada
{'type': 'object', 'required': ['slug_a', 'slug_b'], 'properties': {'date': {'type': 'string', 'description': 'YYYY-MM-DD target date for both packs'}, 'peers': {'type': 'number', 'default': 6}, 'slug_a': {'type': 'string', 'description': 'First person slug'}, 'slug_b': {'type': 'string', 'description': 'Second person slug'}, 'similar': {'type': 'number', 'default': 4}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['pack', 'a', 'b', 'compare'], 'properties': {'a': {'type': 'object', 'description': 'First notable-person knowledge pack.', 'additionalProperties': True}, 'b': {'type': 'object', 'description': 'Second notable-person knowledge pack.', 'additionalProperties': True}, 'pack': {'type': 'string'}, 'compare': {'type': 'object', 'description': 'Computed comparison fields and URLs.', 'additionalProperties': True}}, 'additionalProperties': False}
convert_contact_entity
Convert Contact Entity
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)
Destructivo
Esquema de entrada
{'type': 'object', 'required': ['preview_id', 'restore_window_acknowledged', 'request_id'], 'properties': {'entity_id': {'type': 'string'}, 'person_id': {'type': 'string'}, 'preview_id': {'type': 'string', 'description': 'preview_id returned by preview_destructive_change for this tool.'}, 'request_id': {'type': 'string', 'description': 'Required idempotency key; retries return the original receipt.'}, 'target_type': {'type': 'string'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}, 'restore_window_acknowledged': {'type': 'boolean', 'description': 'Must be true after reviewing the preview and its 30-day restore window.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'person': {'type': 'object', 'additionalProperties': True}, 'message': {'type': ['string', 'null']}, 'change_id': {'type': ['string', 'null']}, 'preview_id': {'type': 'string'}, 'restore_id': {'type': 'string', 'description': 'Pass to restore_change to undo within restore_window_days.'}, 'reversible': {'type': 'boolean'}, 'idempotent_replay': {'type': 'boolean'}, 'restore_expires_at': {'type': 'string'}, 'restore_window_days': {'type': 'number'}}, 'additionalProperties': True}
create_pending_reply
Create Pending Reply
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)
Esquema de entrada
{'type': 'object', 'required': ['person_name'], 'properties': {'draft': {'type': 'string', 'description': 'The reply text to send later, max 20,000 characters. Replaces the saved draft; empty or null clears. Alias: draft_message.'}, 'source': {'type': 'object', 'properties': {'kind': {'enum': ['gmail', 'email', 'other'], 'type': 'string'}, 'thread_id': {'type': 'string'}, 'message_id': {'type': 'string'}}, 'description': 'The 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.', 'additionalProperties': False}, 'channel': {'type': 'string', 'description': 'Where 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.'}, 'summary': {'type': 'string', 'description': 'One line (max 280) in your own words: what the reply is about. Never paste the email body, subject line or sender address.'}, 'category': {'enum': ['personal', 'work'], 'type': 'string', 'description': 'Default personal.'}, 'person_id': {'type': 'string', 'description': 'An owned contact id; links that contact directly.'}, 'request_id': {'type': 'string', 'description': 'Client idempotency key (retries return original result).'}, 'person_name': {'type': 'string', 'description': 'Who the reply is owed to, as the user said it (e.g. "Ilana").'}, 'received_at': {'type': 'string', 'description': 'When they wrote (ISO date-time). Default now.'}, 'draft_message': {'type': 'string', 'description': 'Alias for draft.'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}, 'update_existing': {'type': 'boolean', 'description': 'When an unsent reply for this thread or person exists, write draft/summary onto it instead of returning it unchanged.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['reply', 'created', 'updated', 'deduplicated', 'matched_on', 'person_link', 'source_saved', 'message', 'life_state_rebuilt'], 'properties': {'reply': {'type': 'object', 'required': ['reply_id', 'person_name', 'person_id', 'channel', 'category', 'summary', 'draft', 'status', 'state', 'due', 'received_at', 'source'], 'properties': {'due': {'type': 'boolean', 'description': 'Owed now: pending, or snoozed with snooze_until passed. False while a snooze runs, and when sent or dismissed.'}, 'draft': {'type': ['string', 'null'], 'description': 'The reply text saved for later.'}, 'state': {'type': 'string', 'description': 'unsent (pending or snoozed), sent (the owner replied) or dismissed'}, 'source': {'type': ['object', 'null'], 'properties': {'kind': {'type': 'string', 'description': 'gmail, email or other'}, 'thread_id': {'type': ['string', 'null']}, 'message_id': {'type': ['string', 'null']}}, 'description': 'The email it answers, as ids only; null when none was saved.', 'additionalProperties': False}, 'status': {'type': 'string', 'description': 'pending, snoozed, responded or dismissed'}, 'channel': {'type': 'string'}, 'summary': {'type': ['string', 'null']}, 'category': {'type': 'string', 'description': 'personal or work'}, 'reply_id': {'type': 'string'}, 'person_id': {'type': ['string', 'null'], 'description': 'Linked contact id; null when the reply is unlinked.'}, 'created_at': {'type': ['string', 'null']}, 'updated_at': {'type': ['string', 'null']}, 'approved_at': {'type': ['string', 'null'], 'description': 'PHI-427: when the owner approved the draft and opened it in Gmail, or null. Dayze never sends; the Gmail sync closes the reply when the email goes out.'}, 'person_name': {'type': 'string'}, 'received_at': {'type': 'string'}, 'responded_at': {'type': ['string', 'null']}, 'snooze_until': {'type': ['string', 'null']}}, 'description': 'One reply the user owes (Inbox → Pending Replies). Dayze never sends it.', 'additionalProperties': False}, 'app_url': {'type': 'string'}, 'created': {'type': 'boolean', 'description': 'True when this call saved a new reply.'}, 'message': {'type': 'string'}, 'updated': {'type': 'boolean', 'description': 'True when an existing unsent reply was changed (update_existing).'}, 'matched_on': {'type': ['string', 'null'], 'description': 'source_thread, source_message or person when deduplicated.'}, 'person_link': {'type': 'object', 'required': ['status', 'person_id', 'note'], 'properties': {'note': {'type': 'string'}, 'status': {'type': 'string', 'description': 'linked, ambiguous, no_match or lookup_failed'}, 'person_id': {'type': ['string', 'null']}, 'candidates': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'name'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}}, 'additionalProperties': False}}, 'matched_via': {'type': ['string', 'null']}, 'contact_name': {'type': ['string', 'null']}}, 'description': 'Whether a contact was linked. Linked only on one resolve_person match or an owned person_id.', 'additionalProperties': False}, 'deduplicated': {'type': 'boolean', 'description': 'True when an unsent reply for the same thread or person was returned instead of a new one.'}, 'source_saved': {'type': 'boolean', 'description': 'False when a source was given and could not be stored.'}, 'life_state_rebuilt': {'type': 'boolean'}}, 'additionalProperties': False}
create_person
Create Contact
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)
Esquema de entrada
{'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string'}, 'tier': {'enum': ['vip', 'normal', 'low'], 'type': 'string'}, 'email': {'type': 'string'}, 'notes': {'type': 'string'}, 'phone': {'type': 'string'}, 'aliases': {'type': 'array', 'items': {'type': 'string'}}, 'birthday': {'type': 'string', 'description': 'YYYY-MM-DD, YYYY-MM, YYYY, or MM-DD / --MM-DD when the year is unknown (same as update_person)'}, 'request_id': {'type': 'string', 'description': 'Client idempotency key (retries return original result).'}, 'is_favorite': {'type': 'boolean'}, 'context_tags': {'type': 'array', 'items': {'type': 'string'}}, 'relationship': {'type': 'string'}, 'relationships': {'type': 'array', 'items': {'type': 'string'}}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'id': {'type': 'string'}, 'hint': {'type': 'string'}, 'name': {'type': 'string'}, 'slug': {'type': ['string', 'null']}, 'people': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'person': {'type': 'object', 'description': 'CRM person record.', 'additionalProperties': True}, 'aliases': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Aliases saved on the new contact.'}, 'created': {'type': 'boolean'}, 'message': {'type': ['string', 'null']}, 'birthday': {'type': 'string', 'description': 'As stored: YYYY-MM-DD. A year-unknown birthday is 1900-MM-DD (Feb 29: 1904-02-29).'}, 'duplicate': {'type': 'boolean', 'description': 'True when the contact already existed: nothing on it was changed.'}, 'person_id': {'type': 'string', 'description': 'The new contact, or the existing one on a duplicate.'}, 'created_at': {'type': 'string'}, 'person_ids': {'type': 'array', 'items': {'type': 'string'}}, 'matched_via': {'type': ['string', 'null']}, 'not_applied': {'type': 'array', 'items': {'type': 'string'}, 'description': 'On a duplicate: the fields sent that were not saved.'}, 'role_expand': {'type': 'boolean'}, 'aliases_not_saved': {'type': 'array', 'items': {'type': 'object', 'required': ['alias', 'reason'], 'properties': {'alias': {'type': 'string'}, 'reason': {'type': 'string'}}, 'additionalProperties': False}, 'description': 'Aliases not saved (another contact has them); the contact was still created.'}, 'idempotent_replay': {'type': 'boolean'}, 'birthday_precision': {'type': ['string', 'null'], 'description': 'day, month, year, month_day (year unknown) or approximate.'}}, 'additionalProperties': True}
create_place
Create Place Card
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)
Esquema de entrada
{'type': 'object', 'required': ['name'], 'properties': {'area': {'type': 'string'}, 'city': {'type': 'string'}, 'name': {'type': 'string'}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'hours': {'type': 'string', 'description': 'Alias for opening_hours'}, 'notes': {'type': 'string'}, 'phone': {'type': 'string'}, 'address': {'type': 'string'}, 'country': {'type': 'string'}, 'website': {'type': 'string'}, 'category': {'type': 'string', 'description': 'restaurant|cafe|supermarket|shop|hawker|… (aliases mapped to business_contacts.category)'}, 'latitude': {'type': 'number'}, 'longitude': {'type': 'number'}, 'request_id': {'type': 'string', 'description': 'Client idempotency key (retries return original result).'}, 'description': {'type': 'string'}, 'price_level': {'type': 'string', 'description': 'Alias for affordability'}, 'hours_source': {'type': 'string', 'description': 'agent | google_places | user'}, 'affordability': {'type': 'string', 'description': '$ | $$ | $$$ (or 1–3)'}, 'opening_hours': {'type': 'string'}, 'phone_numbers': {'type': 'array', 'items': {'type': 'string'}}, 'idempotency_key': {'type': 'string'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'place': {'type': 'object', 'description': 'Saved place card.', 'additionalProperties': True}, 'created': {'type': 'boolean'}, 'message': {'type': ['string', 'null']}, 'place_id': {'type': 'string'}, 'duplicate': {'type': 'boolean'}, 'business_contact_id': {'type': 'string'}}, 'additionalProperties': True}
delete_event
Delete Event (calendar remove)
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)
Destructivo
Esquema de entrada
{'type': 'object', 'required': ['event_id', 'request_id'], 'properties': {'event_id': {'type': 'string', 'description': 'UUID of a calendar event the authenticated user owns'}, 'request_id': {'type': 'string', 'description': 'Required client idempotency key; a replay returns the first result.'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['event_id', 'deleted', 'food_deleted_ids', 'life_state_rebuilt'], 'properties': {'deleted': {'type': 'object', 'description': 'A Dayze calendar event record.', 'additionalProperties': True}, 'event_id': {'type': 'string'}, 'food_deleted_ids': {'type': 'array', 'items': {'type': 'string'}}, 'life_state_rebuilt': {'type': 'boolean'}}, 'additionalProperties': True}
delete_food
Delete Food (Food Diary remove)
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)
Destructivo
Esquema de entrada
{'type': 'object', 'required': ['food_id', 'preview_id', 'restore_window_acknowledged', 'request_id'], 'properties': {'food_id': {'type': 'string', 'description': 'UUID of a Food Diary row the authenticated user owns'}, 'preview_id': {'type': 'string', 'description': 'preview_id returned by preview_destructive_change for this tool.'}, 'request_id': {'type': 'string', 'description': 'Required idempotency key; retries return the original receipt.'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}, 'restore_window_acknowledged': {'type': 'boolean', 'description': 'Must be true after reviewing the preview and its 30-day restore window.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['food_id', 'deleted', 'life_state_rebuilt'], 'properties': {'deleted': {'type': 'object', 'description': 'Deleted food diary row.', 'additionalProperties': True}, 'food_id': {'type': 'string'}, 'event_id': {'type': ['string', 'null']}, 'preview_id': {'type': 'string'}, 'restore_id': {'type': 'string', 'description': 'Pass to restore_change to undo within restore_window_days.'}, 'reversible': {'type': 'boolean'}, 'idempotent_replay': {'type': 'boolean'}, 'life_state_rebuilt': {'type': 'boolean'}, 'restore_expires_at': {'type': 'string'}, 'restore_window_days': {'type': 'number'}}, 'additionalProperties': False}
delete_person
Delete Contact
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)
Destructivo
Esquema de entrada
{'type': 'object', 'required': ['person_id', 'preview_id', 'restore_window_acknowledged', 'request_id'], 'properties': {'person_id': {'type': 'string', 'description': 'UUID of the owned contact to delete.'}, 'preview_id': {'type': 'string', 'description': 'Durable preview_id returned by delete_person_preview.'}, 'request_id': {'type': 'string', 'description': 'Required idempotency key; retries return the original result.'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}, 'restore_window_acknowledged': {'type': 'boolean', 'description': 'Must be true after reviewing the 30-day restore window.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'deleted': {'type': 'boolean'}, 'message': {'type': ['string', 'null']}, 'restore_id': {'type': 'string'}, 'reversible': {'type': 'boolean'}, 'deleted_person': {'type': 'object', 'description': 'CRM person record.', 'additionalProperties': True}, 'deleted_person_id': {'type': 'string'}, 'life_state_rebuilt': {'type': 'boolean'}, 'restore_expires_at': {'type': 'string'}}, 'additionalProperties': True}
delete_person_preview
Delete Contact Preview
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)
Esquema de entrada
{'type': 'object', 'required': ['person_id'], 'properties': {'person_id': {'type': 'string', 'description': 'UUID of the owned contact to review.'}, 'request_id': {'type': 'string', 'description': 'Client idempotency key (retries return original result).'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['preview_id', 'person_id', 'restore_window_days', 'reversible'], 'properties': {'person': {'type': 'object', 'description': 'CRM person record.', 'additionalProperties': True}, 'manifest': {'type': 'object', 'additionalProperties': True}, 'person_id': {'type': 'string'}, 'preview_id': {'type': 'string'}, 'reversible': {'type': 'boolean'}, 'restore_window_days': {'type': 'number'}}, 'additionalProperties': True}
delete_place
Delete Place Card
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)
Destructivo
Esquema de entrada
{'type': 'object', 'required': ['preview_id', 'restore_window_acknowledged', 'request_id'], 'properties': {'id': {'type': 'string'}, 'place_id': {'type': 'string'}, 'preview_id': {'type': 'string', 'description': 'preview_id returned by preview_destructive_change for this tool.'}, 'request_id': {'type': 'string', 'description': 'Required idempotency key; retries return the original receipt.'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}, 'business_contact_id': {'type': 'string'}, 'restore_window_acknowledged': {'type': 'boolean', 'description': 'Must be true after reviewing the preview and its 30-day restore window.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['place_id', 'business_contact_id', 'deleted'], 'properties': {'deleted': {'type': 'object', 'description': 'Deleted saved place card row.', 'additionalProperties': True}, 'place_id': {'type': 'string'}, 'preview_id': {'type': 'string'}, 'restore_id': {'type': 'string', 'description': 'Pass to restore_change to undo within restore_window_days.'}, 'reversible': {'type': 'boolean'}, 'idempotent_replay': {'type': 'boolean'}, 'restore_expires_at': {'type': 'string'}, 'business_contact_id': {'type': 'string'}, 'restore_window_days': {'type': 'number'}}, 'additionalProperties': False}
delete_place_visit
Delete Place Visit
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)
Destructivo
Esquema de entrada
{'type': 'object', 'required': ['visit_id', 'preview_id', 'restore_window_acknowledged', 'request_id'], 'properties': {'visit_id': {'type': 'string', 'description': 'UUID of a place_visits row: visit_id from get_place_visits or log_place_visit.'}, 'preview_id': {'type': 'string', 'description': 'preview_id returned by preview_destructive_change for this tool.'}, 'request_id': {'type': 'string', 'description': 'Required idempotency key; retries return the original receipt.'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}, 'restore_window_acknowledged': {'type': 'boolean', 'description': 'Must be true after reviewing the preview and its 30-day restore window.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['visit_id', 'place_visit_id', 'deleted'], 'properties': {'deleted': {'type': 'object', 'description': 'Deleted place visit row.', 'additionalProperties': True}, 'visit_id': {'type': 'string'}, 'preview_id': {'type': 'string'}, 'restore_id': {'type': 'string', 'description': 'Pass to restore_change to undo within restore_window_days.'}, 'reversible': {'type': 'boolean'}, 'place_visit_id': {'type': 'string'}, 'idempotent_replay': {'type': 'boolean'}, 'restore_expires_at': {'type': 'string'}, 'restore_window_days': {'type': 'number'}}, 'additionalProperties': False}
dismiss_clarification
Dismiss Clarification
Dismiss a pending entity clarification (not_person, etc.). ($0.05; API key required)
Esquema de entrada
{'type': 'object', 'required': ['clarification_id'], 'properties': {'reason': {'type': 'string'}, 'request_id': {'type': 'string', 'description': 'Client idempotency key (retries return original result).'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}, 'clarification_id': {'type': 'string'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'message': {'type': ['string', 'null']}, 'dismissed': {'type': 'boolean'}}, 'additionalProperties': True}
enrich_place_from_google
Enrich Place from Google
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)
Acceso externo
Esquema de entrada
{'type': 'object', 'properties': {'place_id': {'type': 'string'}, 'request_id': {'type': 'string', 'description': 'Client idempotency key (retries return original result).'}, 'fill_empty_only': {'type': 'boolean'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}, 'business_contact_id': {'type': 'string'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'code': {'type': 'string', 'description': 'Capability or enrich outcome (not_configured, no_match, …).'}, 'place': {'type': 'object', 'description': 'Saved place card.', 'additionalProperties': True}, 'message': {'type': ['string', 'null']}, 'enriched': {'type': 'boolean'}, 'place_id': {'type': 'string'}, 'capability': {'type': 'string'}, 'applied_fields': {'type': 'array', 'items': {'type': 'string'}}, 'business_contact_id': {'type': 'string'}}, 'additionalProperties': True}
explain_fact
Explain Fact
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)
Solo lectura
Esquema de entrada
{'type': 'object', 'required': ['query'], 'properties': {'fact': {'type': 'string', 'description': 'Alias for query'}, 'limit': {'type': 'number', 'description': 'Max evidence rows 1–20, default 8'}, 'query': {'type': 'string', 'description': 'Fact or phrase to explain'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['query', 'evidence', 'count'], 'properties': {'count': {'type': 'number'}, 'query': {'type': 'string'}, 'account': {'type': 'object', 'required': ['handle', 'display_name', 'qa_fixture', 'note'], 'properties': {'note': {'type': 'string', 'description': 'How to disclose the account to the user.'}, 'handle': {'type': ['string', 'null'], 'description': 'Account handle, e.g. @goh.'}, 'qa_fixture': {'type': 'boolean', 'description': 'True for a known QA test account: its records are fixture data, not a real life.'}, 'display_name': {'type': ['string', 'null'], 'description': 'Account display name.'}}, 'description': 'The Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.', 'additionalProperties': False}, 'message': {'type': ['string', 'null']}, 'evidence': {'type': 'array', 'items': {'type': 'object', 'description': 'Provenance row from learned facts, life events, or memories.', 'additionalProperties': True}}, 'inspect_note': {'type': 'string', 'description': 'How to cite: link each record with its inspect_url, never a link built from an id; which record types here have no Dayze page.'}}, 'additionalProperties': True}
find_identity_candidates
Find Identity Candidates
Compact identity resolution candidates by person_id or query (alias/name/payment signals). Prefer over bulk get_people. ($0.05; API key required)
Solo lectura
Esquema de entrada
{'type': 'object', 'properties': {'limit': {'type': 'number'}, 'query': {'type': 'string'}, 'person_id': {'type': 'string'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['candidates', 'count'], 'properties': {'count': {'type': 'number'}, 'candidates': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}}, 'additionalProperties': True}
get_asset
Get Asset
Fetch one asset by asset_id with signed_url for download/processing. ($0.05; API key required)
Solo lectura
Esquema de entrada
{'type': 'object', 'required': ['asset_id'], 'properties': {'asset_id': {'type': 'string'}, 'include_signed_url': {'type': 'boolean'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['count'], 'properties': {'asset': {'type': 'object', 'additionalProperties': True}, 'count': {'type': 'number'}}, 'additionalProperties': True}
get_cities_visited
Cities Visited
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)
Solo lectura
Esquema de entrada
{'type': 'object', 'properties': {'to': {'type': 'string'}, 'from': {'type': 'string'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['cities', 'count'], 'properties': {'count': {'type': 'number'}, 'cities': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}}, 'additionalProperties': True}
get_context_pack
Life Context Pack
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)
Solo lectura
Esquema de entrada
{'type': 'object', 'properties': {'q': {'type': 'string', 'description': 'Alias for query.'}, 'at': {'type': 'string', 'description': 'ISO date-time to answer as of (default now), e.g. 2026-09-26T09:00:00+08:00.'}, 'focus': {'type': 'string', 'description': 'Optional focus hint echoed in the pack (e.g. places, travel, people)'}, 'query': {'type': 'string', 'description': 'Question that guides facts and memories.'}, 'timezone': {'type': 'string', 'description': 'IANA time zone for today (default: where the user is now, else their home zone).'}, 'include_money': {'type': 'boolean', 'default': False, 'description': 'Include the private cashflow summary'}, 'include_trips': {'type': 'boolean', 'default': False, 'description': 'Include recent/upcoming trips from completed travel history'}, 'include_places': {'type': 'boolean', 'default': False, 'description': 'Include recent canonical places.'}, 'include_location': {'type': 'boolean', 'default': False, 'description': 'Include city/country label; never returns a precise address'}, 'include_memories': {'type': 'boolean', 'default': True, 'description': 'Include recent memories.'}, 'include_place_visits': {'type': 'boolean', 'default': True, 'description': 'Include recent venue visits; never a GPS trail'}, 'include_quiz_results': {'type': 'boolean', 'default': True, 'description': 'Include latest quiz results.'}, 'include_relationships': {'type': 'boolean', 'default': True, 'description': 'Include people and relationship context.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['protocol', 'preferred_tool', 'identity', 'pulse', 'whats_next'], 'properties': {'ok': {'type': 'boolean'}, 'error': {'type': 'string', 'description': 'Present when life state is unavailable.'}, 'facts': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'kind', 'text', 'state', 'source_label'], 'properties': {'id': {'type': 'string', 'description': 'Table-qualified record id, e.g. people:<uuid> or events:<id>.'}, 'kind': {'type': 'string'}, 'text': {'type': 'string'}, 'tier': {'type': 'string', 'description': 'entity, join, static, dynamic or vector.'}, 'state': {'type': 'string', 'description': 'current, planned, completed, stale (age_label set) or disputed.'}, 'source': {'type': 'string'}, 'age_label': {'type': ['string', 'null']}, 'confidence': {'type': ['number', 'null']}, 'provenance': {'type': 'string', 'description': 'stated, observed, inferred or imported.'}, 'source_ref': {'type': ['string', 'null']}, 'inspect_url': {'type': 'string', 'description': 'PHI-434: the Dayze page for this record, when it has one. Cite with it.'}, 'observed_at': {'type': ['string', 'null']}, 'evidence_ref': {'type': ['string', 'null']}, 'source_label': {'type': 'string', 'description': 'Where the fact came from, e.g. "from Contacts".'}, 'last_confirmed_at': {'type': ['string', 'null']}}, 'description': 'One personal fact chosen for the question. Same ids as Dayze chat.', 'additionalProperties': True}, 'description': 'Question-aware personal facts, in selection order.'}, 'focus': {'type': ['string', 'null']}, 'pulse': {'type': 'object', 'additionalProperties': True}, 'query': {'type': ['string', 'null']}, 'trace': {'type': 'object', 'required': ['fact_ids', 'assembler'], 'properties': {'caller': {'type': 'string'}, 'fact_ids': {'type': 'array', 'items': {'type': 'string'}}, 'question': {'type': 'string'}, 'assembler': {'type': 'string'}, 'scope_key': {'type': 'string'}, 'used_tokens': {'type': 'number'}, 'budget_tokens': {'type': 'number'}, 'selection_notes': {'type': 'array', 'items': {'type': 'string'}}}, 'description': 'Which facts were supplied and why. fact_ids equals facts[].id.', 'additionalProperties': True}, 'trips': {'type': 'object', 'description': 'Recent trips when include_trips=true.', 'additionalProperties': True}, 'places': {'type': 'object', 'description': 'Recent canonical places when include_places=true.', 'additionalProperties': True}, 'account': {'type': 'object', 'required': ['handle', 'display_name', 'qa_fixture', 'note'], 'properties': {'note': {'type': 'string', 'description': 'How to disclose the account to the user.'}, 'handle': {'type': ['string', 'null'], 'description': 'Account handle, e.g. @goh.'}, 'qa_fixture': {'type': 'boolean', 'description': 'True for a known QA test account: its records are fixture data, not a real life.'}, 'display_name': {'type': ['string', 'null'], 'description': 'Account display name.'}}, 'description': 'The Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.', 'additionalProperties': False}, 'omitted': {'type': 'array', 'items': {'type': 'object', 'required': ['reason', 'kind', 'count'], 'properties': {'kind': {'type': 'string'}, 'count': {'type': 'number'}, 'reason': {'type': 'string'}}, 'additionalProperties': True}, 'description': 'Facts left out, counted by reason.'}, 'partial': {'type': 'boolean'}, 'identity': {'type': 'object', 'additionalProperties': True}, 'memories': {'type': 'object', 'additionalProperties': True}, 'protocol': {'type': 'object', 'description': 'Life Context metadata.', 'additionalProperties': True}, 'sections': {'type': 'object', 'description': 'Per-section ok/error status for partial packs.', 'additionalProperties': True}, 'redaction': {'type': 'object', 'description': 'pii redacted|raw; sensitive_topics the caller may receive; counts of sensitive trackers / memories withheld.', 'additionalProperties': True}, 'whats_next': {'type': 'object', 'additionalProperties': True}, 'known_facts': {'type': 'array', 'items': {'type': 'object', 'description': 'A correctable contact, learned fact or memory from the facts slice: ref (in trace.fact_ids), kind, text, source. Disputed or no-longer-true facts are left out.', 'additionalProperties': True}}, 'who_matters': {'type': 'object', 'additionalProperties': True}, 'generated_at': {'type': 'string'}, 'inspect_note': {'type': 'string', 'description': 'How 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_visits': {'type': 'array', 'items': {'type': 'object', 'description': 'Recent place visit.', 'additionalProperties': True}}, 'preferred_tool': {'type': 'string'}}, 'additionalProperties': True}
get_countries_visited
Countries Visited
Canonical countries from completed trips (not other people travel). ($0.10; API key required)
Solo lectura
Esquema de entrada
{'type': 'object', 'properties': {'to': {'type': 'string'}, 'from': {'type': 'string'}, 'include_residence': {'type': 'boolean'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['countries', 'count'], 'properties': {'count': {'type': 'number'}, 'countries': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': True}
get_current_states
Current States
Permitted assertion states for a person (flagged life-graph; off by default). ($0.10; API key required)
Solo lectura
Esquema de entrada
{'type': 'object', 'properties': {'known_at': {'type': 'string'}, 'valid_at': {'type': 'string'}, 'people_id': {'type': 'string', 'description': 'CRM people.id UUID'}, 'person_id': {'type': 'string', 'description': 'Alias for people_id'}, 'predicates': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['count'], 'properties': {'count': {'type': 'number'}, 'states': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'enabled': {'type': 'boolean'}}, 'additionalProperties': True}
get_entity_assets
Get Entity Assets
List assets linked to an entity (role, signed_url, versions). entity_type inventory_item → inventory. ($0.10; API key required)
Solo lectura
Esquema de entrada
{'type': 'object', 'required': ['entity_type', 'entity_id'], 'properties': {'entity_id': {'type': 'string'}, 'asset_type': {'type': 'string'}, 'entity_type': {'type': 'string'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['count'], 'properties': {'count': {'type': 'number'}, 'assets': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}}, 'additionalProperties': True}
get_entity_links
Get Entity Links
List graph edges for an event, trip, place, or person. Each link has a confirmation: explicit | pending | confirmed | rejected. A rejected link is listed only as a record of the decision: it is not a relationship, and every other read leaves it out. ($0.05; API key required)
Solo lectura
Esquema de entrada
{'type': 'object', 'required': ['entity_type', 'entity_id'], 'properties': {'entity_id': {'type': 'string'}, 'entity_type': {'type': 'string'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['count'], 'properties': {'count': {'type': 'number'}, 'links': {'type': 'array', 'items': {'type': 'object', 'description': 'A stored life_entity_links row plus its derived confirmation (explicit | pending | confirmed | rejected). A rejected link is kept only as a record of the decision and is not a relationship.', 'additionalProperties': True}}, 'message': {'type': ['string', 'null']}}, 'additionalProperties': True}
get_events
Calendar Events
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)
Solo lectura
Esquema de entrada
{'type': 'object', 'properties': {'at': {'type': 'string', 'description': 'ISO date-time to answer as of (default now), e.g. 2026-09-26T09:00:00+08:00.'}, 'to': {'type': 'string', 'description': 'Inclusive YYYY-MM-DD'}, 'from': {'type': 'string', 'description': 'Inclusive YYYY-MM-DD (preferred over range)'}, 'kinds': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Filter 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.'}, 'limit': {'type': 'number', 'maximum': 500, 'minimum': 1}, 'range': {'enum': ['today', 'week', 'month', 'year', 'decade', 'all'], 'type': 'string'}, 'cursor': {'type': 'string'}, 'timezone': {'type': 'string', 'description': 'IANA time zone for today (default: where the user is now, else their home zone).'}, 'include_archived': {'type': 'boolean'}, 'include_browsing': {'type': 'boolean', 'description': 'Include extension "Browsed domain · Xm" auto-events (default false)'}, 'include_calendar_blocks': {'type': 'boolean', 'description': 'Include Focus Time / calendar_block rows (default false)'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['events', 'timezone', 'range', 'from', 'to', 'cap', 'truncated'], 'properties': {'to': {'type': ['string', 'null'], 'description': 'Inclusive YYYY-MM-DD upper bound; null for all records.'}, 'cap': {'type': 'number'}, 'from': {'type': ['string', 'null'], 'description': 'Inclusive YYYY-MM-DD lower bound; null for all records.'}, 'range': {'type': 'string'}, 'total': {'type': 'number'}, 'events': {'type': 'array', 'items': {'type': 'object', 'description': 'A Dayze calendar event record.', 'additionalProperties': True}}, 'account': {'type': 'object', 'required': ['handle', 'display_name', 'qa_fixture', 'note'], 'properties': {'note': {'type': 'string', 'description': 'How to disclose the account to the user.'}, 'handle': {'type': ['string', 'null'], 'description': 'Account handle, e.g. @goh.'}, 'qa_fixture': {'type': 'boolean', 'description': 'True for a known QA test account: its records are fixture data, not a real life.'}, 'display_name': {'type': ['string', 'null'], 'description': 'Account display name.'}}, 'description': 'The Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.', 'additionalProperties': False}, 'has_more': {'type': 'boolean'}, 'ordering': {'type': 'string'}, 'timezone': {'type': 'string', 'description': 'Resolved timezone used for this event window and as fallback for rows without one.'}, 'truncated': {'type': 'boolean'}, 'expires_at': {'type': 'string'}, 'next_cursor': {'type': ['string', 'null']}, 'server_time': {'type': 'string'}, 'snapshot_at': {'type': 'string'}, 'snapshot_id': {'type': 'string'}, 'inspect_note': {'type': 'string', 'description': 'How to cite: link each record with its inspect_url, never a link built from an id; which record types here have no Dayze page.'}}, 'additionalProperties': False}
get_expenses
Expense Summary
Authenticated user cashflow summary: spend, income, net, and top spend categories. Requires OAuth or a supported scoped credential. ($0.10; API key required)
Solo lectura
Esquema de entrada
{'type': 'object', 'properties': {'period': {'enum': ['month', 'year'], 'type': 'string', 'description': 'Summary window. Default month.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['period'], 'properties': {'net': {'type': 'number'}, 'usd': {'type': 'object', 'description': 'Totals converted to USD (approximate FX).', 'additionalProperties': True}, 'count': {'type': 'number'}, 'spend': {'type': 'number'}, 'income': {'type': 'number'}, 'period': {'enum': ['month', 'year'], 'type': 'string'}, 'currency': {'type': ['string', 'null']}, 'by_currency': {'type': 'array', 'items': {'type': 'object', 'description': 'Per-currency spend/income/net — never FX-converted.', 'additionalProperties': True}}, 'period_days': {'type': 'number'}, 'multi_currency': {'type': 'boolean'}, 'top_categories': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}}, 'additionalProperties': True}
get_interactions
Life Update Interactions
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)
Solo lectura
Esquema de entrada
{'type': 'object', 'properties': {'to': {'type': 'string', 'description': 'Inclusive YYYY-MM-DD'}, 'from': {'type': 'string', 'description': 'Inclusive YYYY-MM-DD'}, 'limit': {'type': 'number', 'description': 'Max 1–50, default 25'}, 'event_id': {'type': 'string'}, 'place_id': {'type': 'string'}, 'person_id': {'type': 'string'}, 'expense_id': {'type': 'string'}, 'person_name': {'type': 'string'}, 'place_query': {'type': 'string', 'description': 'Venue/merchant substring'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'ok': {'type': 'boolean'}, 'error': {'type': ['string', 'null']}, 'window': {'type': 'object', 'description': 'Bounded from/to lookback window.', 'additionalProperties': True}, 'account': {'type': 'object', 'required': ['handle', 'display_name', 'qa_fixture', 'note'], 'properties': {'note': {'type': 'string', 'description': 'How to disclose the account to the user.'}, 'handle': {'type': ['string', 'null'], 'description': 'Account handle, e.g. @goh.'}, 'qa_fixture': {'type': 'boolean', 'description': 'True for a known QA test account: its records are fixture data, not a real life.'}, 'display_name': {'type': ['string', 'null'], 'description': 'Account display name.'}}, 'description': 'The Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.', 'additionalProperties': False}, 'no_data': {'type': 'boolean'}, 'truncated': {'type': 'boolean'}, 'inspect_note': {'type': 'string', 'description': 'How to cite: link each record with its inspect_url, never a link built from an id; which record types here have no Dayze page.'}, 'interactions': {'type': 'array', 'items': {'type': 'object', 'description': 'life_update row with hops + sources provenance.', 'additionalProperties': True}}}, 'additionalProperties': True}
get_inventory
Get Inventory
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)
Solo lectura
Esquema de entrada
{'type': 'object', 'properties': {'limit': {'type': 'number', 'description': '1-200, default 50'}, 'offset': {'type': 'number'}, 'search': {'type': 'string', 'description': 'Match name, brand, model, notes or reference number.'}, 'status': {'type': 'string', 'description': 'wishlist | ordered | owned | listed_for_sale | sold | returned | lost | disposed | donated | archived'}, 'sort_by': {'enum': ['created_at', 'name', 'value'], 'type': 'string'}, 'category': {'type': 'string', 'description': 'e.g. electronics, watches, clothing'}, 'include_archived': {'type': 'boolean', 'description': 'Include archived and no-longer-owned items.'}, 'include_sensitive': {'type': 'boolean', 'description': 'API keys only: include stored identifiers. Ignored for connectors without pii:read.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['count'], 'properties': {'count': {'type': 'number'}, 'items': {'type': 'array', 'items': {'type': 'object', 'description': 'Inventory item record. With specs: spec_template, specs, state (a timestamped snapshot), state_freshness and capability_summary.', 'additionalProperties': True}}}, 'additionalProperties': True}
get_inventory_item
Get Inventory Item
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)
Solo lectura
Esquema de entrada
{'type': 'object', 'required': ['inventory_id'], 'properties': {'inventory_id': {'type': 'string', 'description': 'The item id from add_inventory_item, get_inventory or search_inventory.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'item': {'type': 'object', 'description': 'Inventory item record. With specs: spec_template, specs, state (a timestamped snapshot), state_freshness and capability_summary.', 'additionalProperties': True}, 'assets': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'people': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'valuations': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'people_links': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'capability_summary': {'type': 'string', 'description': 'One line to plan from: the item, its stored specs, and its last observed state with its date.'}}, 'additionalProperties': True}
get_inventory_valuations
Get Inventory Valuations
Chronological valuation history for one owned Inventory item. ($0.10; API key required)
Solo lectura
Esquema de entrada
{'type': 'object', 'required': ['inventory_id'], 'properties': {'inventory_id': {'type': 'string', 'description': 'The item id from add_inventory_item, get_inventory or search_inventory.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['count'], 'properties': {'count': {'type': 'number'}, 'valuations': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'inventory_id': {'type': 'string'}}, 'additionalProperties': True}
get_life_context
Life Context Snapshot
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)
Solo lectura
Esquema de entrada
{'type': 'object', 'properties': {'q': {'type': 'string', 'description': 'Alias for query.'}, 'at': {'type': 'string', 'description': 'ISO date-time to answer as of (default now), e.g. 2026-09-26T09:00:00+08:00.'}, 'query': {'type': 'string', 'maxLength': 500, 'description': 'Optional question. Drives the question-aware facts slice (family, names, dates, merchants) returned in facts/trace.'}, 'timezone': {'type': 'string', 'description': 'IANA time zone for today (default: where the user is now, else their home zone).'}, 'include_money': {'type': 'boolean', 'default': False, 'description': 'Include money facts in the question-aware facts slice (opt-in; the grant must allow financial details).'}, 'include_location': {'type': 'boolean', 'default': False, 'description': 'Include city/country label; never returns a precise address'}, 'include_memories': {'type': 'boolean', 'default': True, 'description': 'Include recent memory summaries (default true; set false to omit)'}, 'include_relationships': {'type': 'boolean', 'default': True, 'description': 'Include inner-circle and relationship summaries (default true; set false to omit)'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['identity', 'today_events', 'upcoming_events'], 'properties': {'facts': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'kind', 'text', 'state', 'source_label'], 'properties': {'id': {'type': 'string', 'description': 'Table-qualified record id, e.g. people:<uuid> or events:<id>.'}, 'kind': {'type': 'string'}, 'text': {'type': 'string'}, 'tier': {'type': 'string', 'description': 'entity, join, static, dynamic or vector.'}, 'state': {'type': 'string', 'description': 'current, planned, completed, stale (age_label set) or disputed.'}, 'source': {'type': 'string'}, 'age_label': {'type': ['string', 'null']}, 'confidence': {'type': ['number', 'null']}, 'provenance': {'type': 'string', 'description': 'stated, observed, inferred or imported.'}, 'source_ref': {'type': ['string', 'null']}, 'inspect_url': {'type': 'string', 'description': 'PHI-434: the Dayze page for this record, when it has one. Cite with it.'}, 'observed_at': {'type': ['string', 'null']}, 'evidence_ref': {'type': ['string', 'null']}, 'source_label': {'type': 'string', 'description': 'Where the fact came from, e.g. "from Contacts".'}, 'last_confirmed_at': {'type': ['string', 'null']}}, 'description': 'One personal fact chosen for the question. Same ids as Dayze chat.', 'additionalProperties': True}, 'description': 'Question-aware personal facts, in selection order.'}, 'trace': {'type': 'object', 'required': ['fact_ids', 'assembler'], 'properties': {'caller': {'type': 'string'}, 'fact_ids': {'type': 'array', 'items': {'type': 'string'}}, 'question': {'type': 'string'}, 'assembler': {'type': 'string'}, 'scope_key': {'type': 'string'}, 'used_tokens': {'type': 'number'}, 'budget_tokens': {'type': 'number'}, 'selection_notes': {'type': 'array', 'items': {'type': 'string'}}}, 'description': 'Which facts were supplied and why. fact_ids equals facts[].id.', 'additionalProperties': True}, 'account': {'type': 'object', 'required': ['handle', 'display_name', 'qa_fixture', 'note'], 'properties': {'note': {'type': 'string', 'description': 'How to disclose the account to the user.'}, 'handle': {'type': ['string', 'null'], 'description': 'Account handle, e.g. @goh.'}, 'qa_fixture': {'type': 'boolean', 'description': 'True for a known QA test account: its records are fixture data, not a real life.'}, 'display_name': {'type': ['string', 'null'], 'description': 'Account display name.'}}, 'description': 'The Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.', 'additionalProperties': False}, 'omitted': {'type': 'array', 'items': {'type': 'object', 'required': ['reason', 'kind', 'count'], 'properties': {'kind': {'type': 'string'}, 'count': {'type': 'number'}, 'reason': {'type': 'string'}}, 'additionalProperties': True}, 'description': 'Facts left out, counted by reason.'}, 'partial': {'type': 'boolean', 'description': 'True when the facts slice is incomplete; never read a missing fact as "none on file".'}, 'identity': {'type': 'object', 'description': 'Account identity and timezone.', 'additionalProperties': True}, 'sections': {'type': 'object', 'description': 'sections.harness: ok, or error (HARNESS_FAILED / HARNESS_DEGRADED with failed_sources) when facts may be missing.', 'additionalProperties': True}, 'redaction': {'type': 'object', 'description': 'pii redacted|raw; sensitive_topics the caller may receive; counts of sensitive trackers / memories withheld.', 'additionalProperties': True}, 'mood_score': {'type': ['number', 'null']}, 'energy_score': {'type': ['number', 'null']}, 'inner_circle': {'type': 'array', 'items': {'type': 'object', 'description': 'A Dayze person or contact record.', 'additionalProperties': True}}, 'inspect_note': {'type': 'string', 'description': 'How 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_streak': {'type': ['number', 'null']}, 'social_edges': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'today_events': {'type': 'array', 'items': {'type': 'object', 'description': 'A Dayze calendar event record.', 'additionalProperties': True}}, 'active_trackers': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'recent_memories': {'type': 'array', 'items': {'type': 'object', 'description': 'A Dayze agent memory record.', 'additionalProperties': True}}, 'upcoming_events': {'type': 'array', 'items': {'type': 'object', 'description': 'A Dayze calendar event record.', 'additionalProperties': True}}, 'pending_responses': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'social_edges_limit': {'type': 'number', 'description': 'Max edges returned in social_edges.'}, 'social_edges_total': {'type': ['number', 'null'], 'description': 'person_connections rows on file; null when unknown.'}, 'relationship_health': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'social_edges_truncated': {'type': 'boolean', 'description': 'True when more edges exist than social_edges lists.'}, 'pending_responses_count': {'type': 'number'}}, 'additionalProperties': True}
get_life_graph
Life Graph Export
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)
Solo lectura
Esquema de entrada
{'type': 'object', 'properties': {'full': {'type': 'boolean', 'default': False, 'description': 'Include additional people by last interaction, up to max_people'}, 'max_people': {'type': 'number', 'default': 80}, 'event_links_limit': {'type': 'number', 'default': 25}, 'include_event_links': {'type': 'boolean', 'default': False}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['hot', 'node_count', 'edge_count', 'nodes', 'edges'], 'properties': {'hot': {'type': 'boolean'}, 'edges': {'type': 'array', 'items': {'type': 'object', 'description': 'A relationship edge between people.', 'additionalProperties': True}}, 'nodes': {'type': 'array', 'items': {'type': 'object', 'description': 'A Dayze person or contact record.', 'additionalProperties': True}}, 'edge_count': {'type': 'number'}, 'node_count': {'type': 'number'}, 'event_people_links': {'type': 'array', 'items': {'type': 'object', 'description': 'A recent event-to-person link.', 'additionalProperties': True}}, 'max_people_requested': {'type': 'number'}}, 'additionalProperties': False}
get_location_context
Location Context
Likely current or at-time place with confidence and provenance. ($0.10; API key required)
Solo lectura
Esquema de entrada
{'type': 'object', 'properties': {'at': {'type': 'string', 'description': 'ISO timestamp'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'at': {'type': ['string', 'null']}, 'place': {'type': ['object', 'null'], 'description': 'Canonical place record.', 'additionalProperties': True}, 'confidence': {'type': 'number'}, 'provenance': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': True}
get_location_history
Location History
Normalized visit history (venue-level by default). Merges GPS location_visits + place_visits (MCP/Uber digs). ($0.10; API key required)
Solo lectura
Esquema de entrada
{'type': 'object', 'properties': {'to': {'type': 'string'}, 'city': {'type': 'string'}, 'from': {'type': 'string'}, 'place': {'type': 'string'}, 'country': {'type': 'string'}, 'precision': {'enum': ['point', 'venue', 'neighborhood', 'city', 'country'], 'type': 'string'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['count'], 'properties': {'count': {'type': 'number'}, 'visits': {'type': 'array', 'items': {'type': 'object', 'description': 'Normalized place visit. visit_id (= id) is the place_visits row id delete_place_visit takes; null on event/GPS evidence rows.', 'additionalProperties': True}}}, 'additionalProperties': True}
get_memories
Agent Memories
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)
Solo lectura
Esquema de entrada
{'type': 'object', 'properties': {'q': {'type': 'string', 'description': 'Alias for query.'}, 'focus': {'type': 'string', 'description': 'Ranks memories toward this focus. next_actions (or current, now) returns only up to 4 next-action memories.'}, 'limit': {'type': 'number', 'description': 'Max rows 1–50, default 20'}, 'query': {'type': 'string', 'description': 'Semantic focus (optional)'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['mode', 'memories'], 'properties': {'mode': {'enum': ['semantic', 'keyword', 'blended', 'chronological'], 'type': 'string'}, 'query': {'type': 'string'}, 'events': {'type': 'array', 'items': {'type': 'object', 'description': 'A Dayze calendar event record.', 'additionalProperties': True}}, 'people': {'type': 'array', 'items': {'type': 'object', 'description': 'A Dayze person or contact record.', 'additionalProperties': True}}, 'account': {'type': 'object', 'required': ['handle', 'display_name', 'qa_fixture', 'note'], 'properties': {'note': {'type': 'string', 'description': 'How to disclose the account to the user.'}, 'handle': {'type': ['string', 'null'], 'description': 'Account handle, e.g. @goh.'}, 'qa_fixture': {'type': 'boolean', 'description': 'True for a known QA test account: its records are fixture data, not a real life.'}, 'display_name': {'type': ['string', 'null'], 'description': 'Account display name.'}}, 'description': 'The Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.', 'additionalProperties': False}, 'memories': {'type': 'array', 'items': {'type': 'object', 'description': 'A Dayze agent memory record.', 'additionalProperties': True}}, 'inspect_note': {'type': 'string', 'description': 'How to cite: link each record with its inspect_url, never a link built from an id; which record types here have no Dayze page.'}}, 'additionalProperties': False}
get_money_between_people
Money Between People
Same as get_person_transactions: authenticated user ↔ one contact via expenses FKs. Prefer get_person_transactions; this alias exists for agent discoverability. ($0.10; API key required)
Solo lectura
Esquema de entrada
{'type': 'object', 'properties': {'to': {'type': 'string', 'description': 'Inclusive YYYY-MM-DD filter'}, 'from': {'type': 'string', 'description': 'Inclusive YYYY-MM-DD filter'}, 'name': {'type': 'string', 'description': 'Surface name if person_id unknown'}, 'limit': {'type': 'number', 'description': 'Max rows 1–200, default 50'}, 'person_id': {'type': 'string', 'description': 'CRM people.id'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'name': {'type': 'string'}, 'model': {'type': 'string'}, 'totals': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'account': {'type': 'object', 'required': ['handle', 'display_name', 'qa_fixture', 'note'], 'properties': {'note': {'type': 'string', 'description': 'How to disclose the account to the user.'}, 'handle': {'type': ['string', 'null'], 'description': 'Account handle, e.g. @goh.'}, 'qa_fixture': {'type': 'boolean', 'description': 'True for a known QA test account: its records are fixture data, not a real life.'}, 'display_name': {'type': ['string', 'null'], 'description': 'Account display name.'}}, 'description': 'The Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.', 'additionalProperties': False}, 'entries': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'person_id': {'type': 'string'}, 'inspect_note': {'type': 'string', 'description': 'How 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_url': {'type': 'string', 'description': "The contact's Dayze page."}}, 'additionalProperties': True}
get_pending_replies
Get Pending Replies
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)
Solo lectura
Esquema de entrada
{'type': 'object', 'properties': {'limit': {'type': 'number', 'description': '1-200, default 50.'}, 'status': {'enum': ['unsent', 'sent', 'dismissed', 'all'], 'type': 'string'}, 'reply_id': {'type': 'string', 'description': 'Read one reply (ignores the filters).'}, 'person_id': {'type': 'string'}, 'person_name': {'type': 'string'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['pending_replies', 'count', 'has_more', 'status'], 'properties': {'count': {'type': 'number'}, 'status': {'type': 'string', 'description': 'The filter applied: unsent, sent, dismissed or all.'}, 'app_url': {'type': 'string'}, 'has_more': {'type': 'boolean'}, 'pending_replies': {'type': 'array', 'items': {'type': 'object', 'required': ['reply_id', 'person_name', 'person_id', 'channel', 'category', 'summary', 'draft', 'status', 'state', 'due', 'received_at', 'source'], 'properties': {'due': {'type': 'boolean', 'description': 'Owed now: pending, or snoozed with snooze_until passed. False while a snooze runs, and when sent or dismissed.'}, 'draft': {'type': ['string', 'null'], 'description': 'The reply text saved for later.'}, 'state': {'type': 'string', 'description': 'unsent (pending or snoozed), sent (the owner replied) or dismissed'}, 'source': {'type': ['object', 'null'], 'properties': {'kind': {'type': 'string', 'description': 'gmail, email or other'}, 'thread_id': {'type': ['string', 'null']}, 'message_id': {'type': ['string', 'null']}}, 'description': 'The email it answers, as ids only; null when none was saved.', 'additionalProperties': False}, 'status': {'type': 'string', 'description': 'pending, snoozed, responded or dismissed'}, 'channel': {'type': 'string'}, 'summary': {'type': ['string', 'null']}, 'category': {'type': 'string', 'description': 'personal or work'}, 'reply_id': {'type': 'string'}, 'person_id': {'type': ['string', 'null'], 'description': 'Linked contact id; null when the reply is unlinked.'}, 'created_at': {'type': ['string', 'null']}, 'updated_at': {'type': ['string', 'null']}, 'approved_at': {'type': ['string', 'null'], 'description': 'PHI-427: when the owner approved the draft and opened it in Gmail, or null. Dayze never sends; the Gmail sync closes the reply when the email goes out.'}, 'person_name': {'type': 'string'}, 'received_at': {'type': 'string'}, 'responded_at': {'type': ['string', 'null']}, 'snooze_until': {'type': ['string', 'null']}}, 'description': 'One reply the user owes (Inbox → Pending Replies). Dayze never sends it.', 'additionalProperties': False}}}, 'additionalProperties': False}
get_people
Dayze Contacts
List or search the authenticated user's Dayze Contacts (private CRM; table people). Optional query uses literal substring matching on contact name, slug, or email; it has no fuzzy fallback, and no match returns people:[] with no_match:true. Each contact includes avatar_url, photo_count, and has_photos; use get_person_photos(person_id) for the full gallery. 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)
Solo lectura
Esquema de entrada
{'type': 'object', 'properties': {'limit': {'type': 'number', 'description': 'Page size (default 100, max 500)'}, 'query': {'type': 'string', 'description': 'Literal substring search over contact name, slug, or email. No fuzzy fallback.'}, 'cursor': {'type': 'string'}, 'offset': {'type': 'number', 'description': 'Skip N rows (default 0)'}, 'include_notes': {'type': 'boolean', 'description': 'When true, include notes (server-redacted). Default false.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['people', 'total', 'limit', 'offset', 'truncated'], 'properties': {'limit': {'type': 'number'}, 'query': {'type': ['string', 'null']}, 'total': {'type': 'number'}, 'offset': {'type': 'number'}, 'people': {'type': 'array', 'items': {'type': 'object', 'description': 'A Dayze person or contact record.', 'additionalProperties': True}}, 'account': {'type': 'object', 'required': ['handle', 'display_name', 'qa_fixture', 'note'], 'properties': {'note': {'type': 'string', 'description': 'How to disclose the account to the user.'}, 'handle': {'type': ['string', 'null'], 'description': 'Account handle, e.g. @goh.'}, 'qa_fixture': {'type': 'boolean', 'description': 'True for a known QA test account: its records are fixture data, not a real life.'}, 'display_name': {'type': ['string', 'null'], 'description': 'Account display name.'}}, 'description': 'The Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.', 'additionalProperties': False}, 'has_more': {'type': 'boolean'}, 'no_match': {'type': 'boolean', 'description': 'True when a non-empty query matched no contacts.'}, 'ordering': {'type': 'string'}, 'truncated': {'type': 'boolean'}, 'expires_at': {'type': 'string'}, 'match_mode': {'type': 'string', 'description': 'unfiltered or literal_substring; get_people has no fuzzy fallback.'}, 'next_cursor': {'type': ['string', 'null']}, 'server_time': {'type': 'string'}, 'snapshot_at': {'type': 'string'}, 'snapshot_id': {'type': 'string'}, 'inspect_note': {'type': 'string', 'description': 'How 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_notes': {'type': 'boolean'}}, 'additionalProperties': False}
get_people_cleanup_result
Get People Cleanup Result
Fetch start_people_cleanup result by cleanup_id. ($0.05; API key required)
Solo lectura
Esquema de entrada
{'type': 'object', 'required': ['cleanup_id'], 'properties': {'cleanup_id': {'type': 'string'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['cleanup_id', 'status'], 'properties': {'status': {'type': 'string'}, 'cleanup_id': {'type': 'string'}}, 'additionalProperties': True}
get_people_links
Get People Links
Alias of get_person_connections — list graph edges for one CRM person. ($0.05; API key required)
Solo lectura
Esquema de entrada
{'type': 'object', 'required': ['person_id'], 'properties': {'person_id': {'type': 'string'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['count'], 'properties': {'count': {'type': 'number'}, 'person': {'type': 'object', 'additionalProperties': True}, 'connections': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}}, 'additionalProperties': True}
get_person_aliases
Person Aliases
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)
Solo lectura
Esquema de entrada
{'type': 'object', 'properties': {'name': {'type': 'string', 'description': 'Surface name if person_id unknown'}, 'person_id': {'type': 'string', 'description': 'CRM people.id'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'name': {'type': ['string', 'null']}, 'aliases': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'person_id': {'type': ['string', 'null']}, 'candidates': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}}, 'additionalProperties': True}
get_person_connections
Get Person Connections
List graph edges for one CRM person. ($0.05; API key required)
Solo lectura
Esquema de entrada
{'type': 'object', 'required': ['person_id'], 'properties': {'person_id': {'type': 'string'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['count'], 'properties': {'count': {'type': 'number'}, 'person': {'type': 'object', 'additionalProperties': True}, 'connections': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}}, 'additionalProperties': True}
get_person_interactions
Person Interactions
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)
Solo lectura
Esquema de entrada
{'type': 'object', 'properties': {'to': {'type': 'string', 'description': 'Inclusive YYYY-MM-DD filter'}, 'from': {'type': 'string', 'description': 'Inclusive YYYY-MM-DD filter'}, 'kind': {'type': 'string', 'description': 'Optional filter: meeting, visit, gift, stayed_over, met, …'}, 'name': {'type': 'string'}, 'limit': {'type': 'number', 'description': 'Max rows 1–100, default 40'}, 'person_id': {'type': 'string'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'name': {'type': 'string'}, 'count': {'type': 'number'}, 'events': {'type': 'array', 'items': {'type': 'object', 'description': 'Interaction or co-tagged event row.', 'additionalProperties': True}}, 'account': {'type': 'object', 'required': ['handle', 'display_name', 'qa_fixture', 'note'], 'properties': {'note': {'type': 'string', 'description': 'How to disclose the account to the user.'}, 'handle': {'type': ['string', 'null'], 'description': 'Account handle, e.g. @goh.'}, 'qa_fixture': {'type': 'boolean', 'description': 'True for a known QA test account: its records are fixture data, not a real life.'}, 'display_name': {'type': ['string', 'null'], 'description': 'Account display name.'}}, 'description': 'The Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.', 'additionalProperties': False}, 'person_id': {'type': 'string'}, 'truncated': {'type': 'boolean'}, 'matched_via': {'type': ['string', 'null']}, 'inspect_note': {'type': 'string', 'description': 'How 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_url': {'type': 'string', 'description': "The contact's Dayze page."}}, 'additionalProperties': True}
get_person_neighborhood
Person Neighborhood
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)
Solo lectura
Esquema de entrada
{'type': 'object', 'required': ['person_id'], 'properties': {'person_id': {'type': 'string', 'description': 'UUID'}, 'include_notes': {'type': 'boolean', 'description': 'When true, include center.notes (server-redacted). Default false.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['center', 'connection_count', 'connections'], 'properties': {'center': {'type': 'object', 'description': 'A Dayze person or contact record.', 'additionalProperties': True}, 'account': {'type': 'object', 'required': ['handle', 'display_name', 'qa_fixture', 'note'], 'properties': {'note': {'type': 'string', 'description': 'How to disclose the account to the user.'}, 'handle': {'type': ['string', 'null'], 'description': 'Account handle, e.g. @goh.'}, 'qa_fixture': {'type': 'boolean', 'description': 'True for a known QA test account: its records are fixture data, not a real life.'}, 'display_name': {'type': ['string', 'null'], 'description': 'Account display name.'}}, 'description': 'The Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.', 'additionalProperties': False}, 'connections': {'type': 'array', 'items': {'type': 'object', 'description': 'A declared connection to the center person.', 'additionalProperties': True}}, 'inspect_note': {'type': 'string', 'description': 'How 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_notes': {'type': 'boolean'}, 'connection_count': {'type': 'number'}}, 'additionalProperties': False}
get_person_photos
Person Photos
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)
Solo lectura
Esquema de entrada
{'type': 'object', 'required': ['person_id'], 'properties': {'person_id': {'type': 'string'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['count'], 'properties': {'count': {'type': 'number'}, 'photos': {'type': 'array', 'items': {'type': 'object', 'description': 'Photo or entity asset metadata.', 'additionalProperties': True}}, 'person_id': {'type': 'string'}}, 'additionalProperties': True}
get_person_transactions
Person Transactions
Me↔contact money ledger from expenses (paid_to_person_id / income_from_person_id). 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)
Solo lectura
Esquema de entrada
{'type': 'object', 'properties': {'to': {'type': 'string', 'description': 'Inclusive YYYY-MM-DD filter'}, 'from': {'type': 'string', 'description': 'Inclusive YYYY-MM-DD filter'}, 'name': {'type': 'string', 'description': 'Surface name if person_id unknown'}, 'limit': {'type': 'number', 'description': 'Max rows 1–200, default 50'}, 'person_id': {'type': 'string', 'description': 'CRM people.id'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'name': {'type': 'string'}, 'count': {'type': 'number'}, 'totals': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'account': {'type': 'object', 'required': ['handle', 'display_name', 'qa_fixture', 'note'], 'properties': {'note': {'type': 'string', 'description': 'How to disclose the account to the user.'}, 'handle': {'type': ['string', 'null'], 'description': 'Account handle, e.g. @goh.'}, 'qa_fixture': {'type': 'boolean', 'description': 'True for a known QA test account: its records are fixture data, not a real life.'}, 'display_name': {'type': ['string', 'null'], 'description': 'Account display name.'}}, 'description': 'The Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.', 'additionalProperties': False}, 'entries': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'person_id': {'type': 'string'}, 'inspect_note': {'type': 'string', 'description': 'How 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_url': {'type': 'string', 'description': "The contact's Dayze page."}}, 'additionalProperties': True}
get_photo
Get Photo
Single photo metadata + secure URL. Returns inline MCP image attachment when available. ($0.10; API key required)
Solo lectura
Esquema de entrada
{'type': 'object', 'required': ['photo_id'], 'properties': {'photo_id': {'type': 'string'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'photo': {'type': 'object', 'description': 'Photo or entity asset metadata.', 'additionalProperties': True}}, 'additionalProperties': True}
get_photos_for_event
Photos For Event
Assets linked to an event. ($0.10; API key required)
Solo lectura
Esquema de entrada
{'type': 'object', 'required': ['event_id'], 'properties': {'event_id': {'type': 'string'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['count'], 'properties': {'count': {'type': 'number'}, 'photos': {'type': 'array', 'items': {'type': 'object', 'description': 'Photo or entity asset metadata.', 'additionalProperties': True}}, 'event_id': {'type': 'string'}}, 'additionalProperties': True}
get_photos_for_place
Photos For Place
Assets linked to a canonical place. ($0.10; API key required)
Solo lectura
Esquema de entrada
{'type': 'object', 'required': ['place_id'], 'properties': {'place_id': {'type': 'string'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['count'], 'properties': {'count': {'type': 'number'}, 'photos': {'type': 'array', 'items': {'type': 'object', 'description': 'Photo or entity asset metadata.', 'additionalProperties': True}}, 'place_id': {'type': 'string'}}, 'additionalProperties': True}
get_place
Get Place Card
Fetch one saved place card (business_contacts) by place_id — address, opening hours, affordability, notes. ($0.05; API key required)
Solo lectura
Esquema de entrada
{'type': 'object', 'properties': {'id': {'type': 'string'}, 'place_id': {'type': 'string'}, 'business_contact_id': {'type': 'string'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'place': {'type': 'object', 'description': 'Saved place card.', 'additionalProperties': True}, 'message': {'type': ['string', 'null']}, 'place_id': {'type': 'string'}, 'business_contact_id': {'type': 'string'}}, 'additionalProperties': True}
get_places
List Places
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)
Solo lectura
Esquema de entrada
{'type': 'object', 'properties': {'tag': {'type': 'string'}, 'area': {'type': 'string'}, 'city': {'type': 'string'}, 'near': {'type': 'string', 'description': 'Filter saved cards by area/tag/notes (e.g. Madeira).'}, 'limit': {'type': 'number'}, 'query': {'type': 'string', 'description': 'Name contains, case-insensitive (e.g. "QA Map Probe Tokyo").'}, 'country': {'type': 'string'}, 'affordability': {'type': 'string', 'description': '$ | $$ | $$$'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['count'], 'properties': {'count': {'type': 'number'}, 'places': {'type': 'array', 'items': {'type': 'object', 'description': 'Canonical place record.', 'additionalProperties': True}}, 'account': {'type': 'object', 'required': ['handle', 'display_name', 'qa_fixture', 'note'], 'properties': {'note': {'type': 'string', 'description': 'How to disclose the account to the user.'}, 'handle': {'type': ['string', 'null'], 'description': 'Account handle, e.g. @goh.'}, 'qa_fixture': {'type': 'boolean', 'description': 'True for a known QA test account: its records are fixture data, not a real life.'}, 'display_name': {'type': ['string', 'null'], 'description': 'Account display name.'}}, 'description': 'The Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.', 'additionalProperties': False}, 'saved_count': {'type': 'number'}, 'inspect_note': {'type': 'string', 'description': 'How 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_places': {'type': 'array', 'items': {'type': 'object', 'description': 'Saved place card (business_contacts).', 'additionalProperties': True}}}, 'additionalProperties': True}
get_place_visits
Place Visits
When was I at a venue — merges place_visits, location_visits, and event locations. Rows from place_visits carry visit_id (= id), the id delete_place_visit takes; event and GPS evidence rows have visit_id null. ($0.10; API key required)
Solo lectura
Esquema de entrada
{'type': 'object', 'required': ['place'], 'properties': {'to': {'type': 'string'}, 'from': {'type': 'string'}, 'place': {'type': 'string'}, 'place_id': {'type': 'string'}, 'person_ids': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['place', 'visits', 'count'], 'properties': {'count': {'type': 'number'}, 'place': {'type': 'string'}, 'visits': {'type': 'array', 'items': {'type': 'object', 'description': 'Normalized place visit. visit_id (= id) is the place_visits row id delete_place_visit takes; null on event/GPS evidence rows.', 'additionalProperties': True}}, 'account': {'type': 'object', 'required': ['handle', 'display_name', 'qa_fixture', 'note'], 'properties': {'note': {'type': 'string', 'description': 'How to disclose the account to the user.'}, 'handle': {'type': ['string', 'null'], 'description': 'Account handle, e.g. @goh.'}, 'qa_fixture': {'type': 'boolean', 'description': 'True for a known QA test account: its records are fixture data, not a real life.'}, 'display_name': {'type': ['string', 'null'], 'description': 'Account display name.'}}, 'description': 'The Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.', 'additionalProperties': False}, 'confidence': {'type': 'number'}, 'inspect_note': {'type': 'string', 'description': 'How 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_present': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'matching_events': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}}, 'additionalProperties': True}
get_residences
List Residences
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)
Solo lectura
Esquema de entrada
{'type': 'object', 'properties': {'to': {'type': 'string'}, 'from': {'type': 'string'}, 'limit': {'type': 'number'}, 'include_eras': {'type': 'boolean', 'description': 'Include life_eras rows (default true)'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['count'], 'properties': {'eras': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'count': {'type': 'number'}, 'residences': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}}, 'additionalProperties': True}
get_sleep
Get Sleep
Sleep: list typed sleep/nap records with duration_minutes. ($0.05; API key required)
Solo lectura
Esquema de entrada
{'type': 'object', 'properties': {'to': {'type': 'string'}, 'from': {'type': 'string'}, 'limit': {'type': 'number'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['count'], 'properties': {'count': {'type': 'number'}, 'sleeps': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}}, 'additionalProperties': True}
get_sleep_summary
Sleep Summary
Sleep: day/week/month totals and averages. ($0.05; API key required)
Solo lectura
Esquema de entrada
{'type': 'object', 'properties': {'range': {'enum': ['day', 'week', 'month'], 'type': 'string'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['count'], 'properties': {'count': {'type': 'number'}, 'range': {'type': 'string'}, 'nights': {'type': 'number'}, 'total_minutes': {'type': 'number'}, 'average_minutes': {'type': 'number'}}, 'additionalProperties': True}
get_trackers
Habit Trackers
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)
Solo lectura
Esquema de entrada
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['trackers'], 'properties': {'note': {'type': 'string'}, 'trackers': {'type': 'array', 'items': {'type': 'object', 'description': 'A currently active tracker.', 'additionalProperties': True}}}, 'additionalProperties': True}
get_transactions
Get Transactions
List expense/income/transfer rows (includes tags, payment_method). Filter with tag=project:… or project=… ($0.10; API key required)
Solo lectura
Esquema de entrada
{'type': 'object', 'properties': {'to': {'type': 'string'}, 'tag': {'type': 'string', 'description': 'Exact tag, e.g. project:max-soko-poker-venture or rail:zelle'}, 'from': {'type': 'string'}, 'type': {'type': 'string'}, 'limit': {'type': 'number', 'description': 'Page size 1-500, default 100.'}, 'cursor': {'type': 'string', 'description': 'Continue the same immutable one-hour snapshot; other filters remain frozen.'}, 'offset': {'type': 'number', 'description': 'Skip this many rows of a new snapshot (a cursor carries its own).'}, 'project': {'type': 'string', 'description': 'Project label or slug → project:{slug}'}, 'include_archived': {'type': 'boolean'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['count'], 'properties': {'count': {'type': 'number'}, 'account': {'type': 'object', 'required': ['handle', 'display_name', 'qa_fixture', 'note'], 'properties': {'note': {'type': 'string', 'description': 'How to disclose the account to the user.'}, 'handle': {'type': ['string', 'null'], 'description': 'Account handle, e.g. @goh.'}, 'qa_fixture': {'type': 'boolean', 'description': 'True for a known QA test account: its records are fixture data, not a real life.'}, 'display_name': {'type': ['string', 'null'], 'description': 'Account display name.'}}, 'description': 'The Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.', 'additionalProperties': False}, 'inspect_note': {'type': 'string', 'description': 'How to cite: link each record with its inspect_url, never a link built from an id; which record types here have no Dayze page.'}, 'transactions': {'type': 'array', 'items': {'type': 'object', 'description': 'Expense/income transaction row.', 'additionalProperties': True}}}, 'additionalProperties': True}
get_travel_history
Travel History
Completed/confirmed travel only. ($0.10; API key required)
Solo lectura
Esquema de entrada
{'type': 'object', 'properties': {'to': {'type': 'string'}, 'from': {'type': 'string'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['count'], 'properties': {'count': {'type': 'number'}, 'trips': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}}, 'additionalProperties': True}
get_trip
Get Trip
Single trip with linked places and people. ($0.10; API key required)
Solo lectura
Esquema de entrada
{'type': 'object', 'required': ['trip_id'], 'properties': {'trip_id': {'type': 'string'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'trip': {'type': 'object', 'additionalProperties': True}, 'people': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'places': {'type': 'array', 'items': {'type': 'object', 'description': 'Canonical place record.', 'additionalProperties': True}}}, 'additionalProperties': True}
get_trips
List Trips
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)
Solo lectura
Esquema de entrada
{'type': 'object', 'properties': {'to': {'type': 'string'}, 'from': {'type': 'string'}, 'limit': {'type': 'number'}, 'cursor': {'type': 'string', 'description': 'Continue the same immutable one-hour snapshot; other filters remain frozen.'}, 'status': {'type': 'string'}, 'include_archived': {'type': 'boolean'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['count'], 'properties': {'count': {'type': 'number'}, 'trips': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}}, 'additionalProperties': True}
import_uber_gmail
Import Uber Gmail
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. ($0.15; API key required)
Esquema de entrada
{'type': 'object', 'properties': {'email': {'type': 'string'}, 'query': {'type': 'string', 'description': 'Override Gmail search (default from:uber.com receipt/trip)'}, 'account': {'type': 'string'}, 'dry_run': {'type': 'boolean'}, 'request_id': {'type': 'string', 'description': 'Client idempotency key (retries return original result).'}, 'max_results': {'type': 'number'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['query', 'scanned', 'imported', 'duplicates', 'skipped', 'results'], 'properties': {'query': {'type': 'string'}, 'results': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'scanned': {'type': 'number'}, 'skipped': {'type': 'number'}, 'imported': {'type': 'number'}, 'duplicates': {'type': 'number'}}, 'additionalProperties': True}
import_venmo_gmail
Import Venmo Gmail
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. ($0.15; API key required)
Esquema de entrada
{'type': 'object', 'properties': {'email': {'type': 'string', 'description': 'Alias for account'}, 'query': {'type': 'string', 'description': 'Override Gmail search (default from:venmo.com paid/payment)'}, 'account': {'type': 'string', 'description': 'Mailbox email or connection id'}, 'dry_run': {'type': 'boolean'}, 'request_id': {'type': 'string', 'description': 'Client idempotency key (retries return original result).'}, 'max_results': {'type': 'number'}, 'mirror_event': {'type': 'boolean', 'description': 'Also create Money · calendar annotations'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['query', 'scanned', 'imported', 'duplicates', 'skipped', 'results'], 'properties': {'query': {'type': 'string'}, 'results': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'scanned': {'type': 'number'}, 'skipped': {'type': 'number'}, 'imported': {'type': 'number'}, 'duplicates': {'type': 'number'}}, 'additionalProperties': True}
link_entities
Link Entities
Link Trip→Stay→Place / Event→Person (graph, not prose). link_type accepts documented aliases (e.g. participant → event_person); unknown values error instead of silently becoming "other". Pass status=confirmed|rejected to record a human decision on an existing (often inferred) edge. status=confirmed on a link that does not exist yet creates it, as a call without status does (explicit, confidence 1). status=rejected on a link that does not exist errors and saves nothing: there is nothing to reject. ($0.10; API key required)
Esquema de entrada
{'type': 'object', 'required': ['from_type', 'from_id', 'to_type', 'to_id'], 'properties': {'notes': {'type': 'string'}, 'to_id': {'type': 'string'}, 'source': {'type': 'string', 'description': 'Provenance tag, e.g. manual, inferred:name_match:title.'}, 'status': {'enum': ['confirmed', 'rejected'], 'type': 'string', 'description': "confirmed: confirm an existing edge (usually an inferred one: +confirmed, confidence 1), or create the edge if it does not exist yet, as a call without status does. rejected: tombstone an existing edge (+rejected, confidence 0). A rejected edge is not a relationship: the event's people, timelines, get_interactions and every other read leave it out. It is kept so automated writers never recreate it; linking the same pair again without status replaces it. Errors and saves nothing when the edge does not exist."}, 'from_id': {'type': 'string'}, 'to_type': {'type': 'string'}, 'from_type': {'type': 'string'}, 'link_type': {'type': 'string', 'description': 'trip_stay | trip_flight | stay_place | event_place | event_person | transaction_trip | event_event | other. Aliases: participant/participants/attendee/attendees → event_person.'}, 'confidence': {'type': 'number', 'description': '0-1. Defaults to 1 for explicit links. 0 means rejected: every read leaves the edge out.'}, 'request_id': {'type': 'string', 'description': 'Client idempotency key (retries return original result).'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'link': {'type': 'object', 'description': 'The stored life_entity_links row.', 'additionalProperties': True}, 'linked': {'type': 'boolean'}, 'message': {'type': ['string', 'null']}, 'confirmation': {'enum': ['explicit', 'pending', 'confirmed', 'rejected'], 'type': 'string', 'description': 'Derived from the link source and confidence. explicit: a direct write; pending: an inferred guess nobody has confirmed; confirmed: a guess a person confirmed; rejected: a person rejected it (source ends in +rejected, or confidence 0). A rejected link is kept only so it is never proposed again; it is not a relationship.'}}, 'additionalProperties': True}
link_inventory_person
Link Inventory Person
Link one owned contact to one owned Inventory item as its provenance: inherited_from, gifted_by, purchased_from, co_owned_with, borrowed_from or loaned_to. ($0.10; API key required)
Esquema de entrada
{'type': 'object', 'required': ['inventory_id', 'person_id', 'relationship'], 'properties': {'notes': {'type': 'string'}, 'person_id': {'type': 'string', 'description': 'Contact id (from get_people or resolve_person).'}, 'request_id': {'type': 'string', 'description': 'Client idempotency key (retries return original result).'}, 'inventory_id': {'type': 'string', 'description': 'The item id from add_inventory_item, get_inventory or search_inventory.'}, 'relationship': {'enum': ['inherited_from', 'gifted_by', 'purchased_from', 'co_owned_with', 'borrowed_from', 'loaned_to'], 'type': 'string'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'link': {'type': 'object', 'additionalProperties': True}, 'message': {'type': ['string', 'null']}, 'person_id': {'type': 'string'}, 'inventory_id': {'type': 'string'}, 'idempotent_replay': {'type': 'boolean'}}, 'additionalProperties': True}
link_people
Link People
NON-DESTRUCTIVE: create/update a person_connections edge between two distinct people (friends/family/knows/…). Both contacts remain. Do not use for duplicate cleanup — use merge_people. ($0.10; API key required)
Esquema de entrada
{'type': 'object', 'required': ['person_id', 'other_person_id'], 'properties': {'notes': {'type': 'string'}, 'source': {'type': 'string'}, 'direction': {'type': 'string'}, 'person_id': {'type': 'string'}, 'confidence': {'type': 'number'}, 'request_id': {'type': 'string', 'description': 'Client idempotency key (retries return original result).'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}, 'other_person_id': {'type': 'string'}, 'relationship_type': {'type': 'string'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'linked': {'type': 'boolean'}, 'message': {'type': ['string', 'null']}, 'connection': {'type': 'object', 'additionalProperties': True}}, 'additionalProperties': True}
list_clarifications
List Clarifications
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)
Solo lectura
Esquema de entrada
{'type': 'object', 'properties': {'kind': {'type': 'string', 'description': 'Optional: entity_mention | duplicate_people'}, 'limit': {'type': 'number', 'description': 'Max rows 1–50, default 15'}, 'auto_cleanup': {'type': 'boolean', 'description': 'Auto-dismiss non-person / auto-link existing (default true)'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['clarifications', 'count'], 'properties': {'count': {'type': 'number'}, 'message': {'type': ['string', 'null']}, 'truncated': {'type': 'boolean'}, 'clarifications': {'type': 'array', 'items': {'type': 'object', 'description': 'Ranked clarification candidate.', 'additionalProperties': True}}}, 'additionalProperties': True}
list_gmail_accounts
List Gmail Accounts
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). Share tokens cannot call. ($0.05; API key required)
Solo lectura
Esquema de entrada
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['accounts', 'count', 'connect_url'], 'properties': {'count': {'type': 'number'}, 'accounts': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'connect_url': {'type': 'string'}}, 'additionalProperties': True}
log_event
Log Event (calendar write)
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 + event_date (YYYY-MM-DD, YYYY-MM, or YYYY; alias date). Soft dates preserve date_precision. 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)
Esquema de entrada
{'type': 'object', 'required': ['title', 'event_date'], 'properties': {'city': {'type': 'string', 'description': 'Structured city (composed into location if location omitted)'}, 'date': {'type': 'string', 'description': 'Alias for event_date.'}, 'time': {'type': 'string', 'description': 'Alias for event_time.'}, 'with': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Alias for people.'}, 'notes': {'type': 'string', 'description': 'Alias for description.'}, 'title': {'type': 'string', 'description': 'Event title (required).'}, 'amount': {'type': 'number', 'description': 'If set, also writes a /money transaction (dual-write). Prefer log_transaction / import_venmo_gmail for cashflow-first digs.'}, 'people': {'type': 'array', 'items': {'type': 'string'}, 'description': 'People names or person UUIDs to tag (event_people role=with).'}, 'source': {'type': 'string', 'description': 'With amount: venmo/zelle/…'}, 'country': {'type': 'string', 'description': 'Structured country'}, 'category': {'type': 'string', 'description': 'e.g. sleep, funeral, family, work, travel. Stored as events.category and event_type.'}, 'currency': {'type': 'string'}, 'end_date': {'type': 'string', 'description': 'Optional end date YYYY-MM-DD (multi-day, or a night that ends the next day).'}, 'end_time': {'type': 'string', 'description': 'Optional end time (same formats as event_time). Works without event_time, e.g. a wake time alone.'}, 'location': {'type': 'string', 'description': 'Free-text place. Or pass city + country.'}, 'timezone': {'type': 'string', 'description': 'IANA timezone for wall-clock display (e.g. America/New_York).'}, 'direction': {'enum': ['from', 'to'], 'type': 'string', 'description': 'With amount: from=received, to=sent'}, 'image_url': {'type': 'string', 'description': 'Optional cover image URL for Explore + /e share cards.'}, 'person_id': {'type': 'string', 'description': 'With amount: CRM person UUID'}, 'event_date': {'type': 'string', 'description': 'Start date YYYY-MM-DD, YYYY-MM, or YYYY (required). Alias: date.'}, 'event_time': {'type': 'string', 'description': 'Optional start time: 8pm, 20:00, or 20:00:00. Alias: time. Leave it out when nobody said it.'}, 'event_type': {'type': 'string', 'description': 'Optional event kind (e.g. todo, goal, work). Worked out from category when omitted.'}, 'person_ids': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Owned person UUIDs to tag (user-scoped).'}, 'request_id': {'type': 'string', 'description': 'Alias for idempotency_key (preferred by some clients).'}, 'scoreboard': {'type': 'object', 'properties': {'owner': {'type': 'string'}, 'state': {'enum': ['not_started', 'on_track', 'at_risk', 'blocked', 'done'], 'type': 'string'}, 'metric': {'type': 'string', 'description': 'Progress readout, e.g. 2/5'}, 'blocker': {'type': 'string'}, 'evidence': {'type': 'string'}, 'next_step': {'type': 'string'}, 'next_review': {'type': 'string', 'description': 'YYYY-MM-DD'}, 'last_verified': {'type': 'string', 'description': 'YYYY-MM-DD'}}, 'description': 'Operating 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.', 'additionalProperties': False}, 'share_with': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Dayze profile handles to add as collaborators via shared_events (e.g. ["boof"]). Leading @ stripped.'}, 'visibility': {'enum': ['private', 'friends', 'public'], 'type': 'string', 'default': 'private', 'description': 'Calendar visibility. public → appears on /explore and gets share_url https://dayze.com/e/{id}. Default private.'}, 'description': {'type': 'string', 'description': 'Notes about the event. Alias: notes.'}, 'external_id': {'type': 'string', 'description': 'With amount: idempotency key'}, 'person_name': {'type': 'string', 'description': 'One person to tag, by name.'}, 'external_url': {'type': 'string'}, 'people_names': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Alias for people.'}, 'date_precision': {'enum': ['day', 'month', 'year', 'approx'], 'type': 'string', 'description': 'Soft date precision stored in metadata. YYYY/YYYY-MM dates default to year/month.'}, 'idempotency_key': {'type': 'string', 'description': 'Optional 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_id': {'type': 'string', 'description': 'Gmail message id the event came from (kept in metadata).'}, 'reminder_enabled': {'type': 'boolean', 'description': 'Timed events default to a push reminder when omitted. Set false only for an explicit opt-out; all-day events stay off.'}, 'mirror_transaction': {'type': 'boolean', 'description': 'Default true when amount is set; set false to keep calendar-only'}, 'reminder_minutes_before': {'type': 'number', 'description': 'Push lead time. Uses the profile reminder_timing when omitted (fallback 30 minutes).'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['event', 'people_tagged', 'unresolved_people', 'life_state_rebuilt'], 'properties': {'event': {'type': 'object', 'description': 'A Dayze calendar event record.', 'additionalProperties': True}, 'people_tagged': {'type': 'array', 'items': {'type': 'object', 'description': 'A Dayze person or contact record.', 'additionalProperties': True}}, 'unresolved_people': {'type': 'array', 'items': {'type': 'string'}}, 'life_state_rebuilt': {'type': 'boolean'}}, 'additionalProperties': False}
log_expense
Log Expense
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)
Esquema de entrada
{'type': 'object', 'required': ['amount'], 'properties': {'date': {'type': 'string'}, 'tags': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Optional tags. Prefer project: / ext: / rail: grammar.'}, 'notes': {'type': 'string', 'description': 'Free text about the payment. Alias: description.'}, 'amount': {'type': 'number'}, 'source': {'type': 'string', 'description': 'Payment rail or app: venmo, zelle, cashapp, card, cash, … Alias: payment_method.'}, 'project': {'type': 'string', 'description': 'Venture/project label → stored as project:{slug} tag (e.g. Max Soko poker venture)'}, 'category': {'type': 'string', 'description': '"IOU repayment" = paying a contact back; "IOU lend" = lending a contact cash (both need person_id).'}, 'currency': {'type': 'string'}, 'merchant': {'type': 'string', 'description': 'Payee name (defaults when omitted)'}, 'person_id': {'type': 'string', 'description': 'The contact paid (needed for "IOU repayment" / "IOU lend").'}, 'cash_moved': {'type': 'boolean', 'description': '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).'}, 'request_id': {'type': 'string', 'description': 'Client idempotency key (retries return original result).'}, 'description': {'type': 'string', 'description': 'Alias for notes.'}, 'external_id': {'type': 'string', 'description': "The provider's id for this payment; dedupes imports. Without a request_id it is required."}, 'person_name': {'type': 'string', 'description': 'The contact by name, when there is no person_id (IOU categories need one or the other).'}, 'payment_method': {'type': 'string', 'description': 'Alias for source.'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'expense': {'type': 'object', 'description': 'Expense/income transaction row.', 'additionalProperties': True}, 'message': {'type': ['string', 'null']}, 'expense_id': {'type': 'string'}}, 'additionalProperties': True}
log_favorite_song
Log Favorite Song (music write)
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. Requires API key or OAuth with scope context. Share tokens cannot write. ($0.10; API key required)
Esquema de entrada
{'type': 'object', 'properties': {'url': {'type': 'string', 'description': 'Alias for source_url'}, 'title': {'type': 'string', 'description': 'Track title (required unless track blob parses)'}, 'track': {'type': 'string', 'description': 'Optional "Artist - Title (year remaster)" blob'}, 'artist': {'type': 'string', 'description': 'Artist name (required unless track blob parses)'}, 'year_note': {'type': 'string', 'description': 'Optional year or remaster note'}, 'request_id': {'type': 'string', 'description': 'Client idempotency key (retries return original result).'}, 'source_url': {'type': 'string', 'description': 'Optional https link'}, 'remaster_note': {'type': 'string', 'description': 'Alias for year_note'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['track_id', 'track', 'created', 'message'], 'properties': {'track': {'type': 'object', 'description': 'Saved favorite-track record.', 'additionalProperties': True}, 'created': {'type': 'boolean', 'description': 'True when a new favorite was created.'}, 'message': {'type': 'string'}, 'track_id': {'type': 'string'}}, 'additionalProperties': False}
log_food
Log Food (diary write)
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)
Esquema de entrada
{'type': 'object', 'required': ['what'], 'properties': {'kind': {'enum': ['meal', 'snack', 'drink'], 'type': 'string'}, 'what': {'type': 'string', 'description': 'What they ate or drank (required). Example: Mee Pok'}, 'with': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Companion names, aliases, ids, or group tokens. "my parents" / Mum / Dad resolve via aliases; "family" expands to CRM rows with family relationship labels'}, 'notes': {'type': 'string'}, 'place': {'type': 'string', 'description': 'Venue or location'}, 'amount': {'type': 'number', 'description': 'Price if mentioned'}, 'paid_by': {'type': 'string', 'description': 'Who paid (name or alias)'}, 'calories': {'type': 'number', 'maximum': 10000, 'minimum': 0, 'description': 'Kilocalories explicitly stated by the user; overrides the automatic heuristic and is stored with user provenance'}, 'currency': {'type': 'string', 'description': 'ISO currency, e.g. SGD'}, 'merchant': {'type': 'string', 'description': 'Restaurant, stall, or shop'}, 'dish_items': {'type': 'array', 'items': {'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string'}, 'price': {'type': 'number', 'minimum': 0}, 'rating': {'type': 'number', 'maximum': 5, 'minimum': 1}}, 'additionalProperties': False}, 'description': 'Ordered dishes in this entry. Each requires name; price and rating are optional.'}, 'person_ids': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Owned person UUIDs to tag (user-scoped)'}, 'request_id': {'type': 'string', 'description': 'Client idempotency key (retries return original result).'}, 'consumed_at': {'type': 'string', 'description': 'ISO instant; wins over meal_period'}, 'meal_period': {'type': 'string', 'description': 'Spoken period when consumed_at is omitted, e.g. "late lunch"'}, 'people_names': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Alias for with'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['food_id', 'event_id', 'people_tagged', 'unresolved_people', 'food_log', 'message', 'life_state_rebuilt'], 'properties': {'food_id': {'type': 'string'}, 'message': {'type': 'string'}, 'event_id': {'type': ['string', 'null']}, 'food_log': {'type': 'object', 'description': 'Saved Food Diary row.', 'additionalProperties': True}, 'people_tagged': {'type': 'array', 'items': {'type': 'object', 'description': 'A Dayze person or contact record.', 'additionalProperties': True}}, 'unresolved_people': {'type': 'array', 'items': {'type': 'string'}}, 'life_state_rebuilt': {'type': 'boolean'}}, 'additionalProperties': False}
log_income
Log Income
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)
Esquema de entrada
{'type': 'object', 'required': ['amount'], 'properties': {'date': {'type': 'string'}, 'tags': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Optional tags. Prefer project: / ext: / rail: grammar.'}, 'notes': {'type': 'string', 'description': 'Free text about the payment. Alias: description.'}, 'amount': {'type': 'number'}, 'source': {'type': 'string'}, 'project': {'type': 'string', 'description': 'Venture/project label → stored as project:{slug} tag (e.g. Max Soko poker venture)'}, 'category': {'type': 'string', 'description': 'e.g. Salary, Gift, Refund. "IOU repayment" and "IOU lend" need person_id.'}, 'currency': {'type': 'string'}, 'merchant': {'type': 'string'}, 'person_id': {'type': 'string'}, 'cash_moved': {'type': 'boolean', 'description': '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).'}, 'request_id': {'type': 'string', 'description': 'Client idempotency key (retries return original result).'}, 'description': {'type': 'string', 'description': 'Alias for notes.'}, 'external_id': {'type': 'string'}, 'person_name': {'type': 'string', 'description': 'The contact by name, when there is no person_id (IOU categories need one or the other).'}, 'payment_method': {'type': 'string'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}, 'not_iou_repayment': {'type': 'boolean', 'description': 'true only when income from a contact with an open IOU is unrelated to it.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'type': {'type': 'string'}, 'message': {'type': ['string', 'null']}, 'event_id': {'type': ['string', 'null']}, 'direction': {'type': 'string'}, 'duplicate': {'type': 'boolean'}, 'expense_id': {'type': 'string'}, 'transaction': {'type': 'object', 'description': 'Expense/income transaction row.', 'additionalProperties': True}, 'transaction_id': {'type': 'string'}}, 'additionalProperties': True}
log_interaction
Log Interaction
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)
Esquema de entrada
{'type': 'object', 'properties': {'kind': {'enum': ['message', 'call', 'meeting', 'note', 'check_in', 'thought_of'], 'type': 'string', 'description': 'Default message.'}, 'summary': {'type': 'string', 'description': 'One line (max 280) in your own words. Never the email body, subject or sender.'}, 'reply_id': {'type': 'string', 'description': 'A Pending Reply (get_pending_replies) this closes as sent.'}, 'person_id': {'type': 'string', 'description': 'An owned contact id.'}, 'request_id': {'type': 'string', 'description': 'Client idempotency key (retries return original result).'}, 'occurred_at': {'type': 'string', 'description': 'When it happened (ISO date-time). Default now.'}, 'person_name': {'type': 'string', 'description': 'The contact as the user said it ("Vadim"); linked only on one match.'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['interaction', 'created', 'reply', 'reply_resolved', 'message', 'life_state_rebuilt'], 'properties': {'reply': {'type': ['object', 'null'], 'required': ['reply_id', 'person_name', 'person_id', 'channel', 'category', 'summary', 'draft', 'status', 'state', 'due', 'received_at', 'source'], 'properties': {'due': {'type': 'boolean', 'description': 'Owed now: pending, or snoozed with snooze_until passed. False while a snooze runs, and when sent or dismissed.'}, 'draft': {'type': ['string', 'null'], 'description': 'The reply text saved for later.'}, 'state': {'type': 'string', 'description': 'unsent (pending or snoozed), sent (the owner replied) or dismissed'}, 'source': {'type': ['object', 'null'], 'properties': {'kind': {'type': 'string', 'description': 'gmail, email or other'}, 'thread_id': {'type': ['string', 'null']}, 'message_id': {'type': ['string', 'null']}}, 'description': 'The email it answers, as ids only; null when none was saved.', 'additionalProperties': False}, 'status': {'type': 'string', 'description': 'pending, snoozed, responded or dismissed'}, 'channel': {'type': 'string'}, 'summary': {'type': ['string', 'null']}, 'category': {'type': 'string', 'description': 'personal or work'}, 'reply_id': {'type': 'string'}, 'person_id': {'type': ['string', 'null'], 'description': 'Linked contact id; null when the reply is unlinked.'}, 'created_at': {'type': ['string', 'null']}, 'updated_at': {'type': ['string', 'null']}, 'approved_at': {'type': ['string', 'null'], 'description': 'PHI-427: when the owner approved the draft and opened it in Gmail, or null. Dayze never sends; the Gmail sync closes the reply when the email goes out.'}, 'person_name': {'type': 'string'}, 'received_at': {'type': 'string'}, 'responded_at': {'type': ['string', 'null']}, 'snooze_until': {'type': ['string', 'null']}}, 'description': 'One reply the user owes (Inbox → Pending Replies). Dayze never sends it.', 'additionalProperties': False}, 'created': {'type': 'boolean', 'description': "False when it was already stored (a retry, or the reply's write-back)."}, 'message': {'type': 'string'}, 'interaction': {'type': 'object', 'required': ['interaction_id', 'person_id', 'person_name', 'kind', 'summary', 'occurred_at', 'source', 'visibility'], 'properties': {'kind': {'type': 'string', 'description': 'message, call, meeting, note, check_in or thought_of'}, 'source': {'type': 'string', 'description': 'mcp, or pending_reply when it closes a reply'}, 'summary': {'type': ['string', 'null']}, 'person_id': {'type': 'string'}, 'visibility': {'type': 'string', 'description': 'Always private.'}, 'occurred_at': {'type': 'string'}, 'person_name': {'type': 'string'}, 'interaction_id': {'type': 'string'}}, 'description': "The interaction in the contact's history (private to the owner).", 'additionalProperties': False}, 'reply_resolved': {'type': 'boolean', 'description': 'True when this call marked the reply sent.'}, 'life_state_rebuilt': {'type': 'boolean'}}, 'additionalProperties': False}
log_place_visit
Log Place Visit
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)
Esquema de entrada
{'type': 'object', 'properties': {'city': {'type': 'string'}, 'date': {'type': 'string', 'description': 'Alias for arrived_at'}, 'name': {'type': 'string', 'description': 'Alias for place'}, 'place': {'type': 'string'}, 'source': {'type': 'string'}, 'address': {'type': 'string'}, 'country': {'type': 'string'}, 'place_id': {'type': 'string'}, 'arrived_at': {'type': 'string', 'description': 'ISO or YYYY-MM-DD'}, 'confidence': {'type': 'number'}, 'request_id': {'type': 'string', 'description': 'Client idempotency key (retries return original result).'}, 'departed_at': {'type': 'string'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}, 'evidence_event_id': {'type': 'string'}, 'evidence_expense_id': {'type': 'string'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'place': {'type': 'object', 'description': 'Canonical place record.', 'additionalProperties': True}, 'visit': {'type': 'object', 'description': 'Normalized place visit. visit_id (= id) is the place_visits row id delete_place_visit takes; null on event/GPS evidence rows.', 'additionalProperties': True}, 'message': {'type': ['string', 'null']}, 'place_id': {'type': 'string'}, 'duplicate': {'type': 'boolean'}, 'created_place': {'type': 'boolean'}}, 'additionalProperties': True}
log_sleep
Log Sleep
Sleep: log overnight or nap. Cross-midnight OK (e.g. 14:00→03:00 = 13h / 780m). ($0.10; API key required)
Esquema de entrada
{'type': 'object', 'required': ['started_at', 'ended_at'], 'properties': {'notes': {'type': 'string'}, 'source': {'type': 'string'}, 'quality': {'type': 'number'}, 'ended_at': {'type': 'string', 'description': 'ISO end'}, 'timezone': {'type': 'string'}, 'request_id': {'type': 'string', 'description': 'Client idempotency key (retries return original result).'}, 'sleep_type': {'enum': ['overnight', 'nap', 'unknown'], 'type': 'string'}, 'started_at': {'type': 'string', 'description': 'ISO start'}, 'timezone_end': {'type': 'string'}, 'timezone_start': {'type': 'string'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'ok': {'type': 'boolean'}, 'sleep': {'type': 'object', 'additionalProperties': True}, 'message': {'type': ['string', 'null']}}, 'additionalProperties': True}
log_transaction
Log Transaction
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)
Esquema de entrada
{'type': 'object', 'required': ['amount', 'direction'], 'properties': {'date': {'type': 'string'}, 'tags': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Optional tags. Prefer project: / ext: / rail: grammar.'}, 'type': {'enum': ['income', 'expense', 'transfer'], 'type': 'string'}, 'notes': {'type': 'string', 'description': 'Free text about the payment. Alias: description.'}, 'amount': {'type': 'number'}, 'source': {'type': 'string'}, 'project': {'type': 'string', 'description': 'Venture/project label → stored as project:{slug} tag (e.g. Max Soko poker venture)'}, 'category': {'type': 'string', 'description': '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).'}, 'currency': {'type': 'string'}, 'merchant': {'type': 'string'}, 'direction': {'enum': ['from', 'to'], 'type': 'string'}, 'person_id': {'type': 'string'}, 'account_id': {'type': 'string', 'description': 'Stable provider account identity for imported payments.'}, 'cash_moved': {'type': 'boolean', 'description': '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).'}, 'message_id': {'type': 'string'}, 'request_id': {'type': 'string', 'description': 'Client idempotency key (retries return original result).'}, 'description': {'type': 'string', 'description': 'Alias for notes.'}, 'external_id': {'type': 'string'}, 'person_name': {'type': 'string', 'description': 'The contact by name, when there is no person_id (IOU categories need one or the other).'}, 'mirror_event': {'type': 'boolean', 'description': 'Also insert optional Money · calendar event (default false)'}, 'payment_method': {'type': 'string'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}, 'extractor_version': {'type': 'string'}, 'not_iou_repayment': {'type': 'boolean', 'description': 'true only when income from a contact with an open IOU is unrelated to it.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'type': {'type': 'string'}, 'message': {'type': ['string', 'null']}, 'event_id': {'type': ['string', 'null']}, 'direction': {'type': 'string'}, 'duplicate': {'type': 'boolean'}, 'expense_id': {'type': 'string'}, 'transaction': {'type': 'object', 'description': 'Expense/income transaction row.', 'additionalProperties': True}, 'transaction_id': {'type': 'string'}}, 'additionalProperties': True}
log_travel
Log Travel
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)
Esquema de entrada
{'type': 'object', 'required': ['city'], 'properties': {'city': {'type': 'string'}, 'date': {'type': 'string', 'description': 'Alias for start_date'}, 'kind': {'enum': ['trip', 'residence', 'soft_pin'], 'type': 'string'}, 'title': {'type': 'string'}, 'country': {'type': 'string'}, 'end_date': {'type': 'string'}, 'evidence': {'type': 'string', 'description': 'Source note (Gmail id, address, etc.)'}, 'confidence': {'enum': ['confirmed', 'likely', 'possible'], 'type': 'string'}, 'request_id': {'type': 'string', 'description': 'Client idempotency key (retries return original result).'}, 'start_date': {'type': 'string', 'description': 'YYYY-MM-DD'}, 'mirror_event': {'type': 'boolean', 'description': 'Also insert category=travel calendar event (default true)'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'kind': {'type': 'string'}, 'note': {'type': ['string', 'null']}, 'trip': {'type': 'object', 'additionalProperties': True}, 'message': {'type': ['string', 'null']}, 'event_id': {'type': ['string', 'null']}, 'confidence': {'type': 'string'}}, 'additionalProperties': True}
merge_people
Merge People
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)
Destructivo
Esquema de entrada
{'type': 'object', 'required': ['primary_person_id', 'duplicate_person_ids', 'preview_id', 'restore_window_acknowledged'], 'properties': {'preview_id': {'type': 'string', 'description': 'Durable preview_id returned by merge_people_preview; review the 30-day restore window before applying.'}, 'request_id': {'type': 'string', 'description': 'Client idempotency key (retries return original result).'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}, 'primary_person_id': {'type': 'string'}, 'duplicate_person_ids': {'type': 'array', 'items': {'type': 'string'}}, 'restore_window_acknowledged': {'type': 'boolean', 'description': 'Must be true — confirms the 30-day restore window was reviewed before apply.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'person': {'type': 'object', 'description': 'CRM person record.', 'additionalProperties': True}, 'message': {'type': ['string', 'null']}, 'restore_id': {'type': 'string'}, 'reversible': {'type': 'boolean'}, 'merged_person_ids': {'type': 'array', 'items': {'type': 'string'}}, 'restore_expires_at': {'type': 'string'}}, 'additionalProperties': True}
merge_people_preview
Merge People Preview
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)
Esquema de entrada
{'type': 'object', 'required': ['primary_person_id', 'duplicate_person_ids'], 'properties': {'request_id': {'type': 'string', 'description': 'Client idempotency key (retries return original result).'}, 'field_choices': {'type': 'object', 'additionalProperties': True}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}, 'primary_person_id': {'type': 'string'}, 'duplicate_person_ids': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['primary_person_id', 'safe_to_merge'], 'properties': {'manifest': {'type': 'object', 'additionalProperties': True}, 'warnings': {'type': 'array', 'items': {'type': 'string'}}, 'preview_id': {'type': 'string'}, 'reversible': {'type': 'boolean'}, 'safe_to_merge': {'type': 'boolean'}, 'resulting_name': {'type': ['string', 'null']}, 'field_conflicts': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'photos_preserved': {'type': 'number'}, 'primary_person_id': {'type': 'string'}, 'resulting_aliases': {'type': 'array', 'items': {'type': 'string'}}, 'restore_window_days': {'type': 'number'}, 'graph_edges_preserved': {'type': 'number'}, 'interactions_preserved': {'type': 'number'}, 'transactions_preserved': {'type': 'number'}}, 'additionalProperties': True}
normalize_people_apply
Normalize People Apply
Apply a normalize_people_preview by preview_id. ($0.10; API key required)
Destructivo
Esquema de entrada
{'type': 'object', 'required': ['preview_id', 'candidate_hash', 'request_id'], 'properties': {'preview_id': {'type': 'string'}, 'request_id': {'type': 'string'}, 'candidate_hash': {'type': 'string'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'applied': {'type': 'number'}, 'message': {'type': ['string', 'null']}, 'change_id': {'type': ['string', 'null']}}, 'additionalProperties': True}
normalize_people_preview
Normalize People Preview
Preview whitespace/phone/handle normalization changes (no title-case of stylized names). ($0.05; API key required)
Esquema de entrada
{'type': 'object', 'properties': {'rules': {'type': 'array', 'items': {'type': 'string'}}, 'request_id': {'type': 'string', 'description': 'Client idempotency key (retries return original result).'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['preview_id', 'changes', 'count'], 'properties': {'count': {'type': 'number'}, 'changes': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'preview_id': {'type': 'string'}}, 'additionalProperties': True}
notable_pack
Notable Knowledge Pack
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)
Solo lectura Acceso externo
Esquema de entrada
{'type': 'object', 'required': ['slug'], 'properties': {'date': {'type': 'string', 'description': 'YYYY-MM-DD target date'}, 'slug': {'type': 'string', 'description': 'Person slug, e.g. albert-einstein'}, 'peers': {'type': 'number', 'default': 12}, 'similar': {'type': 'number', 'default': 8}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'profile': {'type': 'object', 'description': 'Public notable-person profile.', 'additionalProperties': True}, 'timeline': {'type': 'array', 'items': {'type': 'object', 'description': 'Timeline item with a day number.', 'additionalProperties': True}}, 'life_in_days': {'type': 'object', 'description': 'Age and current day-number calculations.', 'additionalProperties': True}, 'birthday_peers': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'similar_people': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}}, 'additionalProperties': False}
notable_pack_premium
Premium Notable Pack
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)
Solo lectura Acceso externo
Esquema de entrada
{'type': 'object', 'required': ['slug'], 'properties': {'date': {'type': 'string'}, 'slug': {'type': 'string', 'description': 'Person slug, e.g. elon-musk'}, 'peers': {'type': 'number', 'default': 20}, 'similar': {'type': 'number', 'default': 12}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'profile': {'type': 'object', 'description': 'Quality-gated public notable-person profile.', 'additionalProperties': True}, 'quality': {'type': 'object', 'description': 'Pack quality signals.', 'additionalProperties': True}, 'timeline': {'type': 'array', 'items': {'type': 'object', 'description': 'Timeline item with a day number.', 'additionalProperties': True}}, 'life_in_days': {'type': 'object', 'description': 'Age and current day-number calculations.', 'additionalProperties': True}, 'birthday_peers': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'similar_people': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}}, 'additionalProperties': False}
notable_profile
Notable Person Profile
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)
Solo lectura Acceso externo
Esquema de entrada
{'type': 'object', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': 'Person slug, e.g. albert-einstein'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['slug', 'name', 'profile_url'], 'properties': {'bio': {'type': ['string', 'null']}, 'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'about': {'type': ['string', 'null']}, 'handle': {'type': ['string', 'null']}, 'sources': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'timeline': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'image_url': {'type': ['string', 'null']}, 'birth_date': {'type': ['string', 'null']}, 'death_date': {'type': ['string', 'null']}, 'occupation': {'type': ['string', 'null']}, 'profile_url': {'type': 'string'}}, 'additionalProperties': True}
notable_search
Search Notable People
Search the public Dayze notable-people catalog by name, occupation, or slug. Use when you need to find a person before fetching a pack. Example slug: albert-einstein. ($0.01)
Solo lectura Acceso externo
Esquema de entrada
{'type': 'object', 'anyOf': [{'required': ['q']}, {'required': ['query']}], 'properties': {'q': {'type': 'string', 'description': 'Primary search query.'}, 'limit': {'type': 'number', 'default': 8, 'description': 'Max results 1–20'}, 'query': {'type': 'string', 'description': 'Alias for q.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['results', 'total'], 'properties': {'total': {'type': 'number', 'description': 'Number of matches returned.'}, 'results': {'type': 'array', 'items': {'type': 'object', 'description': 'A matching public notable-person profile.', 'additionalProperties': True}}}, 'additionalProperties': False}
preview_destructive_change
Preview Destructive Change
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 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)
Esquema de entrada
{'type': 'object', 'required': ['tool', 'arguments'], 'properties': {'tool': {'enum': ['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'], 'type': 'string'}, 'arguments': {'type': 'object', 'description': 'The arguments you would pass to that tool (e.g. { food_id }).', 'additionalProperties': True}, 'request_id': {'type': 'string', 'description': 'Client idempotency key (retries return original result).'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['preview_id', 'tool', 'restore_window_days', 'reversible'], 'properties': {'tool': {'type': 'string'}, 'summary': {'type': 'object', 'additionalProperties': True}, 'next_step': {'type': 'string'}, 'target_id': {'type': ['string', 'null']}, 'expires_at': {'type': 'string'}, 'operations': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'preview_id': {'type': ['string', 'null']}, 'reversible': {'type': 'boolean'}, 'nothing_to_change': {'type': 'boolean'}, 'restore_window_days': {'type': 'number'}}, 'additionalProperties': True}
propose_life_update
Propose Life Update
Propose assertion create/correct without committing (flagged; off by default). ($0.10; API key required)
Esquema de entrada
{'type': 'object', 'properties': {'value': {'type': 'object', 'additionalProperties': True}, 'client_id': {'type': 'string'}, 'people_id': {'type': 'string'}, 'person_id': {'type': 'string'}, 'predicate': {'type': 'string'}, 'operations': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'request_id': {'type': 'string'}, 'source_text': {'type': 'string'}, 'idempotency_key': {'type': 'string'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'enabled': {'type': 'boolean'}, 'message': {'type': ['string', 'null']}, 'proposal_id': {'type': 'string'}, 'payload_hash': {'type': 'string'}}, 'additionalProperties': True}
read_gmail_attachment
Read Gmail Attachment (read-only)
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. Share tokens cannot call. ($0.10; API key required)
Solo lectura
Esquema de entrada
{'type': 'object', 'required': ['message_id', 'attachment_id'], 'properties': {'email': {'type': 'string'}, 'account': {'type': 'string'}, 'message_id': {'type': 'string'}, 'attachment_id': {'type': 'string'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['message_id', 'attachment'], 'properties': {'attachment': {'type': 'object', 'required': ['attachment_id', 'filename', 'mime_type', 'size', 'text', 'truncated', 'binary', 'note'], 'properties': {'note': {'type': ['string', 'null']}, 'size': {'type': 'number'}, 'text': {'type': ['string', 'null']}, 'binary': {'type': 'boolean'}, 'filename': {'type': 'string'}, 'mime_type': {'type': 'string'}, 'truncated': {'type': 'boolean'}, 'attachment_id': {'type': 'string'}}, 'additionalProperties': False}, 'message_id': {'type': 'string'}}, 'additionalProperties': False}
read_gmail_message
Read Gmail Message (read-only)
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. Share tokens cannot call. ($0.10; API key required)
Solo lectura
Esquema de entrada
{'type': 'object', 'required': ['message_id'], 'properties': {'id': {'type': 'string', 'description': 'Alias for message_id'}, 'email': {'type': 'string', 'description': 'Alias for account'}, 'account': {'type': 'string', 'description': 'Mailbox selector (email or connection id)'}, 'message_id': {'type': 'string', 'description': 'Gmail message id from search_gmail'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['message'], 'properties': {'message': {'type': 'object', 'required': ['id', 'subject', 'from', 'date', 'date_local', 'time_zone', 'snippet', 'body', 'body_truncated', 'attachments'], 'properties': {'id': {'type': 'string'}, 'body': {'type': 'string'}, 'date': {'type': 'string'}, 'from': {'type': 'string'}, 'snippet': {'type': 'string'}, 'subject': {'type': 'string'}, 'time_zone': {'type': 'string'}, 'date_local': {'type': 'string'}, 'attachments': {'type': 'array', 'items': {'type': 'object', 'required': ['attachment_id', 'filename', 'mime_type', 'size'], 'properties': {'size': {'type': 'number'}, 'filename': {'type': 'string'}, 'mime_type': {'type': 'string'}, 'attachment_id': {'type': 'string'}}, 'additionalProperties': False}}, 'body_truncated': {'type': 'boolean'}}, 'additionalProperties': False}}, 'additionalProperties': False}
record_purchase
Record Purchase
Atomic expense + optional inventory item creation. ($0.10; API key required)
Esquema de entrada
{'type': 'object', 'required': ['name', 'amount'], 'properties': {'date': {'type': 'string', 'description': 'YYYY-MM-DD; default today.'}, 'name': {'type': 'string', 'description': 'What was bought (also the Inventory item name). Alias: merchant.'}, 'amount': {'type': 'number'}, 'category': {'type': 'string', 'description': 'Expense category (default purchase); also the item category when inventory_details has none.'}, 'currency': {'type': 'string', 'description': 'ISO 4217; default USD.'}, 'merchant': {'type': 'string', 'description': 'Where it was bought; stands in for name when name is missing.'}, 'request_id': {'type': 'string', 'description': 'Client idempotency key (retries return original result).'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}, 'create_inventory': {'type': 'boolean', 'description': 'false = the expense only, no Inventory item (default true).'}, 'inventory_details': {'type': 'object', 'properties': {'brand': {'type': 'string'}, 'model': {'type': 'string'}, 'notes': {'type': 'string'}, 'category': {'type': 'string'}, 'condition': {'enum': ['new', 'excellent', 'good', 'worn', 'needs_repair', 'retired'], 'type': 'string'}}, 'description': 'The Inventory item: category, brand, model, condition, notes.', 'additionalProperties': False}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'message': {'type': ['string', 'null']}, 'expense_id': {'type': ['string', 'null']}, 'transaction': {'type': 'object', 'description': 'Expense/income transaction row.', 'additionalProperties': True}, 'inventory_id': {'type': ['string', 'null']}}, 'additionalProperties': True}
record_sale
Record Sale
Mark inventory sold + record sale proceeds with gain/loss. ($0.10; API key required)
Esquema de entrada
{'type': 'object', 'required': ['inventory_id', 'amount'], 'properties': {'date': {'type': 'string', 'description': 'Alias for sold_at.'}, 'notes': {'type': 'string'}, 'amount': {'type': 'number', 'description': 'Sale proceeds.'}, 'sold_at': {'type': 'string', 'description': 'YYYY-MM-DD; default today. Alias: date.'}, 'currency': {'type': 'string', 'description': 'ISO 4217; default USD.'}, 'request_id': {'type': 'string', 'description': 'Client idempotency key (retries return original result).'}, 'marketplace': {'type': 'string', 'description': 'Where it sold (the income row\'s merchant; default "sale").'}, 'inventory_id': {'type': 'string', 'description': 'The item sold (get_inventory / search_inventory).'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'message': {'type': ['string', 'null']}, 'expense_id': {'type': ['string', 'null']}, 'inventory_id': {'type': 'string'}, 'realized_gain_loss': {'type': ['string', 'null']}}, 'additionalProperties': True}
remove_person_alias
Remove Person Alias
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)
Destructivo
Esquema de entrada
{'type': 'object', 'required': ['person_id', 'alias', 'preview_id', 'restore_window_acknowledged', 'request_id'], 'properties': {'alias': {'type': 'string'}, 'person_id': {'type': 'string'}, 'preview_id': {'type': 'string', 'description': 'preview_id returned by preview_destructive_change for this tool.'}, 'request_id': {'type': 'string', 'description': 'Required idempotency key; retries return the original receipt.'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}, 'restore_window_acknowledged': {'type': 'boolean', 'description': 'Must be true after reviewing the preview and its 30-day restore window.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'alias': {'type': 'string'}, 'message': {'type': ['string', 'null']}, 'removed': {'type': 'boolean'}, 'change_id': {'type': ['string', 'null']}, 'person_id': {'type': 'string'}, 'preview_id': {'type': 'string'}, 'restore_id': {'type': 'string', 'description': 'Pass to restore_change to undo within restore_window_days.'}, 'reversible': {'type': 'boolean'}, 'idempotent_replay': {'type': 'boolean'}, 'restore_expires_at': {'type': 'string'}, 'restore_window_days': {'type': 'number'}}, 'additionalProperties': True}
reset_tracker
Reset Streak Tracker
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)
Destructivo
Esquema de entrada
{'type': 'object', 'required': ['preview_id', 'restore_window_acknowledged', 'request_id'], 'properties': {'note': {'type': 'string', 'description': 'Optional note stored in tracking history'}, 'title': {'type': 'string', 'description': 'Alias of tracker_title'}, 'reset_at': {'type': 'string', 'description': 'ISO datetime of the reset (default now)'}, 'preview_id': {'type': 'string', 'description': 'preview_id returned by preview_destructive_change for this tool.'}, 'request_id': {'type': 'string', 'description': 'Required idempotency key; retries return the original receipt.'}, 'tracker_id': {'type': 'string', 'description': 'Event UUID of the tracker'}, 'tracker_title': {'type': 'string', 'description': 'Title match when id unknown'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}, 'restore_window_acknowledged': {'type': 'boolean', 'description': 'Must be true after reviewing the preview and its 30-day restore window.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': [], 'properties': {'ok': {'type': 'boolean'}, 'error': {'type': 'string'}, 'message': {'type': 'string'}, 'preview_id': {'type': 'string'}, 'reset_date': {'type': 'string'}, 'reset_time': {'type': 'string'}, 'restore_id': {'type': 'string', 'description': 'Pass to restore_change to undo within restore_window_days.'}, 'reversible': {'type': 'boolean'}, 'tracker_id': {'type': 'string'}, 'invalidates': {'type': 'array', 'items': {'type': 'string'}}, 'previous_days': {'type': 'number'}, 'tracker_title': {'type': ['string', 'null']}, 'idempotent_replay': {'type': 'boolean'}, 'life_state_rebuilt': {'type': 'boolean'}, 'restore_expires_at': {'type': 'string'}, 'restore_window_days': {'type': 'number'}, 'tracker_reset_count': {'type': 'number'}}, 'additionalProperties': True}
resolve_clarification
Resolve Clarification
Link a clarification surface to an existing person. ($0.10; API key required)
Esquema de entrada
{'type': 'object', 'required': ['clarification_id'], 'properties': {'person_id': {'type': 'string'}, 'request_id': {'type': 'string', 'description': 'Client idempotency key (retries return original result).'}, 'person_name': {'type': 'string'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}, 'clarification_id': {'type': 'string'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'message': {'type': ['string', 'null']}, 'resolved': {'type': 'boolean'}, 'person_id': {'type': 'string'}}, 'additionalProperties': True}
resolve_pending_reply
Resolve Pending Reply
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)
Esquema de entrada
{'type': 'object', 'properties': {'outcome': {'enum': ['sent', 'dismissed'], 'type': 'string'}, 'reply_id': {'type': 'string'}, 'person_id': {'type': 'string'}, 'request_id': {'type': 'string', 'description': 'Client idempotency key (retries return original result).'}, 'person_name': {'type': 'string'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['reply', 'resolved', 'already_resolved', 'outcome', 'message', 'life_state_rebuilt'], 'properties': {'reply': {'type': 'object', 'required': ['reply_id', 'person_name', 'person_id', 'channel', 'category', 'summary', 'draft', 'status', 'state', 'due', 'received_at', 'source'], 'properties': {'due': {'type': 'boolean', 'description': 'Owed now: pending, or snoozed with snooze_until passed. False while a snooze runs, and when sent or dismissed.'}, 'draft': {'type': ['string', 'null'], 'description': 'The reply text saved for later.'}, 'state': {'type': 'string', 'description': 'unsent (pending or snoozed), sent (the owner replied) or dismissed'}, 'source': {'type': ['object', 'null'], 'properties': {'kind': {'type': 'string', 'description': 'gmail, email or other'}, 'thread_id': {'type': ['string', 'null']}, 'message_id': {'type': ['string', 'null']}}, 'description': 'The email it answers, as ids only; null when none was saved.', 'additionalProperties': False}, 'status': {'type': 'string', 'description': 'pending, snoozed, responded or dismissed'}, 'channel': {'type': 'string'}, 'summary': {'type': ['string', 'null']}, 'category': {'type': 'string', 'description': 'personal or work'}, 'reply_id': {'type': 'string'}, 'person_id': {'type': ['string', 'null'], 'description': 'Linked contact id; null when the reply is unlinked.'}, 'created_at': {'type': ['string', 'null']}, 'updated_at': {'type': ['string', 'null']}, 'approved_at': {'type': ['string', 'null'], 'description': 'PHI-427: when the owner approved the draft and opened it in Gmail, or null. Dayze never sends; the Gmail sync closes the reply when the email goes out.'}, 'person_name': {'type': 'string'}, 'received_at': {'type': 'string'}, 'responded_at': {'type': ['string', 'null']}, 'snooze_until': {'type': ['string', 'null']}}, 'description': 'One reply the user owes (Inbox → Pending Replies). Dayze never sends it.', 'additionalProperties': False}, 'message': {'type': 'string'}, 'outcome': {'type': 'string', 'description': 'sent or dismissed'}, 'resolved': {'type': 'boolean', 'description': 'True when this call changed the reply.'}, 'interaction': {'type': ['object', 'null'], 'required': ['logged', 'reason', 'interaction_id', 'person_id', 'visibility'], 'properties': {'logged': {'type': 'boolean', 'description': 'True when this call wrote it.'}, 'reason': {'type': 'string', 'description': 'logged, unlinked, already_logged, gmail_sync_logged or storage_error'}, 'summary': {'type': ['string', 'null']}, 'person_id': {'type': ['string', 'null']}, 'visibility': {'type': 'string', 'description': "Always private: interactions are the owner's alone."}, 'occurred_at': {'type': ['string', 'null']}, 'interaction_id': {'type': ['string', 'null']}}, 'description': 'The contact-history write-back of a reply marked sent by this call; null when nothing was marked sent now.', 'additionalProperties': False}, 'already_resolved': {'type': 'boolean'}, 'life_state_rebuilt': {'type': 'boolean'}}, 'additionalProperties': False}
resolve_person
Resolve Contact
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. 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)
Solo lectura
Esquema de entrada
{'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'description': 'Nickname or display name to resolve'}, 'query': {'type': 'string', 'description': 'Alias for name'}, 'include_notes': {'type': 'boolean', 'default': False, 'description': 'Include redacted notes (default false)'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'query': {'type': 'string'}, 'person': {'type': 'object', 'additionalProperties': True}, 'account': {'type': 'object', 'required': ['handle', 'display_name', 'qa_fixture', 'note'], 'properties': {'note': {'type': 'string', 'description': 'How to disclose the account to the user.'}, 'handle': {'type': ['string', 'null'], 'description': 'Account handle, e.g. @goh.'}, 'qa_fixture': {'type': 'boolean', 'description': 'True for a known QA test account: its records are fixture data, not a real life.'}, 'display_name': {'type': ['string', 'null'], 'description': 'Account display name.'}}, 'description': 'The Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.', 'additionalProperties': False}, 'aliases': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'resolved': {'type': 'boolean'}, 'candidates': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'matched_via': {'type': ['string', 'null']}, 'inspect_note': {'type': 'string', 'description': 'How to cite: link each record with its inspect_url, never a link built from an id; which record types here have no Dayze page.'}}, 'additionalProperties': True}
resolve_place
Resolve Place
Canonicalize a venue name via place aliases and fuzzy match. ($0.10; API key required)
Solo lectura
Esquema de entrada
{'type': 'object', 'properties': {'name': {'type': 'string'}, 'place': {'type': 'string'}, 'query': {'type': 'string'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['query', 'resolved'], 'properties': {'place': {'type': ['object', 'null'], 'description': 'Canonical place record.', 'additionalProperties': True}, 'query': {'type': 'string'}, 'resolved': {'type': 'boolean'}, 'candidates': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'matched_via': {'type': ['string', 'null']}}, 'additionalProperties': True}
restore_change
Restore Change
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. Contact deletes/merges use undo_contact_change; event/expense/trip archives use restore_event/restore_expense/restore_trip. ($0.10; API key required)
Esquema de entrada
{'type': 'object', 'required': ['restore_id'], 'properties': {'request_id': {'type': 'string', 'description': 'Optional idempotency key.'}, 'restore_id': {'type': 'string', 'description': 'restore_id returned by the destructive tool.'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'tool': {'type': 'string'}, 'undone': {'type': 'boolean'}, 'message': {'type': ['string', 'null']}, 'restored': {'type': 'boolean'}, 'restore_id': {'type': 'string'}, 'linked_rows_skipped': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'operations_reverted': {'type': 'number'}, 'linked_rows_relinked': {'type': 'number'}, 'linked_rows_reinserted': {'type': 'number'}}, 'additionalProperties': True}
restore_cleanup
restore cleanup
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)
Esquema de entrada
{'type': 'object', 'required': ['restore_id', 'request_id'], 'properties': {'request_id': {'type': 'string'}, 'restore_id': {'type': 'string'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'rows': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'changed': {'type': 'boolean'}, 'expires_at': {'type': 'string'}, 'preview_id': {'type': 'string'}, 'restore_id': {'type': 'string'}, 'server_time': {'type': 'string'}, 'candidate_hash': {'type': 'string'}}, 'additionalProperties': True}
restore_event
restore event
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)
Esquema de entrada
{'type': 'object', 'required': ['restore_id', 'request_id'], 'properties': {'request_id': {'type': 'string'}, 'restore_id': {'type': 'string'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'rows': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'changed': {'type': 'boolean'}, 'expires_at': {'type': 'string'}, 'preview_id': {'type': 'string'}, 'restore_id': {'type': 'string'}, 'server_time': {'type': 'string'}, 'candidate_hash': {'type': 'string'}}, 'additionalProperties': True}
restore_expense
restore expense
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)
Esquema de entrada
{'type': 'object', 'required': ['restore_id', 'request_id'], 'properties': {'request_id': {'type': 'string'}, 'restore_id': {'type': 'string'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'rows': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'changed': {'type': 'boolean'}, 'expires_at': {'type': 'string'}, 'preview_id': {'type': 'string'}, 'restore_id': {'type': 'string'}, 'server_time': {'type': 'string'}, 'candidate_hash': {'type': 'string'}}, 'additionalProperties': True}
restore_trip
restore trip
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)
Esquema de entrada
{'type': 'object', 'required': ['restore_id', 'request_id'], 'properties': {'request_id': {'type': 'string'}, 'restore_id': {'type': 'string'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'rows': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'changed': {'type': 'boolean'}, 'expires_at': {'type': 'string'}, 'preview_id': {'type': 'string'}, 'restore_id': {'type': 'string'}, 'server_time': {'type': 'string'}, 'candidate_hash': {'type': 'string'}}, 'additionalProperties': True}
score_people_duplicates
Score People Duplicates
Score likely CRM duplicate pairs before merge_people. ($0.05; API key required)
Solo lectura
Esquema de entrada
{'type': 'object', 'properties': {'limit': {'type': 'number'}, 'person_id': {'type': 'string', 'description': 'Score against one person; omit for global scan.'}, 'min_probability': {'type': 'number'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['candidates', 'count'], 'properties': {'count': {'type': 'number'}, 'candidates': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}}, 'additionalProperties': True}
search
Semantic Life Search
Search the authenticated user life graph. Deterministic routing first: food + explicit from/to (aliases start/end) or relative dates (e.g. "what did I eat yesterday?"); timeline/current-context; money+person; who-is → resolve_person. Otherwise semantic/keyword search. Event hits include event_date and food_id when mirrored from Food Diary. Browser-history titles are excluded. Credential/secret spans are redacted. 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). Requires OAuth or a supported scoped credential. ($0.15; API key required)
Solo lectura
Esquema de entrada
{'type': 'object', 'anyOf': [{'required': ['query']}, {'required': ['q']}], 'properties': {'q': {'type': 'string', 'description': 'Alias for query.'}, 'to': {'type': 'string', 'description': 'Inclusive YYYY-MM-DD end for structured food search. Pair with from.'}, 'end': {'type': 'string', 'description': 'Alias for to.'}, 'from': {'type': 'string', 'description': 'Inclusive YYYY-MM-DD start for structured food search. Pair with to.'}, 'limit': {'type': 'number', 'default': 10, 'description': 'Max results 1–50'}, 'query': {'type': 'string', 'description': 'Primary search query.'}, 'start': {'type': 'string', 'description': 'Alias for from.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['mode', 'results'], 'properties': {'mode': {'enum': ['semantic', 'keyword', 'blended', 'structured'], 'type': 'string'}, 'intent': {'type': 'string'}, 'account': {'type': 'object', 'required': ['handle', 'display_name', 'qa_fixture', 'note'], 'properties': {'note': {'type': 'string', 'description': 'How to disclose the account to the user.'}, 'handle': {'type': ['string', 'null'], 'description': 'Account handle, e.g. @goh.'}, 'qa_fixture': {'type': 'boolean', 'description': 'True for a known QA test account: its records are fixture data, not a real life.'}, 'display_name': {'type': ['string', 'null'], 'description': 'Account display name.'}}, 'description': 'The Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.', 'additionalProperties': False}, 'results': {'type': 'array', 'items': {'type': 'object', 'required': ['source_type', 'source_id', 'title', 'content', 'similarity'], 'properties': {'title': {'type': 'string'}, 'content': {'type': 'string'}, 'food_id': {'type': 'string'}, 'photo_url': {'type': 'string', 'description': 'Meal photo on a food result, when one is attached.'}, 'source_id': {'type': 'string'}, 'event_date': {'type': 'string'}, 'similarity': {'type': 'number'}, 'inspect_url': {'type': 'string', 'description': 'PHI-434: the Dayze page for this record, when it has one.'}, 'source_type': {'type': 'string'}}, 'additionalProperties': False}}, 'inspect_note': {'type': 'string', 'description': 'How to cite: link each record with its inspect_url, never a link built from an id; which record types here have no Dayze page.'}}, 'additionalProperties': False}
search_gmail
Search Gmail (read-only)
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:<sender> 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 API key or OAuth with scope context. Share tokens cannot call this tool. ($0.10; API key required)
Solo lectura
Esquema de entrada
{'type': 'object', 'required': ['query'], 'properties': {'q': {'type': 'string', 'description': 'Alias for query'}, 'after': {'type': 'string', 'description': 'Exclusive lower bound as account-local YYYY-MM-DDTHH:mm, or an offset-aware ISO instant'}, 'email': {'type': 'string', 'description': 'Alias for account'}, 'query': {'type': 'string', 'description': 'Gmail search query, e.g. "is:unread newer_than:7d", "from:airline subject:itinerary", "receipt newer_than:30d"'}, 'before': {'type': 'string', 'description': 'Exclusive upper bound as account-local YYYY-MM-DDTHH:mm, or an offset-aware ISO instant'}, 'account': {'type': 'string', 'description': 'Mailbox email, connection id, or Google subject (from list_gmail_accounts)'}, 'max_results': {'type': 'number', 'default': 10, 'description': 'Max messages to return (default 10, max 20)'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['query', 'result_size_estimate', 'newest_first', 'messages', 'time_zone'], 'properties': {'note': {'type': 'string', 'description': 'What the ranking means for a "latest email" answer.'}, 'after': {'type': 'string'}, 'query': {'type': 'string'}, 'before': {'type': 'string'}, 'account': {'type': ['string', 'null']}, 'messages': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'subject', 'from', 'date', 'date_local', 'time_zone', 'snippet'], 'properties': {'id': {'type': 'string'}, 'date': {'type': 'string'}, 'from': {'type': 'string'}, 'snippet': {'type': 'string'}, 'subject': {'type': 'string'}, 'time_zone': {'type': 'string'}, 'date_local': {'type': 'string'}, 'sender_only': {'type': 'boolean', 'description': "From the sender-only check: the sender's mail, missing some of the topic terms."}}, 'additionalProperties': False}}, 'time_zone': {'type': 'string'}, 'newest_first': {'type': 'boolean', 'description': 'Messages are ranked newest first by received time.'}, 'sender_check': {'type': 'object', 'required': ['query', 'reason', 'window_days', 'added', 'failed'], 'properties': {'added': {'type': 'number'}, 'query': {'type': 'string'}, 'failed': {'type': 'boolean'}, 'reason': {'type': 'string'}, 'window_days': {'type': 'number'}}, 'description': 'A from: + topic search with no recent match also searched the sender alone (one extra search).', 'additionalProperties': False}, 'unavailable_count': {'type': 'number', 'description': 'Matches whose details could not be loaded; one may be newer.'}, 'result_size_estimate': {'type': ['number', 'null']}}, 'additionalProperties': False}
search_inventory
Search Inventory
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)
Solo lectura
Esquema de entrada
{'type': 'object', 'properties': {'limit': {'type': 'number', 'description': '1-200, default 50'}, 'query': {'type': 'string', 'description': 'Match name, brand, model, notes or reference number.'}, 'offset': {'type': 'number'}, 'status': {'type': 'string', 'description': 'wishlist | ordered | owned | listed_for_sale | sold | returned | lost | disposed | donated | archived'}, 'sort_by': {'enum': ['created_at', 'name', 'value'], 'type': 'string'}, 'category': {'type': 'string', 'description': 'e.g. electronics, watches, clothing'}, 'include_archived': {'type': 'boolean', 'description': 'Include archived and no-longer-owned items.'}, 'include_sensitive': {'type': 'boolean', 'description': 'API keys only: include stored identifiers. Ignored for connectors without pii:read.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['count'], 'properties': {'count': {'type': 'number'}, 'items': {'type': 'array', 'items': {'type': 'object', 'description': 'Inventory item record. With specs: spec_template, specs, state (a timestamped snapshot), state_freshness and capability_summary.', 'additionalProperties': True}}, 'query': {'type': ['string', 'null']}}, 'additionalProperties': True}
search_photos
Search Photos
Search person photos and entity assets by query/metadata. Returns inline MCP image attachments. ($0.10; API key required)
Solo lectura
Esquema de entrada
{'type': 'object', 'properties': {'to': {'type': 'string', 'description': 'Inclusive YYYY-MM-DD: photos added on or before this day (UTC).'}, 'from': {'type': 'string', 'description': 'Inclusive YYYY-MM-DD: photos added on or after this day (UTC).'}, 'limit': {'type': 'number', 'description': 'Max photos 1-50, default 20.'}, 'query': {'type': 'string'}, 'place_id': {'type': 'string'}, 'person_ids': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['count'], 'properties': {'count': {'type': 'number'}, 'query': {'type': ['string', 'null']}, 'photos': {'type': 'array', 'items': {'type': 'object', 'description': 'Photo or entity asset metadata.', 'additionalProperties': True}}}, 'additionalProperties': True}
search_transactions
Search Transactions
Keyword search over merchant/description/category, or exact tag query (project:/ext:/rail:). ($0.10; API key required)
Solo lectura
Esquema de entrada
{'type': 'object', 'properties': {'tag': {'type': 'string'}, 'limit': {'type': 'number', 'description': 'Page size 1-500, default 100.'}, 'query': {'type': 'string'}, 'cursor': {'type': 'string', 'description': 'Continue the same immutable one-hour snapshot; other filters remain frozen.'}, 'offset': {'type': 'number', 'description': 'Skip this many rows of a new snapshot (a cursor carries its own).'}, 'project': {'type': 'string'}, 'include_archived': {'type': 'boolean'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['count'], 'properties': {'count': {'type': 'number'}, 'query': {'type': 'string'}, 'account': {'type': 'object', 'required': ['handle', 'display_name', 'qa_fixture', 'note'], 'properties': {'note': {'type': 'string', 'description': 'How to disclose the account to the user.'}, 'handle': {'type': ['string', 'null'], 'description': 'Account handle, e.g. @goh.'}, 'qa_fixture': {'type': 'boolean', 'description': 'True for a known QA test account: its records are fixture data, not a real life.'}, 'display_name': {'type': ['string', 'null'], 'description': 'Account display name.'}}, 'description': 'The Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.', 'additionalProperties': False}, 'inspect_note': {'type': 'string', 'description': 'How to cite: link each record with its inspect_url, never a link built from an id; which record types here have no Dayze page.'}, 'transactions': {'type': 'array', 'items': {'type': 'object', 'description': 'Expense/income transaction row.', 'additionalProperties': True}}}, 'additionalProperties': True}
set_primary_person_name
Set Primary Person Name
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)
Esquema de entrada
{'type': 'object', 'required': ['person_id', 'name'], 'properties': {'name': {'type': 'string'}, 'person_id': {'type': 'string'}, 'request_id': {'type': 'string', 'description': 'Client idempotency key (retries return original result).'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}, 'preserve_old_name_as_alias': {'type': 'boolean'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'person': {'type': 'object', 'description': 'CRM person record.', 'additionalProperties': True}, 'message': {'type': ['string', 'null']}, 'change_id': {'type': ['string', 'null']}, 'previous_name': {'type': 'string'}}, 'additionalProperties': True}
start_people_cleanup
Start People Cleanup
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)
Esquema de entrada
{'type': 'object', 'properties': {'checks': {'type': 'array', 'items': {'type': 'string'}}, 'request_id': {'type': 'string', 'description': 'Client idempotency key (retries return original result).'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}, 'auto_merge_threshold': {'type': 'number'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'status': {'type': 'string'}, 'message': {'type': ['string', 'null']}, 'cleanup_id': {'type': 'string'}, 'auto_merged_count': {'type': 'number'}, 'items_needing_approval': {'type': 'number'}}, 'additionalProperties': True}
undo_contact_change
Undo Contact Change
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)
Destructivo
Esquema de entrada
{'type': 'object', 'required': ['change_id'], 'properties': {'change_id': {'type': 'string'}, 'request_id': {'type': 'string', 'description': 'Client idempotency key (retries return original result).'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'undone': {'type': 'boolean'}, 'message': {'type': ['string', 'null']}, 'change_id': {'type': 'string'}, 'not_restored': {'type': 'array', 'items': {'type': 'object', 'required': ['field', 'reason'], 'properties': {'field': {'type': 'string'}, 'reason': {'type': 'string'}}, 'additionalProperties': False}, 'description': 'Fields the undo left as they are, e.g. the birthday of an update_person saved before MCP 1.41.5.'}}, 'additionalProperties': True}
unlink_people
Unlink People
Preview first, 30-day undo. Remove a person↔person graph edge (by connection_id, or person_id + other_person_id). Reviewed and reversible: first call preview_destructive_change({ tool: "unlink_people", arguments: { connection_id } }), which stores the exact change without applying it. After the user confirms, call unlink_people 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)
Destructivo
Esquema de entrada
{'type': 'object', 'required': ['preview_id', 'restore_window_acknowledged', 'request_id'], 'properties': {'person_id': {'type': 'string'}, 'preview_id': {'type': 'string', 'description': 'preview_id returned by preview_destructive_change for this tool.'}, 'request_id': {'type': 'string', 'description': 'Required idempotency key; retries return the original receipt.'}, 'connection_id': {'type': 'string'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}, 'other_person_id': {'type': 'string'}, 'restore_window_acknowledged': {'type': 'boolean', 'description': 'Must be true after reviewing the preview and its 30-day restore window.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'message': {'type': ['string', 'null']}, 'unlinked': {'type': 'boolean'}, 'preview_id': {'type': 'string'}, 'restore_id': {'type': 'string', 'description': 'Pass to restore_change to undo within restore_window_days.'}, 'reversible': {'type': 'boolean'}, 'idempotent_replay': {'type': 'boolean'}, 'restore_expires_at': {'type': 'string'}, 'restore_window_days': {'type': 'number'}}, 'additionalProperties': True}
update_asset
Update Asset
Patch role, metadata, description, or parent_asset_id (e.g. mark as processed). ($0.08; API key required)
Esquema de entrada
{'type': 'object', 'required': ['asset_id'], 'properties': {'role': {'enum': ['original', 'processed', 'thumbnail', 'cover', 'document', 'receipt', 'certificate', 'photo', 'other'], 'type': 'string', 'description': 'original | cover | thumbnail | …'}, 'asset_id': {'type': 'string'}, 'filename': {'type': 'string'}, 'metadata': {'type': 'object', 'description': 'Free-form metadata, merged into the stored metadata (metadata.source becomes the asset source).'}, 'asset_type': {'type': 'string'}, 'request_id': {'type': 'string', 'description': 'Client idempotency key (retries return original result).'}, 'description': {'type': 'string'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}, 'parent_asset_id': {'type': 'string'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'asset': {'type': 'object', 'additionalProperties': True}, 'message': {'type': ['string', 'null']}, 'updated': {'type': 'boolean'}, 'asset_id': {'type': 'string'}}, 'additionalProperties': True}
update_current_location
Update Current Location
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)
Esquema de entrada
{'type': 'object', 'properties': {'city': {'type': 'string'}, 'place': {'type': 'string', 'description': 'Venue / residence name (e.g. The Madeira)'}, 'venue': {'type': 'string', 'description': 'Alias for place'}, 'address': {'type': 'string'}, 'country': {'type': 'string'}, 'check_in': {'type': 'boolean', 'description': 'Write a location_visits row when place or coordinates are set (default true in that case)'}, 'latitude': {'type': 'number'}, 'location': {'type': 'string', 'description': 'Freeform “City, Country” or “Venue, City, Country”'}, 'set_home': {'type': 'boolean', 'description': 'Also write profiles.location / home_location (default true)'}, 'longitude': {'type': 'number'}, 'request_id': {'type': 'string'}, 'idempotency_key': {'type': 'string'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'place': {'type': ['string', 'null']}, 'context': {'type': 'object', 'description': 'Fresh get_location_context after write.', 'additionalProperties': True}, 'message': {'type': 'string'}, 'updated': {'type': 'boolean'}, 'check_in': {'type': 'boolean'}, 'location': {'type': ['string', 'null']}, 'set_home': {'type': 'boolean'}, 'visit_id': {'type': ['string', 'null']}, 'current_city': {'type': ['string', 'null']}, 'current_country': {'type': ['string', 'null']}}, 'additionalProperties': True}
update_event
Update Event (calendar patch)
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)
Esquema de entrada
{'type': 'object', 'required': ['event_id'], 'properties': {'date': {'type': 'string', 'description': 'Alias for event_date.'}, 'time': {'type': 'string', 'description': 'Alias for event_time.'}, 'with': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Alias for people.'}, 'notes': {'type': 'string', 'description': 'Alias for description.'}, 'title': {'type': 'string', 'description': 'Updated title (replaces). Cannot be empty.'}, 'people': {'type': 'array', 'items': {'type': 'string'}, 'description': 'People names or person UUIDs to add (event_people role=with). Does not remove existing tags.'}, 'category': {'type': 'string', 'description': 'e.g. sleep, funeral, family, work, travel. Stored as events.category and event_type.'}, 'end_date': {'type': 'string', 'description': 'Optional end date YYYY-MM-DD (multi-day, or a night that ends the next day).'}, 'end_time': {'type': 'string', 'description': 'Optional end time (same formats as event_time).'}, 'event_id': {'type': 'string', 'description': 'UUID of a calendar event the authenticated user owns'}, 'location': {'type': 'string', 'description': 'Empty or null clears'}, 'timezone': {'type': 'string', 'description': 'IANA timezone for wall-clock display. Empty or null clears.'}, 'image_url': {'type': 'string', 'description': 'Cover image URL. Empty or null clears.'}, 'event_date': {'type': 'string', 'description': 'Start date YYYY-MM-DD, YYYY-MM, or YYYY. Alias: date.'}, 'event_time': {'type': 'string', 'description': 'Start time: 8pm, 20:00, or 20:00:00. Empty or null clears. Alias: time.'}, 'person_ids': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Owned person UUIDs to tag (user-scoped).'}, 'request_id': {'type': 'string', 'description': 'Client idempotency key (retries return original successful result).'}, 'scoreboard': {'type': 'object', 'properties': {'owner': {'type': 'string'}, 'state': {'enum': ['not_started', 'on_track', 'at_risk', 'blocked', 'done'], 'type': 'string'}, 'metric': {'type': 'string', 'description': 'Progress readout, e.g. 2/5'}, 'blocker': {'type': 'string'}, 'evidence': {'type': 'string'}, 'next_step': {'type': 'string'}, 'next_review': {'type': 'string', 'description': 'YYYY-MM-DD'}, 'last_verified': {'type': 'string', 'description': 'YYYY-MM-DD'}}, 'description': 'Operating 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.', 'additionalProperties': False}, 'visibility': {'enum': ['private', 'friends', 'public'], 'type': 'string', 'description': 'Updates both events.visibility and the enforced events.is_private flag.'}, 'description': {'type': 'string', 'description': 'Notes about the event (replaces). Empty or null clears. Alias: notes.'}, 'person_name': {'type': 'string', 'description': 'One person to tag, by name.'}, 'external_url': {'type': 'string'}, 'people_names': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Alias for people.'}, 'date_precision': {'enum': ['day', 'month', 'year', 'approx'], 'type': 'string', 'description': 'Soft date precision stored in metadata.'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['event', 'changed', 'people_tagged', 'unresolved_people', 'life_state_rebuilt'], 'properties': {'event': {'type': 'object', 'description': 'A Dayze calendar event record.', 'additionalProperties': True}, 'changed': {'type': 'object', 'description': 'Changed fields with before and after values.', 'additionalProperties': True}, 'people_tagged': {'type': 'array', 'items': {'type': 'object', 'description': 'A Dayze person or contact record.', 'additionalProperties': True}}, 'unresolved_people': {'type': 'array', 'items': {'type': 'string'}}, 'life_state_rebuilt': {'type': 'boolean'}}, 'additionalProperties': False}
update_expense
Update Expense
PATCH an expense row. ($0.10; API key required)
Esquema de entrada
{'type': 'object', 'required': ['expense_id'], 'properties': {'date': {'type': 'string', 'description': 'YYYY-MM-DD expense_date'}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'notes': {'type': 'string'}, 'amount': {'type': 'number'}, 'source': {'type': 'string', 'description': 'Alias of payment_method'}, 'project': {'type': 'string', 'description': 'Venture label → project:{slug} tag'}, 'category': {'type': 'string'}, 'currency': {'type': 'string'}, 'merchant': {'type': 'string'}, 'expense_id': {'type': 'string'}, 'request_id': {'type': 'string', 'description': 'Client idempotency key (retries return original result).'}, 'description': {'type': 'string'}, 'external_id': {'type': 'string', 'description': 'Optional; merges ext:{source}:{id} into tags'}, 'payment_method': {'type': 'string', 'description': 'e.g. venmo, cash, card'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'changed': {'type': 'object', 'additionalProperties': True}, 'expense': {'type': 'object', 'description': 'Expense/income transaction row.', 'additionalProperties': True}, 'message': {'type': ['string', 'null']}}, 'additionalProperties': True}
update_food
Update Food (diary patch)
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)
Esquema de entrada
{'type': 'object', 'required': ['food_id'], 'properties': {'food': {'type': 'string', 'description': 'Alias for what.'}, 'item': {'type': 'string', 'description': 'Alias for what.'}, 'kind': {'enum': ['meal', 'snack', 'drink'], 'type': 'string'}, 'what': {'type': 'string', 'description': 'Full updated dish/drink text (replaces, does not append). Example: Salmon Bento + hot tea'}, 'with': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Companion names, aliases, or ids to add (does not remove existing tags)'}, 'notes': {'type': 'string', 'description': 'Replaces notes. Empty or null clears'}, 'place': {'type': 'string', 'description': 'Venue or location. Empty or null clears'}, 'amount': {'type': 'number', 'description': 'Price if mentioned'}, 'dishes': {'type': 'array', 'description': 'Alias for dish_items.'}, 'people': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Alias for with'}, 'food_id': {'type': 'string', 'description': 'UUID of a food diary row the authenticated user owns'}, 'paid_by': {'type': 'string', 'description': 'Who paid (name or alias)'}, 'currency': {'type': 'string', 'description': 'ISO currency, e.g. SGD'}, 'merchant': {'type': 'string', 'description': 'Restaurant, stall, or shop. Empty or null clears'}, 'dish_items': {'type': 'array', 'items': {'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string'}, 'price': {'type': 'number', 'minimum': 0}, 'rating': {'type': 'number', 'maximum': 5, 'minimum': 1}}, 'additionalProperties': False}, 'description': 'Complete replacement ordered dish list; [] clears it.'}, 'person_ids': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Owned person UUIDs to tag (user-scoped)'}, 'request_id': {'type': 'string', 'description': 'Client idempotency key (retries return original result).'}, 'consumed_at': {'type': 'string', 'description': 'ISO instant; wins over meal_period'}, 'description': {'type': 'string', 'description': 'Alias for what (the dish, not notes).'}, 'meal_period': {'type': 'string', 'description': 'Spoken period when consumed_at is omitted, e.g. "late lunch"'}, 'person_name': {'type': 'string', 'description': 'One companion to add, by name'}, 'append_notes': {'type': 'string', 'description': 'Append text to existing notes (newline-separated)'}, 'people_names': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Alias for with'}, 'payment_method': {'type': 'string', 'description': 'Alias of paid_by for expense-style agents'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['food_id', 'event_id', 'food_log', 'changed', 'people_tagged', 'unresolved_people', 'life_state_rebuilt'], 'properties': {'changed': {'type': 'object', 'description': 'Changed fields with before and after values.', 'additionalProperties': True}, 'food_id': {'type': 'string'}, 'event_id': {'type': ['string', 'null']}, 'food_log': {'type': 'object', 'description': 'Updated Food Diary row.', 'additionalProperties': True}, 'people_tagged': {'type': 'array', 'items': {'type': 'object', 'description': 'A Dayze person or contact record.', 'additionalProperties': True}}, 'unresolved_people': {'type': 'array', 'items': {'type': 'string'}}, 'life_state_rebuilt': {'type': 'boolean'}}, 'additionalProperties': False}
update_inventory_item
Update Inventory Item
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)
Esquema de entrada
{'type': 'object', 'properties': {'name': {'type': 'string', 'description': 'What the user calls the item, e.g. "MacBook Pro 14 (2023)".'}, 'tags': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Replaces the tag list.'}, 'brand': {'type': 'string'}, 'model': {'type': 'string'}, 'notes': {'type': 'string', 'description': 'Free text from the user.'}, 'specs': {'type': 'object', 'description': "Stable 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."}, 'state': {'type': 'object', 'description': 'Changing 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.'}, 'status': {'type': 'string', 'description': 'wishlist | ordered | owned | listed_for_sale | sold | returned | lost | disposed | donated. Default owned. To archive, use archive_inventory_item.'}, 'subtype': {'type': 'string', 'description': 'Specific kind: laptop, sweatshirt, guitar. Alias: item_type.'}, 'category': {'type': 'string', 'description': "electronics | 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."}, 'currency': {'type': 'string', 'description': 'ISO 4217, e.g. USD, SGD. Default USD.'}, 'location': {'type': 'string', 'description': 'Where it is kept.'}, 'nickname': {'type': 'string', 'description': 'In 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.'}, 'condition': {'enum': ['new', 'excellent', 'good', 'worn', 'needs_repair', 'retired'], 'type': 'string'}, 'item_type': {'type': 'string', 'description': 'Alias for subtype (the stored column).'}, 'request_id': {'type': 'string', 'description': 'Client idempotency key (retries return original result).'}, 'inventory_id': {'type': 'string', 'description': 'The item id from add_inventory_item, get_inventory or search_inventory.'}, 'acquired_date': {'type': 'string', 'description': "YYYY-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_from': {'type': 'string', 'description': 'Shop or person it came from.'}, 'current_value': {'type': 'number', 'description': 'Alias for estimated_value (the stored column).'}, 'purchase_date': {'type': 'string', 'description': 'YYYY-MM-DD'}, 'spec_template': {'enum': ['computer.v1', 'phone.v1', 'camera.v1', 'synth.v1'], 'type': 'string', 'description': 'Which typed fields specs uses. Templates are listed in docs/MCP_LIFE_GRAPH.md. null (update) clears it.'}, 'purchase_price': {'type': 'number'}, 'estimated_value': {'type': 'number', 'description': 'What it is worth now. Alias: current_value.'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}, 'acquisition_type': {'type': 'string', 'description': 'purchase | gift | inheritance | …'}, 'reference_number': {'type': 'string', 'description': 'Manufacturer reference or model number (e.g. a watch reference).'}, 'subtype_confidence': {'type': 'number', 'description': '0-1, when the subtype is a guess.'}, 'specs_schema_version': {'type': 'integer', 'description': 'Layout of specs and state. Only 1 (the default).'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'item': {'type': 'object', 'description': 'Inventory item record. With specs: spec_template, specs, state (a timestamped snapshot), state_freshness and capability_summary.', 'additionalProperties': True}, 'changed': {'type': 'object', 'additionalProperties': True}, 'message': {'type': ['string', 'null']}, 'state_note': {'type': 'string'}, 'inventory_id': {'type': 'string'}, 'resolved_from': {'type': 'object', 'description': 'PHI-448: present when nickname found the item: the nickname sent and matched_on (nickname, name or model).', 'additionalProperties': True}, 'changed_fields': {'type': 'object', 'description': 'Columns set, and the specs / state keys written.', 'additionalProperties': True}, 'idempotent_replay': {'type': 'boolean'}, 'state_not_applied': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': True}
update_notable
Update Notable (catalog write)
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)
Acceso externo
Esquema de entrada
{'type': 'object', 'required': ['slug'], 'properties': {'bio': {'type': 'string'}, 'flag': {'type': 'string'}, 'slug': {'type': 'string', 'description': 'Notable person slug (e.g. taylor-swift)'}, 'about': {'type': 'string'}, 'trivia': {'type': 'string'}, 'zodiac': {'type': 'string'}, 'net_worth': {'type': 'string'}, 'residence': {'type': 'string'}, 'birth_date': {'type': 'string', 'description': 'YYYY, YYYY-MM, or YYYY-MM-DD. Null/empty clears'}, 'occupation': {'type': 'string'}, 'request_id': {'type': 'string', 'description': 'Client idempotency key (retries return original result).'}, 'before_fame': {'type': 'string'}, 'birth_place': {'type': 'string'}, 'family_life': {'type': 'string'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['person', 'changed'], 'properties': {'person': {'type': 'object', 'description': 'Updated notable catalog row (name, slug).', 'additionalProperties': True}, 'changed': {'type': 'object', 'description': 'Changed fields with before and after values.', 'additionalProperties': True}}, 'additionalProperties': False}
update_pending_reply
Update Pending Reply
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)
Esquema de entrada
{'type': 'object', 'required': ['reply_id'], 'properties': {'draft': {'type': 'string', 'description': 'The reply text to send later, max 20,000 characters. Replaces the saved draft; empty or null clears. Alias: draft_message.'}, 'source': {'type': 'object', 'properties': {'kind': {'enum': ['gmail', 'email', 'other'], 'type': 'string'}, 'thread_id': {'type': 'string'}, 'message_id': {'type': 'string'}}, 'description': 'The 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.', 'additionalProperties': False}, 'status': {'enum': ['pending', 'snoozed'], 'type': 'string'}, 'channel': {'type': 'string', 'description': 'Where 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.'}, 'summary': {'type': 'string', 'description': 'One line (max 280) in your own words: what the reply is about. Never paste the email body, subject line or sender address.'}, 'category': {'enum': ['personal', 'work'], 'type': 'string'}, 'reply_id': {'type': 'string', 'description': 'From create_pending_reply or get_pending_replies.'}, 'person_id': {'type': 'string'}, 'request_id': {'type': 'string', 'description': 'Client idempotency key (retries return original result).'}, 'person_name': {'type': 'string'}, 'received_at': {'type': 'string'}, 'snooze_until': {'type': 'string', 'description': 'ISO date-time, with status snoozed.'}, 'draft_message': {'type': 'string', 'description': 'Alias for draft.'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['reply', 'changed_fields', 'source_saved', 'message', 'life_state_rebuilt'], 'properties': {'reply': {'type': 'object', 'required': ['reply_id', 'person_name', 'person_id', 'channel', 'category', 'summary', 'draft', 'status', 'state', 'due', 'received_at', 'source'], 'properties': {'due': {'type': 'boolean', 'description': 'Owed now: pending, or snoozed with snooze_until passed. False while a snooze runs, and when sent or dismissed.'}, 'draft': {'type': ['string', 'null'], 'description': 'The reply text saved for later.'}, 'state': {'type': 'string', 'description': 'unsent (pending or snoozed), sent (the owner replied) or dismissed'}, 'source': {'type': ['object', 'null'], 'properties': {'kind': {'type': 'string', 'description': 'gmail, email or other'}, 'thread_id': {'type': ['string', 'null']}, 'message_id': {'type': ['string', 'null']}}, 'description': 'The email it answers, as ids only; null when none was saved.', 'additionalProperties': False}, 'status': {'type': 'string', 'description': 'pending, snoozed, responded or dismissed'}, 'channel': {'type': 'string'}, 'summary': {'type': ['string', 'null']}, 'category': {'type': 'string', 'description': 'personal or work'}, 'reply_id': {'type': 'string'}, 'person_id': {'type': ['string', 'null'], 'description': 'Linked contact id; null when the reply is unlinked.'}, 'created_at': {'type': ['string', 'null']}, 'updated_at': {'type': ['string', 'null']}, 'approved_at': {'type': ['string', 'null'], 'description': 'PHI-427: when the owner approved the draft and opened it in Gmail, or null. Dayze never sends; the Gmail sync closes the reply when the email goes out.'}, 'person_name': {'type': 'string'}, 'received_at': {'type': 'string'}, 'responded_at': {'type': ['string', 'null']}, 'snooze_until': {'type': ['string', 'null']}}, 'description': 'One reply the user owes (Inbox → Pending Replies). Dayze never sends it.', 'additionalProperties': False}, 'message': {'type': 'string'}, 'person_link': {'type': ['object', 'null'], 'required': ['status', 'person_id', 'note'], 'properties': {'note': {'type': 'string'}, 'status': {'type': 'string', 'description': 'linked, ambiguous, no_match or lookup_failed'}, 'person_id': {'type': ['string', 'null']}, 'candidates': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'name'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}}, 'additionalProperties': False}}, 'matched_via': {'type': ['string', 'null']}, 'contact_name': {'type': ['string', 'null']}}, 'description': 'Whether a contact was linked. Linked only on one resolve_person match or an owned person_id.', 'additionalProperties': False}, 'source_saved': {'type': 'boolean'}, 'changed_fields': {'type': 'array', 'items': {'type': 'string'}}, 'life_state_rebuilt': {'type': 'boolean'}}, 'additionalProperties': False}
update_people_link
Update People Link
Patch an existing person↔person graph edge (type/context/source/confidence). ($0.10; API key required)
Esquema de entrada
{'type': 'object', 'properties': {'notes': {'type': 'string'}, 'source': {'type': 'string'}, 'person_id': {'type': 'string'}, 'confidence': {'type': 'number'}, 'request_id': {'type': 'string', 'description': 'Client idempotency key (retries return original result).'}, 'connection_id': {'type': 'string'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}, 'other_person_id': {'type': 'string'}, 'relationship_type': {'type': 'string'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'message': {'type': ['string', 'null']}, 'updated': {'type': 'boolean'}, 'connection': {'type': 'object', 'additionalProperties': True}}, 'additionalProperties': True}
update_person
Update Contact (CRM write)
MUTATES Dayze Contacts. Patch one existing contact the user owns (person_id UUID required). Optional fields: name, is_favorite, tier, relationships (multi-value), context_tags (Work/Personal/Family/custom), legacy relationship, notes, birthday. A rename keeps the old name as a former_name alias unless preserve_old_name_as_alias is false (former_name_alias in the result). undo_contact_change(change_id) reverts it, birthday included. Rejects unknown fields. Does not create or delete contacts. Rebuilds life_state. Requires API key or OAuth with scope context. Share tokens cannot write. ($0.10; API key required)
Esquema de entrada
{'type': 'object', 'required': ['person_id'], 'properties': {'name': {'type': 'string', 'description': 'Rename contact (also refreshes URL slug). Prefer this over create+merge for spelling fixes'}, 'tier': {'enum': ['vip', 'normal', 'low'], 'type': 'string', 'description': 'Relationship priority. VIP stays in inner_circle even when not favorited'}, 'notes': {'type': 'string', 'description': 'Replaces people.notes (does not append). Empty or null clears'}, 'birthday': {'type': 'string', 'description': 'YYYY, YYYY-MM, YYYY-MM-DD, or MM-DD / --MM-DD (year unknown; 02-29 ok). Null/empty clears'}, 'person_id': {'type': 'string', 'description': 'UUID of a person the authenticated user owns'}, 'request_id': {'type': 'string', 'description': 'Client idempotency key (retries return original result).'}, 'is_favorite': {'type': 'boolean', 'description': 'Favorite flag. Favorites (and VIP) appear in get_context_pack inner_circle'}, 'context_tags': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Contexts such as Work, Personal, Family, plus custom tags'}, 'relationship': {'type': 'string', 'description': 'Relationship label (friend, sister, …). Empty or null clears'}, 'relationships': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Who they are to the user, in primary-first order (for example Friend + Client)'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}, 'preserve_old_name_as_alias': {'type': 'boolean', 'description': 'When renaming, keep the previous name as a former_name alias (default true)'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['person', 'changed', 'life_state_rebuilt'], 'properties': {'person': {'type': 'object', 'description': 'A Dayze person or contact record.', 'additionalProperties': True}, 'changed': {'type': 'object', 'description': 'Changed fields with before and after values.', 'additionalProperties': True}, 'change_id': {'type': 'string', 'description': 'Pass to undo_contact_change to revert this change, birthday and birthday_precision included.'}, 'former_name_alias': {'type': 'object', 'description': 'After a rename that keeps the old name (preserve_old_name_as_alias, default true): alias, saved, and reason when it could not be kept.', 'additionalProperties': True}, 'life_state_rebuilt': {'type': 'boolean'}}, 'additionalProperties': False}
update_person_alias
Update Person Alias
Update alias_kind/source/display for an existing alias. ($0.05; API key required)
Esquema de entrada
{'type': 'object', 'required': ['person_id', 'alias'], 'properties': {'alias': {'type': 'string'}, 'source': {'type': 'string'}, 'person_id': {'type': 'string'}, 'alias_kind': {'type': 'string'}, 'request_id': {'type': 'string', 'description': 'Client idempotency key (retries return original result).'}, 'alias_display': {'type': 'string'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'alias': {'type': 'object', 'additionalProperties': True}, 'message': {'type': ['string', 'null']}, 'change_id': {'type': ['string', 'null']}, 'person_id': {'type': 'string'}}, 'additionalProperties': True}
update_person_identity
Update Person Identity
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)
Esquema de entrada
{'type': 'object', 'required': ['person_id'], 'properties': {'force': {'type': 'boolean'}, 'aliases': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'website': {'type': 'string'}, 'pronouns': {'type': 'string'}, 'person_id': {'type': 'string'}, 'legal_name': {'type': 'string'}, 'request_id': {'type': 'string', 'description': 'Client idempotency key (retries return original result).'}, 'preferred_name': {'type': 'string'}, 'social_handles': {'type': 'object', 'additionalProperties': True}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}, 'user_relationships': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'person': {'type': 'object', 'additionalProperties': True}, 'changed': {'type': 'object', 'additionalProperties': True}, 'message': {'type': ['string', 'null']}, 'change_id': {'type': ['string', 'null']}}, 'additionalProperties': True}
update_place
Update Place Card
Patch a saved place card by place_id / business_contact_id. Unspecified fields stay unchanged (hours, affordability, address, notes, …). ($0.10; API key required)
Esquema de entrada
{'type': 'object', 'properties': {'id': {'type': 'string'}, 'area': {'type': 'string'}, 'city': {'type': 'string'}, 'name': {'type': 'string'}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'hours': {'type': 'string'}, 'notes': {'type': 'string'}, 'phone': {'type': 'string'}, 'address': {'type': 'string'}, 'country': {'type': 'string'}, 'website': {'type': 'string'}, 'category': {'type': 'string'}, 'latitude': {'type': 'number'}, 'place_id': {'type': 'string'}, 'longitude': {'type': 'number'}, 'request_id': {'type': 'string', 'description': 'Client idempotency key (retries return original result).'}, 'description': {'type': 'string'}, 'price_level': {'type': 'string'}, 'hours_source': {'type': 'string'}, 'affordability': {'type': 'string'}, 'opening_hours': {'type': 'string'}, 'phone_numbers': {'type': 'array', 'items': {'type': 'string'}}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}, 'business_contact_id': {'type': 'string'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'place': {'type': 'object', 'description': 'Saved place card.', 'additionalProperties': True}, 'message': {'type': ['string', 'null']}, 'updated': {'type': 'boolean'}, 'place_id': {'type': 'string'}, 'business_contact_id': {'type': 'string'}}, 'additionalProperties': True}
update_sleep
Update Sleep
Sleep: patch an existing sleep record by sleep_id. ($0.10; API key required)
Esquema de entrada
{'type': 'object', 'required': ['sleep_id'], 'properties': {'notes': {'type': 'string'}, 'quality': {'type': 'number'}, 'ended_at': {'type': 'string'}, 'sleep_id': {'type': 'string'}, 'timezone': {'type': 'string'}, 'request_id': {'type': 'string', 'description': 'Client idempotency key (retries return original result).'}, 'sleep_type': {'enum': ['overnight', 'nap', 'unknown'], 'type': 'string'}, 'started_at': {'type': 'string'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'ok': {'type': 'boolean'}, 'sleep': {'type': 'object', 'additionalProperties': True}, 'message': {'type': ['string', 'null']}}, 'additionalProperties': True}
upload_asset
Upload Asset
Upload image bytes to Dayze storage (WebP re-encode strips EXIF/AI metadata). Returns asset_id. For inventory item photos: pass entity_type=inventory, entity_id=inventory_id, role=photo, image_base64 from chat images. Or upload then attach_asset. ($0.15; API key required)
Esquema de entrada
{'type': 'object', 'anyOf': [{'required': ['image_base64']}, {'required': ['url']}], 'properties': {'url': {'type': 'string', 'description': 'Remote image URL to fetch and store.'}, 'role': {'enum': ['original', 'processed', 'thumbnail', 'cover', 'document', 'receipt', 'certificate', 'photo', 'other'], 'type': 'string', 'description': 'original | cover | thumbnail | …'}, 'filename': {'type': 'string'}, 'metadata': {'type': 'object', 'description': 'Free-form metadata, merged into the stored metadata (metadata.source becomes the asset source).'}, 'entity_id': {'type': 'string'}, 'mime_type': {'type': 'string', 'description': 'image/jpeg, image/png, image/webp, … Alias: content_type.'}, 'asset_type': {'type': 'string', 'description': 'photo | receipt | certificate | document | thumbnail | …'}, 'request_id': {'type': 'string', 'description': 'Client idempotency key (retries return original result).'}, 'description': {'type': 'string'}, 'entity_type': {'type': 'string', 'description': 'event | place | person | inventory (inventory_item maps to inventory) | …'}, 'content_type': {'type': 'string', 'description': 'Alias for mime_type.'}, 'image_base64': {'type': 'string', 'description': 'Base64 image bytes (optional data: URL prefix).'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}, 'parent_asset_id': {'type': 'string'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'asset': {'type': 'object', 'additionalProperties': True}, 'message': {'type': ['string', 'null']}, 'asset_id': {'type': 'string'}, 'metadata_stripped': {'type': 'boolean'}}, 'additionalProperties': True}
upload_photo
Upload Photo
Upload a photo to a Life Graph entity you have (event, place, person, inventory, …). Accepts image_base64 or url (one required). Re-encodes via WebP (strips EXIF/AI metadata). Answers attached: true, or an error when it could not be attached. Person uploads also write the CRM gallery (person_photos) and avatar when set_as_avatar=true. ($0.15; API key required)
Esquema de entrada
{'type': 'object', 'anyOf': [{'required': ['image_base64']}, {'required': ['url']}], 'required': ['entity_type', 'entity_id'], 'properties': {'url': {'type': 'string', 'description': 'Remote image URL to fetch and store.'}, 'role': {'type': 'string', 'description': 'original | cover | thumbnail | … (photo is stored as original). set_as_avatar implies cover.'}, 'title': {'type': 'string'}, 'filename': {'type': 'string'}, 'entity_id': {'type': 'string'}, 'mime_type': {'type': 'string', 'description': 'Alias for content_type.'}, 'request_id': {'type': 'string', 'description': 'Client idempotency key (retries return original result).'}, 'description': {'type': 'string'}, 'entity_type': {'type': 'string'}, 'content_type': {'type': 'string'}, 'image_base64': {'type': 'string', 'description': 'Base64 image bytes (optional data: URL prefix).'}, 'set_as_avatar': {'type': 'boolean'}, 'idempotency_key': {'type': 'string', 'description': 'Alias for request_id.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'properties': {'url': {'type': ['string', 'null']}, 'asset': {'type': 'object', 'additionalProperties': True}, 'message': {'type': ['string', 'null']}, 'asset_id': {'type': 'string'}, 'attached': {'type': 'boolean'}, 'photo_id': {'type': ['string', 'null']}, 'entity_id': {'type': 'string'}, 'optimized': {'type': 'object', 'additionalProperties': True}, 'entity_type': {'type': 'string'}, 'avatar_updated': {'type': 'boolean'}, 'metadata_stripped': {'type': 'boolean'}}, 'additionalProperties': True}
Modificado
search_photos
1 de October de 2026 a las 02:53
Modificado
search_transactions
1 de October de 2026 a las 02:53
Modificado
get_transactions
1 de October de 2026 a las 02:53
Modificado
record_sale
1 de October de 2026 a las 02:53
Modificado
record_purchase
1 de October de 2026 a las 02:53
Modificado
log_income
1 de October de 2026 a las 02:53
Modificado
log_transaction
1 de October de 2026 a las 02:53
Modificado
log_expense
1 de October de 2026 a las 02:53
Modificado
attach_asset
1 de October de 2026 a las 02:53
Modificado
upload_photo
1 de October de 2026 a las 02:53
Modificado
update_asset
1 de October de 2026 a las 02:53
Modificado
upload_asset
1 de October de 2026 a las 02:53
Modificado
link_inventory_person
1 de October de 2026 a las 02:53
Modificado
get_inventory_valuations
1 de October de 2026 a las 02:53
Modificado
add_inventory_valuation
1 de October de 2026 a las 02:53
Modificado
search_inventory
1 de October de 2026 a las 02:53
Modificado
archive_inventory_item
1 de October de 2026 a las 02:53
Modificado
update_inventory_item
1 de October de 2026 a las 02:53
Modificado
get_inventory_item
1 de October de 2026 a las 02:53
Modificado
get_inventory
1 de October de 2026 a las 02:53
Modificado
add_inventory_item
1 de October de 2026 a las 02:53
Modificado
get_entity_links
1 de October de 2026 a las 02:53
Modificado
link_entities
1 de October de 2026 a las 02:53
Modificado
undo_contact_change
1 de October de 2026 a las 02:53
Modificado
create_person
1 de October de 2026 a las 02:53
Modificado
log_travel
1 de October de 2026 a las 02:53
Modificado
get_place_visits
1 de October de 2026 a las 02:53
Modificado
get_places
1 de October de 2026 a las 02:53
Modificado
search
1 de October de 2026 a las 02:53
Modificado
explain_fact
1 de October de 2026 a las 02:53