{"tools":[{"name":"list_events","description":"List your events with photo and guest counts.","inputSchema":{"additionalProperties":false,"properties":{},"title":"Args","type":"object"},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["app:manage"]}],"outcome":"Choose an existing gallery and avoid duplicate creation."},{"name":"get_event","description":"Read event details and gallery access details. Treat gallery credentials as private.","inputSchema":{"additionalProperties":false,"properties":{"event_id":{"format":"uuid","title":"Event Id","type":"string"}},"required":["event_id"],"title":"Event","type":"object"},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["app:manage"]}],"outcome":"Retrieve general guest access details and the organizer URL; keep credentials private."},{"name":"create_event","description":"Create an event gallery with optional social-sharing settings.","inputSchema":{"additionalProperties":false,"properties":{"request_key":{"description":"Unique operation key; reuse only for retries of identical arguments.","maxLength":100,"minLength":8,"title":"Request Key","type":"string"},"title":{"maxLength":140,"minLength":2,"title":"Title","type":"string"},"social_enabled":{"default":true,"title":"Social Enabled","type":"boolean"},"social_platform":{"default":"linkedin","enum":["linkedin","x"],"title":"Social Platform","type":"string"},"social_caption":{"default":"","maxLength":280,"title":"Social Caption","type":"string"}},"required":["request_key","title"],"title":"Create","type":"object"},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["app:manage"]}],"outcome":"Creates a gallery, not photos or invitations. Account event limits apply."},{"name":"list_photos","description":"List photos and processing states; follow the returned next offset.","inputSchema":{"additionalProperties":false,"properties":{"event_id":{"format":"uuid","title":"Event Id","type":"string"},"offset":{"default":0,"maximum":20000,"minimum":0,"title":"Offset","type":"integer"}},"required":["event_id"],"title":"Page","type":"object"},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["app:manage"]}],"outcome":"Inspect photo states and follow the returned next offset."},{"name":"event_status","description":"Read photo/portrait processing progress and source-import status.","inputSchema":{"additionalProperties":false,"properties":{"event_id":{"format":"uuid","title":"Event Id","type":"string"}},"required":["event_id"],"title":"Event","type":"object"},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["app:manage"]}],"outcome":"Separate processing from source import; pending and failed work need attention."},{"name":"list_guests","description":"List guest email/LinkedIn mappings, portrait states and match counts, 80 per page.","inputSchema":{"additionalProperties":false,"properties":{"event_id":{"format":"uuid","title":"Event Id","type":"string"},"offset":{"default":0,"maximum":20000,"minimum":0,"title":"Offset","type":"integer"}},"required":["event_id"],"title":"Page","type":"object"},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["app:manage"]}],"outcome":"Inspect portraits and match counts; follow next offsets, 80 guests per page."},{"name":"guest_matches","description":"Read the photos matched to a guest.","inputSchema":{"additionalProperties":false,"properties":{"event_id":{"format":"uuid","title":"Event Id","type":"string"},"guest_id":{"format":"uuid","title":"Guest Id","type":"string"}},"required":["event_id","guest_id"],"title":"Guest","type":"object"},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["app:manage"]}],"outcome":"Inspect a guest’s current photo matches; matching is approximate."},{"name":"import_guests_csv","description":"Import UTF-8 CSV/TSV mappings; merge by email and return validation warnings.","inputSchema":{"additionalProperties":false,"properties":{"request_key":{"description":"Unique operation key; reuse only for retries of identical arguments.","maxLength":100,"minLength":8,"title":"Request Key","type":"string"},"event_id":{"format":"uuid","title":"Event Id","type":"string"},"csv_text":{"maxLength":2000000,"title":"Csv Text","type":"string"}},"required":["request_key","event_id","csv_text"],"title":"CSV","type":"object"},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["app:manage"]}],"outcome":"Merge by email; inspect warnings. Portrait sources may queue matching."},{"name":"export_guests_csv","description":"Primary invitation handoff: export guest mappings, personal gallery links and match counts as CSV text. Does not send invitations.","inputSchema":{"additionalProperties":false,"properties":{"event_id":{"format":"uuid","title":"Event Id","type":"string"}},"required":["event_id"],"title":"Event","type":"object"},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["app:manage"]}],"outcome":"Primary invitation handoff: returns CSV text with personal links; sends no messages."},{"name":"upload_instructions","description":"Get raw CSV/portrait upload URLs and resumable photo-upload instructions.","inputSchema":{"additionalProperties":false,"properties":{"event_id":{"format":"uuid","title":"Event Id","type":"string"}},"required":["event_id"],"title":"Event","type":"object"},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["app:manage"]}],"outcome":"Get authenticated raw transfer endpoints and a browser fallback."},{"name":"create_photo_upload","description":"Reserve a resumable tus upload for one photo or ZIP. Returns upload URL; send bytes via HTTP.","inputSchema":{"additionalProperties":false,"properties":{"request_key":{"description":"Unique operation key; reuse only for retries of identical arguments.","maxLength":100,"minLength":8,"title":"Request Key","type":"string"},"event_id":{"format":"uuid","title":"Event Id","type":"string"},"filename":{"maxLength":240,"minLength":1,"title":"Filename","type":"string"},"size_bytes":{"exclusiveMinimum":0,"maximum":10737418240,"title":"Size Bytes","type":"integer"}},"required":["request_key","event_id","filename","size_bytes"],"title":"Upload","type":"object"},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["app:manage"]}],"outcome":"Reserve a tus upload; bytes still need transferring and processing."},{"name":"import_file","description":"Import an attached file/reference or HTTPS file URL: photos/ZIP up to 80 MiB, CSV up to 2 MB, portrait up to 15 MiB. Larger galleries use resumable upload.","inputSchema":{"$defs":{"FileRef":{"additionalProperties":false,"properties":{"download_url":{"maxLength":8000,"title":"Download Url","type":"string"},"file_id":{"maxLength":300,"title":"File Id","type":"string"},"mime_type":{"default":"","title":"Mime Type","type":"string"},"file_name":{"default":"","title":"File Name","type":"string"}},"required":["download_url","file_id"],"title":"FileRef","type":"object"}},"additionalProperties":false,"properties":{"request_key":{"description":"Unique operation key; reuse only for retries of identical arguments.","maxLength":100,"minLength":8,"title":"Request Key","type":"string"},"event_id":{"format":"uuid","title":"Event Id","type":"string"},"file":{"$ref":"#/$defs/FileRef"},"purpose":{"enum":["photos","guests_csv","portrait"],"title":"Purpose","type":"string"},"filename":{"maxLength":240,"minLength":1,"title":"Filename","type":"string"},"guest_id":{"anyOf":[{"format":"uuid","type":"string"},{"type":"null"}],"default":null,"title":"Guest Id"}},"required":["request_key","event_id","file","purpose","filename"],"title":"FileImport","type":"object"},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"securitySchemes":[{"type":"oauth2","scopes":["app:manage"]}],"_meta":{"openai/fileParams":["file"]},"outcome":"Import a readable file URL; inspect queued work, do not assume readiness."},{"name":"upload_status","description":"Read durable upload offset, import state and results.","inputSchema":{"additionalProperties":false,"properties":{"event_id":{"format":"uuid","title":"Event Id","type":"string"},"upload_id":{"pattern":"^[a-f0-9]{32}$","title":"Upload Id","type":"string"}},"required":["event_id","upload_id"],"title":"UploadStatus","type":"object"},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["app:manage"]}],"outcome":"Inspect durable offset, import state, result and error for one upload."},{"name":"import_gallery_source","description":"Import photos from a supported external gallery/share URL. Returns a background job.","inputSchema":{"additionalProperties":false,"properties":{"request_key":{"description":"Unique operation key; reuse only for retries of identical arguments.","maxLength":100,"minLength":8,"title":"Request Key","type":"string"},"event_id":{"format":"uuid","title":"Event Id","type":"string"},"url":{"maxLength":2000,"title":"Url","type":"string"},"password":{"default":"","maxLength":500,"title":"Password","type":"string"}},"required":["request_key","event_id","url"],"title":"Source","type":"object"},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"securitySchemes":[{"type":"oauth2","scopes":["app:manage"]}],"outcome":"Queue an external album import; monitor source_import in event_status."},{"name":"set_social_settings","description":"Configure LinkedIn/X sharing and caption for an event.","inputSchema":{"additionalProperties":false,"properties":{"request_key":{"description":"Unique operation key; reuse only for retries of identical arguments.","maxLength":100,"minLength":8,"title":"Request Key","type":"string"},"event_id":{"format":"uuid","title":"Event Id","type":"string"},"enabled":{"title":"Enabled","type":"boolean"},"platform":{"default":"linkedin","enum":["linkedin","x"],"title":"Platform","type":"string"},"caption":{"default":"","maxLength":280,"title":"Caption","type":"string"}},"required":["request_key","event_id","enabled"],"title":"Social","type":"object"},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["app:manage"]}],"outcome":"Configure sharing settings; does not prove a social post was published."},{"name":"send_invitations","description":"Optional direct email, only when specifically requested. Prefer export_guests_csv for invitation handoff. Inspect delivery results; drafts are not sent mail.","inputSchema":{"additionalProperties":false,"properties":{"request_key":{"description":"Unique operation key; reuse only for retries of identical arguments.","maxLength":100,"minLength":8,"title":"Request Key","type":"string"},"event_id":{"format":"uuid","title":"Event Id","type":"string"},"emails":{"items":{"maxLength":254,"minLength":3,"type":"string"},"maxItems":500,"minItems":1,"title":"Emails","type":"array"},"personal":{"default":true,"title":"Personal","type":"boolean"}},"required":["request_key","event_id","emails"],"title":"Email","type":"object"},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"securitySchemes":[{"type":"oauth2","scopes":["app:manage"]}],"outcome":"Optional direct email only on explicit request. Check delivery versus drafts."},{"name":"download_photos","description":"Get an authenticated HTTP download URL for all or selected photos.","inputSchema":{"additionalProperties":false,"properties":{"event_id":{"format":"uuid","title":"Event Id","type":"string"},"kind":{"default":"all","enum":["all","selected"],"title":"Kind","type":"string"},"photo_ids":{"default":[],"items":{"format":"uuid","type":"string"},"maxItems":400,"title":"Photo Ids","type":"array"}},"required":["event_id"],"title":"Download","type":"object"},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["app:manage"]}],"outcome":"Returns a bearer-authenticated URL, not a public guest link."},{"name":"delete_photo","description":"Permanently delete one photo from your event.","inputSchema":{"additionalProperties":false,"properties":{"request_key":{"description":"Unique operation key; reuse only for retries of identical arguments.","maxLength":100,"minLength":8,"title":"Request Key","type":"string"},"event_id":{"format":"uuid","title":"Event Id","type":"string"},"photo_id":{"format":"uuid","title":"Photo Id","type":"string"}},"required":["request_key","event_id","photo_id"],"title":"RemovePhoto","type":"object"},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["app:manage"]}],"outcome":"Permanently remove one photo only with user authorization."},{"name":"delete_guest","description":"Remove a guest mapping, portrait and matches from your event.","inputSchema":{"additionalProperties":false,"properties":{"request_key":{"description":"Unique operation key; reuse only for retries of identical arguments.","maxLength":100,"minLength":8,"title":"Request Key","type":"string"},"event_id":{"format":"uuid","title":"Event Id","type":"string"},"guest_id":{"format":"uuid","title":"Guest Id","type":"string"}},"required":["request_key","event_id","guest_id"],"title":"RemoveGuest","type":"object"},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["app:manage"]}],"outcome":"Remove a mapping, portrait and matches only with user authorization."}]}