Connect your AI assistant
Ask about people, relationships, stories, and upcoming family dates through an MCP-compatible assistant.
Get connected
- Open Connected AI apps. A family admin first enables AI connections for the family.
- In your assistant’s connector settings, add
https://familytreemoments.com/mcpas a remote MCP server using Streamable HTTP and OAuth. - Sign in on Family Tree Moments, choose one family, and select the read and optional upload/editing permissions you want to grant.
- Try “Who are this person’s parents?”, “Find memories about our reunion,” or “Which family anniversaries are coming up?”
Everyone uses the same server address. Each person signs in and grants their own access. An invitation must be accepted before the family is available for connection.
Client menus and remote-connector availability vary. Your client needs OAuth authorization-code flow with S256 PKCE and resource indicators. Dynamic client registration is available; client-ID metadata documents are not supported in this release.
You stay in control
Connections read information you can already view. With optional write permissions, they can add people, edit profiles, upload photos and videos, create and edit memories, tag people, and organize albums using the same permissions and approval rules as the website. Viewers cannot write. Invitations, deletion and account administration are not included. Existing connections need fresh authorization for new permissions.
Access tokens expire after 15 minutes. The assistant can renew them for up to 90 days from authorization; a refresh token expires after 30 days without renewal. Disconnect anytime under Connected AI apps. An admin can disable the entire family’s access. Connections are also invalidated when family membership is removed, the account is disabled, or all account sessions are revoked.
Child accounts and the demo cannot grant access. The AI service’s privacy policies apply to information it receives. Disconnecting stops future requests but does not delete copies it already received.
For clients needing manual registration
Authorization metadata: /.well-known/oauth-authorization-server. Protected resource metadata: /.well-known/oauth-protected-resource/mcp. Register a client by POSTing its name and exact callback addresses to /oauth/register. Redirects must use HTTPS, except local loopback callbacks. Registration supports public clients and client secrets; PKCE is required for all clients. Never paste access tokens or secrets into a conversation.
Available read scopes: tree:read, memories:read, dates:read, help:read. Optional write scopes: tree:write for adding people and editing profiles, media:writefor uploads and memories:write for creating/editing memories and albums. Reconnect and select these permissions; they are unchecked by default. Clients must request the new scopes. Choose only the access you need.
A “connection expired” message means reconnect in your assistant. A family missing from the consent page usually means you have not joined it, or its admin has not enabled AI connections.
Add people and edit profiles
Reconnect your assistant and select “Add people and edit profiles”. If that option is missing, the client must request tree:writeduring authorization and refresh its available tools after connecting.
Use search_people before create_person to avoid duplicates. You can connect the new person to an existing relative with relativeTo and relationship.update_person changes only the supplied profile fields; omitted names, dates, biography and portrait are preserved. Website branch permissions and memorial-sharing rules still apply. Reuse the same requestId when retrying the same operation.
Save space with Google Photos links
A temporary upload link is not a Google Photos sharing link. Upload links default to full mode, which stores the photo or video on this site. To keep originals on Google, explicitly choose preview mode and include the Google Photos sharing link in the memory. The link alone does not supply a preview or the date taken.
Use upload_preview with image bytes, then create_memory with type: PHOTO, the returned assetId and externalUrl containing a Google Photos sharing link. For a video, supply a still image preview. Only a WebP preview of at most 100 KB is saved here. Captions, dates, people tags and albums work as usual.
The binary alternative is /mcp/upload?mode=preview&filename=preview.jpg. Preview input is limited to 20 MiB or the lower family limit. Existing upload and memory permissions are enough; refresh the tool list if the new tool is missing.
Supply the sharing link yourself; we do not fetch originals or create Google sharing links. An album link opens the album. Anyone with the sharing link may view it on Google Photos. Keep the originals and links available. Ten thousand previews use at most 1 GB before database and backup storage. The existing 60 uploads per hour and 120 MCP writes per hour still apply; pause batches when limited.
Upload from a computer without sharing your sign-in key
Ask your assistant to call create_upload_link with filename, mimeType and exact size in bytes. Or call create_upload_links with a files list of up to 50 entries. Each link expires after 15 minutes and accepts one file.
Send raw file bytes with PUT to the returned uploadUrl, using the returned headers. The temporary Authorization header permits only that upload. It is not your sign-in token. Keep it out of URLs, chat messages, shell history and verbose logs. Only a hash is stored on the server. Standard server access logs redact Authorization headers.
The PUT response contains assetId; use it with create_memory, then organize memories with the usual album tools. For Google Photos previews, request mode: preview and attach the sharing link when creating the memory. The default full mode stores a normal uploaded photo or video.
File type and exact size are bound to each link. Current family permissions, file limits, 60 uploads per hour, 120 MCP writes per hour and insufficient-space protection still apply at upload time. Batches do not reserve space or bypass limits. Link creation is limited to 120 links per hour. Revoking the connection or removing write access also invalidates unused links.
Use at most four uploads at a time. A busy response leaves the link available for retry before expiry. Every creation call returns fresh links. An accepted PUT consumes its link, including a failed transfer. If the result is lost, call get_upload_link_status with its uploadId. COMPLETED returns the saved assetId; FAILED or EXPIRED can be replaced with a new link. For UPLOADING or NEEDS_REVIEW, check before retrying to avoid duplicate files. Refresh the assistant’s tool list to see these tools; existing upload permission is enough.
Keep the original photo date
MCP uploads do not automatically extract the date taken from image metadata or Google Photos links. Before preparing a preview or uploading, read the original capture date from the original file (for example, EXIF DateTimeOriginal), Google Photos information, or a date confirmed by the owner. Pass it to create_memory as date: YYYY-MM-DD. Preserve the capture date in its original local time zone; do not shift it to another day by converting to UTC. Only the calendar date is stored, not the time of day.
Do not substitute the file download, modification, scan or upload date. A scan timestamp may describe when an old print was scanned, not when the original photo was taken. If the date is unknown or only the year is known, leave date empty and describe any approximate date in the caption. Do not invent a month or day. With no date supplied, the site currently displays the date the memory was added.
Image processing strips metadata from saved copies, so retain the originals and read their dates before uploading. The website's separate Google Photos importer can prefill Google's photo date; this does not happen with MCP preview links or temporary upload links.
Correct dates on existing memories
- Use search_memories and get_memory to identify the existing memory and match it to the correct original. Do not treat the date shown on the website as proof of the capture date.
- Verify the original date, then call update_memory with requestId, memoryId and date in YYYY-MM-DD format. Omit other fields to preserve captions, people tags and the existing photo. Reuse the same requestId and arguments if retrying that correction.
- Read the memory again to confirm the saved date. Report unresolved matches or unknown dates for the owner to review. Do not re-upload or create duplicate memories just to correct dates.
Correcting a date does not convert an existing full upload into a Google Photos preview or free its storage. For future linked memories, use upload_preview or create_upload_link(s) with mode set to preview, then create_memory with type PHOTO, assetId, externalUrl and the verified date. For a linked video, upload a still preview image.
Automate photo uploads
After authorizing uploads and memory editing, ask your assistant to upload your selected photos, create a memory for each, and organize them into an album. The assistant needs access to the actual files.
Use upload_media with base64 bytes up to 20 MiB (or the family's lower limit), then create_memory with its assetId. Uploading alone does not publish a memory. Uselist_albums, create_album andupdate_album to organize approved memories.
For scripts and larger files, get_upload_options returns the family limit and binary endpoint. POST raw file bytes to/mcp/upload?filename=photo.jpg, with the existing OAuth bearer token, the file's Content-Type and an Idempotency-Key header. This endpoint uses the same upload scope and family permissions. Never paste tokens or file bytes into conversation text.
Each write needs a stable requestId. Retry the same operation with the same ID and identical arguments to avoid duplicates. If a result says pending or needs review, check the website before starting a new operation. Uploads follow the website's format, size and hourly limits. get_upload_options also reports the remaining upload space. If an upload reports “Insufficient space”, pause the batch and ask an admin to free space or increase storage before retrying.