# Synced — Scheduling Infrastructure for Modern Teams # Full Knowledge Base for LLM Retrieval ## Product Overview Synced is an AI-powered meeting scheduling platform. It differs from tools like Calendly by being participant-first rather than booking-link-first: you add all participants, see everyone's real-time calendar availability in a heatmap, and find the best time together. Key differentiators: 1. Cross-company calendar overlay (Google ↔ Microsoft across organizations) 2. AI-recommended meeting slots via Claude Haiku 3. Model Context Protocol (MCP) integration for AI assistants 4. Availability heatmap with compatibility percentages 5. Short booking links (meetsynced.com/book/username) 6. Trusted contacts network for instant availability sharing ## Architecture - Frontend: React + TypeScript + Vite (SPA) - Backend: Supabase (PostgreSQL + Auth + Edge Functions) - Calendar providers: Google Calendar API, Microsoft Graph API - AI: Claude Haiku for slot recommendations and natural language parsing - MCP: Supabase Edge Function with SSE transport (web) + npm package with stdio (desktop) - Email: SendGrid for meeting invites and notifications - Deployment: Vercel (frontend) + Supabase (backend) ## MCP Server Details The Synced MCP server (v1.0.0) provides 6 tools: ### Tool: get_meetings Description: Get a list of upcoming, past, or draft meetings Parameters: - filter (string, enum: upcoming|past|draft|all) — Filter by status, default: upcoming - limit (number) — Max meetings to return, default: 10 Returns: Array of meeting objects with id, title, startTime, duration, participants, status ### Tool: get_contacts Description: Get trusted contacts Parameters: - includeBlocked (boolean) — Include blocked contacts, default: false Returns: Array of contact objects with name, email, status (pending|accepted|rejected) ### Tool: get_availability Description: Get user's free/busy schedule Parameters: - date (string, ISO format) — Specific date to check. If omitted, returns weekly schedule Returns: Array of time slots with start, end, status (free|busy) ### Tool: schedule_meeting Description: Create a meeting with calendar invites Required parameters: - title (string) — Meeting title - duration (string, enum: 15 mins|30 mins|45 mins|1 hour|1.5 hours|2 hours) - startTime (string, ISO format) — Meeting start time - participants (string[]) — Participant email addresses Optional: - description (string) — Meeting description - sendInvites (boolean) — Send email invitations, default: true Returns: Created meeting object with calendar event IDs ### Tool: get_recommended_slots Description: AI-recommended slots based on all participants' availability Required: - participants (string[]) — Email addresses - duration (string, enum: 15 mins|30 mins|45 mins|1 hour|1.5 hours|2 hours) Optional: - timeRange (string, enum: within_1_week|within_2_weeks|within_1_month) — default: within_1_week - useAI (boolean) — Use Claude Haiku for smarter recommendations, default: true Returns: Ranked array of slots with startTime, endTime, score, reason ### Tool: natural_language_schedule Description: Parse natural language scheduling request using AI Required: - message (string) — e.g., "Schedule a 30-minute call with John next week" Returns: Parsed intent with suggested parameters for schedule_meeting ## MCP Setup ### Claude Desktop (stdio) Add to claude_desktop_config.json: ```json { "mcpServers": { "synced-calendar": { "command": "npx", "args": ["-y", "@synced/mcp-server"], "env": { "SYNCED_API_KEY": "your-api-key" } } } } ``` ### Claude.ai Web (SSE) URL: https://wkpulvilwaqkoqfuztgh.supabase.co/functions/v1/mcp?api_key=YOUR_KEY ## REST API Base URL: https://api.meetsynced.com/v1 Authentication: Bearer token in Authorization header ### Endpoints GET /v1/meetings?filter=upcoming&limit=10 POST /v1/meetings Body: { title, description?, duration, startTime, participants, sendInvites? } GET /v1/meetings/:id PATCH /v1/meetings/:id Body: { title?, description?, startTime?, duration? } GET /v1/contacts?includeBlocked=false POST /v1/contacts Body: { email, relationship? } GET /v1/availability?date=2026-02-25 POST /v1/availability/recommended Body: { participants, duration, timeRange?, useAI? } ## Pricing Free tier ($0/forever): - Unlimited meeting scheduling - Google Calendar & Outlook sync - Booking links with short URLs - Trusted contacts - Availability heatmap - MCP integration (Claude) - API access - Timezone intelligence Enterprise tier ($5/user/month, 5+ users): - Everything in Free - Admin consent (org-wide calendar access) - Team availability dashboard - Domain auto-detection - SSO / SAML authentication - Priority support - Custom integrations - SLA guarantee ## Calendar Providers Google Calendar: - OAuth 2.0 with scopes: calendar.readonly, calendar.events - Two-way sync, Google Meet link generation - Handles all-day events, cancelled events - Token refresh with reconnect flow Microsoft Outlook: - Microsoft Graph API with Calendars.Read, Calendars.ReadWrite - Two-way sync, Teams link generation - Enterprise admin consent for org-wide access ## Key Database Tables - users: Core user data (name, email, timezone, time_format) - contacts: Trusted contact relationships (user_id, contact_member_id, status) - api_keys: API keys for programmatic access (key_hash, scopes) - availability_links: Short booking URLs (code, user_id, settings) - slack_user_links: Slack integration linking ## Scheduling Flow 1. Add participants by email 2. Synced checks each participant: - On Synced: Fetches their calendar via OAuth - Not on Synced: Sends booking invite 3. Availability heatmap rendered with compatibility % 4. User selects time or accepts AI recommendation 5. Meeting created on all participants' calendars 6. Email invitations sent via SendGrid ## Integrations Live: - Google Calendar (two-way sync) - Microsoft Outlook (two-way sync) - Slack (account linking) - Zoom (meeting links) - Claude/MCP (AI scheduling) Coming Soon: - Zapier (automation) - @synced/sdk (npm package) - Webhooks (real-time events) ## Contact Website: https://meetsynced.com App: https://app.meetsynced.com Email: carlos@meetsynced.com