{"serverInfo":{"name":"sendifai","version":"1.0.1","description":"The AI-native church & nonprofit platform. ~160 curated workflow MCP tools + 1360 dashboard API routes via scoped invoke bridges. CRM, pastoral care, giving, email/SMS, events, Runsheet."},"instructions":"You are connected to sendifai — AI-native platform for churches and nonprofits. Start with platform_overview. Find workflow tools via platform_search_tools (e.g. \"link daughter\", \"edit note\", \"family relationship\"). Family links: people_add_family_relationship — never custom fields or UUID-filled notes. Pastoral notes: people_list_notes, people_add_note, people_update_note, people_remove_note. Welcome Desk: people_list_welcome_desk_visitors. OAuth intents: /api/oauth/intents. Guide: /agents.","authentication":{"required":true,"schemes":["oauth2"]},"tools":[{"name":"platform_overview","title":"Platform: Overview","description":"One-call snapshot of the organization: contact and community counts, giving this month, active automations, published forms and landing pages, upcoming events, bookings, and service plans. Call this first to orient yourself.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"platform_list_agents","title":"Platform: List Agents","description":"List the organization's autonomous platform agents (People, Pastoral Care, Giving, Grow, Spaces, Ticketing, Guests, Runsheet, MediaHub, Channels, Live) with their autonomy mode and last run.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"platform_pending_proposals","title":"Platform: Pending Proposals","description":"List pending agent proposals awaiting human approval. Use platform_approve_proposal or platform_reject_proposal (platform:write) to act on them.","inputSchema":{"type":"object","properties":{"agentId":{"type":"string","description":"Filter to one agent, e.g. giving or pastoral_care"},"limit":{"type":"number"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"platform_usage","title":"Platform: Usage","description":"Current pay-per-use billing state: usage vs allowance for every feature slider (email sends, messaging credits, contacts, runsheet access seats, donations, tickets, check-ins, rooms, streams, media items), so you know the remaining budget before taking actions that consume usage.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"platform_get_proposal","title":"Platform: Get Proposal","description":"Get full details of an agent proposal including the action payload.","inputSchema":{"type":"object","properties":{"proposalId":{"type":"string"}},"required":["proposalId"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"platform_approve_proposal","title":"Platform: Approve Proposal","description":"Approve and execute a pending agent proposal. Requires owner/admin API key with platform:write scope.","inputSchema":{"type":"object","properties":{"proposalId":{"type":"string"},"payloadEdits":{"type":"string","description":"Optional edits to action payload (recipient fields are locked)"}},"required":["proposalId"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"platform_reject_proposal","title":"Platform: Reject Proposal","description":"Reject a pending agent proposal without executing it.","inputSchema":{"type":"object","properties":{"proposalId":{"type":"string"}},"required":["proposalId"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"platform_search_tools","title":"Platform: Search Tools","description":"Search curated workflow tools by natural language (e.g. \"family relationships\", \"pastoral notes\", \"book a room\"). Returns tool names only — schemas are on tools/list. For API routes not covered by workflow tools, use platform_search_dashboard_api instead.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"What you need, e.g. \"list CRM segments\", \"refund ticket\", \"Welcome Desk visitors\""},"module":{"type":"string","description":"Optional module filter: people, community, giving, grow, spaces, channels, ticketing, mediahub, live, guests, runsheet, store, templates, groups, billing"},"limit":{"type":"number","description":"Max results (default 15)"}},"required":["query"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"platform_list_tools","title":"Platform: List Tools","description":"List workflow MCP tools available to this credential, optionally filtered by module. For the full dashboard API surface (1360+ routes), use platform_search_dashboard_api.","inputSchema":{"type":"object","properties":{"module":{"type":"string","description":"Filter to one module, e.g. people or runsheet"},"limit":{"type":"number","description":"Max tools returned (default 100)"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"platform_inspect_tools","title":"Platform: Inspect Tools","description":"Fetch JSON input schemas for up to 10 tools by name. Rarely needed — workflow tool schemas are already on tools/list. Useful for agent bridges that do not receive native MCP schemas.","inputSchema":{"type":"object","properties":{"toolNames":{"type":"array","items":{"type":"string"}}},"required":["toolNames"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"platform_session_tools","title":"Platform: Session Tools","description":"List workflow tools available to THIS session (OAuth intent + scopes). Use when tools/list shows tools you cannot call — returns only permitted tools for your credential.","inputSchema":{"type":"object","properties":{"module":{"type":"string","description":"Optional module filter"},"limit":{"type":"number","description":"Max tools (default 100)"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"platform_search_dashboard_api","title":"Platform: Search Dashboard Api","description":"Search 1360+ org-scoped dashboard API routes (forms builder, email canvas, billing UI, AI studio, etc.). Pair with the matching {module}_invoke_api tool or platform_invoke_dashboard_api.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Path fragment, e.g. forms, campaigns, checkout, gift-aid"},"limit":{"type":"number"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"platform_invoke_dashboard_api","title":"Platform: Invoke Dashboard Api","description":"Escape hatch: call any org-scoped dashboard API route by path. Prefer scoped {module}_invoke_api tools when the path matches — they are safer. Requires platform:write scope.","inputSchema":{"type":"object","properties":{"method":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE"]},"path":{"type":"string","description":"e.g. /api/crm/contacts/{contactId}/fields or /api/billing/subscription"},"body":{"type":"string"},"query":{"type":"string"}},"required":["method","path"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"people_invoke_api","title":"People: Invoke Api","description":"Invoke any CRM/contacts dashboard API (custom fields, segments, data quality, visitors, surveys, family at /api/contacts/{id}/family). Prefer people_list_family and people_add_family_relationship for household links. Use platform_search_dashboard_api to find paths.","inputSchema":{"type":"object","properties":{"method":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE"]},"path":{"type":"string","description":"Dashboard API path under this module"},"body":{"type":"string"},"query":{"type":"string"}},"required":["method","path"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"grow_invoke_api","title":"Grow: Invoke Api","description":"Invoke forms builder, campaigns, automations, and landing page APIs.","inputSchema":{"type":"object","properties":{"method":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE"]},"path":{"type":"string","description":"Dashboard API path under this module"},"body":{"type":"string"},"query":{"type":"string"}},"required":["method","path"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"giving_invoke_api","title":"Giving: Invoke Api","description":"Invoke giving APIs: Gift Aid, reconciliation, counting sessions, reports, PayPal.","inputSchema":{"type":"object","properties":{"method":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE"]},"path":{"type":"string","description":"Dashboard API path under this module"},"body":{"type":"string"},"query":{"type":"string"}},"required":["method","path"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"spaces_invoke_api","title":"Spaces Invoke Api","description":"Invoke facilities APIs: assets, work orders, inventory, parking, HVAC, compliance.","inputSchema":{"type":"object","properties":{"method":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE"]},"path":{"type":"string","description":"Dashboard API path under this module"},"body":{"type":"string"},"query":{"type":"string"}},"required":["method","path"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"mediahub_invoke_api","title":"Mediahub Invoke Api","description":"Invoke Media Hub APIs: courses, distribution, workflow, social, worship content.","inputSchema":{"type":"object","properties":{"method":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE"]},"path":{"type":"string","description":"Dashboard API path under this module"},"body":{"type":"string"},"query":{"type":"string"}},"required":["method","path"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"live_invoke_api","title":"Live Invoke Api","description":"Invoke live streaming APIs: streams, simulcast, destinations, polls, bridge.","inputSchema":{"type":"object","properties":{"method":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE"]},"path":{"type":"string","description":"Dashboard API path under this module"},"body":{"type":"string"},"query":{"type":"string"}},"required":["method","path"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"store_invoke_api","title":"Store Invoke Api","description":"Invoke media shop APIs: products, orders, distribution, merch.","inputSchema":{"type":"object","properties":{"method":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE"]},"path":{"type":"string","description":"Dashboard API path under this module"},"body":{"type":"string"},"query":{"type":"string"}},"required":["method","path"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"community_invoke_api","title":"Community: Invoke Api","description":"Invoke pastoral care APIs: outreach, grief journeys, care predictions, follow-ups.","inputSchema":{"type":"object","properties":{"method":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE"]},"path":{"type":"string","description":"Dashboard API path under this module"},"body":{"type":"string"},"query":{"type":"string"}},"required":["method","path"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"channels_invoke_api","title":"Channels Invoke Api","description":"Invoke messaging APIs: SMS, WhatsApp campaigns, conversations, templates.","inputSchema":{"type":"object","properties":{"method":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE"]},"path":{"type":"string","description":"Dashboard API path under this module"},"body":{"type":"string"},"query":{"type":"string"}},"required":["method","path"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"guests_invoke_api","title":"Guests Invoke Api","description":"Invoke guest pipeline APIs beyond named tools: stages, tasks, analytics.","inputSchema":{"type":"object","properties":{"method":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE"]},"path":{"type":"string","description":"Dashboard API path under this module"},"body":{"type":"string"},"query":{"type":"string"}},"required":["method","path"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"runsheet_invoke_api","title":"Runsheet Invoke Api","description":"Invoke runsheet APIs: plans, positions, songs, teams, publishing.","inputSchema":{"type":"object","properties":{"method":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE"]},"path":{"type":"string","description":"Dashboard API path under this module"},"body":{"type":"string"},"query":{"type":"string"}},"required":["method","path"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"ticketing_invoke_api","title":"Ticketing Invoke Api","description":"Invoke event ticketing APIs: events, registrations, promo codes, refunds.","inputSchema":{"type":"object","properties":{"method":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE"]},"path":{"type":"string","description":"Dashboard API path under this module"},"body":{"type":"string"},"query":{"type":"string"}},"required":["method","path"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"templates_invoke_api","title":"Templates Invoke Api","description":"Invoke template APIs beyond named tools: email builder, WhatsApp template sync, canvas blocks.","inputSchema":{"type":"object","properties":{"method":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE"]},"path":{"type":"string","description":"Dashboard API path under this module"},"body":{"type":"string"},"query":{"type":"string"}},"required":["method","path"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"groups_invoke_api","title":"Groups Invoke Api","description":"Invoke small group APIs: rosters, attendance, curriculum, meeting notes.","inputSchema":{"type":"object","properties":{"method":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE"]},"path":{"type":"string","description":"Dashboard API path under this module"},"body":{"type":"string"},"query":{"type":"string"}},"required":["method","path"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"billing_invoke_api","title":"Billing Invoke Api","description":"Invoke billing APIs: subscription changes, invoices, payment methods, add-ons.","inputSchema":{"type":"object","properties":{"method":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE"]},"path":{"type":"string","description":"Dashboard API path under this module"},"body":{"type":"string"},"query":{"type":"string"}},"required":["method","path"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"platform_ai_invoke_api","title":"Platform: Ai Invoke Api","description":"Invoke AI studio APIs: content generation, campaign AI, personalization, video-to-campaign.","inputSchema":{"type":"object","properties":{"method":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE"]},"path":{"type":"string","description":"Dashboard API path under this module"},"body":{"type":"string"},"query":{"type":"string"}},"required":["method","path"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"platform_settings_invoke_api","title":"Platform: Settings Invoke Api","description":"Invoke org settings, billing, team, analytics, count tablet, and autonomous agent config APIs.","inputSchema":{"type":"object","properties":{"method":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE"]},"path":{"type":"string","description":"Dashboard API path under this module"},"body":{"type":"string"},"query":{"type":"string"}},"required":["method","path"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"platform_route_catalog","title":"Platform: Route Catalog","description":"Report dashboard API catalog size (1360+ routes) and invoke tool map for agents.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"billing_get_subscription","title":"Billing Get Subscription","description":"Current subscription, plan tier, Stripe status, and upcoming invoice for the organization.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"billing_create_checkout_session","title":"Billing Create Checkout Session","description":"Create a Stripe checkout URL to subscribe or change plan. Returns checkoutUrl for the user to complete payment in browser.","inputSchema":{"type":"object","properties":{"tier":{"type":"string","enum":["free","starter","pro","scale","enterprise"],"description":"Plan tier"},"interval":{"type":"string","enum":["monthly","quarterly","biannual","yearly"],"description":"Billing interval"},"successUrl":{"type":"string"},"cancelUrl":{"type":"string"}},"required":["tier","interval"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"billing_open_portal","title":"Billing Open Portal","description":"Create a Stripe customer portal URL for payment methods, invoices, and plan changes.","inputSchema":{"type":"object","properties":{"returnUrl":{"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"people_search_contacts","title":"People: Search Contacts","description":"Search contacts by name, email, or phone. Returns up to `limit` matches with core fields. Use this before creating a contact to avoid duplicates.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search text — matches first name, last name, email, or phone"},"communityMembersOnly":{"type":"boolean","description":"Restrict to community members"},"limit":{"type":"number","description":"Max results (default 25)"}},"required":["query"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"people_get_contact","title":"People: Get Contact","description":"Get full details for one contact by ID, including tags and community membership. For linked family members (spouse, parent, child, sibling), call people_list_family — relationships are stored in contact_family_relationships, not on the contact row alone.","inputSchema":{"type":"object","properties":{"contactId":{"type":"string","description":"Contact UUID"}},"required":["contactId"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"people_list_contacts","title":"People: List Contacts","description":"List contacts with pagination. Returns core CRM fields including date_of_birth (birthday), address, church dates, and tags. Use people_search_contacts for text search.","inputSchema":{"type":"object","properties":{"limit":{"type":"number","description":"Max results (default 25)"},"offset":{"type":"number","description":"Pagination offset (default 0)"},"status":{"type":"string","enum":["active","inactive","unsubscribed","bounced","subscribed","pending","complained"]},"communityMembersOnly":{"type":"boolean"},"tag":{"type":"string","description":"Filter by tag name"},"sortBy":{"type":"string","enum":["created_at","updated_at","first_name","last_name","email","date_of_birth"]},"sortOrder":{"type":"string","enum":["asc","desc"]}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"people_create_contact","title":"People: Create Contact","description":"Create a new contact with full CRM fields (name, email, phone, dateOfBirth/birthday, address, church dates, familyId household group, tags, customFields, etc.). Provide at least an email or first+last name. For linking two people as family, use people_add_family_relationship after create. Search first with people_search_contacts to avoid duplicates.","inputSchema":{"type":"object","properties":{"firstName":{"type":"string","description":"First name"},"middleName":{"type":"string","description":"Middle name"},"lastName":{"type":"string","description":"Last name"},"email":{"type":"string","description":"Email address"},"phone":{"type":"string","description":"Primary phone"},"cellPhone":{"type":"string","description":"Mobile/cell phone"},"homePhone":{"type":"string","description":"Home phone"},"workPhone":{"type":"string","description":"Work phone"},"company":{"type":"string","description":"Company or employer"},"jobTitle":{"type":"string","description":"Job title"},"dateOfBirth":{"type":"string","description":"Date of birth / birthday"},"birthday":{"type":"string","description":"Alias for dateOfBirth"},"gender":{"type":"string","description":"Gender"},"maritalStatus":{"type":"string","description":"Marital status"},"addressLine1":{"type":"string","description":"Street address line 1"},"addressLine2":{"type":"string","description":"Street address line 2"},"addressCity":{"type":"string","description":"City"},"addressCounty":{"type":"string","description":"County / state"},"addressPostcode":{"type":"string","description":"Postcode / ZIP"},"addressCountry":{"type":"string","description":"Country"},"city":{"type":"string","description":"City (alias for addressCity)"},"country":{"type":"string","description":"Country (alias for addressCountry)"},"baptismDate":{"type":"string","description":"Baptism date"},"membershipDate":{"type":"string","description":"Membership date"},"anniversaryDate":{"type":"string","description":"Wedding anniversary date"},"firstVisitDate":{"type":"string","description":"First visit date"},"bio":{"type":"string","description":"Short bio"},"communityMember":{"type":"boolean","description":"Mark as community member"},"tags":{"type":"array","items":{"type":"string"},"description":"Tag names (create replaces full list on update)"},"status":{"type":"string","enum":["subscribed","unsubscribed","pending","bounced","complained","active","inactive"],"description":"Contact subscription/status"},"emailOptIn":{"type":"boolean","description":"Email marketing opt-in"},"smsOptIn":{"type":"boolean","description":"SMS marketing opt-in"},"emailConsent":{"type":"boolean","description":"Email consent (GDPR)"},"gdprConsent":{"type":"boolean","description":"GDPR consent flag"},"primaryCampusId":{"type":"string","description":"Primary campus UUID"},"familyId":{"type":"string","description":"Household group UUID shared by import/segment rules (flat field on contacts). For spouse/parent/child links between two people, use people_add_family_relationship instead."},"source":{"type":"string","description":"Lead source"},"notes":{"type":"string","description":"Free-text note (stored in custom_fields.notes)"},"customFields":{"type":"string","description":"Org-specific custom fields (merged on update)"}},"required":["middleName","cellPhone","homePhone","workPhone","dateOfBirth","birthday","gender","maritalStatus","addressLine1","addressLine2","addressCity","addressCounty","addressPostcode","addressCountry","baptismDate","membershipDate","anniversaryDate","firstVisitDate","bio","primaryCampusId","familyId","notes"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"people_update_contact","title":"People: Update Contact","description":"Update profile fields on an existing contact: dateOfBirth/birthday, gender, address, church dates (baptism, membership, anniversary), tags, status, and custom fields. Only provided fields change. To link family relationships (spouse, parent, child), use people_add_family_relationship — not custom fields.","inputSchema":{"type":"object","properties":{"contactId":{"type":"string","description":"Contact UUID to update"},"firstName":{"type":"string","description":"First name"},"middleName":{"type":"string","description":"Middle name"},"lastName":{"type":"string","description":"Last name"},"email":{"type":"string","description":"Email address"},"phone":{"type":"string","description":"Primary phone"},"cellPhone":{"type":"string","description":"Mobile/cell phone"},"homePhone":{"type":"string","description":"Home phone"},"workPhone":{"type":"string","description":"Work phone"},"company":{"type":"string","description":"Company or employer"},"jobTitle":{"type":"string","description":"Job title"},"dateOfBirth":{"type":"string","description":"Date of birth / birthday"},"birthday":{"type":"string","description":"Alias for dateOfBirth"},"gender":{"type":"string","description":"Gender"},"maritalStatus":{"type":"string","description":"Marital status"},"addressLine1":{"type":"string","description":"Street address line 1"},"addressLine2":{"type":"string","description":"Street address line 2"},"addressCity":{"type":"string","description":"City"},"addressCounty":{"type":"string","description":"County / state"},"addressPostcode":{"type":"string","description":"Postcode / ZIP"},"addressCountry":{"type":"string","description":"Country"},"city":{"type":"string","description":"City (alias for addressCity)"},"country":{"type":"string","description":"Country (alias for addressCountry)"},"baptismDate":{"type":"string","description":"Baptism date"},"membershipDate":{"type":"string","description":"Membership date"},"anniversaryDate":{"type":"string","description":"Wedding anniversary date"},"firstVisitDate":{"type":"string","description":"First visit date"},"bio":{"type":"string","description":"Short bio"},"communityMember":{"type":"boolean","description":"Mark as community member"},"tags":{"type":"array","items":{"type":"string"},"description":"Tag names (create replaces full list on update)"},"status":{"type":"string","enum":["subscribed","unsubscribed","pending","bounced","complained","active","inactive"],"description":"Contact subscription/status"},"emailOptIn":{"type":"boolean","description":"Email marketing opt-in"},"smsOptIn":{"type":"boolean","description":"SMS marketing opt-in"},"emailConsent":{"type":"boolean","description":"Email consent (GDPR)"},"gdprConsent":{"type":"boolean","description":"GDPR consent flag"},"primaryCampusId":{"type":"string","description":"Primary campus UUID"},"familyId":{"type":"string","description":"Household group UUID shared by import/segment rules (flat field on contacts). For spouse/parent/child links between two people, use people_add_family_relationship instead."},"source":{"type":"string","description":"Lead source"},"notes":{"type":"string","description":"Free-text note (stored in custom_fields.notes)"},"customFields":{"type":"string","description":"Org-specific custom fields (merged on update)"}},"required":["contactId","middleName","cellPhone","homePhone","workPhone","dateOfBirth","birthday","gender","maritalStatus","addressLine1","addressLine2","addressCity","addressCounty","addressPostcode","addressCountry","baptismDate","membershipDate","anniversaryDate","firstVisitDate","bio","primaryCampusId","familyId","notes"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"people_bulk_update_contacts","title":"People: Bulk Update Contacts","description":"Update multiple contacts in one call (max 50). Ideal for batch tasks like setting birthdays on many people. Each entry needs contactId plus the fields to change.","inputSchema":{"type":"object","properties":{"updates":{"type":"array","items":{"type":"object","properties":{"contactId":{"type":"string"},"firstName":{"type":"string","description":"First name"},"middleName":{"type":"string","description":"Middle name"},"lastName":{"type":"string","description":"Last name"},"email":{"type":"string","description":"Email address"},"phone":{"type":"string","description":"Primary phone"},"cellPhone":{"type":"string","description":"Mobile/cell phone"},"homePhone":{"type":"string","description":"Home phone"},"workPhone":{"type":"string","description":"Work phone"},"company":{"type":"string","description":"Company or employer"},"jobTitle":{"type":"string","description":"Job title"},"dateOfBirth":{"type":"string","description":"Date of birth / birthday"},"birthday":{"type":"string","description":"Alias for dateOfBirth"},"gender":{"type":"string","description":"Gender"},"maritalStatus":{"type":"string","description":"Marital status"},"addressLine1":{"type":"string","description":"Street address line 1"},"addressLine2":{"type":"string","description":"Street address line 2"},"addressCity":{"type":"string","description":"City"},"addressCounty":{"type":"string","description":"County / state"},"addressPostcode":{"type":"string","description":"Postcode / ZIP"},"addressCountry":{"type":"string","description":"Country"},"city":{"type":"string","description":"City (alias for addressCity)"},"country":{"type":"string","description":"Country (alias for addressCountry)"},"baptismDate":{"type":"string","description":"Baptism date"},"membershipDate":{"type":"string","description":"Membership date"},"anniversaryDate":{"type":"string","description":"Wedding anniversary date"},"firstVisitDate":{"type":"string","description":"First visit date"},"bio":{"type":"string","description":"Short bio"},"communityMember":{"type":"boolean","description":"Mark as community member"},"tags":{"type":"array","items":{"type":"string"},"description":"Tag names (create replaces full list on update)"},"status":{"type":"string","enum":["subscribed","unsubscribed","pending","bounced","complained","active","inactive"],"description":"Contact subscription/status"},"emailOptIn":{"type":"boolean","description":"Email marketing opt-in"},"smsOptIn":{"type":"boolean","description":"SMS marketing opt-in"},"emailConsent":{"type":"boolean","description":"Email consent (GDPR)"},"gdprConsent":{"type":"boolean","description":"GDPR consent flag"},"primaryCampusId":{"type":"string","description":"Primary campus UUID"},"familyId":{"type":"string","description":"Household group UUID shared by import/segment rules (flat field on contacts). For spouse/parent/child links between two people, use people_add_family_relationship instead."},"source":{"type":"string","description":"Lead source"},"notes":{"type":"string","description":"Free-text note (stored in custom_fields.notes)"},"customFields":{"type":"string","description":"Org-specific custom fields (merged on update)"}},"required":["contactId","middleName","cellPhone","homePhone","workPhone","dateOfBirth","birthday","gender","maritalStatus","addressLine1","addressLine2","addressCity","addressCounty","addressPostcode","addressCountry","baptismDate","membershipDate","anniversaryDate","firstVisitDate","bio","primaryCampusId","familyId","notes"]},"description":"List of per-contact partial updates"}},"required":["updates"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"people_delete_contact","title":"People: Delete Contact","description":"Soft-delete a contact (sets deleted_at). Use permanent=true only when GDPR erasure is required. Prefer merge for duplicates.","inputSchema":{"type":"object","properties":{"contactId":{"type":"string"},"permanent":{"type":"boolean","description":"Permanent GDPR erasure (default false = soft delete)"}},"required":["contactId"]},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":false}},{"name":"people_list_notes","title":"People: List Notes","description":"List pastoral care notes from crm_notes (dashboard: Pastoral Care → Notes at /community/care/notes). Returns team/public notes only — private and confidential notes stay dashboard-only. Includes follow_up_date, follow_up_completed, and confidentiality_level (green/amber/red safeguarding). Newest first.","inputSchema":{"type":"object","properties":{"contactId":{"type":"string","description":"Filter to one contact"},"limit":{"type":"number"},"followUpDueOnly":{"type":"boolean","description":"When true, only notes with an open follow-up date"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"people_add_note","title":"People: Add Note","description":"Add a pastoral care note (dashboard: /community/care/notes). Human-readable sentences only — use contact names, never UUIDs or \"(contact …)\" IDs. For family links use people_add_family_relationship, not notes. Syncs to contact_care_timeline. To edit later: people_update_note. To delete: people_remove_note.","inputSchema":{"type":"object","properties":{"contactId":{"type":"string"},"content":{"type":"string","description":"Human-readable note text — names only, no contact UUIDs"},"isPinned":{"type":"boolean"},"followUpDate":{"type":"string","description":"YYYY-MM-DD — sets a follow-up reminder"},"privacyLevel":{"type":"string","enum":["public","team","private","confidential"]},"confidentialityLevel":{"type":"string","enum":["green","amber","red"],"description":"Safeguarding sensitivity"}},"required":["contactId","content"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"people_list_family","title":"People: List Family","description":"List family/household relationships for a contact (spouse, parent, child, sibling, grandparent, etc.). Returns linked contacts from the bidirectional contact_family_relationships graph. Dashboard UI: contact detail → Relationships tab. Use people_add_family_relationship to link two existing contacts.","inputSchema":{"type":"object","properties":{"contactId":{"type":"string","description":"Contact UUID whose family links to list"}},"required":["contactId"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"people_add_family_relationship","title":"People: Add Family Relationship","description":"Link two existing contacts as family in contact_family_relationships (shows in People → Relationships tab). Use this instead of custom fields or notes. Example: James as father of Grace → contactId=James UUID, relatedContactId=Grace UUID, relationship=daughter (Grace is James's daughter). Creates bidirectional rows with automatic inverse labels. Search contacts first with people_search_contacts.","inputSchema":{"type":"object","properties":{"contactId":{"type":"string","description":"Contact UUID to attach the relationship from"},"relatedContactId":{"type":"string","description":"Other contact UUID to link"},"relationship":{"type":"string","enum":["primary","head","spouse","husband","wife","partner","parent","father","mother","child","son","daughter","sibling","brother","sister","grandparent","grandfather","grandmother","grandchild","grandson","granddaughter","other"],"description":"How relatedContact relates to contactId (e.g. child, parent, spouse, sibling)"}},"required":["contactId","relatedContactId","relationship"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"people_remove_family_relationship","title":"People: Remove Family Relationship","description":"Remove a family link between two contacts (both directions in contact_family_relationships). Use people_list_family to find relatedContactId.","inputSchema":{"type":"object","properties":{"contactId":{"type":"string","description":"Contact UUID on one side of the link"},"relatedContactId":{"type":"string","description":"Contact UUID on the other side"}},"required":["contactId","relatedContactId"]},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":false}},{"name":"people_list_household","title":"People: List Household","description":"List contacts sharing the same flat household group (`family_id` on the contact row). Used by CSV import and segment rules. For spouse/parent/child graph links, use people_list_family instead.","inputSchema":{"type":"object","properties":{"familyId":{"type":"string","description":"Household group UUID"},"contactId":{"type":"string","description":"Look up household from this contact’s family_id (use familyId or contactId)"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"people_list_care_timeline","title":"People: List Care Timeline","description":"Read combined pastoral care timeline for a contact (notes + interactions from contact_care_timeline and crm_notes). Use after people_list_notes for full history. Dashboard: contact profile timeline.","inputSchema":{"type":"object","properties":{"contactId":{"type":"string"},"page":{"type":"number","description":"Page number (default 1)"},"limit":{"type":"number","description":"Items per page (default 50)"}},"required":["contactId"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"people_complete_note_followup","title":"People: Complete Note Followup","description":"Mark a pastoral note follow-up as completed (sets follow_up_completed on crm_notes and syncs contact_care_timeline). Use people_list_notes with followUpDueOnly to find open follow-ups.","inputSchema":{"type":"object","properties":{"noteId":{"type":"string"}},"required":["noteId"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"people_update_note","title":"People: Update Note","description":"Edit an existing pastoral care note (content, followUpDate, privacy). Use people_list_notes to get noteId. Human-readable content only — no UUIDs. For follow-up completion prefer people_complete_note_followup. Prefer this over dashboard API invoke for note edits.","inputSchema":{"type":"object","properties":{"noteId":{"type":"string"},"content":{"type":"string"},"followUpDate":{"type":"string","description":"YYYY-MM-DD or null to clear"},"privacyLevel":{"type":"string","enum":["public","team","private","confidential"]},"confidentialityLevel":{"type":"string","enum":["green","amber","red"]},"isPinned":{"type":"boolean"}},"required":["noteId","followUpDate"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"people_remove_note","title":"People: Remove Note","description":"Delete a pastoral care note by noteId (from people_list_notes). Syncs contact_care_timeline (note_removed). Use to remove mistaken agent notes — prefer this over dashboard API invoke.","inputSchema":{"type":"object","properties":{"noteId":{"type":"string","description":"Note UUID from people_list_notes"}},"required":["noteId"]},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":false}},{"name":"people_list_custom_field_definitions","title":"People: List Custom Field Definitions","description":"List org custom field definitions and sections — required before writing customFields on contacts so agents use correct field keys and types.","inputSchema":{"type":"object","properties":{"sectionId":{"type":"string","description":"Filter to one section"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"people_list_welcome_desk_visitors","title":"People: List Welcome Desk Visitors","description":"List CRM Welcome Desk visitors (first-time/returning guests on the people module — NOT the separate /api/guests pipeline). Dashboard: /people/welcome-desk. Filter by membership_status or search name/email.","inputSchema":{"type":"object","properties":{"status":{"type":"string","enum":["all","first_time_guest","returning_guest","member","volunteer","leader"],"description":"Membership status filter (default all)"},"search":{"type":"string","description":"Search first name, last name, or email"},"limit":{"type":"number"},"offset":{"type":"number"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"people_list_follow_up_tasks","title":"People: List Follow Up Tasks","description":"List CRM Welcome Desk follow-up tasks (visitor_follow_up_tasks) — separate from pastoral note follow_up_date and guests pipeline follow-ups.","inputSchema":{"type":"object","properties":{"contactId":{"type":"string"},"assignedTo":{"type":"string"},"status":{"type":"string","enum":["pending","in_progress","completed","escalated","cancelled"]},"taskType":{"type":"string"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"people_complete_follow_up_task","title":"People: Complete Follow Up Task","description":"Mark a CRM Welcome Desk follow-up task complete (visitor_follow_up_tasks at /people/welcome-desk). NOT pastoral notes — use people_complete_note_followup for /community/care/notes.","inputSchema":{"type":"object","properties":{"taskId":{"type":"string"},"notes":{"type":"string","description":"Optional completion notes"}},"required":["taskId"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"people_list_tags","title":"People: List Tags","description":"List all CRM tags in the organization.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"people_add_contact_tags","title":"People: Add Contact Tags","description":"Add one or more tags to a contact by tag name (creates tags if they do not exist).","inputSchema":{"type":"object","properties":{"contactId":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}}},"required":["contactId","tags"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"people_remove_contact_tags","title":"People: Remove Contact Tags","description":"Remove one or more tags from a contact by tag name.","inputSchema":{"type":"object","properties":{"contactId":{"type":"string"},"tags":{"type":"array","items":{"type":"string"},"description":"Tag names to remove"}},"required":["contactId","tags"]},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":false}},{"name":"community_list_life_event_types","title":"Community: List Life Event Types","description":"List available life event types (baptism, bereavement, marriage, etc.) grouped by category. Use the returned id when logging events.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"community_list_life_events","title":"Community: List Life Events","description":"List recent life events for the organization, newest first. Confidential events are excluded.","inputSchema":{"type":"object","properties":{"contactId":{"type":"string","description":"Filter to one contact"},"category":{"type":"string","description":"Filter by category e.g. grief, celebration, health"},"limit":{"type":"number"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"community_log_life_event","title":"Community: Log Life Event","description":"Log a life event for a contact (e.g. bereavement, baptism, new baby). The contact becomes a community member. Grief events automatically create a 1-year anniversary reminder.","inputSchema":{"type":"object","properties":{"contactId":{"type":"string"},"eventTypeId":{"type":"string","description":"From community_list_life_event_types"},"eventDate":{"type":"string","description":"YYYY-MM-DD"},"title":{"type":"string"},"description":{"type":"string"},"relatedPersonName":{"type":"string","description":"e.g. name of deceased or spouse"},"privacyLevel":{"type":"string","enum":["public","team","private"],"description":"Default team"}},"required":["contactId","eventTypeId","eventDate"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"community_pending_followups","title":"Community: Pending Followups","description":"List life-event follow-ups that are due or overdue — the pastoral care radar.","inputSchema":{"type":"object","properties":{"limit":{"type":"number"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"community_list_care_team","title":"Community: List Care Team","description":"List care team roles and current assignments.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"community_list_safeguarding_checks","title":"Community: List Safeguarding Checks","description":"List safeguarding checks (DBS etc.) with status and expiry. Read-only compliance overview.","inputSchema":{"type":"object","properties":{"status":{"type":"string","enum":["pending","in_progress","clear","flagged","expired"]},"limit":{"type":"number"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"community_resolve_life_event","title":"Community: Resolve Life Event","description":"Mark a life event as resolved/closed and clear follow-up dates.","inputSchema":{"type":"object","properties":{"eventId":{"type":"string"},"status":{"type":"string","enum":["resolved","closed"]}},"required":["eventId"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"community_complete_followup","title":"Community: Complete Followup","description":"Mark a life-event follow-up complete (contact_life_events). NOT pastoral CRM notes (people_complete_note_followup) or Welcome Desk tasks (people_complete_follow_up_task).","inputSchema":{"type":"object","properties":{"eventId":{"type":"string"}},"required":["eventId"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"giving_list_funds","title":"Giving: List Funds","description":"List donation funds (e.g. General, Building, Missions) with raised and target amounts.","inputSchema":{"type":"object","properties":{"activeOnly":{"type":"boolean","description":"Only active funds (default true)"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"giving_list_donations","title":"Giving: List Donations","description":"List donations, newest first. Filter by fund, giver, status, or date range.","inputSchema":{"type":"object","properties":{"fundId":{"type":"string"},"giverId":{"type":"string"},"status":{"type":"string","description":"e.g. completed, pending, refunded, voided"},"fromDate":{"type":"string","description":"YYYY-MM-DD inclusive"},"toDate":{"type":"string","description":"YYYY-MM-DD inclusive"},"limit":{"type":"number"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"giving_summary","title":"Giving: Summary","description":"Giving totals for a date range: total amount, donation count, and per-fund breakdown.","inputSchema":{"type":"object","properties":{"fromDate":{"type":"string","description":"YYYY-MM-DD inclusive"},"toDate":{"type":"string","description":"YYYY-MM-DD inclusive"}},"required":["fromDate","toDate"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"giving_search_givers","title":"Giving: Search Givers","description":"Search givers by name or email.","inputSchema":{"type":"object","properties":{"query":{"type":"string"},"limit":{"type":"number"}},"required":["query"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"giving_record_donation","title":"Giving: Record Donation","description":"Record a manual donation (cash, cheque, bank transfer). Requires a fund id (giving_list_funds) and either a giverId, contactId, or isAnonymous=true. Goes through the same validated path as the dashboard, including usage limits, Gift Aid derivation, and optional receipt.","inputSchema":{"type":"object","properties":{"fundId":{"type":"string"},"amount":{"type":"number","description":"Donation amount, e.g. 50.00"},"currency":{"type":"string","description":"Default org currency, e.g. GBP"},"giverId":{"type":"string"},"contactId":{"type":"string","description":"Link to a contact — a giver record is created if needed"},"isAnonymous":{"type":"boolean"},"paymentMethod":{"type":"string","enum":["cash","cheque","bank_transfer","card","standing_order","other"],"description":"Default cash"},"donationDate":{"type":"string","description":"YYYY-MM-DD, default today"},"notes":{"type":"string"},"sendReceipt":{"type":"boolean","description":"Email a receipt to the giver"}},"required":["fundId","amount"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"giving_create_fund","title":"Giving: Create Fund","description":"Create a new giving fund.","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"isDefault":{"type":"boolean"}},"required":["name"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"grow_list_automations","title":"Grow: List Automations","description":"List automation flows (funnels) with status and enrollment stats.","inputSchema":{"type":"object","properties":{"status":{"type":"string","enum":["draft","active","paused","archived"]},"limit":{"type":"number"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"grow_get_automation","title":"Grow: Get Automation","description":"Get one automation flow including its node graph (flow_definition).","inputSchema":{"type":"object","properties":{"automationId":{"type":"string"}},"required":["automationId"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"grow_set_automation_status","title":"Grow: Set Automation Status","description":"Activate or pause an automation flow.","inputSchema":{"type":"object","properties":{"automationId":{"type":"string"},"status":{"type":"string","enum":["active","paused"]}},"required":["automationId","status"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"grow_list_forms","title":"Grow: List Forms","description":"List forms with view and submission counts.","inputSchema":{"type":"object","properties":{"status":{"type":"string","enum":["draft","published","archived"]},"limit":{"type":"number"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"grow_list_form_submissions","title":"Grow: List Form Submissions","description":"List recent submissions for a form, including submitted data.","inputSchema":{"type":"object","properties":{"formId":{"type":"string"},"limit":{"type":"number"}},"required":["formId"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"grow_list_landing_pages","title":"Grow: List Landing Pages","description":"List landing pages with visit and conversion stats.","inputSchema":{"type":"object","properties":{"status":{"type":"string","enum":["draft","published","archived"]},"limit":{"type":"number"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"grow_list_campaigns","title":"Grow: List Campaigns","description":"List email campaigns with send/open/click stats.","inputSchema":{"type":"object","properties":{"status":{"type":"string","description":"e.g. draft, scheduled, sending, sent"},"limit":{"type":"number"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"grow_create_landing_page","title":"Grow: Create Landing Page","description":"Create a draft landing page from a text prompt (AI-generated content blocks).","inputSchema":{"type":"object","properties":{"prompt":{"type":"string"},"pageName":{"type":"string"}},"required":["prompt"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"grow_publish_landing_page","title":"Grow: Publish Landing Page","description":"Publish a landing page so it is live at its public URL.","inputSchema":{"type":"object","properties":{"pageId":{"type":"string"}},"required":["pageId"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"grow_enroll_contact","title":"Grow: Enroll Contact","description":"Enroll a contact into an automation flow.","inputSchema":{"type":"object","properties":{"automationId":{"type":"string"},"contactId":{"type":"string"}},"required":["automationId","contactId"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"grow_create_campaign","title":"Grow: Create Campaign","description":"Create a draft email campaign.","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"subject":{"type":"string"},"html":{"type":"string"},"text":{"type":"string"}},"required":["name","subject"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"spaces_list_rooms","title":"Spaces List Rooms","description":"List rooms with type, capacity, and status.","inputSchema":{"type":"object","properties":{"includeArchived":{"type":"boolean"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"spaces_list_bookings","title":"Spaces List Bookings","description":"List bookings, optionally for one room or a date range. Defaults to upcoming bookings.","inputSchema":{"type":"object","properties":{"roomId":{"type":"string"},"fromDate":{"type":"string","description":"ISO date/time — default now"},"toDate":{"type":"string","description":"ISO date/time"},"limit":{"type":"number"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"spaces_check_availability","title":"Spaces Check Availability","description":"Check whether a room is free between two times. Returns any conflicting bookings.","inputSchema":{"type":"object","properties":{"roomId":{"type":"string"},"startTime":{"type":"string","description":"ISO date/time"},"endTime":{"type":"string","description":"ISO date/time"}},"required":["roomId","startTime","endTime"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"spaces_create_booking","title":"Spaces Create Booking","description":"Create an internal booking for a room. Checks conflicts first and fails if the slot is taken. For public/paid hire use the public booking page instead.","inputSchema":{"type":"object","properties":{"roomId":{"type":"string"},"title":{"type":"string"},"startTime":{"type":"string","description":"ISO date/time"},"endTime":{"type":"string","description":"ISO date/time"},"notes":{"type":"string"}},"required":["roomId","title","startTime","endTime"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"spaces_list_incidents","title":"Spaces List Incidents","description":"List facility incidents (maintenance issues, hazards) with severity and status.","inputSchema":{"type":"object","properties":{"status":{"type":"string","description":"e.g. open, in_progress, resolved"},"limit":{"type":"number"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"spaces_list_utility_bills","title":"Spaces List Utility Bills","description":"List utility/energy bills with amounts, periods, and payment status.","inputSchema":{"type":"object","properties":{"billType":{"type":"string","description":"e.g. electricity, gas, water"},"unpaidOnly":{"type":"boolean"},"limit":{"type":"number"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"spaces_create_incident","title":"Spaces Create Incident","description":"Report a facility incident (maintenance issue, hazard, etc.).","inputSchema":{"type":"object","properties":{"title":{"type":"string"},"category":{"type":"string"},"severity":{"type":"string","enum":["low","medium","high","critical"]},"roomId":{"type":"string"},"description":{"type":"string"}},"required":["title"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"spaces_cancel_booking","title":"Spaces Cancel Booking","description":"Cancel a room booking.","inputSchema":{"type":"object","properties":{"bookingId":{"type":"string"}},"required":["bookingId"]},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":false}},{"name":"spaces_create_room","title":"Spaces Create Room","description":"Create a new room in the facilities module.","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"roomType":{"type":"string"},"capacity":{"type":"number"}},"required":["name"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"channels_send_email","title":"Channels Send Email","description":"Send a single transactional-style email to one recipient. Goes through suppression checks and counts toward the Email Marketing usage allowance. For bulk sends, create a campaign in the dashboard instead.","inputSchema":{"type":"object","properties":{"to":{"type":"string"},"subject":{"type":"string"},"html":{"type":"string","description":"HTML body — provide html or text"},"text":{"type":"string","description":"Plain text body"},"fromName":{"type":"string","description":"Sender display name — defaults to organization name"}},"required":["to","subject"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"channels_send_sms","title":"Channels Send Sms","description":"Send an SMS to one phone number. Respects opt-outs and quiet hours (may be scheduled automatically if inside quiet hours), and deducts messaging credits like any dashboard send.","inputSchema":{"type":"object","properties":{"to":{"type":"string","description":"E.164 phone number, e.g. +447700900000"},"body":{"type":"string"},"contactId":{"type":"string","description":"Link the message to a contact"}},"required":["to","body"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"channels_send_whatsapp","title":"Channels Send Whatsapp","description":"Send a single WhatsApp text message. Requires an approved WhatsApp sender and deducts messaging credits.","inputSchema":{"type":"object","properties":{"to":{"type":"string","description":"E.164 phone number or contact WhatsApp identifier"},"text":{"type":"string"},"contactId":{"type":"string"}},"required":["to","text"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"ticketing_list_events","title":"Ticketing List Events","description":"List ticketing events with registrations and revenue, optionally filtered by status or upcoming only.","inputSchema":{"type":"object","properties":{"status":{"type":"string","enum":["draft","published","cancelled","completed","archived","all"]},"upcomingOnly":{"type":"boolean"},"limit":{"type":"number"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"ticketing_get_event_sales","title":"Ticketing Get Event Sales","description":"Registration, revenue, check-in, and capacity figures for one event.","inputSchema":{"type":"object","properties":{"eventId":{"type":"string"}},"required":["eventId"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"ticketing_create_event","title":"Ticketing Create Event","description":"Create a draft ticketing event. Not public until published — add ticket types in the dashboard, then use ticketing_publish_event.","inputSchema":{"type":"object","properties":{"title":{"type":"string"},"start_date":{"type":"string","description":"ISO 8601 start date/time"},"description":{"type":"string"},"event_type":{"type":"string","enum":["in_person","virtual","hybrid"]},"venue_name":{"type":"string"},"capacity":{"type":"number"}},"required":["title","start_date"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"ticketing_publish_event","title":"Ticketing Publish Event","description":"Publish a draft event so it becomes bookable. Refuses if the event has no active ticket types.","inputSchema":{"type":"object","properties":{"eventId":{"type":"string"}},"required":["eventId"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"ticketing_promote_waitlist","title":"Ticketing Promote Waitlist","description":"Offer a freed-up spot to the next person on an event waitlist and email them a claim link.","inputSchema":{"type":"object","properties":{"eventId":{"type":"string"}},"required":["eventId"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"ticketing_create_promo_code","title":"Ticketing Create Promo Code","description":"Create a discount promo code for an event.","inputSchema":{"type":"object","properties":{"eventId":{"type":"string"},"code":{"type":"string"},"discountType":{"type":"string","enum":["percentage","fixed"]},"discountValue":{"type":"number"},"maxUses":{"type":"number"}},"required":["eventId","code","discountType","discountValue"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"ticketing_issue_refund","title":"Ticketing Issue Refund","description":"Refund a paid registration via Stripe — full refund if no amount given, otherwise partial. Irreversible: moves money and a full refund cancels the registration and offers the spot to the waitlist. Requires the dedicated ticketing:refund scope.","inputSchema":{"type":"object","properties":{"registrationId":{"type":"string"},"amount":{"type":"number","description":"Partial refund amount — omit for full refund"}},"required":["registrationId"]},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":false}},{"name":"mediahub_list_podcast_episodes","title":"Mediahub List Podcast Episodes","description":"List podcast episodes with play/download counts, optionally for one feed.","inputSchema":{"type":"object","properties":{"feedId":{"type":"string"},"limit":{"type":"number"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"mediahub_get_media_analytics","title":"Mediahub Get Media Analytics","description":"Play/download/view analytics for one media item, or the org top-10 summary if no id given.","inputSchema":{"type":"object","properties":{"mediaItemId":{"type":"string"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"mediahub_create_media_item","title":"Mediahub Create Media Item","description":"Create a draft media library item (sermon, podcast episode, video, etc.).","inputSchema":{"type":"object","properties":{"title":{"type":"string"},"mediaType":{"type":"string","enum":["video","audio","document","image"]},"description":{"type":"string"}},"required":["title"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"mediahub_publish_media_item","title":"Mediahub Publish Media Item","description":"Publish a media item immediately (sets status to published).","inputSchema":{"type":"object","properties":{"mediaItemId":{"type":"string"}},"required":["mediaItemId"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"live_list_streams","title":"Live List Streams","description":"List live streams with viewer stats, optionally filtered by status (scheduled, live, ended).","inputSchema":{"type":"object","properties":{"status":{"type":"string","enum":["scheduled","live","ended","all"]},"limit":{"type":"number"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"live_get_stream_stats","title":"Live Get Stream Stats","description":"Viewer, watch-time, interaction, and giving stats for one stream.","inputSchema":{"type":"object","properties":{"streamId":{"type":"string"}},"required":["streamId"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"live_schedule_stream","title":"Live Schedule Stream","description":"Schedule a new live stream (creates Mux ingest + playback). Peak viewer limits apply at join time.","inputSchema":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"scheduledAt":{"type":"string","description":"ISO datetime"}},"required":["title"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"live_update_stream","title":"Live Update Stream","description":"Update a scheduled live stream title, description, or schedule time.","inputSchema":{"type":"object","properties":{"streamId":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"scheduledAt":{"type":"string"}},"required":["streamId"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"guests_pipeline_summary","title":"Guests Pipeline Summary","description":"Guest/visitor pipeline summary — how many people are in each stage.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"guests_list_followups_due","title":"Guests List Followups Due","description":"Guest follow-up tasks that are overdue or due by a cutoff date.","inputSchema":{"type":"object","properties":{"dueBefore":{"type":"string","description":"ISO date — defaults to now (overdue + due today)"},"limit":{"type":"number"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"guests_create_followup_task","title":"Guests Create Followup Task","description":"Create a follow-up task for a guest/visitor contact in the pipeline.","inputSchema":{"type":"object","properties":{"contactId":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"taskType":{"type":"string"},"priority":{"type":"string","enum":["low","medium","high"]},"dueDate":{"type":"string","description":"ISO date"},"pipelineEntryId":{"type":"string"}},"required":["contactId","title"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"guests_complete_followup_task","title":"Guests Complete Followup Task","description":"Mark a guest follow-up task as completed.","inputSchema":{"type":"object","properties":{"taskId":{"type":"string"}},"required":["taskId"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"guests_move_pipeline_entry","title":"Guests Move Pipeline Entry","description":"Move a guest pipeline entry to a different stage.","inputSchema":{"type":"object","properties":{"entryId":{"type":"string"},"stageId":{"type":"string"}},"required":["entryId","stageId"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"runsheet_list_upcoming_plans","title":"Runsheet List Upcoming Plans","description":"Upcoming service plans (runsheets) with dates and status.","inputSchema":{"type":"object","properties":{"limit":{"type":"number"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"runsheet_open_positions","title":"Runsheet Open Positions","description":"Open (unfilled) volunteer/team positions on service plans — scheduling gaps that need people.","inputSchema":{"type":"object","properties":{"planId":{"type":"string"},"limit":{"type":"number"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"runsheet_access_seats","title":"Runsheet Access Seats","description":"Runsheet portal access seat usage: counts login-linked team members plus pending invitations. Roster-only contacts without login do not consume seats.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"runsheet_assign_position","title":"Runsheet Assign Position","description":"Assign a contact to an open volunteer/team position on a service plan. Creates a pending assignment and notification.","inputSchema":{"type":"object","properties":{"planId":{"type":"string"},"teamId":{"type":"string"},"contactId":{"type":"string"},"positionId":{"type":"string"}},"required":["planId","teamId","contactId"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"runsheet_publish_plan","title":"Runsheet Publish Plan","description":"Publish a runsheet plan so volunteers can see their assignments.","inputSchema":{"type":"object","properties":{"planId":{"type":"string"}},"required":["planId"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"store_list_shops","title":"Store List Shops","description":"List media shops for the organization (org shop + speaker shops).","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"store_list_products","title":"Store List Products","description":"List products in a shop.","inputSchema":{"type":"object","properties":{"shopId":{"type":"string","description":"Filter to one shop — omit to list all org products"},"limit":{"type":"number"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"store_ensure_org_shop","title":"Store Ensure Org Shop","description":"Ensure the organization has a default org shop (creates one if missing).","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"store_create_product","title":"Store Create Product","description":"Sell an existing media item as a product in a shop. The item must already exist in MediaHub (see mediahub tools).","inputSchema":{"type":"object","properties":{"shopId":{"type":"string"},"mediaItemId":{"type":"string","description":"MediaHub item to sell"},"type":{"type":"string","enum":["podcast_series","episode","sermon","video","ebook","audiobook","book","bundle","subscription"],"description":"Product type — matches the media item kind"},"pricePence":{"type":"number"},"title":{"type":"string","description":"Defaults to the media item title"},"currency":{"type":"string","description":"Default gbp"}},"required":["shopId","mediaItemId","type","pricePence"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"people_list_segments","title":"People: List Segments","description":"List dynamic contact segments with live member counts.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"people_preview_segment","title":"People: Preview Segment","description":"Preview how many contacts match a segment rule tree before creating it.","inputSchema":{"type":"object","properties":{"rootGroup":{"type":"string","description":"Segment rule group JSON (AND/OR rules)"},"limit":{"type":"number"}},"required":["rootGroup"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"people_create_segment","title":"People: Create Segment","description":"Create a dynamic segment from a rule tree.","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"rootGroup":{"type":"string"},"refreshFrequency":{"type":"string","enum":["realtime","daily","manual"]}},"required":["name","rootGroup"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"people_list_duplicates","title":"People: List Duplicates","description":"List groups of contacts sharing the same email (duplicate candidates).","inputSchema":{"type":"object","properties":{"limit":{"type":"number"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"people_merge_contacts","title":"People: Merge Contacts","description":"Merge two duplicate contacts — keeps keepContactId and soft-merges mergeContactId into it.","inputSchema":{"type":"object","properties":{"keepContactId":{"type":"string"},"mergeContactId":{"type":"string"}},"required":["keepContactId","mergeContactId"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"people_get_segment_contacts","title":"People: Get Segment Contacts","description":"List contact IDs in a dynamic segment. Call people_list_segments first for segmentId. For rule preview before create, use people_preview_segment.","inputSchema":{"type":"object","properties":{"segmentId":{"type":"string"},"limit":{"type":"number"},"offset":{"type":"number"}},"required":["segmentId"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"community_list_prayer_requests","title":"Community: List Prayer Requests","description":"List prayer requests — optionally filter to urgent or active only.","inputSchema":{"type":"object","properties":{"status":{"type":"string"},"urgentOnly":{"type":"boolean"},"limit":{"type":"number"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"community_create_prayer_request","title":"Community: Create Prayer Request","description":"Log a prayer request for a contact.","inputSchema":{"type":"object","properties":{"contactId":{"type":"string"},"request":{"type":"string"},"isUrgent":{"type":"boolean"},"category":{"type":"string"},"followUpDays":{"type":"number"}},"required":["contactId","request"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"community_list_pastoral_visits","title":"Community: List Pastoral Visits","description":"List pastoral visit history for a contact.","inputSchema":{"type":"object","properties":{"contactId":{"type":"string"}},"required":["contactId"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"community_log_pastoral_visit","title":"Community: Log Pastoral Visit","description":"Log a pastoral visit (home, hospital, phone, video, office).","inputSchema":{"type":"object","properties":{"contactId":{"type":"string"},"visitDate":{"type":"string","description":"YYYY-MM-DD"},"visitType":{"type":"string","enum":["home","hospital","office","phone","video"]},"durationMinutes":{"type":"number"},"notes":{"type":"string"},"nextVisitDate":{"type":"string"}},"required":["contactId","visitDate","visitType"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"grow_preview_campaign_send","title":"Grow: Preview Campaign Send","description":"Preview recipient count before sending a campaign (call before grow_send_campaign).","inputSchema":{"type":"object","properties":{"campaignId":{"type":"string"}},"required":["campaignId"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"grow_schedule_campaign","title":"Grow: Schedule Campaign","description":"Schedule an email campaign for a future ISO datetime.","inputSchema":{"type":"object","properties":{"campaignId":{"type":"string"},"scheduledAt":{"type":"string","description":"ISO 8601 datetime in the future"}},"required":["campaignId","scheduledAt"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"grow_schedule_campaign_optimal","title":"Grow: Schedule Campaign Optimal","description":"Schedule a campaign at the AI-recommended optimal send time.","inputSchema":{"type":"object","properties":{"campaignId":{"type":"string"}},"required":["campaignId"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"grow_send_campaign","title":"Grow: Send Campaign","description":"Send an email campaign immediately. Call without confirm to get recipient count; set confirm:true to execute.","inputSchema":{"type":"object","properties":{"campaignId":{"type":"string"},"confirm":{"type":"boolean"}},"required":["campaignId"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"ticketing_list_attendees","title":"Ticketing List Attendees","description":"List confirmed registrations for an event with check-in status.","inputSchema":{"type":"object","properties":{"eventId":{"type":"string"},"checkedInOnly":{"type":"boolean"},"limit":{"type":"number"}},"required":["eventId"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"ticketing_check_in","title":"Ticketing Check In","description":"Check in a registration by ID, email, or QR token.","inputSchema":{"type":"object","properties":{"eventId":{"type":"string"},"registrationId":{"type":"string"},"email":{"type":"string"},"qrToken":{"type":"string"}},"required":["eventId"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"guests_check_in","title":"Guests Check In","description":"Check a contact into a service instance (Sunday attendance).","inputSchema":{"type":"object","properties":{"serviceInstanceId":{"type":"string"},"serviceId":{"type":"string","description":"Used to find/create today instance if serviceInstanceId omitted"},"contactId":{"type":"string"}},"required":["contactId"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"templates_list_email_templates","title":"Templates List Email Templates","description":"List email templates with category and subject line.","inputSchema":{"type":"object","properties":{"category":{"type":"string"},"limit":{"type":"number"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"templates_get_email_template","title":"Templates Get Email Template","description":"Get one email template including its HTML content.","inputSchema":{"type":"object","properties":{"templateId":{"type":"string"}},"required":["templateId"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"templates_create_email_template","title":"Templates Create Email Template","description":"Create an email template from HTML content.","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"html":{"type":"string"},"subjectLine":{"type":"string"},"description":{"type":"string"},"category":{"type":"string"}},"required":["name","html"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"templates_list_whatsapp_templates","title":"Templates List Whatsapp Templates","description":"List WhatsApp message templates with Meta approval status.","inputSchema":{"type":"object","properties":{"status":{"type":"string","description":"e.g. approved, pending, rejected"},"limit":{"type":"number"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"groups_list","title":"Groups List","description":"List small groups with meeting details and member counts.","inputSchema":{"type":"object","properties":{"activeOnly":{"type":"boolean"},"limit":{"type":"number"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"groups_create","title":"Groups Create","description":"Create a small group.","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"groupType":{"type":"string"},"meetingDay":{"type":"string"},"meetingTime":{"type":"string"},"meetingLocation":{"type":"string"},"maxMembers":{"type":"number"}},"required":["name"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"groups_list_members","title":"Groups List Members","description":"List members of a small group.","inputSchema":{"type":"object","properties":{"groupId":{"type":"string"}},"required":["groupId"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"groups_add_member","title":"Groups Add Member","description":"Add a contact to a small group.","inputSchema":{"type":"object","properties":{"groupId":{"type":"string"},"contactId":{"type":"string"}},"required":["groupId","contactId"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"attendance_recent_checkins","title":"Attendance Recent Checkins","description":"List recent service check-ins with visitor flags.","inputSchema":{"type":"object","properties":{"serviceInstanceId":{"type":"string"},"limit":{"type":"number"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"attendance_summary","title":"Attendance Summary","description":"Attendance totals for a date range — total check-ins, first-time visitors, children.","inputSchema":{"type":"object","properties":{"fromDate":{"type":"string","description":"YYYY-MM-DD"},"toDate":{"type":"string","description":"YYYY-MM-DD"}},"required":["fromDate","toDate"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"schedule_list_series","title":"Schedule List Series","description":"List recurring service series (weekly services, monthly events) with recurrence rules.","inputSchema":{"type":"object","properties":{"status":{"type":"string"},"limit":{"type":"number"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"schedule_upcoming_services","title":"Schedule Upcoming Services","description":"List upcoming service instances (occurrences) with dates and status.","inputSchema":{"type":"object","properties":{"daysAhead":{"type":"number","description":"Default 14"},"limit":{"type":"number"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"audit_list_events","title":"Audit List Events","description":"List recent audit-log events for the organization (who did what, when). Sensitive — requires the dedicated audit:read scope.","inputSchema":{"type":"object","properties":{"resourceType":{"type":"string"},"action":{"type":"string"},"limit":{"type":"number"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"giving_list_pledges","title":"Giving: List Pledges","description":"List recurring giving pledges with progress against total pledged.","inputSchema":{"type":"object","properties":{"status":{"type":"string","description":"e.g. active, cancelled, completed"},"limit":{"type":"number"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"grow_list_ab_tests","title":"Grow: List Ab Tests","description":"List A/B tests with status, winning variant, and significance.","inputSchema":{"type":"object","properties":{"limit":{"type":"number"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"ticketing_list_ticket_types","title":"Ticketing List Ticket Types","description":"List ticket types for an event with prices and quantities sold.","inputSchema":{"type":"object","properties":{"eventId":{"type":"string"}},"required":["eventId"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"ticketing_create_ticket_type","title":"Ticketing Create Ticket Type","description":"Add a ticket type to a draft or published event.","inputSchema":{"type":"object","properties":{"eventId":{"type":"string"},"name":{"type":"string"},"price":{"type":"number","description":"0 for free tickets"},"currency":{"type":"string","description":"Default GBP"},"quantity":{"type":"number","description":"Omit for unlimited"},"description":{"type":"string"}},"required":["eventId","name","price"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"spaces_list_buildings","title":"Spaces List Buildings","description":"List buildings/campuses with capacity and address.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"runsheet_list_songs","title":"Runsheet List Songs","description":"List the worship song library with keys, CCLI numbers, and usage counts.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search title or author"},"limit":{"type":"number"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"runsheet_add_song","title":"Runsheet Add Song","description":"Add a song to the worship library.","inputSchema":{"type":"object","properties":{"title":{"type":"string"},"author":{"type":"string"},"ccliNumber":{"type":"string"},"defaultKey":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}}},"required":["title"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"mediahub_list_playlists","title":"Mediahub List Playlists","description":"List media playlists with item counts and visibility.","inputSchema":{"type":"object","properties":{"limit":{"type":"number"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"mediahub_create_playlist","title":"Mediahub Create Playlist","description":"Create a media playlist.","inputSchema":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"visibility":{"type":"string","enum":["public","private","unlisted"]}},"required":["title"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"live_list_polls","title":"Live List Polls","description":"List polls for a live stream with options and active state.","inputSchema":{"type":"object","properties":{"streamId":{"type":"string"}},"required":["streamId"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"live_create_poll","title":"Live Create Poll","description":"Create a viewer poll on a live stream.","inputSchema":{"type":"object","properties":{"streamId":{"type":"string"},"question":{"type":"string"},"options":{"type":"array","items":{"type":"string"}}},"required":["streamId","question","options"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"store_list_orders","title":"Store List Orders","description":"List store orders with amounts and status.","inputSchema":{"type":"object","properties":{"status":{"type":"string"},"limit":{"type":"number"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"platform_proactive_alerts","title":"Platform: Proactive Alerts","description":"AI-generated proactive alerts across the whole organization (native AI tier only).","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"people_meeting_prep","title":"People: Meeting Prep","description":"Generate an AI meeting-prep briefing for one or more contacts (history, giving, engagement).","inputSchema":{"type":"object","properties":{"contactIds":{"type":"array","items":{"type":"string"}}},"required":["contactIds"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}}],"prompts":[{"name":"org_health_review","title":"Organization health review","description":"Full health check across the whole organization: overview, agents, proposals, usage, and recommended actions."},{"name":"weekly_pastoral_review","title":"Weekly pastoral care review","description":"Review overdue follow-ups, pastoral notes, prayer requests, life events, and visits; propose check-ins."},{"name":"guest_followup_sprint","title":"Guest follow-up sprint","description":"Work through the guest pipeline: due follow-ups, first-time visitors, and stalled pipeline entries."},{"name":"event_health_check","title":"Event health check","description":"Deep-dive one event: sales pace, capacity, ticket types, waitlist, and promo recommendations."},{"name":"campaign_launch","title":"Campaign launch checklist","description":"Pre-flight a draft email campaign: audience, content, send preview, then schedule at the optimal time."},{"name":"giving_report","title":"Giving report","description":"Produce a giving report for a date range: totals by fund, pledge progress, and notable donors."},{"name":"crm_cleanup","title":"CRM data cleanup","description":"Find and fix data-quality issues: duplicate contacts, missing emails/phones, and stale segments."},{"name":"sunday_service_prep","title":"Sunday service prep","description":"Prepare the next service: unfilled volunteer positions, runsheet plan, song selection, and schedule."},{"name":"attendance_report","title":"Attendance trends report","description":"Attendance trends over a date range: totals, first-time visitors, children, and follow-up conversion."},{"name":"new_member_onboarding","title":"New member onboarding","description":"Onboard one contact: profile check, welcome message, group matching, and follow-up task."},{"name":"space_booking_assistant","title":"Space booking assistant","description":"Find and book a suitable room: availability check, conflict detection, and booking creation."},{"name":"proposal_triage","title":"Agent proposal triage","description":"Review every pending autonomous-agent proposal and approve, reject, or escalate each with reasoning."},{"name":"mcp_live_watch","title":"MCP live watch & human takeover","description":"Monitor connected MCP agents in real time, triage issues, and suspend agents that need human takeover."},{"name":"church_sunday_ops","title":"Full Sunday operations runbook","description":"End-to-end Sunday ops: attendance, guests, runsheet, spaces, and follow-ups in one coordinated pass."},{"name":"attendance_sunday_headcount","title":"Sunday headcount capture","description":"Review today's check-ins and compare to recent Sunday averages."},{"name":"attendance_trend_alert","title":"Attendance decline alert","description":"Detect declining attendance trends and recommend pastoral/guest responses."},{"name":"audit_security_review","title":"Security audit review","description":"Review recent audit events for security-sensitive actions."},{"name":"audit_compliance_export","title":"Compliance audit export","description":"Prepare an audit trail summary for compliance or board review."},{"name":"billing_usage_upgrade_review","title":"Billing usage & upgrade review","description":"Check subscription state and whether an upgrade is needed for current usage."},{"name":"billing_checkout_assist","title":"Billing checkout assist","description":"Help an operator upgrade a specific addon via Stripe checkout."},{"name":"channels_pastoral_checkin","title":"Pastoral SMS/email check-in","description":"Draft and send a personal pastoral check-in to one contact."},{"name":"channels_whatsapp_broadcast_prep","title":"WhatsApp broadcast prep","description":"Pre-flight a WhatsApp message: template check, audience, and send."},{"name":"channels_transactional_notify","title":"Transactional notification send","description":"Send a one-off transactional email or SMS (receipt, reminder, confirmation)."},{"name":"community_prayer_triage","title":"Prayer request triage","description":"Review open prayer requests, prioritise urgent, and propose responses."},{"name":"community_life_event_response","title":"Life event pastoral response","description":"Respond to recent life events (bereavement, illness, celebration) with appropriate care."},{"name":"community_safeguarding_review","title":"Safeguarding check review","description":"Review open safeguarding checks and escalate amber/red items."},{"name":"community_followup_completion","title":"Pastoral follow-up completion","description":"Work through pending pastoral follow-ups and close completed ones."},{"name":"giving_pledge_followup","title":"Pledge follow-up","description":"Identify at-risk pledges and propose donor follow-up."},{"name":"giving_first_time_donor_welcome","title":"First-time donor welcome","description":"Welcome first-time donors with a personal thank-you."},{"name":"giving_fund_setup","title":"New giving fund setup","description":"Create a new fund and verify it appears in giving reports."},{"name":"groups_health_review","title":"Small groups health review","description":"Review all small groups: size, leaders, and inactive groups."},{"name":"groups_new_member_placement","title":"Small group placement","description":"Place a contact into the best-matching small group."},{"name":"grow_automation_audit","title":"Automation health audit","description":"Review all automations: active, paused, erroring, and enrollment counts."},{"name":"grow_form_lead_triage","title":"Form submission triage","description":"Process new form submissions: dedupe, tag, and enroll in automations."},{"name":"grow_landing_page_publish","title":"Landing page publish","description":"Create and publish a landing page for an event or campaign."},{"name":"grow_ab_test_review","title":"A/B test review","description":"Review running A/B tests and recommend winner or extension."},{"name":"guests_stalled_pipeline_review","title":"Stalled guest pipeline review","description":"Find guests stuck in early pipeline stages and recommend moves or follow-ups."},{"name":"guests_checkin_welcome","title":"Guest check-in & welcome","description":"Check in a guest visitor and create their follow-up journey."},{"name":"live_stream_prep","title":"Live stream prep","description":"Prepare an upcoming live stream: schedule, stats baseline, and poll setup."},{"name":"live_post_stream_summary","title":"Post-stream summary","description":"Summarise stream performance and recommend follow-up content."},{"name":"mediahub_podcast_publish","title":"Podcast episode publish","description":"Publish a podcast episode: create media item, metadata, and publish."},{"name":"mediahub_playlist_curation","title":"Playlist curation","description":"Create or update a media playlist for a series or sermon archive."},{"name":"people_welcome_desk_daily","title":"Welcome Desk daily review","description":"Process Welcome Desk visitors and follow-up tasks for first-time guests."},{"name":"people_contact_enrichment","title":"Contact profile enrichment","description":"Review and enrich a contact profile with custom fields and tags."},{"name":"people_segment_audience_build","title":"Segment audience build","description":"Build or refine a CRM segment for campaigns or pastoral outreach."},{"name":"people_meeting_prep_brief","title":"Meeting prep brief","description":"Generate a pastoral or leadership meeting brief for one contact."},{"name":"people_link_family_member","title":"Link two contacts as family","description":"Link existing contacts as family (e.g. Grace as James's daughter) using the native Relationships graph."},{"name":"people_family_household_review","title":"Family & household review","description":"Review family relationships and household groupings for one contact."},{"name":"platform_discovery_orientation","title":"MCP discovery orientation","description":"Orient a new MCP agent: manifest, tools, scopes, and golden path."},{"name":"platform_agent_configuration","title":"Autonomous agent configuration","description":"Review and recommend autonomy modes for all 11 platform agents."},{"name":"platform_route_explorer","title":"Dashboard API route explorer","description":"Find a dashboard API route for UI features not covered by workflow tools."},{"name":"runsheet_team_roster_audit","title":"Runsheet team roster audit","description":"Audit team roster, access seats, and unfilled positions."},{"name":"runsheet_song_selection","title":"Worship song selection","description":"Select songs for an upcoming plan based on keys, recency, and theme."},{"name":"runsheet_publish_plan","title":"Publish runsheet plan","description":"Final review and publish of a runsheet plan to the team portal."},{"name":"schedule_service_calendar_review","title":"Service calendar review","description":"Review upcoming services and recurring series for gaps or conflicts."},{"name":"spaces_incident_response","title":"Facilities incident response","description":"Log and triage a facilities incident; notify relevant parties."},{"name":"spaces_weekly_bookings_review","title":"Weekly bookings review","description":"Review this week's bookings, cancellations, and utilisation."},{"name":"spaces_new_room_setup","title":"New room setup","description":"Add a new room to the spaces module."},{"name":"store_product_launch","title":"Store product launch","description":"Create and list a new product in the org store."},{"name":"store_order_review","title":"Store order review","description":"Review recent store orders and flag fulfilment priorities."},{"name":"templates_email_series_build","title":"Email template series build","description":"Create a series of email templates for onboarding or nurture."},{"name":"templates_whatsapp_compliance","title":"WhatsApp template compliance check","description":"Verify WhatsApp templates are approved before a broadcast campaign."},{"name":"ticketing_refund_handling","title":"Ticketing refund handling","description":"Process a refund request with human approval for money movement."},{"name":"ticketing_day_of_checkin","title":"Day-of event check-in","description":"Run check-in operations on event day."},{"name":"ticketing_event_launch","title":"Event create and publish","description":"Create a new event, ticket types, and publish to registration."}],"resources":[{"name":"sendifai-agent-manifest","uri":"sendifai://manifest","description":"Agent-readable manifest of all sendifai modules, tools, scopes, resources, and prompts"},{"name":"sendifai-getting-started","uri":"sendifai://docs/getting-started","description":"How to authenticate, orient, and behave well as an agent on sendifai"},{"name":"sendifai-security-model","uri":"sendifai://docs/security","description":"The five security layers: auth, scopes, feature flags, rate limits, audit trail"},{"name":"sendifai-workflows","uri":"sendifai://docs/workflows","description":"Catalog of pre-built workflow prompts and how to compose them"},{"name":"sendifai-agents-guide","uri":"sendifai://docs/agents","description":"How the 11 autonomous agents work: modes, proposals, executable action types"},{"name":"sendifai-billing-limits","uri":"sendifai://docs/billing-and-limits","description":"Metered usage, LIMIT_REACHED responses, runsheet access seats vs roster-only, and platform_usage"},{"name":"sendifai-mcp-ops","uri":"sendifai://docs/mcp-ops","description":"MCP ops audit, connected-agent governance, MCPOps Telegram alerts, and error taxonomy"},{"name":"org-snapshot","uri":"sendifai://org/snapshot","description":"Live cross-module snapshot of the organization (requires platform:read)"},{"name":"org-agents","uri":"sendifai://org/agents","description":"Live autonomous agent status: mode, last run, findings (requires platform:read)"},{"name":"org-proposals","uri":"sendifai://org/proposals","description":"Pending autonomous-agent proposals awaiting approval (requires platform:read)"},{"name":"org-usage","uri":"sendifai://org/usage","description":"Metered usage and billing state per channel, including runsheet access seats (requires platform:read)"},{"name":"contact-card","uri":"sendifai://contacts/{contactId}","description":"Full contact card by UUID: profile, tags, community membership (requires people:read)"},{"name":"contact-pastoral-notes","uri":"sendifai://contacts/{contactId}/notes","description":"Pastoral care notes for one contact — team/public only over MCP (requires people:read)"},{"name":"contact-family","uri":"sendifai://contacts/{contactId}/family","description":"Linked family/household relationships for one contact — spouse, parent, child, sibling (requires people:read)"},{"name":"contact-care-timeline","uri":"sendifai://contacts/{contactId}/timeline","description":"Combined pastoral care timeline — notes and interactions for one contact (requires people:read)"},{"name":"event-health","uri":"sendifai://events/{eventId}","description":"Event sales, revenue, check-in, and capacity by UUID (requires ticketing:read)"}]}