{"data":[{"name":"upkeep.request_upload","title":"Request a private upload link","description":"Issue a short-lived, one-use authenticated browser link for private PDFs/photos. Optional item_id is an intended target, not a confirmed assignment. Analyze uploads and suggest a destination before review; never request public receipt URLs or bearer tokens from users.","input_schema":{"type":"object","required":["idempotency_key"],"properties":{"item_id":{"type":"string"},"idempotency_key":{"type":"string"}},"additionalProperties":false},"read_only":false},{"name":"upkeep.upload_status","title":"Check upload analysis","description":"Check processing and suggested destination for this account's upload. Analysis reasons and conflicts must be shown before confirmation.","input_schema":{"type":"object","required":["upload_id"],"properties":{"upload_id":{"type":"string"}},"additionalProperties":false},"read_only":true},{"name":"upkeep.assign_document","title":"Confirm a document destination","description":"After review, explicitly assign an inbox document to a selected asset or create a reviewed new asset. Suggested matches are not confirmation. Extracted changes remain unverified; use confirm_document_extraction separately.","input_schema":{"type":"object","required":["document_id","idempotency_key"],"properties":{"document_id":{"type":"string"},"item_id":{"type":"string"},"asset":{"type":"object","properties":{"name":{"type":"string"},"manufacturer":{"type":"string"},"model_number":{"type":"string"},"serial_number":{"type":"string"},"initial_reading":{"type":"object","required":["value","unit","observed_on"],"properties":{"value":{"type":"number","minimum":0},"unit":{"type":"string","enum":["mi","km"]},"observed_on":{"type":"string","format":"date"},"notes":{"type":"string"}},"additionalProperties":false},"vin":{"type":"string"},"vin_policy":{"type":"string"},"vehicle_make":{"type":"string"},"vehicle_model":{"type":"string"},"vehicle_year":{"type":"integer"},"vehicle_trim":{"type":"string"},"vehicle_engine":{"type":"string"},"vehicle_plate":{"type":"string"},"vehicle_plate_jurisdiction":{"type":"string"},"vehicle_color":{"type":"string"},"asset_kind":{"type":"string","enum":["property","vehicle","appliance","equipment","system","component","other"],"description":"Optional type; defaults to other, never inferred from category."},"location_id":{"type":"string","description":"An account-owned location ID returned by search_assets."},"location_name":{"type":"string","description":"Optional room or place label; creates or reuses an account-owned location."},"relationships":{"type":"array","maxItems":3,"description":"Optional outgoing links. located_in targets a property; part_of targets a system, vehicle, equipment or component; replaces targets a predecessor of the same type (or other). Replacement retires the predecessor and preserves placement/history. Present links for review before confirmation.","items":{"type":"object","required":["kind","target_id"],"properties":{"kind":{"type":"string","enum":["located_in","part_of","replaces"]},"target_id":{"type":"string"}},"additionalProperties":false}}},"additionalProperties":false},"idempotency_key":{"type":"string"}},"additionalProperties":false},"read_only":false},{"name":"upkeep.propose_usage_reading","title":"Propose a usage observation","description":"Stage dated mileage or operating hours with evidence. Analyze inconsistencies before asking the user to confirm; never guess current usage.","input_schema":{"type":"object","required":["item_id","metric","value","unit","observed_on","idempotency_key"],"properties":{"item_id":{"type":"string"},"metric":{"type":"string","enum":["distance","hours"]},"value":{"type":"number","minimum":0},"unit":{"type":"string","enum":["mi","km","h"]},"observed_on":{"type":"string","format":"date"},"notes":{"type":"string"},"meter_reset":{"type":"boolean"},"corrects_id":{"type":"string"},"source_document_id":{"type":"string"},"idempotency_key":{"type":"string"}},"additionalProperties":false},"read_only":false},{"name":"upkeep.confirm_usage_reading","title":"Review a usage observation","description":"Accept or reject a staged observation after explicit user review. Show inconsistencies and evidence first; acknowledge_inconsistency is required to accept a discrepancy.","input_schema":{"type":"object","required":["item_id","reading_id","decision","idempotency_key"],"properties":{"item_id":{"type":"string"},"reading_id":{"type":"string"},"decision":{"type":"string","enum":["accept","reject"]},"acknowledge_inconsistency":{"type":"boolean"},"idempotency_key":{"type":"string"}},"additionalProperties":false},"read_only":false},{"name":"upkeep.list_usage_readings","title":"Read usage history","description":"Return dated observations and latest verified freshness. No observation implies live usage.","input_schema":{"type":"object","required":["item_id"],"properties":{"item_id":{"type":"string"},"cursor":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100}},"additionalProperties":false},"read_only":true},{"name":"upkeep.resolve_fact","title":"Resolve a fact assertion","description":"After explicit user review, accept or reject one pending evidence assertion. Show its value, source and any conflicting saved value first. Accepting a conflict replaces the display value but preserves superseded assertions and the decision history.","input_schema":{"type":"object","required":["item_id","assertion_id","decision","idempotency_key"],"properties":{"item_id":{"type":"string"},"assertion_id":{"type":"string"},"decision":{"type":"string","enum":["accept","reject"]},"idempotency_key":{"type":"string"}},"additionalProperties":false},"read_only":false},{"name":"upkeep.search_assets","title":"Search assets","description":"Search the authenticated account's homes, vehicles, and equipment by name (including fridge/refrigerator synonyms), model, serial number, category, or document text. Omit query or use an empty string to list up to 50 most recently updated assets, including retired records unless status is set. Phrase search uses background AI ranking over up to 1000 filtered assets, with exact matches first. If search.status=pending, retry this query after search.retry_after seconds. Unavailable AI falls back to text matching. Read the items array in structuredContent, not at the top JSON-RPC level. Failed calls are not empty results.","input_schema":{"type":"object","properties":{"cursor":{"type":"string","description":"Opaque next_cursor from the same search; expires after 30 minutes. Restart if results change."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":25},"include_details":{"type":"boolean","description":"V2 defaults to concise identities; request true for full evidence. V1 preserves legacy detailed results."},"query":{"type":"string","description":"Natural-language search such as 'upstairs AC' or a model number."},"category":{"type":"string"},"asset_kind":{"type":"string","enum":["property","vehicle","appliance","equipment","system","component","other"]},"status":{"type":"string","enum":["all","active","retired"],"default":"all"}},"additionalProperties":false},"read_only":true},{"name":"upkeep.list_filters","title":"List filters and replacements","description":"Find physical filter maintenance, replacement parts, and filter inventory, including what is due and what is on hand. This is not a list of search categories or query facets; use search_assets for inventory searches.","input_schema":{"type":"object","properties":{"due_within_days":{"type":"integer","minimum":0,"maximum":365,"default":30}},"additionalProperties":false},"read_only":true},{"name":"upkeep.list_due_maintenance","title":"List due maintenance","description":"List overdue and upcoming preventative maintenance with safety, priority, time estimate, and supporting evidence.","input_schema":{"type":"object","properties":{"through":{"type":"string","format":"date","description":"Inclusive ISO 8601 date. Defaults to 30 days from today."}},"additionalProperties":false},"read_only":true},{"name":"upkeep.build_weekly_plan","title":"Build a weekly maintenance plan","description":"Prioritize preventative maintenance for one week by overdue status, safety, priority, and due date.","input_schema":{"type":"object","properties":{"week_start":{"type":"string","format":"date","description":"ISO 8601 date. Defaults to the current week."}},"additionalProperties":false},"read_only":true},{"name":"upkeep.list_service_history","title":"List service history","description":"Show service records and completed maintenance for homes, vehicles, and equipment, optionally limited to one asset.","input_schema":{"type":"object","properties":{"item_id":{"type":"string","description":"Opaque Upkeep asset ID. Omit to search all assets."},"limit":{"type":"integer","minimum":1,"maximum":50,"default":20}},"additionalProperties":false},"read_only":true},{"name":"upkeep.attach_document","title":"Attach a document from a link","description":"Attach a public PDF or supported image link to an existing home, vehicle, or equipment asset and queue private extraction. Ask for explicit confirmation before attaching. Use this after a user shares a manual, receipt, warranty, invoice, inspection report, or service document.","input_schema":{"type":"object","required":["item_id","title","source_url","idempotency_key"],"properties":{"item_id":{"type":"string","description":"Opaque Upkeep asset ID."},"title":{"type":"string","description":"Human-readable document title."},"document_type":{"type":"string","enum":["manual","receipt","warranty","service_record","parts","other"],"default":"other"},"source_url":{"type":"string","format":"uri","description":"Public HTTPS or HTTP PDF/image URL. Private authenticated URLs are not fetched."},"idempotency_key":{"type":"string","description":"Stable caller-generated key for safe retries."}},"additionalProperties":false},"read_only":false},{"name":"upkeep.list_unverified_extractions","title":"List document details needing review","description":"List unverified fields extracted from attached documents. Explain that OCR can misread model names, dates, and part numbers, and that accepting a bad value could corrupt inventory or maintenance schedules. Present the source excerpt and ask which fields the user wants to accept or reject.","input_schema":{"type":"object","properties":{"item_id":{"type":"string","description":"Optional opaque Upkeep asset ID. Omit to review all assets."}},"additionalProperties":false},"read_only":true},{"name":"upkeep.confirm_document_extraction","title":"Confirm document details","description":"Accept selected machine-extracted fields or reject all suggestions after the user explicitly reviews them. Never select fields on the user's behalf: OCR errors in identifiers or dates can create wrong parts, warranty facts, and maintenance schedules. Unselected fields are not applied.","input_schema":{"type":"object","required":["document_id","accepted_fields","idempotency_key"],"properties":{"document_id":{"type":"string","description":"Opaque document ID returned by upkeep.list_unverified_extractions."},"accepted_fields":{"type":"array","items":{"type":"string"},"description":"Exact field names the user approved. Send an empty array to reject all suggestions."},"date_target":{"type":"string","enum":["purchase_date","service_date"],"description":"Where to apply an accepted date. Omit to leave the date unapplied."},"idempotency_key":{"type":"string","description":"Stable caller-generated key for safe retries."}},"additionalProperties":false},"read_only":false},{"name":"upkeep.propose_home_history_import","title":"Propose a home-history import","description":"Prepare one reviewable batch from a user-authorized scan of connected email or files for appliance and vehicle purchases, construction projects, maintenance discussions, receipts, warranties, and large home purchases. Search narrowly, minimize retained email data, deduplicate candidates, and never import anything until upkeep.confirm_home_history_import is called after explicit user approval.","input_schema":{"type":"object","required":["candidates"],"properties":{"candidates":{"type":"array","minItems":1,"maxItems":100,"items":{"type":"object","required":["record_type","title","summary"],"properties":{"record_type":{"type":"string","enum":["asset_purchase","home_project","vehicle_purchase","maintenance","document"]},"title":{"type":"string"},"summary":{"type":"string","description":"Concise factual summary. Do not include unrelated email body text."},"occurred_on":{"type":"string","format":"date"},"merchant":{"type":"string"},"amount":{"type":"string","description":"Original displayed amount and currency, if relevant."},"currency":{"type":"string","pattern":"^[A-Za-z]{3}$","description":"Explicit ISO currency code; never infer from an ambiguous symbol. Amount is only supporting evidence, not identity."},"source":{"type":"object","required":["namespace"],"properties":{"namespace":{"type":"string","description":"Stable connector/account namespace. No credentials or private URLs."},"message_id":{"type":"string","description":"Stable source message ID for overlapping scans."},"attachment_sha256":{"type":"string","pattern":"^[A-Fa-f0-9]{64}$","description":"SHA-256 of attachment bytes, not filename."},"candidate_id":{"type":"string","description":"Stable line/event ID within the source. Different physical units or events require different IDs."}},"additionalProperties":false,"description":"Optional strong provenance for cross-batch deduplication. Provide message_id or attachment_sha256; retain only authorized identifiers."},"item_id":{"type":"string","description":"Existing Upkeep asset ID when the candidate belongs to a known item."},"asset":{"type":"object","properties":{"initial_reading":{"type":"object","required":["value","unit","observed_on"],"properties":{"value":{"type":"number","minimum":0},"unit":{"type":"string","enum":["mi","km"]},"observed_on":{"type":"string","format":"date"},"notes":{"type":"string"}},"additionalProperties":false},"vin":{"type":"string"},"vin_policy":{"type":"string"},"vehicle_make":{"type":"string"},"vehicle_model":{"type":"string"},"vehicle_year":{"type":"integer"},"vehicle_trim":{"type":"string"},"vehicle_engine":{"type":"string"},"vehicle_plate":{"type":"string"},"vehicle_plate_jurisdiction":{"type":"string"},"vehicle_color":{"type":"string"},"asset_kind":{"type":"string","enum":["property","vehicle","appliance","equipment","system","component","other"],"description":"Optional type; defaults to other, never inferred from category."},"location_id":{"type":"string","description":"An account-owned location ID returned by search_assets."},"location_name":{"type":"string","description":"Optional room or place label; creates or reuses an account-owned location."},"relationships":{"type":"array","maxItems":3,"description":"Optional outgoing links. located_in targets a property; part_of targets a system, vehicle, equipment or component; replaces targets a predecessor of the same type (or other). Replacement retires the predecessor and preserves placement/history. Present links for review before confirmation.","items":{"type":"object","required":["kind","target_id"],"properties":{"kind":{"type":"string","enum":["located_in","part_of","replaces"]},"target_id":{"type":"string"}},"additionalProperties":false}},"name":{"type":"string"},"category":{"type":"string"},"manufacturer":{"type":"string"},"model_number":{"type":"string"},"serial_number":{"type":"string"},"purchase_date":{"type":"string","format":"date"},"installed_on":{"type":"string","format":"date","description":"Known installation or placement date, independent of record creation. Never infer it."},"retailer":{"type":"string"},"retailer_sku":{"type":"string"},"warranty_name":{"type":"string"},"warranty_expires_on":{"type":"string","format":"date"},"notes":{"type":"string"}},"additionalProperties":false},"document":{"type":"object","properties":{"title":{"type":"string"},"document_type":{"type":"string","enum":["manual","receipt","warranty","service_record","parts","other"]},"source_url":{"type":"string","format":"uri","description":"Optional public URL. Private email attachments must use the authenticated direct-upload API after confirmation."},"attachment_name":{"type":"string","description":"Original filename for a private attachment that still needs direct upload."}},"additionalProperties":false},"email_reference":{"type":"object","properties":{"sender":{"type":"string"},"subject":{"type":"string"},"sent_on":{"type":"string","format":"date"}},"additionalProperties":false,"description":"Minimal provenance only. Never include the full message body, credentials, magic links, or unrelated recipients."}},"additionalProperties":false}},"idempotency_key":{"type":"string","description":"Stable caller-generated key for safe retries."}},"additionalProperties":false},"read_only":false},{"name":"upkeep.confirm_home_history_import","title":"Confirm a home-history import","description":"Import only candidate indexes the user explicitly approved. VIN/serial matches explain identity; model and currency-aware amount are supporting only. Show match details, duplicate source/within-batch references and related-candidate explanations. If review_required is returned, ask the user to choose link_existing with an exact item_id or create_new, then submit candidate_resolutions with a new idempotency key. Reject changed-source conflicts and review the existing evidence. An empty accepted_candidate_indexes array rejects the batch. Private attachments remain in an upload queue for the authenticated direct-upload API.","input_schema":{"type":"object","required":["proposal_id","accepted_candidate_indexes","idempotency_key"],"properties":{"proposal_id":{"type":"string"},"accepted_candidate_indexes":{"type":"array","items":{"type":"integer","minimum":0},"uniqueItems":true},"candidate_resolutions":{"type":"array","items":{"type":"object","required":["candidate_index","action"],"properties":{"candidate_index":{"type":"integer","minimum":0},"action":{"type":"string","enum":["link_existing","create_new"]},"item_id":{"type":"string","description":"Required for link_existing; must be an asset the user explicitly chose."}},"additionalProperties":false}},"idempotency_key":{"type":"string","description":"Stable caller-generated key for safe retries."}},"additionalProperties":false},"read_only":false},{"name":"upkeep.propose_maintenance_plan","title":"Propose a maintenance schedule","description":"Create a reviewable maintenance recommendation using the asset's model, manufacturer guidance, or source evidence. Nothing is scheduled until upkeep.confirm_maintenance_plan is called.","input_schema":{"type":"object","required":["item_id","plan"],"properties":{"item_id":{"type":"string","description":"Opaque Upkeep asset ID."},"plan":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"instructions":{"type":"string"},"recurrence_rule":{"type":"string","description":"monthly, yearly, every_N_days, or every_N_months."},"usage_metric":{"type":"string","enum":["distance","hours"]},"usage_unit":{"type":"string","enum":["mi","km","h"]},"usage_interval":{"type":"number","exclusiveMinimum":0},"usage_threshold":{"type":"number","minimum":0},"source_document_id":{"type":"string"},"supply_id":{"type":"string","description":"Existing supply on this asset whose replacement is scheduled."},"next_due_on":{"type":"string","format":"date"},"due_window_days":{"type":"integer","minimum":0,"maximum":90,"default":7},"priority":{"type":"string","enum":["low","routine","high","critical"],"default":"routine"},"estimated_minutes":{"type":"integer","minimum":1},"safety_level":{"type":"string","enum":["normal","caution","professional"],"default":"normal"},"source_quote":{"type":"string","description":"Short quote or citation from a manual or trusted source."}},"additionalProperties":false},"idempotency_key":{"type":"string","description":"Stable caller-generated key for safe retries."}},"additionalProperties":false},"read_only":false},{"name":"upkeep.confirm_maintenance_plan","title":"Confirm a maintenance schedule","description":"Schedule a previously proposed maintenance recommendation after explicit user confirmation.","input_schema":{"type":"object","required":["proposal_id","idempotency_key"],"properties":{"proposal_id":{"type":"string"},"idempotency_key":{"type":"string","description":"Stable caller-generated key for safe retries."}},"additionalProperties":false},"read_only":false},{"name":"upkeep.record_maintenance","title":"Record completed maintenance","description":"Record a completed service or maintenance action and advance its recurring schedule when a plan is supplied.","input_schema":{"type":"object","required":["item_id","serviced_on","summary","idempotency_key"],"properties":{"item_id":{"type":"string","description":"Opaque Upkeep asset ID."},"plan_id":{"type":"string","description":"Optional maintenance plan ID to complete and advance."},"occurrence_id":{"type":"string","description":"Reviewed scheduled occurrence ID; makes completion replay-safe across different request keys."},"usage_reading_id":{"type":"string","description":"Confirmed reading observed on serviced_on; required for recurring usage."},"serviced_on":{"type":"string","format":"date"},"summary":{"type":"string"},"notes":{"type":"string"},"idempotency_key":{"type":"string","description":"Stable caller-generated key for safe retries."}},"additionalProperties":false},"read_only":false},{"name":"upkeep.propose_asset","title":"Propose a new asset","description":"Create a reviewable draft for a home asset, vehicle, or equipment. This does not change inventory until upkeep.confirm_asset is called. Vehicle details use an explicit standard_17 or nonstandard identifier policy; external VIN decoding is not provided.","input_schema":{"type":"object","required":["asset"],"properties":{"request_kind":{"type":"string","enum":["durable_asset","consumable","component","maintenance"]},"parent_query":{"type":"string","description":"Known parent name or identifier; search existing assets first."},"asset":{"type":"object","properties":{"name":{"type":"string","description":"Friendly asset name. If omitted, the model number is used temporarily."},"initial_reading":{"type":"object","required":["value","unit","observed_on"],"properties":{"value":{"type":"number","minimum":0},"unit":{"type":"string","enum":["mi","km"]},"observed_on":{"type":"string","format":"date"},"notes":{"type":"string"}},"additionalProperties":false},"vin":{"type":"string"},"vin_policy":{"type":"string"},"vehicle_make":{"type":"string"},"vehicle_model":{"type":"string"},"vehicle_year":{"type":"integer"},"vehicle_trim":{"type":"string"},"vehicle_engine":{"type":"string"},"vehicle_plate":{"type":"string"},"vehicle_plate_jurisdiction":{"type":"string"},"vehicle_color":{"type":"string"},"asset_kind":{"type":"string","enum":["property","vehicle","appliance","equipment","system","component","other"],"description":"Optional type; defaults to other, never inferred from category."},"location_id":{"type":"string","description":"An account-owned location ID returned by search_assets."},"location_name":{"type":"string","description":"Optional room or place label; creates or reuses an account-owned location."},"relationships":{"type":"array","maxItems":3,"description":"Optional outgoing links. located_in targets a property; part_of targets a system, vehicle, equipment or component; replaces targets a predecessor of the same type (or other). Replacement retires the predecessor and preserves placement/history. Present links for review before confirmation.","items":{"type":"object","required":["kind","target_id"],"properties":{"kind":{"type":"string","enum":["located_in","part_of","replaces"]},"target_id":{"type":"string"}},"additionalProperties":false}},"category":{"type":"string"},"manufacturer":{"type":"string"},"model_number":{"type":"string"},"serial_number":{"type":"string"},"purchase_date":{"type":"string","format":"date"},"installed_on":{"type":"string","format":"date","description":"Known installation or placement date, independent of record creation. Never infer it."},"retailer":{"type":"string"},"retailer_sku":{"type":"string"},"warranty_name":{"type":"string"},"warranty_expires_on":{"type":"string","format":"date"},"notes":{"type":"string"}},"additionalProperties":false},"idempotency_key":{"type":"string","description":"Stable caller-generated key for safe retries."}},"additionalProperties":false},"read_only":false},{"name":"upkeep.confirm_asset","title":"Confirm a proposed asset","description":"Add a previously proposed asset after explicit user confirmation.","input_schema":{"type":"object","required":["proposal_id","idempotency_key"],"properties":{"proposal_id":{"type":"string"},"resolution":{"type":"string","enum":["link_existing","create_new"],"description":"Explicit user choice when proposal requires resolution."},"item_id":{"type":"string","description":"Chosen existing parent for link_existing. Does not change that asset; use a separate supply/maintenance proposal."},"idempotency_key":{"type":"string","description":"Stable caller-generated key for safe retries."}},"additionalProperties":false},"read_only":false},{"name":"upkeep.discovery_start","title":"Start consented discovery","description":"Only after explicit consent to connector, categories and dates. Uses user-connected AI tools, not autonomous Rails mailbox access. Expanding scope requires a new session.","input_schema":{"type":"object","required":["consent","connector","categories","from_on","through_on","idempotency_key"],"properties":{"consent":{"type":"boolean","const":true},"connector":{"type":"string","maxLength":100},"categories":{"type":"array","minItems":1,"items":{"type":"string","enum":["asset_purchase","home_project","vehicle_purchase","maintenance","document"]}},"from_on":{"type":"string","format":"date"},"through_on":{"type":"string","format":"date"},"idempotency_key":{"type":"string"}},"additionalProperties":false},"read_only":false},{"name":"upkeep.discovery_status","title":"Resume discovery context","description":"Return fixed consent, checkpoint and review progress. Disconnected tools require manual upload or entry, never pretend connected access.","input_schema":{"type":"object","required":["session_id"],"properties":{"session_id":{"type":"string"}},"additionalProperties":false},"read_only":true},{"name":"upkeep.discovery_submit","title":"Submit a discovery window","description":"Submit minimal authorized findings within consent. Use stable source and per-event identifiers; no raw bodies, credentials or private URLs. A stable submission_key checkpoints an empty or populated window. Findings remain unverified.","input_schema":{"type":"object","required":["session_id","submission_key","from_on","through_on","candidates","idempotency_key"],"properties":{"session_id":{"type":"string"},"idempotency_key":{"type":"string"},"submission_key":{"type":"string"},"from_on":{"type":"string","format":"date"},"through_on":{"type":"string","format":"date"},"candidates":{"type":"array","maxItems":100,"items":{"type":"object","required":["record_type","title","summary","source"],"properties":{"record_type":{"type":"string","enum":["asset_purchase","home_project","vehicle_purchase","maintenance","document"]},"title":{"type":"string"},"summary":{"type":"string","description":"Concise factual summary. Do not include unrelated email body text."},"occurred_on":{"type":"string","format":"date"},"merchant":{"type":"string"},"amount":{"type":"string","description":"Original displayed amount and currency, if relevant."},"currency":{"type":"string","pattern":"^[A-Za-z]{3}$","description":"Explicit ISO currency code; never infer from an ambiguous symbol. Amount is only supporting evidence, not identity."},"source":{"type":"object","required":["namespace"],"properties":{"namespace":{"type":"string","description":"Stable connector/account namespace. No credentials or private URLs."},"message_id":{"type":"string","description":"Stable source message ID for overlapping scans."},"attachment_sha256":{"type":"string","pattern":"^[A-Fa-f0-9]{64}$","description":"SHA-256 of attachment bytes, not filename."},"candidate_id":{"type":"string","description":"Stable line/event ID within the source. Different physical units or events require different IDs."}},"additionalProperties":false,"description":"Optional strong provenance for cross-batch deduplication. Provide message_id or attachment_sha256; retain only authorized identifiers."},"item_id":{"type":"string","description":"Existing Upkeep asset ID when the candidate belongs to a known item."},"asset":{"type":"object","properties":{"vin":{"type":"string"},"vin_policy":{"type":"string"},"vehicle_make":{"type":"string"},"vehicle_model":{"type":"string"},"vehicle_year":{"type":"integer"},"vehicle_trim":{"type":"string"},"vehicle_engine":{"type":"string"},"vehicle_plate":{"type":"string"},"vehicle_plate_jurisdiction":{"type":"string"},"vehicle_color":{"type":"string"},"asset_kind":{"type":"string","enum":["property","vehicle","appliance","equipment","system","component","other"],"description":"Optional type; defaults to other, never inferred from category."},"name":{"type":"string"},"category":{"type":"string"},"manufacturer":{"type":"string"},"model_number":{"type":"string"},"serial_number":{"type":"string"},"purchase_date":{"type":"string","format":"date"},"installed_on":{"type":"string","format":"date","description":"Known installation or placement date, independent of record creation. Never infer it."},"retailer":{"type":"string"},"retailer_sku":{"type":"string"},"warranty_name":{"type":"string"},"warranty_expires_on":{"type":"string","format":"date"}},"additionalProperties":false},"document":{"type":"object","properties":{"title":{"type":"string"},"document_type":{"type":"string","enum":["manual","receipt","warranty","service_record","parts","other"]},"attachment_name":{"type":"string","description":"Original filename for a private attachment that still needs direct upload."}},"additionalProperties":false},"email_reference":{"type":"object","properties":{"sender":{"type":"string"},"subject":{"type":"string"},"sent_on":{"type":"string","format":"date"}},"additionalProperties":false,"description":"Minimal provenance only. Never include the full message body, credentials, magic links, or unrelated recipients."}},"additionalProperties":false}}},"additionalProperties":false},"read_only":false},{"name":"upkeep.discovery_candidates","title":"Read findings for review","description":"Read one scoped page of pending/decided findings, explanations and review URL. Do not infer approval.","input_schema":{"type":"object","required":["session_id"],"properties":{"session_id":{"type":"string"},"cursor":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100}},"additionalProperties":false},"read_only":true},{"name":"upkeep.discovery_review","title":"Review one finding","description":"After explicit review, approve only selected fields or reject/defer. Link/create must be explicit; supplied revision and target item_revision prevent stale decisions. Prefer the browser review URL for large batches. Maintenance is a separate confirmation.","input_schema":{"type":"object","required":["session_id","candidate_id","revision","decision","idempotency_key"],"properties":{"session_id":{"type":"string"},"idempotency_key":{"type":"string"},"candidate_id":{"type":"string"},"revision":{"type":"integer","minimum":0},"decision":{"type":"string","enum":["approve","reject","defer"]},"action":{"type":"string","enum":["link_existing","create_new"]},"item_id":{"type":"string"},"item_revision":{"type":"string"},"accepted_fields":{"type":"array","items":{"type":"string","enum":["title","summary","occurred_on","merchant","amount","currency","asset.name","asset.category","asset.manufacturer","asset.model_number","asset.serial_number","asset.purchase_date","asset.installed_on","asset.retailer","asset.retailer_sku","asset.warranty_name","asset.warranty_expires_on","asset.asset_kind","asset.vin","asset.vin_policy","asset.vehicle_make","asset.vehicle_model","asset.vehicle_year","asset.vehicle_trim","asset.vehicle_engine","asset.vehicle_plate","asset.vehicle_plate_jurisdiction","asset.vehicle_color","document.title","document.document_type","document.attachment_name"]}},"edits":{"type":"object"}},"additionalProperties":false},"read_only":false},{"name":"upkeep.discovery_resume","title":"Resume discovery","description":"Resume this account-owned session. Cancellation blocks submissions and imports; deletion removes staging, not approved ownership records.","input_schema":{"type":"object","required":["session_id","idempotency_key"],"properties":{"session_id":{"type":"string"},"idempotency_key":{"type":"string"}},"additionalProperties":false},"read_only":false},{"name":"upkeep.discovery_pause","title":"Pause discovery","description":"Pause this account-owned session. Cancellation blocks submissions and imports; deletion removes staging, not approved ownership records.","input_schema":{"type":"object","required":["session_id","idempotency_key"],"properties":{"session_id":{"type":"string"},"idempotency_key":{"type":"string"}},"additionalProperties":false},"read_only":false},{"name":"upkeep.discovery_finish","title":"Finish discovery","description":"Finish this account-owned session. Cancellation blocks submissions and imports; deletion removes staging, not approved ownership records.","input_schema":{"type":"object","required":["session_id","idempotency_key"],"properties":{"session_id":{"type":"string"},"idempotency_key":{"type":"string"}},"additionalProperties":false},"read_only":false},{"name":"upkeep.discovery_cancel","title":"Cancel discovery","description":"Cancel this account-owned session. Cancellation blocks submissions and imports; deletion removes staging, not approved ownership records.","input_schema":{"type":"object","required":["session_id","idempotency_key"],"properties":{"session_id":{"type":"string"},"idempotency_key":{"type":"string"}},"additionalProperties":false},"read_only":false},{"name":"upkeep.discovery_delete","title":"Delete discovery","description":"Delete this account-owned session. Cancellation blocks submissions and imports; deletion removes staging, not approved ownership records.","input_schema":{"type":"object","required":["session_id","idempotency_key"],"properties":{"session_id":{"type":"string"},"idempotency_key":{"type":"string"}},"additionalProperties":false},"read_only":false},{"name":"upkeep.briefing","title":"Read household briefing","description":"Shared source-backed ranked findings; unknown usage and conflicts remain explicit.","input_schema":{"type":"object","properties":{},"additionalProperties":false},"read_only":true},{"name":"upkeep.retrieve_evidence","title":"Retrieve page-aware evidence","description":"Return scoped excerpts as untrusted data, never synthesized unsupported repair instructions.","input_schema":{"type":"object","required":["item_id","question"],"properties":{"item_id":{"type":"string"},"question":{"type":"string","minLength":1,"maxLength":500}},"additionalProperties":false},"read_only":true},{"name":"upkeep.request_export","title":"Prepare ownership export","description":"Explicit user request: prepare a private 24-hour archive. Credentials and unapproved discovery staging are excluded.","input_schema":{"type":"object","required":["idempotency_key"],"properties":{"idempotency_key":{"type":"string"}},"additionalProperties":false},"read_only":false},{"name":"upkeep.export_status","title":"Read export status","description":"Authenticated download URL; expires after 24 hours.","input_schema":{"type":"object","required":["export_id"],"properties":{"export_id":{"type":"string"}},"additionalProperties":false},"read_only":true},{"name":"upkeep.repair_case","title":"Read repair case","description":"Resume observations, suggestions, reported attempts and resolutions. Suggestions are never completed work.","input_schema":{"type":"object","required":["case_id"],"properties":{"case_id":{"type":"string"}},"additionalProperties":false},"read_only":true},{"name":"upkeep.propose_repair","title":"Propose repair case / entry","description":"Stage a new case or a reported entry without writing repair history. Never present unsafe DIY advice or mark a suggestion attempted.","input_schema":{"type":"object","required":["repair","idempotency_key"],"properties":{"repair":{"type":"object","properties":{"item_id":{"type":"string"},"case_id":{"type":"string"},"title":{"type":"string"},"safety_level":{"type":"string","enum":["normal","caution","professional"]},"kind":{"type":"string","enum":["observation","suggestion","attempt","outcome","resolution","follow_up"]},"text":{"type":"string","maxLength":2000},"document_id":{"type":"string"},"excerpt":{"type":"string"},"service_record_id":{"type":"string"},"provider":{"type":"string"},"revision":{"type":"integer"}},"additionalProperties":false},"idempotency_key":{"type":"string"}},"additionalProperties":false},"read_only":false},{"name":"upkeep.confirm_repair","title":"Confirm reported repair history","description":"Only after explicit user review: confirm the proposed case or reported event. Maintenance and parts remain separate confirmations.","input_schema":{"type":"object","required":["proposal_id","idempotency_key"],"properties":{"proposal_id":{"type":"string"},"idempotency_key":{"type":"string"}},"additionalProperties":false},"read_only":false},{"name":"upkeep.propose_asset_deletion","title":"Review asset deletion","description":"Preview permanent deletion of an exact account-owned asset and its documents/history. Does not delete anything. Show the preview and ask explicit approval; blocked relationships require retirement instead. Valid for 15 minutes.","input_schema":{"type":"object","required":["item_id","idempotency_key"],"additionalProperties":false,"properties":{"item_id":{"type":"string"},"idempotency_key":{"type":"string"}}},"read_only":false},{"name":"upkeep.delete_asset","title":"Delete a reviewed asset","description":"Permanently delete the exact asset in a recent deletion proposal, only after explicit user approval. Requires confirmed=true and an idempotency key. Refuses changed assets and linked relationships; never silently retires or deletes other assets.","input_schema":{"type":"object","required":["proposal_id","confirmed","idempotency_key"],"additionalProperties":false,"properties":{"proposal_id":{"type":"string"},"confirmed":{"type":"boolean","enum":[true]},"idempotency_key":{"type":"string"}}},"read_only":false},{"name":"upkeep.propose_asset_merge","title":"Review duplicate consolidation","description":"Preview two exact account-owned items before consolidating duplicate physical assets. Show counts, conflicting values and blockers. Nothing is changed.","input_schema":{"type":"object","required":["source_id","target_id","idempotency_key"],"properties":{"source_id":{"type":"string"},"target_id":{"type":"string"},"idempotency_key":{"type":"string"}},"additionalProperties":false},"read_only":false},{"name":"upkeep.confirm_asset_merge","title":"Consolidate reviewed duplicate items","description":"After explicit user approval, consolidate a fresh preview. Histories survive and the duplicate becomes a retired link. Refuse conflicting physical identifiers and changed previews.","input_schema":{"type":"object","required":["proposal_id","confirmed","idempotency_key"],"properties":{"proposal_id":{"type":"string"},"confirmed":{"type":"boolean","enum":[true]},"acknowledge_conflicts":{"type":"boolean"},"idempotency_key":{"type":"string"}},"additionalProperties":false},"read_only":false},{"name":"upkeep.propose_supply","title":"Propose a supply on an existing asset","description":"Track consumables such as baking soda or filters on their existing parent asset, with a distinct compartment and optional reviewed replacement schedule. Search for the parent first; never create a fake durable asset. Does not save until confirm_supply.","input_schema":{"type":"object","required":["item_id","supply","idempotency_key"],"properties":{"item_id":{"type":"string"},"supply":{"type":"object","required":["name","kind"],"properties":{"name":{"type":"string"},"kind":{"type":"string","enum":["filter","battery","consumable","part"]},"component_location":{"type":"string","maxLength":100},"part_number":{"type":"string"},"quantity":{"type":"integer","minimum":0},"reorder_threshold":{"type":"integer","minimum":0},"purchase_url":{"type":"string"},"notes":{"type":"string"},"replacement_plan":{"type":"object","properties":{"name":{"type":"string"},"instructions":{"type":"string"},"recurrence_rule":{"type":"string","description":"monthly, yearly, every_N_days, or every_N_months."},"usage_metric":{"type":"string","enum":["distance","hours"]},"usage_unit":{"type":"string","enum":["mi","km","h"]},"usage_interval":{"type":"number","exclusiveMinimum":0},"usage_threshold":{"type":"number","minimum":0},"source_document_id":{"type":"string"},"supply_id":{"type":"string","description":"Existing supply on this asset whose replacement is scheduled."},"next_due_on":{"type":"string","format":"date"},"due_window_days":{"type":"integer","minimum":0,"maximum":90,"default":7},"priority":{"type":"string","enum":["low","routine","high","critical"],"default":"routine"},"estimated_minutes":{"type":"integer","minimum":1},"safety_level":{"type":"string","enum":["normal","caution","professional"],"default":"normal"},"source_quote":{"type":"string","description":"Short quote or citation from a manual or trusted source."}},"additionalProperties":false}},"additionalProperties":false},"idempotency_key":{"type":"string"}},"additionalProperties":false},"read_only":false},{"name":"upkeep.confirm_supply","title":"Confirm reviewed supply and schedule","description":"Only after user approval: save the exact supply draft and optional replacement plan on its parent asset. Retrying a confirmed proposal returns the same supply.","input_schema":{"type":"object","required":["proposal_id","idempotency_key"],"properties":{"proposal_id":{"type":"string"},"idempotency_key":{"type":"string"}},"additionalProperties":false},"read_only":false},{"name":"upkeep.move_maintenance_plan","title":"Move a reviewed maintenance plan","description":"After explicit user approval showing current and destination assets, atomically transfer a plan preserving schedule, occurrences, history and evidence. Equivalent plans are rejected. Select a destination supply or explicitly detach the old supply. Idempotent retries use the same key.","input_schema":{"type":"object","required":["plan_id","destination_id","confirmed","idempotency_key"],"properties":{"plan_id":{"type":"string"},"destination_id":{"type":"string"},"confirmed":{"type":"boolean","enum":[true]},"supply_id":{"type":"string"},"detach_supply":{"type":"boolean"},"idempotency_key":{"type":"string"}},"additionalProperties":false},"read_only":false}],"meta":{"total":46}}