{"ok":true,"result":{"protocolVersion":1,"name":"Una Agent Tools","description":"Provider-neutral external agent tools for scoped Una access.","endpoint":"/","endpointAliases":["/mcp"],"authentication":{"type":"bearer","tokenStorage":"sha256 token hash only"},"idempotency":{"requiredForSideEffects":true,"requestField":"idempotencyKey","maxLength":160},"maxRequestBytes":65536,"rateLimits":{"windowSeconds":60,"read":{"agent":120,"household":600},"write":{"agent":30,"household":120}},"response":{"success":{"ok":true,"result":"tool-specific result","requestId":"optional caller-provided string"},"error":{"ok":false,"error":{"code":"bad_request | unauthorized | rate_limited | idempotency_conflict | not_found_or_not_allowed | internal_error","message":"stable generic message"},"requestId":"optional caller-provided string"}},"encryptedPayloads":{"encoding":"JSON UTF-8 encrypted locally with the requested keyKind/keyVersion before calling write tools.","calendarEvent":{"usedBy":["calendar.create_event","calendar.update_event"],"requiredFields":["title"],"optionalFields":["emoji","notes","location","url","linkedListIds","linkedItemIds"],"relationshipSemantics":"Use linkedListIds for full related lists and linkedItemIds for specific related list items, including notes-list recipe items. Use url for an external recipe or resource link."},"sharedList":{"usedBy":["lists.create_list"],"requiredFields":["name"],"optionalFields":["emoji"]},"listItem":{"usedBy":["lists.add_item","lists.update_item"],"requiredFields":["name"],"optionalFields":["url","notes"],"relationshipSemantics":"Recipe notes, shopping items, todos, routines, and packing items are list items. Link them to calendar events through the calendar event payload."}},"tools":[{"name":"system.manifest","description":"Return this provider-neutral capability manifest.","authRequired":false,"scopes":[],"sideEffects":false,"inputSchema":{"type":"object","additionalProperties":false,"properties":{},"required":[]}},{"name":"people.list_profiles","description":"List granted household person profiles.","authRequired":true,"scopes":["people:read"],"sideEffects":false,"inputSchema":{"type":"object","additionalProperties":false,"properties":{},"required":[]}},{"name":"agent.get_context","aliases":["una.get_context"],"description":"Return this authenticated assistant's scopes and grants without household plaintext.","authRequired":true,"scopes":[],"sideEffects":false,"inputSchema":{"type":"object","additionalProperties":false,"properties":{},"required":[]}},{"name":"crypto.list_wrapped_keys","description":"List wrapped agent-readable content keys for this agent connection.","authRequired":true,"scopes":[],"sideEffects":false,"inputSchema":{"type":"object","additionalProperties":false,"properties":{},"required":[]}},{"name":"calendar.list_events","description":"List scoped calendar events in a bounded time window.","authRequired":true,"scopes":["calendar:read"],"sideEffects":false,"inputSchema":{"type":"object","additionalProperties":false,"properties":{"start":{"type":"number"},"end":{"type":"number"},"personProfileId":{"type":"string"},"limit":{"type":"number"}},"required":["start","end"]}},{"name":"calendar.get_event","description":"Get one scoped calendar event.","authRequired":true,"scopes":["calendar:read"],"sideEffects":false,"inputSchema":{"type":"object","additionalProperties":false,"properties":{"eventId":{"type":"string"}},"required":["eventId"]}},{"name":"calendar.find_free_slots","description":"Find busy/free openings without returning event details.","authRequired":true,"scopes":["calendar:read"],"sideEffects":false,"inputSchema":{"type":"object","additionalProperties":false,"properties":{"start":{"type":"number"},"end":{"type":"number"},"durationMinutes":{"type":"number"},"personProfileIds":{"type":"array","items":{"type":"string"}},"constraints":{"type":"object","additionalProperties":false,"properties":{"dayStartMinutes":{"type":"number"},"dayEndMinutes":{"type":"number"},"weekdays":{"type":"array","items":{"type":"number"}}},"required":[]}},"required":["start","end","durationMinutes"]}},{"name":"calendar.create_event","description":"Create a scoped agent-readable calendar event.","authRequired":true,"scopes":["calendar:write"],"sideEffects":true,"inputSchema":{"type":"object","additionalProperties":false,"properties":{"startTime":{"type":"number"},"endTime":{"type":"number"},"allDay":{"type":"boolean"},"personProfileIds":{"type":"array","items":{"type":"string"}},"keyKind":{"type":"string","enum":["agentReadableContent"]},"keyVersion":{"type":"number"},"payloadCiphertext":{"type":"string","contentEncoding":"base64"},"payloadNonce":{"type":"string","contentEncoding":"base64"},"agentAccess":{"type":"string","enum":["busy","agentReadable"]},"visibility":{"type":"string","enum":["household","personal"]},"recurrenceRule":{"type":"string"},"reminderMinutesBefore":{"type":"number"}},"required":["startTime","endTime","allDay","personProfileIds","keyKind","keyVersion","payloadCiphertext","payloadNonce","agentAccess"]}},{"name":"calendar.update_event","description":"Update time, assignments, reminders, recurrence, access, or encrypted payload on a writable scoped event.","authRequired":true,"scopes":["calendar:write"],"sideEffects":true,"inputSchema":{"type":"object","additionalProperties":false,"properties":{"eventId":{"type":"string"},"startTime":{"type":"number"},"endTime":{"type":"number"},"allDay":{"type":"boolean"},"personProfileIds":{"type":"array","items":{"type":"string"}},"keyKind":{"type":"string","enum":["agentReadableContent"]},"keyVersion":{"type":"number"},"payloadCiphertext":{"type":"string","contentEncoding":"base64"},"payloadNonce":{"type":"string","contentEncoding":"base64"},"agentAccess":{"type":"string","enum":["busy","agentReadable"]},"visibility":{"type":"string","enum":["household","personal"]},"recurrenceRule":{"type":["string","null"]},"reminderMinutesBefore":{"type":["number","null"]}},"required":["eventId"]}},{"name":"calendar.delete_event","description":"Soft-delete a writable scoped event.","authRequired":true,"scopes":["calendar:delete"],"sideEffects":true,"inputSchema":{"type":"object","additionalProperties":false,"properties":{"eventId":{"type":"string"}},"required":["eventId"]}},{"name":"lists.list_lists","aliases":["shopping.list_lists"],"description":"List granted agent-readable lists.","authRequired":true,"scopes":["lists:read"],"sideEffects":false,"inputSchema":{"type":"object","additionalProperties":false,"properties":{},"required":[]}},{"name":"lists.list_items","aliases":["shopping.list_items"],"description":"List items in a granted agent-readable list.","authRequired":true,"scopes":["lists:read"],"sideEffects":false,"inputSchema":{"type":"object","additionalProperties":false,"properties":{"listId":{"type":"string"}},"required":["listId"]}},{"name":"lists.create_list","aliases":["shopping.create_list"],"description":"Create an agent-readable shared list and grant this connection write access.","authRequired":true,"scopes":["lists:write"],"sideEffects":true,"inputSchema":{"type":"object","additionalProperties":false,"properties":{"kind":{"type":"string","enum":["shopping","todo","chores","notes"]},"assignedPersonProfileId":{"type":["string","null"]},"keyKind":{"type":"string","enum":["agentReadableContent"]},"keyVersion":{"type":"number"},"payloadCiphertext":{"type":"string","contentEncoding":"base64"},"payloadNonce":{"type":"string","contentEncoding":"base64"},"sortOrder":{"type":"number"}},"required":["keyKind","keyVersion","payloadCiphertext","payloadNonce"]}},{"name":"lists.add_item","aliases":["shopping.add_item"],"description":"Add an encrypted item to a writable agent-readable list.","authRequired":true,"scopes":["lists:write"],"sideEffects":true,"inputSchema":{"type":"object","additionalProperties":false,"properties":{"listId":{"type":"string"},"keyKind":{"type":"string","enum":["agentReadableContent"]},"keyVersion":{"type":"number"},"payloadCiphertext":{"type":"string","contentEncoding":"base64"},"payloadNonce":{"type":"string","contentEncoding":"base64"},"sortOrder":{"type":"number"},"assignedPersonProfileIds":{"type":"array","items":{"type":"string"}},"dueAt":{"type":"number"},"dueAllDay":{"type":"boolean"},"reminderMinutesBefore":{"type":"number"}},"required":["listId","keyKind","keyVersion","payloadCiphertext","payloadNonce","sortOrder"]}},{"name":"lists.update_item","aliases":["shopping.update_item"],"description":"Update encrypted content, assignment, due date, reminder, or order on a writable agent-readable list item.","authRequired":true,"scopes":["lists:write"],"sideEffects":true,"inputSchema":{"type":"object","additionalProperties":false,"properties":{"itemId":{"type":"string"},"keyKind":{"type":"string","enum":["agentReadableContent"]},"keyVersion":{"type":"number"},"payloadCiphertext":{"type":"string","contentEncoding":"base64"},"payloadNonce":{"type":"string","contentEncoding":"base64"},"sortOrder":{"type":"number"},"assignedPersonProfileIds":{"type":["array","null"],"items":{"type":"string"}},"dueAt":{"type":["number","null"]},"dueAllDay":{"type":["boolean","null"]},"reminderMinutesBefore":{"type":["number","null"]}},"required":["itemId"]}},{"name":"lists.set_item_checked","aliases":["shopping.set_item_checked"],"description":"Mark a granted list item complete or incomplete.","authRequired":true,"scopes":["lists:write"],"sideEffects":true,"inputSchema":{"type":"object","additionalProperties":false,"properties":{"itemId":{"type":"string"},"checked":{"type":"boolean"}},"required":["itemId","checked"]}}]}}