{"name":"sendifai","description":"sendifai is the AI-native platform for churches, nonprofits, and community organizations. Connect via MCP or the Universal Agent Bridge — CRM, pastoral care, giving, growth marketing, facilities, and multi-channel messaging. Human connect guide: /agents","version":1,"authentication":{"type":"bearer","header":"Authorization: Bearer <oauth_access_token_or_sk_live_…>","instructions":"Recommended: OAuth via MCP discovery — user signs in at /oauth/authorize inside the LLM (PKCE + dynamic registration). Pass intent=sms, intent=spaces, intent=pastoral, etc. (GET /api/oauth/intents). Fallback: Settings → API Keys with manual scopes.","oauth":{"protected_resource":"/.well-known/oauth-protected-resource","authorization_server":"/.well-known/oauth-authorization-server","intent_bundles":"/api/oauth/intents","example_intents":["sms","email","spaces","pastoral","giving","runsheet","platform"]}},"endpoint":"/api/mcp","transport":"streamable-http","scopes":["platform:read","platform:write","people:read","people:write","community:read","community:write","giving:read","giving:write","grow:read","grow:write","spaces:read","spaces:write","channels:read","channels:send","ticketing:read","ticketing:write","ticketing:refund","mediahub:read","mediahub:write","live:read","live:write","guests:read","guests:write","runsheet:read","runsheet:write","billing:read","billing:write","store:read","store:write","templates:read","templates:write","groups:read","groups:write","attendance:read","schedule:read","audit:read"],"modules":[{"module":"platform","description":"Platform-level overview: one-call snapshot of the whole organization across all modules, autonomous agents, pending proposals, and pay-per-use billing state (platform_usage). Call platform_overview first to orient yourself. Use platform_search_dashboard_api + platform_invoke_dashboard_api for any of 1055+ dashboard routes.","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.","scope":"platform:read"},{"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.","scope":"platform:read"},{"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.","scope":"platform:read"},{"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.","scope":"platform:read"},{"name":"platform_get_proposal","description":"Get full details of an agent proposal including the action payload.","scope":"platform:read"},{"name":"platform_approve_proposal","description":"Approve and execute a pending agent proposal. Requires owner/admin API key with platform:write scope.","scope":"platform:write"},{"name":"platform_reject_proposal","description":"Reject a pending agent proposal without executing it.","scope":"platform:write"},{"name":"platform_list_tools","description":"List every MCP tool available to this credential (name, scope, module, description). Use before platform_invoke_tool.","scope":"platform:read"},{"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.","scope":"platform:write"},{"name":"platform_search_dashboard_api","description":"Search 1360+ org-scoped dashboard API routes (forms, email builder, billing, runsheet, AI studio, etc.). Pair with platform_invoke_dashboard_api or module-specific *_invoke_api tools.","scope":"platform:read"},{"name":"platform_invoke_dashboard_api","description":"Call any org-scoped dashboard API route by path (GET/POST/PATCH/PUT/DELETE). Works with OAuth MCP connections. Covers visual builders, settings, billing UI APIs, AI studio, and all modules not yet wrapped as named MCP tools. Requires platform:write scope.","scope":"platform:write"},{"name":"platform_ai_invoke_api","description":"Invoke AI studio APIs: content generation, campaign AI, personalization, video-to-campaign.","scope":"platform:write"},{"name":"platform_settings_invoke_api","description":"Invoke org settings, billing, team, analytics, count tablet, and autonomous agent config APIs.","scope":"platform:write"},{"name":"platform_route_catalog","description":"Report dashboard API catalog size (1360+ routes) and invoke tool map for agents.","scope":"platform:read"},{"name":"platform_proactive_alerts","description":"AI-generated proactive alerts across the whole organization (native AI tier only).","scope":"platform:read"}]},{"module":"people","description":"CRM contacts: search, list, read, create, update (including dateOfBirth/birthday, address, church dates), bulk update, pastoral care notes (`people_list_notes`, `people_add_note`) at /community/care/notes; tags and segments. Use people_invoke_api for custom fields, data quality, visitors, and all /api/crm routes. Contacts are the core entity — most other modules reference contactId.","tools":[{"name":"people_invoke_api","description":"Invoke any CRM/contacts dashboard API (custom fields, segments, data quality, visitors, surveys). Use platform_search_dashboard_api to find paths.","scope":"people:write"},{"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.","scope":"people:read"},{"name":"people_get_contact","description":"Get full details for one contact by ID, including tags and community membership.","scope":"people:read"},{"name":"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.","scope":"people:read"},{"name":"people_create_contact","description":"Create a new contact with full CRM fields (name, email, phone, dateOfBirth/birthday, address, church dates, tags, etc.). Provide at least an email or first+last name. Search first with people_search_contacts to avoid duplicates.","scope":"people:write"},{"name":"people_update_contact","description":"Update any CRM field on an existing contact. Supports dateOfBirth/birthday, gender, address, church dates (baptism, membership, anniversary), tags, status, and custom fields. Only provided fields change.","scope":"people:write"},{"name":"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.","scope":"people:write"},{"name":"people_delete_contact","description":"Soft-delete a contact (sets deleted_at). Use permanent=true only when GDPR erasure is required. Prefer merge for duplicates.","scope":"people:write"},{"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.","scope":"people:read"},{"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.","scope":"people:write"},{"name":"people_list_tags","description":"List all CRM tags in the organization.","scope":"people:read"},{"name":"people_add_contact_tags","description":"Add one or more tags to a contact by tag name (creates tags if they do not exist).","scope":"people:write"},{"name":"people_list_segments","description":"List dynamic contact segments with live member counts.","scope":"people:read"},{"name":"people_preview_segment","description":"Preview how many contacts match a segment rule tree before creating it.","scope":"people:read"},{"name":"people_create_segment","description":"Create a dynamic segment from a rule tree.","scope":"people:write"},{"name":"people_list_duplicates","description":"List groups of contacts sharing the same email (duplicate candidates).","scope":"people:read"},{"name":"people_merge_contacts","description":"Merge two duplicate contacts — keeps keepContactId and soft-merges mergeContactId into it.","scope":"people:write"},{"name":"people_meeting_prep","description":"Generate an AI meeting-prep briefing for one or more contacts (history, giving, engagement).","scope":"people:read"}]},{"module":"grow","description":"Growth marketing: automation flows (funnels), forms and submissions, landing pages, email campaigns with stats.","tools":[{"name":"grow_invoke_api","description":"Invoke forms builder, campaigns, automations, and landing page APIs.","scope":"grow:write"},{"name":"grow_list_automations","description":"List automation flows (funnels) with status and enrollment stats.","scope":"grow:read"},{"name":"grow_get_automation","description":"Get one automation flow including its node graph (flow_definition).","scope":"grow:read"},{"name":"grow_set_automation_status","description":"Activate or pause an automation flow.","scope":"grow:write"},{"name":"grow_list_forms","description":"List forms with view and submission counts.","scope":"grow:read"},{"name":"grow_list_form_submissions","description":"List recent submissions for a form, including submitted data.","scope":"grow:read"},{"name":"grow_list_landing_pages","description":"List landing pages with visit and conversion stats.","scope":"grow:read"},{"name":"grow_list_campaigns","description":"List email campaigns with send/open/click stats.","scope":"grow:read"},{"name":"grow_create_landing_page","description":"Create a draft landing page from a text prompt (AI-generated content blocks).","scope":"grow:write"},{"name":"grow_publish_landing_page","description":"Publish a landing page so it is live at its public URL.","scope":"grow:write"},{"name":"grow_enroll_contact","description":"Enroll a contact into an automation flow.","scope":"grow:write"},{"name":"grow_create_campaign","description":"Create a draft email campaign.","scope":"grow:write"},{"name":"grow_preview_campaign_send","description":"Preview recipient count before sending a campaign (call before grow_send_campaign).","scope":"grow:read"},{"name":"grow_schedule_campaign","description":"Schedule an email campaign for a future ISO datetime.","scope":"grow:write"},{"name":"grow_schedule_campaign_optimal","description":"Schedule a campaign at the AI-recommended optimal send time.","scope":"grow:write"},{"name":"grow_send_campaign","description":"Send an email campaign immediately. Call without confirm to get recipient count; set confirm:true to execute.","scope":"grow:write"},{"name":"grow_list_ab_tests","description":"List A/B tests with status, winning variant, and significance.","scope":"grow:read"}]},{"module":"giving","description":"Giving & donations: funds, donations, givers, giving summaries. Recording a donation goes through the same validated path as the dashboard (usage limits, Gift Aid, receipts).","tools":[{"name":"giving_invoke_api","description":"Invoke giving APIs: Gift Aid, reconciliation, counting sessions, reports, PayPal.","scope":"giving:write"},{"name":"giving_list_funds","description":"List donation funds (e.g. General, Building, Missions) with raised and target amounts.","scope":"giving:read"},{"name":"giving_list_donations","description":"List donations, newest first. Filter by fund, giver, status, or date range.","scope":"giving:read"},{"name":"giving_summary","description":"Giving totals for a date range: total amount, donation count, and per-fund breakdown.","scope":"giving:read"},{"name":"giving_search_givers","description":"Search givers by name or email.","scope":"giving:read"},{"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.","scope":"giving:write"},{"name":"giving_create_fund","description":"Create a new giving fund.","scope":"giving:write"},{"name":"giving_list_pledges","description":"List recurring giving pledges with progress against total pledged.","scope":"giving:read"}]},{"module":"spaces","description":"Facilities: rooms, bookings with conflict detection, availability checks, incidents, utility/energy bills.","tools":[{"name":"spaces_invoke_api","description":"Invoke facilities APIs: assets, work orders, inventory, parking, HVAC, compliance.","scope":"spaces:write"},{"name":"spaces_list_rooms","description":"List rooms with type, capacity, and status.","scope":"spaces:read"},{"name":"spaces_list_bookings","description":"List bookings, optionally for one room or a date range. Defaults to upcoming bookings.","scope":"spaces:read"},{"name":"spaces_check_availability","description":"Check whether a room is free between two times. Returns any conflicting bookings.","scope":"spaces:read"},{"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.","scope":"spaces:write"},{"name":"spaces_list_incidents","description":"List facility incidents (maintenance issues, hazards) with severity and status.","scope":"spaces:read"},{"name":"spaces_list_utility_bills","description":"List utility/energy bills with amounts, periods, and payment status.","scope":"spaces:read"},{"name":"spaces_create_incident","description":"Report a facility incident (maintenance issue, hazard, etc.).","scope":"spaces:write"},{"name":"spaces_cancel_booking","description":"Cancel a room booking.","scope":"spaces:write"},{"name":"spaces_create_room","description":"Create a new room in the facilities module.","scope":"spaces:write"},{"name":"spaces_list_buildings","description":"List buildings/campuses with capacity and address.","scope":"spaces:read"}]},{"module":"mediahub","description":"Media library: podcast episodes, analytics, create/publish media items.","tools":[{"name":"mediahub_invoke_api","description":"Invoke Media Hub APIs: courses, distribution, workflow, social, worship content.","scope":"mediahub:write"},{"name":"mediahub_list_podcast_episodes","description":"List podcast episodes with play/download counts, optionally for one feed.","scope":"mediahub:read"},{"name":"mediahub_get_media_analytics","description":"Play/download/view analytics for one media item, or the org top-10 summary if no id given.","scope":"mediahub:read"},{"name":"mediahub_create_media_item","description":"Create a draft media library item (sermon, podcast episode, video, etc.).","scope":"mediahub:write"},{"name":"mediahub_publish_media_item","description":"Publish a media item immediately (sets status to published).","scope":"mediahub:write"},{"name":"mediahub_list_playlists","description":"List media playlists with item counts and visibility.","scope":"mediahub:read"},{"name":"mediahub_create_playlist","description":"Create a media playlist.","scope":"mediahub:write"}]},{"module":"live","description":"Live streaming: list streams, viewer stats, schedule and update broadcasts.","tools":[{"name":"live_invoke_api","description":"Invoke live streaming APIs: streams, simulcast, destinations, polls, bridge.","scope":"live:write"},{"name":"live_list_streams","description":"List live streams with viewer stats, optionally filtered by status (scheduled, live, ended).","scope":"live:read"},{"name":"live_get_stream_stats","description":"Viewer, watch-time, interaction, and giving stats for one stream.","scope":"live:read"},{"name":"live_schedule_stream","description":"Schedule a new live stream (creates Mux ingest + playback). Peak viewer limits apply at join time.","scope":"live:write"},{"name":"live_update_stream","description":"Update a scheduled live stream title, description, or schedule time.","scope":"live:write"},{"name":"live_list_polls","description":"List polls for a live stream with options and active state.","scope":"live:read"},{"name":"live_create_poll","description":"Create a viewer poll on a live stream.","scope":"live:write"}]},{"module":"store","description":"Media shops: list shops, products, and orders, ensure org shop, create products.","tools":[{"name":"store_invoke_api","description":"Invoke media shop APIs: products, orders, distribution, merch.","scope":"store:write"},{"name":"store_list_shops","description":"List media shops for the organization (org shop + speaker shops).","scope":"store:read"},{"name":"store_list_products","description":"List products in a shop.","scope":"store:read"},{"name":"store_ensure_org_shop","description":"Ensure the organization has a default org shop (creates one if missing).","scope":"store:write"},{"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).","scope":"store:write"},{"name":"store_list_orders","description":"List store orders with amounts and status.","scope":"store:read"}]},{"module":"community","description":"Community & pastoral care: life events, follow-up radar, care team roles/assignments, safeguarding checks, care timeline (`contact_care_timeline`). Notes sync to timeline on create/update. Contacts touched here become community members.","tools":[{"name":"community_invoke_api","description":"Invoke pastoral care APIs: outreach, grief journeys, care predictions, follow-ups.","scope":"community:write"},{"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.","scope":"community:read"},{"name":"community_list_life_events","description":"List recent life events for the organization, newest first. Confidential events are excluded.","scope":"community:read"},{"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.","scope":"community:write"},{"name":"community_pending_followups","description":"List life-event follow-ups that are due or overdue — the pastoral care radar.","scope":"community:read"},{"name":"community_list_care_team","description":"List care team roles and current assignments.","scope":"community:read"},{"name":"community_list_safeguarding_checks","description":"List safeguarding checks (DBS etc.) with status and expiry. Read-only compliance overview.","scope":"community:read"},{"name":"community_resolve_life_event","description":"Mark a life event as resolved/closed and clear follow-up dates.","scope":"community:write"},{"name":"community_complete_followup","description":"Mark a pastoral follow-up as complete by clearing the next follow-up date on a life event.","scope":"community:write"},{"name":"community_list_prayer_requests","description":"List prayer requests — optionally filter to urgent or active only.","scope":"community:read"},{"name":"community_create_prayer_request","description":"Log a prayer request for a contact.","scope":"community:write"},{"name":"community_list_pastoral_visits","description":"List pastoral visit history for a contact.","scope":"community:read"},{"name":"community_log_pastoral_visit","description":"Log a pastoral visit (home, hospital, phone, video, office).","scope":"community:write"}]},{"module":"channels","description":"Messaging channels: send one-off email, SMS, or WhatsApp (compliance-checked and metered), messaging credit balance, recent campaign performance.","tools":[{"name":"channels_invoke_api","description":"Invoke messaging APIs: SMS, WhatsApp campaigns, conversations, templates.","scope":"channels:send"},{"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.","scope":"channels:send"},{"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.","scope":"channels:send"},{"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.","scope":"channels:read"},{"name":"channels_recent_campaign_performance","description":"Delivery/open/click stats for recently sent campaigns — quick channel health check.","scope":"channels:read"},{"name":"channels_send_whatsapp","description":"Send a single WhatsApp text message. Requires an approved WhatsApp sender and deducts messaging credits.","scope":"channels:send"},{"name":"channels_whatsapp_template_status","description":"Check which WhatsApp templates are approved and ready to send.","scope":"channels:read"}]},{"module":"guests","description":"Guest/visitor pipeline: stage summary, follow-up tasks (create/complete), move pipeline entries.","tools":[{"name":"guests_invoke_api","description":"Invoke guest pipeline APIs beyond named tools: stages, tasks, analytics.","scope":"guests:write"},{"name":"guests_pipeline_summary","description":"Guest/visitor pipeline summary — how many people are in each stage.","scope":"guests:read"},{"name":"guests_list_followups_due","description":"Guest follow-up tasks that are overdue or due by a cutoff date.","scope":"guests:read"},{"name":"guests_create_followup_task","description":"Create a follow-up task for a guest/visitor contact in the pipeline.","scope":"guests:write"},{"name":"guests_complete_followup_task","description":"Mark a guest follow-up task as completed.","scope":"guests:write"},{"name":"guests_move_pipeline_entry","description":"Move a guest pipeline entry to a different stage.","scope":"guests:write"},{"name":"guests_check_in","description":"Check a contact into a service instance (Sunday attendance).","scope":"guests:write"}]},{"module":"runsheet","description":"Service planning: upcoming plans, open positions, assign volunteers, publish plans. Billing uses access seats (login-linked members + pending invites); roster-only contacts are free until access is granted.","tools":[{"name":"runsheet_invoke_api","description":"Invoke runsheet APIs: plans, positions, songs, teams, publishing.","scope":"runsheet:write"},{"name":"runsheet_list_upcoming_plans","description":"Upcoming service plans (runsheets) with dates and status.","scope":"runsheet:read"},{"name":"runsheet_open_positions","description":"Open (unfilled) volunteer/team positions on service plans — scheduling gaps that need people.","scope":"runsheet:read"},{"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.","scope":"runsheet:read"},{"name":"runsheet_assign_position","description":"Assign a contact to an open volunteer/team position on a service plan. Creates a pending assignment and notification.","scope":"runsheet:write"},{"name":"runsheet_publish_plan","description":"Publish a runsheet plan so volunteers can see their assignments.","scope":"runsheet:write"},{"name":"runsheet_list_songs","description":"List the worship song library with keys, CCLI numbers, and usage counts.","scope":"runsheet:read"},{"name":"runsheet_add_song","description":"Add a song to the worship library.","scope":"runsheet:write"}]},{"module":"ticketing","description":"Event ticketing: events with sales/revenue figures, create and publish events, waitlist promotion, promo codes, and refunds (refunds need the dedicated ticketing:refund scope).","tools":[{"name":"ticketing_invoke_api","description":"Invoke event ticketing APIs: events, registrations, promo codes, refunds.","scope":"ticketing:write"},{"name":"ticketing_list_events","description":"List ticketing events with registrations and revenue, optionally filtered by status or upcoming only.","scope":"ticketing:read"},{"name":"ticketing_get_event_sales","description":"Registration, revenue, check-in, and capacity figures for one event.","scope":"ticketing:read"},{"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.","scope":"ticketing:write"},{"name":"ticketing_publish_event","description":"Publish a draft event so it becomes bookable. Refuses if the event has no active ticket types.","scope":"ticketing:write"},{"name":"ticketing_promote_waitlist","description":"Offer a freed-up spot to the next person on an event waitlist and email them a claim link.","scope":"ticketing:write"},{"name":"ticketing_create_promo_code","description":"Create a discount promo code for an event.","scope":"ticketing:write"},{"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.","scope":"ticketing:refund"},{"name":"ticketing_list_attendees","description":"List confirmed registrations for an event with check-in status.","scope":"ticketing:read"},{"name":"ticketing_check_in","description":"Check in a registration by ID, email, or QR token.","scope":"ticketing:write"},{"name":"ticketing_list_ticket_types","description":"List ticket types for an event with prices and quantities sold.","scope":"ticketing:read"},{"name":"ticketing_create_ticket_type","description":"Add a ticket type to a draft or published event.","scope":"ticketing:write"}]},{"module":"billing","description":"Subscription & Stripe: read plan status, create checkout URLs, open customer portal. Pair with platform_invoke_dashboard_api for full billing UI APIs.","tools":[{"name":"billing_get_subscription","description":"Current subscription, plan tier, Stripe status, and upcoming invoice for the organization.","scope":"billing:read"},{"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.","scope":"billing:write"},{"name":"billing_open_portal","description":"Create a Stripe customer portal URL for payment methods, invoices, and plan changes.","scope":"billing:write"}]},{"module":"templates","description":"Email and WhatsApp templates: list, read, and create email templates; check WhatsApp template approval status.","tools":[{"name":"templates_list_email_templates","description":"List email templates with category and subject line.","scope":"templates:read"},{"name":"templates_get_email_template","description":"Get one email template including its HTML content.","scope":"templates:read"},{"name":"templates_create_email_template","description":"Create an email template from HTML content.","scope":"templates:write"},{"name":"templates_list_whatsapp_templates","description":"List WhatsApp message templates with Meta approval status.","scope":"templates:read"}]},{"module":"groups","description":"Small groups: list groups and members, create groups, add members.","tools":[{"name":"groups_list","description":"List small groups with meeting details and member counts.","scope":"groups:read"},{"name":"groups_create","description":"Create a small group.","scope":"groups:write"},{"name":"groups_list_members","description":"List members of a small group.","scope":"groups:read"},{"name":"groups_add_member","description":"Add a contact to a small group.","scope":"groups:write"}]},{"module":"attendance","description":"Service attendance: recent check-ins and attendance summaries (first-time visitors, children). Read-only — check-in writes go through guests_check_in.","tools":[{"name":"attendance_recent_checkins","description":"List recent service check-ins with visitor flags.","scope":"attendance:read"},{"name":"attendance_summary","description":"Attendance totals for a date range — total check-ins, first-time visitors, children.","scope":"attendance:read"}]},{"module":"schedule","description":"Recurring service schedule: service series (weekly patterns) and upcoming service instances.","tools":[{"name":"schedule_list_series","description":"List recurring service series (weekly services, monthly events) with recurrence rules.","scope":"schedule:read"},{"name":"schedule_upcoming_services","description":"List upcoming service instances (occurrences) with dates and status.","scope":"schedule:read"}]},{"module":"audit","description":"Audit log: who did what, when. Sensitive — requires the dedicated audit:read scope.","tools":[{"name":"audit_list_events","description":"List recent audit-log events for the organization (who did what, when). Sensitive — requires the dedicated audit:read scope.","scope":"audit:read"}]}],"totalTools":152,"resources":[{"uri":"sendifai://manifest","description":"Agent-readable manifest of all sendifai modules, tools, scopes, resources, and prompts","mimeType":"application/json"},{"uri":"sendifai://docs/getting-started","description":"How to authenticate, orient, and behave well as an agent on sendifai","mimeType":"text/markdown"},{"uri":"sendifai://docs/security","description":"The five security layers: auth, scopes, feature flags, rate limits, audit trail","mimeType":"text/markdown"},{"uri":"sendifai://docs/workflows","description":"Catalog of pre-built workflow prompts and how to compose them","mimeType":"text/markdown"},{"uri":"sendifai://docs/agents","description":"How the 11 autonomous agents work: modes, proposals, executable action types","mimeType":"text/markdown"},{"uri":"sendifai://docs/billing-and-limits","description":"Metered usage, LIMIT_REACHED responses, runsheet access seats vs roster-only, and platform_usage","mimeType":"text/markdown"},{"uri":"sendifai://org/snapshot","description":"Live cross-module snapshot of the organization (requires platform:read)","mimeType":"application/json"},{"uri":"sendifai://org/agents","description":"Live autonomous agent status: mode, last run, findings (requires platform:read)","mimeType":"application/json"},{"uri":"sendifai://org/proposals","description":"Pending autonomous-agent proposals awaiting approval (requires platform:read)","mimeType":"application/json"},{"uri":"sendifai://org/usage","description":"Metered usage and billing state per channel, including runsheet access seats (requires platform:read)","mimeType":"application/json"}],"resourceTemplates":[{"uriTemplate":"sendifai://contacts/{contactId}","description":"Full contact card by UUID: profile, tags, community membership (requires people:read)","mimeType":"application/json"},{"uriTemplate":"sendifai://contacts/{contactId}/notes","description":"Pastoral care notes for one contact — team/public only over MCP (requires people:read)","mimeType":"application/json"},{"uriTemplate":"sendifai://events/{eventId}","description":"Event sales, revenue, check-in, and capacity by UUID (requires ticketing:read)","mimeType":"application/json"}],"prompts":[{"name":"org_health_review","title":"Organization health review","description":"Full health check across the whole organization: overview, agents, proposals, usage, and recommended actions.","arguments":[]},{"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.","arguments":[]},{"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.","arguments":[]},{"name":"event_health_check","title":"Event health check","description":"Deep-dive one event: sales pace, capacity, ticket types, waitlist, and promo recommendations.","arguments":["eventId"]},{"name":"campaign_launch","title":"Campaign launch checklist","description":"Pre-flight a draft email campaign: audience, content, send preview, then schedule at the optimal time.","arguments":["campaignId"]},{"name":"giving_report","title":"Giving report","description":"Produce a giving report for a date range: totals by fund, pledge progress, and notable donors.","arguments":["fromDate","toDate"]},{"name":"crm_cleanup","title":"CRM data cleanup","description":"Find and fix data-quality issues: duplicate contacts, missing emails/phones, and stale segments.","arguments":[]},{"name":"sunday_service_prep","title":"Sunday service prep","description":"Prepare the next service: unfilled volunteer positions, runsheet plan, song selection, and schedule.","arguments":[]},{"name":"attendance_report","title":"Attendance trends report","description":"Attendance trends over a date range: totals, first-time visitors, children, and follow-up conversion.","arguments":["fromDate","toDate"]},{"name":"new_member_onboarding","title":"New member onboarding","description":"Onboard one contact: profile check, welcome message, group matching, and follow-up task.","arguments":["contactId"]},{"name":"space_booking_assistant","title":"Space booking assistant","description":"Find and book a suitable room: availability check, conflict detection, and booking creation.","arguments":["date","purpose","attendees"]},{"name":"proposal_triage","title":"Agent proposal triage","description":"Review every pending autonomous-agent proposal and approve, reject, or escalate each with reasoning.","arguments":[]}],"examplePrompts":["Give me an overview of the organization","Find the contact John Smith and log a bereavement life event for last Sunday","How much did we raise for the Building fund this month?","Is the Main Hall free next Saturday 2-5pm? If so book it for \"Youth rehearsal\"","List overdue pastoral follow-ups and draft a check-in SMS for each","Show open pastoral note follow-ups at /community/care/notes","How many Runsheet portal access seats are in use vs our limit?","How is the Summer Gala selling? How many spots are left?","Which volunteer positions are still unfilled for Sunday's service?","Which guests have follow-ups due this week?"]}