{"serverInfo":{"name":"sendifai","version":"1.0.1","description":"CRM, mass email/SMS, pastoral care, giving, events for churches & nonprofits. 134+ MCP tools with OAuth."},"instructions":"sendifai MCP server for churches and nonprofits. Call platform_overview first. Use OAuth intent bundles (email, pastoral, giving, sms, spaces, platform) via /api/oauth/intents. Prefer named MCP tools; use platform_invoke_tool for advanced dashboard APIs.","authentication":{"required":true,"schemes":["oauth2"]},"tools":[{"name":"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","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","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","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","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","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","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_list_tools","description":"List every MCP tool available to this credential (name, scope, module, description). Use before platform_invoke_tool.","inputSchema":{"type":"object","properties":{"module":{"type":"string","description":"Filter to one module, e.g. people or runsheet"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"platform_invoke_tool","description":"Invoke any registered MCP tool by name. Escape hatch for agents that prefer one meta-tool over 130+ individual tools.","inputSchema":{"type":"object","properties":{"toolName":{"type":"string"},"arguments":{"type":"string"}},"required":["toolName"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"platform_search_dashboard_api","description":"Search 1055+ org-scoped dashboard API routes (forms, email builder, billing, runsheet, AI studio, etc.). Pair with platform_invoke_dashboard_api.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Path fragment, e.g. forms, campaigns, checkout"},"limit":{"type":"number"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"platform_invoke_dashboard_api","description":"Call any org-scoped dashboard API route by path (GET/POST/PATCH/PUT/DELETE). Requires session-linked user or dashboard session via /api/agent/chat. Covers visual builders, settings, billing UI APIs, and all modules not yet wrapped as named MCP tools.","inputSchema":{"type":"object","properties":{"method":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE"]},"path":{"type":"string","description":"e.g. /api/forms/{formId}/fields or /api/billing/subscription"},"body":{"type":"string"},"query":{"type":"string"}},"required":["method","path"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"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","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","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","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","description":"Get full details for one contact by ID, including tags and community membership.","inputSchema":{"type":"object","properties":{"contactId":{"type":"string","description":"Contact UUID"}},"required":["contactId"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"people_create_contact","description":"Create a new contact. Provide at least an email or a first+last name. Search first with people_search_contacts to avoid duplicates.","inputSchema":{"type":"object","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"communityMember":{"type":"boolean","description":"Mark as community member (default false)"},"tags":{"type":"array","items":{"type":"string"},"description":"Tag names to store on the contact"},"city":{"type":"string"},"country":{"type":"string"},"notes":{"type":"string","description":"Free-text note stored as the contact is created"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"people_update_contact","description":"Update fields on an existing contact. Only the provided fields change.","inputSchema":{"type":"object","properties":{"contactId":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"communityMember":{"type":"boolean"},"tags":{"type":"array","items":{"type":"string"},"description":"Replaces the full tag list"},"city":{"type":"string"},"country":{"type":"string"},"status":{"type":"string","enum":["active","unsubscribed","bounced","inactive"]}},"required":["contactId"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"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","description":"Add a pastoral care note (dashboard: /community/care/notes). Syncs to contact_care_timeline (note_added). Supports followUpDate and confidentialityLevel for safeguarding. Promotes the contact to community member.","inputSchema":{"type":"object","properties":{"contactId":{"type":"string"},"content":{"type":"string","description":"Note text"},"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_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","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":"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","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","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","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","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","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","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","description":"Mark a pastoral follow-up as complete by clearing the next follow-up date on a life event.","inputSchema":{"type":"object","properties":{"eventId":{"type":"string"}},"required":["eventId"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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_sms_quota","description":"Check the messaging credit balance (allowance, used, remaining) for the current billing period — this is what SMS/WhatsApp sends debit.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"channels_recent_campaign_performance","description":"Delivery/open/click stats for recently sent campaigns — quick channel health check.","inputSchema":{"type":"object","properties":{"limit":{"type":"number"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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":"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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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":"channels_whatsapp_template_status","description":"Check which WhatsApp templates are approved and ready to send.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"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","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."}],"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":"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":"event-health","uri":"sendifai://events/{eventId}","description":"Event sales, revenue, check-in, and capacity by UUID (requires ticketing:read)"}]}