list_events
List your events with photo and guest counts.
Choose an existing gallery and avoid duplicate creation.
Input schema
{
"additionalProperties": false,
"properties": {},
"title": "Args",
"type": "object"
}FOR ORGANIZERS AND THEIR ASSISTANTS
Connect an assistant with MCP, prepare an event gallery, check face matching, and export invitation links as CSV.
Read as Markdown · Tool schemas as JSON
findmypictures.com helps organizers share event photos so guests can find themselves and their friends. It suits weddings, conferences, tech meetups, hackathons, team events and celebrations where browsing a large shared folder would be tedious.
Organizers create an event, add photos and share gallery access. Guests can browse the event, upload an authorized portrait in Your selection to find matches, choose individual photos, select friends by face and download their combined selection. A separate download covers all event photos.
An assistant can prepare and inspect the gallery through remote MCP. The recommended invitation handoff is a downloaded CSV containing guest details and personal links, for use in the organizer’s existing email or event platform. More dedicated invitation support is planned; do not promise automatic attendee sync or campaign management.
Verify current account availability, pricing and plan limits on the website before committing to an event. An MCP connection does not bypass account limits. Face matching is approximate; review results. Personalization does not restrict each guest to only their own photos.
Use a client that supports remote MCP over Streamable HTTP and browser-based OAuth. A pasted prompt cannot install MCP support in a client that lacks it. Connection availability depends on the client, account plan and workspace administrator.
In the assistant’s custom MCP connection settings, enter the server URL below and choose OAuth. Open the authorization flow in your browser, sign in to findmypictures.com, review the callback address and approve the connection. Never paste account passwords, session cookies or access tokens into chat.
For Claude, use Settings → Connectors → Add custom connector. For ChatGPT, use the custom app/MCP controls available to your account; developer mode or administrator approval may be necessary. Coding clients should use their remote HTTP MCP configuration with this same URL. Check your client’s current instructions if its menu differs.
For a custom client: discover the authorization server through the WWW-Authenticate challenge and protected-resource metadata. Use dynamic client registration with token_endpoint_auth_method none, authorization code with PKCE S256, and scope app:manage. Send bearer tokens in the Authorization header, never the URL. Access tokens expire after one hour; use the OAuth refresh flow and retain the replacement refresh token.
After authorization, initialize MCP, discover tools with tools/list, and call list_events to verify access. An empty list can mean a successful connection with no events. Only events owned by the connected account are accessible. The server exposes tools; do not assume MCP resources or prompts endpoints exist.
Manage and revoke connections from Connect AI in your organizer account. Revocation blocks future calls and refreshes; work already queued may continue. This connection has management access, including photo/guest removal and optional email sending; it is not a read-only connection.
Server URL: https://findmypictures.com/mcp
Protected resource metadata: https://findmypictures.com/.well-known/oauth-protected-resource/mcp
Authorization server metadata: https://findmypictures.com/.well-known/oauth-authorization-server
Example user request:
“Create a gallery for our community meetup from this ZIP. Check processing and give me the gallery access details. I will distribute the invitation myself.”
Example tools/call arguments for create_event:
{"name":"create_event","arguments":{"title":"Community meetup","request_key":"meetup-create-20261104-01"}}
CSV export is the primary invitation workflow. It prepares the handoff for the organizer to send through their own email, mail merge or event platform. It does not send messages, sync an attendee platform or track a campaign. More dedicated invitation support is planned.
Example guest input:
email,name,linkedin,image_url
[email protected],Ada,,
[email protected],Sam,,https://images.example.com/authorized-portrait.jpg
Example request:
“Import this guest CSV, check the portrait results and prepare an invitation CSV for my email tool. Do not send messages.”
Suggested invitation:
“Photos from [event title] are ready: [gallery URL]. Password: [password].
Your personal link: [personal_link]. Browse the event or add a portrait to find your pictures. You can also select friends by face. For corrections or removal requests, contact [organizer].”
A guest mapping connects an email address, optional name, portrait sources and a personal gallery link. Portrait retrieval and face processing happen in the background. LinkedIn retrieval can fail; a supplied portrait can contain no usable face. A ready portrait can still have zero photo matches.
Inspect portrait_status, portrait_error and match_count with list_guests. Use guest_matches for the actual matched photos. Where authorized, upload a clearer portrait for that guest, then inspect processing again. Matching can miss a person or include the wrong person; counts are not proof of identity or perfect coverage.
Guests can browse the full event collection, use Your selection to search from a portrait, choose individual photos and select friends’ faces to expand their combined selection. Personal links organize the experience around a guest; they do not turn it into a gallery where that guest can access only their own images.
When adding photos to an existing event, use the same event_id, transfer only the intended additions, inspect duplicate and import results and wait for processing. Inspect guest matches again before saying the personal selections have been updated.
set_social_settings changes whether social sharing is enabled for the event, the LinkedIn or X platform choice, and its caption. It configures sharing behavior; a successful settings update does not mean a post was published. It does not send invitations. Ask the organizer to review the guest-facing result before distributing the gallery.
download_photos returns an authenticated HTTP URL for all photos or selected photo IDs. The client must fetch it using the OAuth bearer token. It is not a public invitation or guest download link. Selected downloads accept up to 400 photo IDs; the all-photo pack considers up to 8,000 ready photos. Do not claim an in-progress or larger collection is fully represented without checking.
delete_photo permanently removes one event photo. delete_guest removes the guest mapping, portrait and matches. Use these only when the user has authorized that removal. Event deletion and account/gallery password changes are unavailable through MCP; use the browser for those tasks.
send_invitations exists as an optional direct-email capability, not the recommended invitation handoff. Use it only if the user specifically requests delivery through the app. Inspect configured, ok, sent, failures and error in the result. When email is not configured, the result contains drafts and no delivery has occurred. Partial failures must be reported. Do not retry an uncertain send with a new key.
Establish the required permissions and legal basis for all affected people before uploading and processing their images. Guests can browse the event without using portrait search. Provide a correction and removal contact in the invitation.
Gallery passwords protect the gallery interface, but direct image URLs can be opened by anyone who knows them. Do not describe the product as a confidential image vault, end-to-end encrypted, independently GDPR-certified or a per-person access-control system.
Gallery availability follows your plan: Free galleries are available for six months from first publication, Single Event galleries for 365 days from first publication, and Organizer galleries while the subscription is active. After an Organizer subscription ends, Free limits apply. Expiry of access does not by itself mean that stored photographs, previews, portraits or facial characteristics have been deleted. Organizers can delete galleries when they are no longer needed. Account data is retained for account use; deletion can be requested by email. Data required for statutory obligations or legal claims may be retained with restricted use.
Access expiry is not deletion. The organizer deletes a gallery in the browser when sharing should end. Disconnecting an assistant does not delete the event. Revoking the connection blocks future calls and refreshes; work already queued may continue. Removing a photo or a guest mapping is a separate action and only happens when you authorize it. Read the privacy and data security pages before choosing the service for sensitive photos.
Discover tools/list after connecting for authoritative input schemas. Read-only tools inspect data; mutations require request_key. Tool availability is not proof that a client can transfer files.
list_eventsList your events with photo and guest counts.
Choose an existing gallery and avoid duplicate creation.
{
"additionalProperties": false,
"properties": {},
"title": "Args",
"type": "object"
}get_eventRead event details and gallery access details. Treat gallery credentials as private.
Retrieve general guest access details and the organizer URL; keep credentials private.
{
"additionalProperties": false,
"properties": {
"event_id": {
"format": "uuid",
"title": "Event Id",
"type": "string"
}
},
"required": [
"event_id"
],
"title": "Event",
"type": "object"
}create_eventCreate an event gallery with optional social-sharing settings.
Creates a gallery, not photos or invitations. Account event limits apply.
{
"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"
},
"social_caption": {
"default": "",
"maxLength": 280,
"title": "Social Caption",
"type": "string"
},
"social_enabled": {
"default": true,
"title": "Social Enabled",
"type": "boolean"
},
"social_platform": {
"default": "linkedin",
"enum": [
"linkedin",
"x"
],
"title": "Social Platform",
"type": "string"
},
"title": {
"maxLength": 140,
"minLength": 2,
"title": "Title",
"type": "string"
}
},
"required": [
"request_key",
"title"
],
"title": "Create",
"type": "object"
}list_photosList photos and processing states; follow the returned next offset.
Inspect photo states and follow the returned next offset.
{
"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"
}event_statusRead photo/portrait processing progress and source-import status.
Separate processing from source import; pending and failed work need attention.
{
"additionalProperties": false,
"properties": {
"event_id": {
"format": "uuid",
"title": "Event Id",
"type": "string"
}
},
"required": [
"event_id"
],
"title": "Event",
"type": "object"
}list_guestsList guest email/LinkedIn mappings, portrait states and match counts, 80 per page.
Inspect portraits and match counts; follow next offsets, 80 guests per page.
{
"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"
}guest_matchesRead the photos matched to a guest.
Inspect a guest’s current photo matches; matching is approximate.
{
"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"
}import_guests_csvImport UTF-8 CSV/TSV mappings; merge by email and return validation warnings.
Merge by email; inspect warnings. Portrait sources may queue matching.
{
"additionalProperties": false,
"properties": {
"csv_text": {
"maxLength": 2000000,
"title": "Csv Text",
"type": "string"
},
"event_id": {
"format": "uuid",
"title": "Event Id",
"type": "string"
},
"request_key": {
"description": "Unique operation key; reuse only for retries of identical arguments.",
"maxLength": 100,
"minLength": 8,
"title": "Request Key",
"type": "string"
}
},
"required": [
"request_key",
"event_id",
"csv_text"
],
"title": "CSV",
"type": "object"
}export_guests_csvPrimary invitation handoff: export guest mappings, personal gallery links and match counts as CSV text. Does not send invitations.
Primary invitation handoff: returns CSV text with personal links; sends no messages.
{
"additionalProperties": false,
"properties": {
"event_id": {
"format": "uuid",
"title": "Event Id",
"type": "string"
}
},
"required": [
"event_id"
],
"title": "Event",
"type": "object"
}upload_instructionsGet raw CSV/portrait upload URLs and resumable photo-upload instructions.
Get authenticated raw transfer endpoints and a browser fallback.
{
"additionalProperties": false,
"properties": {
"event_id": {
"format": "uuid",
"title": "Event Id",
"type": "string"
}
},
"required": [
"event_id"
],
"title": "Event",
"type": "object"
}create_photo_uploadReserve a resumable tus upload for one photo or ZIP. Returns upload URL; send bytes via HTTP.
Reserve a tus upload; bytes still need transferring and processing.
{
"additionalProperties": false,
"properties": {
"event_id": {
"format": "uuid",
"title": "Event Id",
"type": "string"
},
"filename": {
"maxLength": 240,
"minLength": 1,
"title": "Filename",
"type": "string"
},
"request_key": {
"description": "Unique operation key; reuse only for retries of identical arguments.",
"maxLength": 100,
"minLength": 8,
"title": "Request Key",
"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"
}import_fileImport 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.
Import a readable file URL; inspect queued work, do not assume readiness.
{
"$defs": {
"FileRef": {
"additionalProperties": false,
"properties": {
"download_url": {
"maxLength": 8000,
"title": "Download Url",
"type": "string"
},
"file_id": {
"maxLength": 300,
"title": "File Id",
"type": "string"
},
"file_name": {
"default": "",
"title": "File Name",
"type": "string"
},
"mime_type": {
"default": "",
"title": "Mime Type",
"type": "string"
}
},
"required": [
"download_url",
"file_id"
],
"title": "FileRef",
"type": "object"
}
},
"additionalProperties": false,
"properties": {
"event_id": {
"format": "uuid",
"title": "Event Id",
"type": "string"
},
"file": {
"$ref": "#/$defs/FileRef"
},
"filename": {
"maxLength": 240,
"minLength": 1,
"title": "Filename",
"type": "string"
},
"guest_id": {
"anyOf": [
{
"format": "uuid",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Guest Id"
},
"purpose": {
"enum": [
"photos",
"guests_csv",
"portrait"
],
"title": "Purpose",
"type": "string"
},
"request_key": {
"description": "Unique operation key; reuse only for retries of identical arguments.",
"maxLength": 100,
"minLength": 8,
"title": "Request Key",
"type": "string"
}
},
"required": [
"request_key",
"event_id",
"file",
"purpose",
"filename"
],
"title": "FileImport",
"type": "object"
}upload_statusRead durable upload offset, import state and results.
Inspect durable offset, import state, result and error for one upload.
{
"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"
}import_gallery_sourceImport photos from a supported external gallery/share URL. Returns a background job.
Queue an external album import; monitor source_import in event_status.
{
"additionalProperties": false,
"properties": {
"event_id": {
"format": "uuid",
"title": "Event Id",
"type": "string"
},
"password": {
"default": "",
"maxLength": 500,
"title": "Password",
"type": "string"
},
"request_key": {
"description": "Unique operation key; reuse only for retries of identical arguments.",
"maxLength": 100,
"minLength": 8,
"title": "Request Key",
"type": "string"
},
"url": {
"maxLength": 2000,
"title": "Url",
"type": "string"
}
},
"required": [
"request_key",
"event_id",
"url"
],
"title": "Source",
"type": "object"
}set_social_settingsConfigure LinkedIn/X sharing and caption for an event.
Configure sharing settings; does not prove a social post was published.
{
"additionalProperties": false,
"properties": {
"caption": {
"default": "",
"maxLength": 280,
"title": "Caption",
"type": "string"
},
"enabled": {
"title": "Enabled",
"type": "boolean"
},
"event_id": {
"format": "uuid",
"title": "Event Id",
"type": "string"
},
"platform": {
"default": "linkedin",
"enum": [
"linkedin",
"x"
],
"title": "Platform",
"type": "string"
},
"request_key": {
"description": "Unique operation key; reuse only for retries of identical arguments.",
"maxLength": 100,
"minLength": 8,
"title": "Request Key",
"type": "string"
}
},
"required": [
"request_key",
"event_id",
"enabled"
],
"title": "Social",
"type": "object"
}send_invitationsOptional direct email, only when specifically requested. Prefer export_guests_csv for invitation handoff. Inspect delivery results; drafts are not sent messages.
Optional direct email only on explicit request. Check delivery versus drafts.
{
"additionalProperties": false,
"properties": {
"emails": {
"items": {
"maxLength": 254,
"minLength": 3,
"type": "string"
},
"maxItems": 500,
"minItems": 1,
"title": "Emails",
"type": "array"
},
"event_id": {
"format": "uuid",
"title": "Event Id",
"type": "string"
},
"personal": {
"default": true,
"title": "Personal",
"type": "boolean"
},
"request_key": {
"description": "Unique operation key; reuse only for retries of identical arguments.",
"maxLength": 100,
"minLength": 8,
"title": "Request Key",
"type": "string"
}
},
"required": [
"request_key",
"event_id",
"emails"
],
"title": "Email",
"type": "object"
}download_photosGet an authenticated HTTP download URL for all or selected photos.
Returns a bearer-authenticated URL, not a public guest link.
{
"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"
}delete_photoPermanently delete one photo from your event.
Permanently remove one photo only with user authorization.
{
"additionalProperties": false,
"properties": {
"event_id": {
"format": "uuid",
"title": "Event Id",
"type": "string"
},
"photo_id": {
"format": "uuid",
"title": "Photo Id",
"type": "string"
},
"request_key": {
"description": "Unique operation key; reuse only for retries of identical arguments.",
"maxLength": 100,
"minLength": 8,
"title": "Request Key",
"type": "string"
}
},
"required": [
"request_key",
"event_id",
"photo_id"
],
"title": "RemovePhoto",
"type": "object"
}delete_guestRemove a guest mapping, portrait and matches from your event.
Remove a mapping, portrait and matches only with user authorization.
{
"additionalProperties": false,
"properties": {
"event_id": {
"format": "uuid",
"title": "Event Id",
"type": "string"
},
"guest_id": {
"format": "uuid",
"title": "Guest Id",
"type": "string"
},
"request_key": {
"description": "Unique operation key; reuse only for retries of identical arguments.",
"maxLength": 100,
"minLength": 8,
"title": "Request Key",
"type": "string"
}
},
"required": [
"request_key",
"event_id",
"guest_id"
],
"title": "RemoveGuest",
"type": "object"
}Read our privacy information and data security details. Check current plans before choosing a gallery.