{"name":"sendifai","description":"sendifai — AI-native platform for churches and nonprofits. 181 curated workflow MCP tools + 1929 dashboard API routes via scoped invoke bridges. Layered discovery: platform_search_tools → workflow tool OR platform_search_dashboard_api → {module}_invoke_api_read/_write. Guide: /agents","version":4,"discovery":{"pattern":"layered","layers":[{"id":"workflow","description":"~140 curated workflow tools on tools/list. Prefer these — they enforce billing, care timeline sync, and metered sends.","toolCount":181,"entrypoint":"platform_search_tools"},{"id":"routes","description":"1929+ dashboard API routes for the long tail (builders, settings, AI studio).","toolCount":1929,"entrypoint":"platform_search_dashboard_api"}],"workflow":["1. platform_overview — orient","2. platform_search_tools — find a workflow tool OR platform_search_dashboard_api — find a route","3. Call the tool directly, or {module}_invoke_api_read/_write for routes"],"entrypoints":["platform_search_tools","platform_search_dashboard_api","platform_list_tools"],"invokeTools":["platform_invoke_dashboard_api_read","platform_invoke_dashboard_api_write","people_invoke_api_read","people_invoke_api_write","grow_invoke_api_read","grow_invoke_api_write","giving_invoke_api_read","giving_invoke_api_write","spaces_invoke_api_read","spaces_invoke_api_write","mediahub_invoke_api_read","mediahub_invoke_api_write","live_invoke_api_read","live_invoke_api_write","store_invoke_api_read","store_invoke_api_write","community_invoke_api_read","community_invoke_api_write","channels_invoke_api_read","channels_invoke_api_write","guests_invoke_api_read","guests_invoke_api_write","runsheet_invoke_api_read","runsheet_invoke_api_write","ticketing_invoke_api_read","ticketing_invoke_api_write","templates_invoke_api_read","templates_invoke_api_write","groups_invoke_api_read","groups_invoke_api_write","billing_invoke_api_read","billing_invoke_api_write","schedule_invoke_api_read","schedule_invoke_api_write","attendance_invoke_api_read","attendance_invoke_api_write","platform_ai_invoke_api_read","platform_ai_invoke_api_write","platform_settings_invoke_api_read","platform_settings_invoke_api_write","platform_admin_invoke_api_read","platform_admin_invoke_api_write","platform_portal_invoke_api_read","platform_portal_invoke_api_write"],"totalTools":231,"workflowTools":181,"dashboardRoutes":1929},"authentication":{"type":"bearer","header":"Authorization: Bearer <oauth_access_token_or_sk_live_…>","instructions":"OAuth via MCP discovery (PKCE). Pass intent=sms, intent=pastoral, etc. — GET /api/oauth/intents. Fallback: Settings → API Keys.","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","attendance:write","schedule:read","schedule:write","people:safeguarding","audit:read"],"modules":[{"module":"platform","description":"Platform overview, usage/billing state, agents, proposals. Discovery: platform_search_tools (workflow) + platform_search_dashboard_api (1929+ routes incl. admin panel & member portal). Execute via {module}_invoke_api_read/_write or platform_admin_invoke_api_read/_write / platform_portal_invoke_api_read/_write. Superadmin excluded. Start with platform_overview.","toolCount":26,"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_brand_voice","description":"Get organization brand voice: saved profile (if any), effective template fallback for the org type, full starter template library (29 presets), and suggestedTemplateId. Read sendifai://docs/brand-voice-templates.","scope":"platform:read"},{"name":"platform_apply_brand_voice_template","description":"Apply a starter brand voice template for the organization (free — no credits). Customize afterward via POST /api/ai/brand-voice update_profile or dashboard Settings → Isla → Brand Voice.","scope":"platform:write"},{"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_search_tools","description":"Search curated workflow tools by natural language (e.g. \"family relationships\", \"pastoral notes\", \"book a room\", \"delete SMS sender\", \"set default sender MTZionFA\"). Returns tool names only — schemas are on tools/list. Prefer this over platform_search_dashboard_api whenever a workflow tool exists — especially for SMS sender ID management.","scope":"platform:read"},{"name":"platform_list_tools","description":"List workflow MCP tools available to this credential, optionally filtered by module. For the full dashboard API surface, use platform_search_dashboard_api.","scope":"platform:read"},{"name":"platform_inspect_tools","description":"Fetch JSON input schemas for up to 10 tools by name. Rarely needed — workflow tool schemas are already on tools/list. Useful for agent bridges that do not receive native MCP schemas.","scope":"platform:read"},{"name":"platform_session_tools","description":"List workflow tools available to THIS session (OAuth intent + scopes). Use when tools/list shows tools you cannot call — returns only permitted tools for your credential.","scope":"platform:read"},{"name":"platform_search_dashboard_api","description":"Search 1929+ staff dashboard, admin panel, member portal, and cron API routes. Returns matching paths and methods — pair with the scoped `{module}_invoke_api_read` / `_write` tools. Superadmin routes are excluded. Do NOT use this for SMS sender ID or WhatsApp display name — use platform_search_tools and channels_* workflow tools instead.","scope":"platform:read"},{"name":"platform_invoke_dashboard_api_read","description":"Escape hatch: GET any catalogued dashboard API route by path (staff dashboard, admin panel, portal, cron). Superadmin blocked. Prefer scoped module `*_invoke_api_read` when the path matches a module prefix.","scope":"platform:read"},{"name":"platform_invoke_dashboard_api_write","description":"Escape hatch: mutate any catalogued dashboard API route (POST, PUT, PATCH, DELETE). Superadmin blocked. Prefer scoped module `*_invoke_api_write` when the path matches a module prefix.","scope":"platform:write"},{"name":"platform_ai_invoke_api_read","description":"Invoke AI studio APIs: content generation, campaign AI, personalization, video-to-campaign. GET-only read bridge for this module's dashboard API long tail.","scope":"platform:read"},{"name":"platform_ai_invoke_api_write","description":"Invoke AI studio APIs: content generation, campaign AI, personalization, video-to-campaign. Mutation bridge (POST, PUT, PATCH, DELETE) for this module's dashboard API long tail.","scope":"platform:write"},{"name":"platform_settings_invoke_api_read","description":"Invoke org settings, billing, team, analytics, cron jobs, and autonomous agent config APIs. GET-only read bridge for this module's dashboard API long tail.","scope":"platform:read"},{"name":"platform_settings_invoke_api_write","description":"Invoke org settings, billing, team, analytics, cron jobs, and autonomous agent config APIs. Mutation bridge (POST, PUT, PATCH, DELETE) for this module's dashboard API long tail.","scope":"platform:write"},{"name":"platform_admin_invoke_api_read","description":"Invoke company admin panel APIs (users, orgs, subscriptions, support, feature flags). Requires platform admin RBAC. GET-only read bridge for this module's dashboard API long tail.","scope":"platform:read"},{"name":"platform_admin_invoke_api_write","description":"Invoke company admin panel APIs (users, orgs, subscriptions, support, feature flags). Requires platform admin RBAC. Mutation bridge (POST, PUT, PATCH, DELETE) for this module's dashboard API long tail.","scope":"platform:write"},{"name":"platform_portal_invoke_api_read","description":"Invoke member portal APIs (/api/portal/{orgId}/...) and portal admin (/api/portal/admin/...). Staff OAuth bridges member auth. GET-only read bridge for this module's dashboard API long tail.","scope":"platform:read"},{"name":"platform_portal_invoke_api_write","description":"Invoke member portal APIs (/api/portal/{orgId}/...) and portal admin (/api/portal/admin/...). Staff OAuth bridges member auth. Mutation bridge (POST, PUT, PATCH, DELETE) for this module's dashboard API long tail.","scope":"platform:write"},{"name":"platform_route_catalog","description":"Report dashboard API catalog size (1929+ 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, create, update, family relationships, care timeline, pastoral notes (/community/care/notes), Welcome Desk visitors, segments, tags. Long tail: people_invoke_api_read / _write.","toolCount":33,"tools":[{"name":"people_invoke_api_read","description":"Invoke CRM/contacts dashboard APIs (custom fields, segments, data quality, visitors, surveys, family at /api/contacts/{id}/family). Prefer people_list_family and people_add_family_relationship for household links. GET-only read bridge for this module's dashboard API long tail.","scope":"people:read"},{"name":"people_invoke_api_write","description":"Invoke CRM/contacts dashboard APIs (custom fields, segments, data quality, visitors, surveys, family at /api/contacts/{id}/family). Prefer people_list_family and people_add_family_relationship for household links. Mutation bridge (POST, PUT, PATCH, DELETE) for this module's dashboard API long tail.","scope":"people:write"},{"name":"people_search_contacts","description":"Search contacts by name, email, phone, or address fields. Supports full list filters (status, tag, segment, group, journey, consent, engagement). Read sendifai://docs/contact-list-filters. Use before people_create_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. For linked family members (spouse, parent, child, sibling), call people_list_family — relationships are stored in contact_family_relationships, not on the contact row alone.","scope":"people:read"},{"name":"people_list_contacts","description":"List contacts with pagination via search_contacts RPC. Supports full list filters (status, tag, segment, group, journey, consent, engagement). Read sendifai://docs/contact-list-filters. Use people_search_contacts when you have a text query.","scope":"people:read"},{"name":"people_create_contact","description":"Create a new contact with full CRM fields (name, email, phone, dateOfBirth/birthday, address, church dates, familyId household group, tags, customFields, etc.). Provide at least an email or first+last name. For linking two people as family, use people_add_family_relationship after create. Search first with people_search_contacts to avoid duplicates.","scope":"people:write"},{"name":"people_update_contact","description":"Update profile fields on an existing contact: dateOfBirth/birthday, gender, address, church dates (baptism, membership, anniversary), tags, status, and custom fields. Only provided fields change. To link family relationships (spouse, parent, child), use people_add_family_relationship — not custom fields.","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). Human-readable sentences only — use contact names, never UUIDs or \"(contact …)\" IDs. For family links use people_add_family_relationship, not notes. Syncs to contact_care_timeline. To edit later: people_update_note. To delete: people_remove_note.","scope":"people:write"},{"name":"people_list_family","description":"List family/household relationships for a contact (spouse, parent, child, sibling, grandparent, etc.). Returns linked contacts from the bidirectional contact_family_relationships graph. Dashboard UI: contact detail → Relationships tab. Use people_add_family_relationship to link two existing contacts.","scope":"people:read"},{"name":"people_add_family_relationship","description":"Link two existing contacts as family in contact_family_relationships (shows in People → Relationships tab). Use this instead of custom fields or notes. Example: James as father of Grace → contactId=James UUID, relatedContactId=Grace UUID, relationship=daughter (Grace is James's daughter). Creates bidirectional rows with automatic inverse labels. Search contacts first with people_search_contacts.","scope":"people:write"},{"name":"people_remove_family_relationship","description":"Remove a family link between two contacts (both directions in contact_family_relationships). Use people_list_family to find relatedContactId.","scope":"people:write"},{"name":"people_list_household","description":"List contacts sharing the same flat household group (`family_id` on the contact row). Used by CSV import and segment rules. For spouse/parent/child graph links, use people_list_family instead.","scope":"people:read"},{"name":"people_list_care_timeline","description":"Read combined pastoral care timeline for a contact (notes + interactions from contact_care_timeline and crm_notes). Use after people_list_notes for full history. Dashboard: contact profile timeline.","scope":"people:read"},{"name":"people_complete_note_followup","description":"Mark a pastoral note follow-up as completed (sets follow_up_completed on crm_notes and syncs contact_care_timeline). Use people_list_notes with followUpDueOnly to find open follow-ups.","scope":"people:write"},{"name":"people_update_note","description":"Edit an existing pastoral care note (content, followUpDate, privacy). Use people_list_notes to get noteId. Human-readable content only — no UUIDs. For follow-up completion prefer people_complete_note_followup. Prefer this over dashboard API invoke for note edits.","scope":"people:write"},{"name":"people_remove_note","description":"Delete a pastoral care note by noteId (from people_list_notes). Syncs contact_care_timeline (note_removed). Use to remove mistaken agent notes — prefer this over dashboard API invoke.","scope":"people:write"},{"name":"people_list_custom_field_definitions","description":"List org custom field definitions and sections — required before writing customFields on contacts so agents use correct field keys and types.","scope":"people:read"},{"name":"people_list_welcome_desk_visitors","description":"List CRM Welcome Desk visitors (first-time/returning guests on the people module — NOT the separate /api/guests pipeline). Dashboard: /people/welcome-desk. Filter by membership_status or search name/email.","scope":"people:read"},{"name":"people_list_follow_up_tasks","description":"List CRM Welcome Desk follow-up tasks (visitor_follow_up_tasks) — separate from pastoral note follow_up_date and guests pipeline follow-ups.","scope":"people:read"},{"name":"people_complete_follow_up_task","description":"Mark a CRM Welcome Desk follow-up task complete (visitor_follow_up_tasks at /people/welcome-desk). NOT pastoral notes — use people_complete_note_followup for /community/care/notes.","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_remove_contact_tags","description":"Remove one or more tags from a contact by tag name.","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_get_segment_contacts","description":"List contact IDs in a dynamic segment. Call people_list_segments first for segmentId. For rule preview before create, use people_preview_segment.","scope":"people:read"},{"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":"Automations, forms, landing pages, email campaigns with stats and A/B tests. Long tail: grow_invoke_api_read / _write.","toolCount":18,"tools":[{"name":"grow_invoke_api_read","description":"Invoke forms builder, campaigns, automations, and landing page APIs. GET-only read bridge for this module's dashboard API long tail.","scope":"grow:read"},{"name":"grow_invoke_api_write","description":"Invoke forms builder, campaigns, automations, and landing page APIs. Mutation bridge (POST, PUT, PATCH, DELETE) for this module's dashboard API long tail.","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":"Funds, donations, givers, summaries, pledges. Recording donations uses validated dashboard path. Long tail: giving_invoke_api_read / _write (Gift Aid, reconciliation).","toolCount":13,"tools":[{"name":"giving_invoke_api_read","description":"Invoke giving APIs: Gift Aid, reconciliation, counting sessions, reports, PayPal. GET-only read bridge for this module's dashboard API long tail.","scope":"giving:read"},{"name":"giving_invoke_api_write","description":"Invoke giving APIs: Gift Aid, reconciliation, counting sessions, reports, PayPal. Mutation bridge (POST, PUT, PATCH, DELETE) for this module's dashboard API long tail.","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_get_donation","description":"Get one donation by ID with fund and giver context.","scope":"giving:read"},{"name":"giving_list_batches","description":"List donation import/counting batches for reconciliation.","scope":"giving:read"},{"name":"giving_list_counting_sessions","description":"List offering/cash counting sessions (who counted, when, totals). Use when the user asks who did the count today, which volunteer counted, or for counting session history. Prefer this over dashboard API invoke.","scope":"giving:read"},{"name":"giving_get_counting_session","description":"Get one counting session by ID, including the volunteer who counted and session totals.","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":"Rooms, bookings, availability, incidents, utility bills, buildings. Long tail: spaces_invoke_api_read / _write.","toolCount":12,"tools":[{"name":"spaces_invoke_api_read","description":"Invoke facilities APIs: assets, work orders, inventory, parking, HVAC, compliance. GET-only read bridge for this module's dashboard API long tail.","scope":"spaces:read"},{"name":"spaces_invoke_api_write","description":"Invoke facilities APIs: assets, work orders, inventory, parking, HVAC, compliance. Mutation bridge (POST, PUT, PATCH, DELETE) for this module's dashboard API long tail.","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 (past and future). Use daysBack for recent history; defaults to upcoming when no range given.","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, podcasts, playlists, analytics. Long tail: mediahub_invoke_api_read / _write.","toolCount":9,"tools":[{"name":"mediahub_invoke_api_read","description":"Invoke Media Hub APIs: courses, distribution, workflow, social, worship content. GET-only read bridge for this module's dashboard API long tail.","scope":"mediahub:read"},{"name":"mediahub_invoke_api_write","description":"Invoke Media Hub APIs: courses, distribution, workflow, social, worship content. Mutation bridge (POST, PUT, PATCH, DELETE) for this module's dashboard API long tail.","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_list_media_items","description":"Browse media library items (sermons, videos, audio) with optional search and filters.","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":"Streams, polls, viewer stats. Long tail: live_invoke_api_read / _write.","toolCount":8,"tools":[{"name":"live_invoke_api_read","description":"Invoke live streaming APIs: streams, simulcast, destinations, polls, bridge. GET-only read bridge for this module's dashboard API long tail.","scope":"live:read"},{"name":"live_invoke_api_write","description":"Invoke live streaming APIs: streams, simulcast, destinations, polls, bridge. Mutation bridge (POST, PUT, PATCH, DELETE) for this module's dashboard API long tail.","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":"Shops, products, orders. Long tail: store_invoke_api_read / _write.","toolCount":7,"tools":[{"name":"store_invoke_api_read","description":"Invoke media shop APIs: products, orders, distribution, merch. GET-only read bridge for this module's dashboard API long tail.","scope":"store:read"},{"name":"store_invoke_api_write","description":"Invoke media shop APIs: products, orders, distribution, merch. Mutation bridge (POST, PUT, PATCH, DELETE) for this module's dashboard API long tail.","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":"Pastoral care: life events, follow-up radar, care team, safeguarding, prayer requests, visits. Notes sync to contact_care_timeline. Long tail: community_invoke_api_read / _write.","toolCount":14,"tools":[{"name":"community_invoke_api_read","description":"Invoke pastoral care APIs: outreach, grief journeys, care predictions, follow-ups. GET-only read bridge for this module's dashboard API long tail.","scope":"community:read"},{"name":"community_invoke_api_write","description":"Invoke pastoral care APIs: outreach, grief journeys, care predictions, follow-ups. Mutation bridge (POST, PUT, PATCH, DELETE) for this module's dashboard API long tail.","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 life-event follow-up complete (contact_life_events). NOT pastoral CRM notes (people_complete_note_followup) or Welcome Desk tasks (people_complete_follow_up_task).","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":"Send email/SMS/WhatsApp (metered + compliance-checked). Messaging credits: platform_usage. Long tail: channels_invoke_api_read / _write.","toolCount":20,"tools":[{"name":"channels_invoke_api_read","description":"Invoke messaging APIs: SMS, WhatsApp campaigns, conversations, templates, quota. GET-only read bridge for this module's dashboard API long tail.","scope":"channels:read"},{"name":"channels_invoke_api_write","description":"Invoke messaging APIs: SMS, WhatsApp campaigns, conversations, templates, quota. Mutation bridge (POST, PUT, PATCH, DELETE) for this module's dashboard API long tail.","scope":"channels:send"},{"name":"channels_send_email","description":"Send a single transactional email to one recipient. Runs suppression checks and counts toward the Email Marketing usage allowance. For bulk sends, use `grow_create_campaign` instead.","scope":"channels:send"},{"name":"channels_send_sms","description":"Send a text message (SMS) to one mobile number. Optional senderName picks an approved on-phone ID (e.g. FA Arena / MTZionFA); omit to use the org default. Requires approved SMS sender. During quiet hours, blocks unless skipQuietHours is set for testing.","scope":"channels:send"},{"name":"channels_send_whatsapp","description":"Send WhatsApp to one recipient. Polls up to ~18s for Meta delivered/read webhook confirmation. Returns sender verifiedName + phoneNumber, deliveryStatus, deliveredAt, and speakToUser — relay speakToUser to the user. Free-form text only inside an open 24h session; otherwise pass templateName from templates_list_whatsapp_templates (status approved) with templateBodyParams. On NO_WINDOW: send a template first. On CHANNEL_NOT_CONFIGURED: tell the user to reconnect WhatsApp in Channels → Messages → Settings — do not retry.","scope":"channels:send"},{"name":"channels_diagnose_whatsapp","description":"Explain WhatsApp delivery status honestly — Meta accepted vs delivered/failed, 24h window, auth/reconnect. Use when the user says a WhatsApp did not arrive after a send reported success. Always relay speakToUser; never claim delivered unless status is delivered/read.","scope":"channels:read"},{"name":"channels_diagnose_sms","description":"Explain why a text may not have been delivered — sender setup, quiet hours, queued messages. Use when the user asks \"why didn't my text send?\", \"SMS not received\", or before retrying a failed text. Returns a plain-English summary; never expose tool names to the user.","scope":"channels:read"},{"name":"channels_get_sms_settings","description":"Low-level SMS configuration (sender IDs, quiet hours). Prefer channels_diagnose_sms when the user asks why a text failed — summarise results in plain English.","scope":"channels:read"},{"name":"channels_list_sms_senders","description":"List SMS sender IDs for the organisation (name, label, approval status, default). Use before changing sender or when the user asks which sender IDs they have.","scope":"channels:read"},{"name":"channels_set_sms_sender","description":"PRIMARY tool when the user says set/change/use a sender ID (e.g. \"set senderID to Freedom Arena\"). Accepts long brand names: auto-shortens to a carrier-legal 3–11 char on-phone ID (Freedom Arena → FA Arena), keeps the full name as label, approves, and sets as default. Do NOT use dashboard API search or Chrome for this.","scope":"channels:send"},{"name":"channels_create_sms_sender","description":"Create an alphanumeric SMS sender ID. Prefer channels_set_sms_sender when the user wants it ready as default. Accepts names longer than 11 chars (auto-shortens; full name becomes label). Use approveNow=true for immediate use.","scope":"channels:send"},{"name":"channels_approve_sms_sender","description":"Approve a pending SMS sender ID for this organisation so it can be used for sending. Prefer this over telling the user to open Super Admin. Requires org owner/admin. Optionally setAsDefault after approval.","scope":"channels:send"},{"name":"channels_set_default_sms_sender","description":"Set an approved SMS sender as the organisation default (e.g. senderName MTZionFA). Texts without an explicit senderName will use this. Pass senderName — you do not need a UUID. Fails if the sender is still pending or revoked.","scope":"channels:send"},{"name":"channels_deactivate_sms_sender","description":"Delete/deactivate an unlocked, non-default SMS sender by senderName (e.g. RCCGWT). Soft-deletes the row. If it is currently the default, call channels_set_default_sms_sender on another approved sender first. Cannot remove locked senders that have already been used.","scope":"channels:send"},{"name":"channels_get_whatsapp_account","description":"Read the org WhatsApp Business account: phone number, Meta verified display name (what contacts see in chat), pending name review status, and local dashboard label. Use when the user asks what their WhatsApp name/ID is, or to check Meta approval progress after channels_set_whatsapp_display_name. Always relay userMessage in plain English — never claim a pending name is live.","scope":"channels:read"},{"name":"channels_set_whatsapp_display_name","description":"PRIMARY tool when the user says set WhatsApp ID / WhatsApp display name / WhatsApp business name (e.g. \"set WhatsApp ID to Freedom Arena\"). Submits the name to Meta for review — contacts do NOT see it until Meta approves and we re-register (automatic via webhook). Always tell the user the userMessage: pending vs already live. Do NOT use channels_set_sms_sender for WhatsApp. Do NOT open Meta Business Manager or Chrome.","scope":"channels:send"},{"name":"channels_finalize_whatsapp_display_name","description":"After Meta APPROVES a WhatsApp display name, re-register the phone so the name goes live. Usually automatic via webhook — use if the user says Meta approved but the chat name has not updated, or after channels_get_whatsapp_account shows approved_needs_reregister.","scope":"channels:send"},{"name":"channels_set_whatsapp_label","description":"Set the local dashboard nickname for the WhatsApp number only. Does NOT change what contacts see in WhatsApp — use channels_set_whatsapp_display_name for that.","scope":"channels:send"},{"name":"channels_list_conversations","description":"List SMS and WhatsApp inbox conversations from the unified messaging inbox. Filter by status and paginate with limit/offset.","scope":"channels:read"},{"name":"channels_get_messaging_quota","description":"Read remaining messaging credits and SMS/WhatsApp quota for the organization. Pair with `platform_usage` for full metered billing state.","scope":"channels:read"}]},{"module":"guests","description":"Guest pipeline (NOT CRM Welcome Desk — use people_* for Welcome Desk). Stages, follow-ups, check-in, Welcome Team copy, settings. Long tail: guests_invoke_api_read / _write.","toolCount":12,"tools":[{"name":"guests_invoke_api_read","description":"Invoke guest pipeline APIs beyond named tools: stages, tasks, analytics, check-in. GET-only read bridge for this module's dashboard API long tail.","scope":"guests:read"},{"name":"guests_invoke_api_write","description":"Invoke guest pipeline APIs beyond named tools: stages, tasks, analytics, check-in. Mutation bridge (POST, PUT, PATCH, DELETE) for this module's dashboard API long tail.","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_list_pipeline_entries","description":"List people in the guest pipeline with their current stage (who is in each stage).","scope":"guests:read"},{"name":"guests_get_settings","description":"Read guest management settings: VIP alerts, auto welcome cards, default check-in method.","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_copy_welcome_volunteers","description":"Copy Welcome Team volunteer assignments from a past service instance to an upcoming one. Skips duplicates and syncs portal shifts.","scope":"guests:write"},{"name":"guests_update_settings","description":"Update guest management settings (VIP alerts, auto welcome cards, check-in defaults).","scope":"guests:write"},{"name":"guests_check_in","description":"Check a contact into a service instance (Sunday attendance).","scope":"guests:write"}]},{"module":"runsheet","description":"Service plans (past + future via runsheet_list_plans / runsheet_find_previous_plan), items, positions, songs, access seats, copy-from-previous. Long tail: runsheet_invoke_api_read / _write.","toolCount":17,"tools":[{"name":"runsheet_invoke_api_read","description":"Invoke runsheet APIs: plans, positions, songs, teams, publishing. GET-only read bridge for this module's dashboard API long tail.","scope":"runsheet:read"},{"name":"runsheet_invoke_api_write","description":"Invoke runsheet APIs: plans, positions, songs, teams, publishing. Mutation bridge (POST, PUT, PATCH, DELETE) for this module's dashboard API long tail.","scope":"runsheet:write"},{"name":"runsheet_list_plans","description":"List service plans (past and future). Use daysBack for last Sunday or recent history; daysAhead for upcoming. Full dashboard parity.","scope":"runsheet:read"},{"name":"runsheet_find_previous_plan","description":"Most recent past service plan before a date (default: before today). Use for \"last Sunday\" or copy-from-previous source lookup.","scope":"runsheet:read"},{"name":"runsheet_get_plan","description":"Get one runsheet plan with service order items and assignment count.","scope":"runsheet:read"},{"name":"runsheet_list_plan_items","description":"List service order items for a plan (for review or copy-from workflows).","scope":"runsheet:read"},{"name":"runsheet_list_plan_assignments","description":"List production team assignments for a plan — who was on team last Sunday.","scope":"runsheet:read"},{"name":"runsheet_list_teams","description":"List runsheet production teams and departments.","scope":"runsheet:read"},{"name":"runsheet_list_upcoming_plans","description":"Upcoming service plans only (today and future). For past services including last Sunday, use runsheet_list_plans or runsheet_find_previous_plan.","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_copy_plan_items","description":"Copy service order items from a previous plan into a target plan. Appends items and recalculates duration.","scope":"runsheet:write"},{"name":"runsheet_copy_team_assignments","description":"Copy production team assignments from a previous service plan. Resets status to pending; skips duplicate roles.","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":"Events, sales, promos, refunds, attendees, check-in. Long tail: ticketing_invoke_api_read / _write.","toolCount":13,"tools":[{"name":"ticketing_invoke_api_read","description":"Invoke event ticketing APIs: events, registrations, promo codes, refunds. GET-only read bridge for this module's dashboard API long tail.","scope":"ticketing:read"},{"name":"ticketing_invoke_api_write","description":"Invoke event ticketing APIs: events, registrations, promo codes, refunds. Mutation bridge (POST, PUT, PATCH, DELETE) for this module's dashboard API long tail.","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":"templates","description":"Email and WhatsApp templates. Long tail: templates_invoke_api_read / _write.","toolCount":6,"tools":[{"name":"templates_invoke_api_read","description":"Invoke template APIs: email builder, WhatsApp template sync, canvas blocks. GET-only read bridge for this module's dashboard API long tail.","scope":"templates:read"},{"name":"templates_invoke_api_write","description":"Invoke template APIs: email builder, WhatsApp template sync, canvas blocks. Mutation bridge (POST, PUT, PATCH, DELETE) for this module's dashboard API long tail.","scope":"templates:write"},{"name":"templates_list_email_templates","description":"List email templates (org + global site-wide templates). Read sendifai://docs/global-email-schedule-templates for convention/festival/program schedules.","scope":"templates:read"},{"name":"templates_get_email_template","description":"Get one email template including its HTML content (org or global site-wide template).","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, create, members. Long tail: groups_invoke_api_read / _write.","toolCount":6,"tools":[{"name":"groups_invoke_api_read","description":"Invoke small group APIs: rosters, attendance, curriculum, meeting notes. GET-only read bridge for this module's dashboard API long tail.","scope":"groups:read"},{"name":"groups_invoke_api_write","description":"Invoke small group APIs: rosters, attendance, curriculum, meeting notes. Mutation bridge (POST, PUT, PATCH, DELETE) for this module's dashboard API long tail.","scope":"groups:write"},{"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":"billing","description":"Subscription, checkout, customer portal. Long tail: billing_invoke_api_read / _write.","toolCount":6,"tools":[{"name":"billing_invoke_api_read","description":"Invoke billing APIs: subscription changes, invoices, payment methods, add-ons. GET-only read bridge for this module's dashboard API long tail.","scope":"billing:read"},{"name":"billing_invoke_api_write","description":"Invoke billing APIs: subscription changes, invoices, payment methods, add-ons. Mutation bridge (POST, PUT, PATCH, DELETE) for this module's dashboard API long tail.","scope":"billing:write"},{"name":"billing_get_subscription","description":"Current subscription, plan tier, Stripe status, and upcoming invoice for the organization.","scope":"billing:read"},{"name":"billing_feature_gates","description":"List active billing add-ons and feature gates 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":"schedule","description":"Recurring service series and upcoming instances.","toolCount":6,"tools":[{"name":"schedule_invoke_api_read","description":"Invoke service schedule APIs: series, occurrences, preview beyond curated schedule tools. GET-only read bridge for this module's dashboard API long tail.","scope":"schedule:read"},{"name":"schedule_invoke_api_write","description":"Invoke service schedule APIs: series, occurrences, preview beyond curated schedule tools. Mutation bridge (POST, PUT, PATCH, DELETE) for this module's dashboard API long tail.","scope":"schedule:write"},{"name":"schedule_list_series","description":"List recurring service series (weekly services, monthly events) with recurrence rules.","scope":"schedule:read"},{"name":"schedule_list_service_instances","description":"List service instances (past and future). Use daysBack for last Sunday or recent history; daysAhead for upcoming.","scope":"schedule:read"},{"name":"schedule_find_previous_service","description":"Most recent past service instance before a date (default: before today). Ideal for \"last Sunday\".","scope":"schedule:read"},{"name":"schedule_upcoming_services","description":"List upcoming service instances only (today and future). For past services including last Sunday, use schedule_list_service_instances or schedule_find_previous_service.","scope":"schedule:read"}]},{"module":"attendance","description":"Service check-ins and summaries (read-only). Check-in writes: guests_check_in.","toolCount":4,"tools":[{"name":"attendance_invoke_api_read","description":"Invoke attendance and count-tablet APIs: live check-in, session summary, headcount. GET-only read bridge for this module's dashboard API long tail.","scope":"attendance:read"},{"name":"attendance_invoke_api_write","description":"Invoke attendance and count-tablet APIs: live check-in, session summary, headcount. Mutation bridge (POST, PUT, PATCH, DELETE) for this module's dashboard API long tail.","scope":"attendance:write"},{"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":"audit","description":"Audit log (audit:read scope). Sensitive.","toolCount":1,"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":231,"workflowTools":181,"dashboardRoutes":1929,"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://docs/contact-list-filters","description":"Unified contact list/search/export filters for People UI, API, MCP people_list_contacts and people_search_contacts","mimeType":"text/markdown"},{"uri":"sendifai://docs/brand-voice-templates","description":"29 org-type brand voice starter templates, API actions, and platform_get_brand_voice / platform_apply_brand_voice_template MCP tools","mimeType":"text/markdown"},{"uri":"sendifai://docs/mcp-ops","description":"MCP ops audit, connected-agent governance, MCPOps Telegram alerts, and error taxonomy","mimeType":"text/markdown"},{"uri":"sendifai://docs/global-email-schedule-templates","description":"Global email templates for convention, festival, and order-of-program schedules — names, use cases, MCP list/get tools","mimeType":"text/markdown"},{"uri":"sendifai://docs/platform-intelligence","description":"Self-improvement engine: failure fingerprinting, tiered auto-patching, and the retryAdvice recovery contract agents must relay to users","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"},{"uri":"sendifai://org/brand-voice","description":"Organization brand voice profile, effective template fallback, and starter template library (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://contacts/{contactId}/family","description":"Linked family/household relationships for one contact — spouse, parent, child, sibling (requires people:read)","mimeType":"application/json"},{"uriTemplate":"sendifai://contacts/{contactId}/timeline","description":"Combined pastoral care timeline — notes and interactions for one contact (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":[]},{"name":"mcp_live_watch","title":"MCP live watch & human takeover","description":"Monitor connected MCP agents in real time, triage issues, and suspend agents that need human takeover.","arguments":[]},{"name":"church_sunday_ops","title":"Full Sunday operations runbook","description":"End-to-end Sunday ops: attendance, guests, runsheet, spaces, and follow-ups in one coordinated pass.","arguments":[]},{"name":"attendance_sunday_headcount","title":"Sunday headcount capture","description":"Review today's check-ins and compare to recent Sunday averages.","arguments":[]},{"name":"attendance_trend_alert","title":"Attendance decline alert","description":"Detect declining attendance trends and recommend pastoral/guest responses.","arguments":["weeks"]},{"name":"audit_security_review","title":"Security audit review","description":"Review recent audit events for security-sensitive actions.","arguments":[]},{"name":"audit_compliance_export","title":"Compliance audit export","description":"Prepare an audit trail summary for compliance or board review.","arguments":["fromDate","toDate"]},{"name":"billing_usage_upgrade_review","title":"Billing usage & upgrade review","description":"Check subscription state and whether an upgrade is needed for current usage.","arguments":[]},{"name":"billing_checkout_assist","title":"Billing checkout assist","description":"Help an operator upgrade a specific addon via Stripe checkout.","arguments":["addon"]},{"name":"channels_sms_not_delivered","title":"Text message did not arrive","description":"User-friendly help when an SMS was not received — diagnose sender, quiet hours, and recent sends.","arguments":["phone","contactId"]},{"name":"channels_register_sms_sender","title":"Register and activate an SMS sender ID","description":"End-to-end sender setup: shorten name if needed, create, approve, set default, optional test send.","arguments":["desiredName","setAsDefault"]},{"name":"channels_manage_sms_senders","title":"Delete or switch default SMS sender","description":"Delete a sender (e.g. RCCGWT) and/or set another as default (e.g. MTZionFA).","arguments":["deleteSenderName","defaultSenderName"]},{"name":"channels_pastoral_checkin","title":"Pastoral SMS/email check-in","description":"Draft and send a personal pastoral check-in to one contact.","arguments":["contactId","channel"]},{"name":"channels_whatsapp_broadcast_prep","title":"WhatsApp broadcast prep","description":"Pre-flight a WhatsApp message: template check, audience, and send.","arguments":["templateName"]},{"name":"channels_transactional_notify","title":"Transactional notification send","description":"Send a one-off transactional email or SMS (receipt, reminder, confirmation).","arguments":["contactId","type"]},{"name":"community_prayer_triage","title":"Prayer request triage","description":"Review open prayer requests, prioritise urgent, and propose responses.","arguments":[]},{"name":"community_life_event_response","title":"Life event pastoral response","description":"Respond to recent life events (bereavement, illness, celebration) with appropriate care.","arguments":[]},{"name":"community_safeguarding_review","title":"Safeguarding check review","description":"Review open safeguarding checks and escalate amber/red items.","arguments":[]},{"name":"community_followup_completion","title":"Pastoral follow-up completion","description":"Work through pending pastoral follow-ups and close completed ones.","arguments":[]},{"name":"giving_who_counted","title":"Who ran the offering count","description":"Find counting sessions for a day and report which volunteer counted.","arguments":["date"]},{"name":"giving_pledge_followup","title":"Pledge follow-up","description":"Identify at-risk pledges and propose donor follow-up.","arguments":[]},{"name":"giving_first_time_donor_welcome","title":"First-time donor welcome","description":"Welcome first-time donors with a personal thank-you.","arguments":["fromDate"]},{"name":"giving_fund_setup","title":"New giving fund setup","description":"Create a new fund and verify it appears in giving reports.","arguments":["fundName"]},{"name":"groups_health_review","title":"Small groups health review","description":"Review all small groups: size, leaders, and inactive groups.","arguments":[]},{"name":"groups_new_member_placement","title":"Small group placement","description":"Place a contact into the best-matching small group.","arguments":["contactId"]},{"name":"grow_automation_audit","title":"Automation health audit","description":"Review all automations: active, paused, erroring, and enrollment counts.","arguments":[]},{"name":"grow_form_lead_triage","title":"Form submission triage","description":"Process new form submissions: dedupe, tag, and enroll in automations.","arguments":[]},{"name":"grow_landing_page_publish","title":"Landing page publish","description":"Create and publish a landing page for an event or campaign.","arguments":["title"]},{"name":"grow_ab_test_review","title":"A/B test review","description":"Review running A/B tests and recommend winner or extension.","arguments":[]},{"name":"guests_stalled_pipeline_review","title":"Stalled guest pipeline review","description":"Find guests stuck in early pipeline stages and recommend moves or follow-ups.","arguments":[]},{"name":"guests_checkin_welcome","title":"Guest check-in & welcome","description":"Check in a guest visitor and create their follow-up journey.","arguments":["contactId"]},{"name":"guests_copy_welcome_team","title":"Copy Welcome Team from previous service","description":"Copy Welcome Team volunteer roster from a past service to an upcoming one.","arguments":["targetServiceInstanceId","sourceServiceInstanceId"]},{"name":"live_stream_prep","title":"Live stream prep","description":"Prepare an upcoming live stream: schedule, stats baseline, and poll setup.","arguments":["streamId"]},{"name":"live_post_stream_summary","title":"Post-stream summary","description":"Summarise stream performance and recommend follow-up content.","arguments":["streamId"]},{"name":"mediahub_podcast_publish","title":"Podcast episode publish","description":"Publish a podcast episode: create media item, metadata, and publish.","arguments":["title"]},{"name":"mediahub_playlist_curation","title":"Playlist curation","description":"Create or update a media playlist for a series or sermon archive.","arguments":["playlistName"]},{"name":"people_welcome_desk_daily","title":"Welcome Desk daily review","description":"Process Welcome Desk visitors and follow-up tasks for first-time guests.","arguments":[]},{"name":"people_contact_enrichment","title":"Contact profile enrichment","description":"Review and enrich a contact profile with custom fields and tags.","arguments":["contactId"]},{"name":"people_segment_audience_build","title":"Segment audience build","description":"Build or refine a CRM segment for campaigns or pastoral outreach.","arguments":["segmentName"]},{"name":"people_meeting_prep_brief","title":"Meeting prep brief","description":"Generate a pastoral or leadership meeting brief for one contact.","arguments":["contactId"]},{"name":"people_link_family_member","title":"Link two contacts as family","description":"Link existing contacts as family (e.g. Grace as James's daughter) using the native Relationships graph.","arguments":["contactNameA","contactNameB","relationship"]},{"name":"people_family_household_review","title":"Family & household review","description":"Review family relationships and household groupings for one contact.","arguments":["contactId"]},{"name":"platform_discovery_orientation","title":"MCP discovery orientation","description":"Orient a new MCP agent: manifest, tools, scopes, and golden path.","arguments":[]},{"name":"platform_agent_configuration","title":"Autonomous agent configuration","description":"Review and recommend autonomy modes for all 11 platform agents.","arguments":[]},{"name":"platform_route_explorer","title":"Dashboard API route explorer","description":"Find a dashboard API route for UI features not covered by workflow tools.","arguments":["query"]},{"name":"runsheet_team_roster_audit","title":"Runsheet team roster audit","description":"Audit team roster, access seats, and unfilled positions.","arguments":[]},{"name":"runsheet_song_selection","title":"Worship song selection","description":"Select songs for an upcoming plan based on keys, recency, and theme.","arguments":["theme"]},{"name":"runsheet_publish_plan","title":"Publish runsheet plan","description":"Final review and publish of a runsheet plan to the team portal.","arguments":["planId"]},{"name":"runsheet_setup_from_previous_service","title":"Set up plan from previous service","description":"Copy service order and production team from the last similar service.","arguments":["targetPlanId","sourcePlanId"]},{"name":"schedule_service_calendar_review","title":"Service calendar review","description":"Review upcoming services and recurring series for gaps or conflicts.","arguments":[]},{"name":"spaces_incident_response","title":"Facilities incident response","description":"Log and triage a facilities incident; notify relevant parties.","arguments":["roomId","description"]},{"name":"spaces_weekly_bookings_review","title":"Weekly bookings review","description":"Review this week's bookings, cancellations, and utilisation.","arguments":[]},{"name":"spaces_new_room_setup","title":"New room setup","description":"Add a new room to the spaces module.","arguments":["buildingId","roomName"]},{"name":"store_product_launch","title":"Store product launch","description":"Create and list a new product in the org store.","arguments":["productName"]},{"name":"store_order_review","title":"Store order review","description":"Review recent store orders and flag fulfilment priorities.","arguments":[]},{"name":"templates_email_series_build","title":"Email template series build","description":"Create a series of email templates for onboarding or nurture.","arguments":["seriesName"]},{"name":"templates_whatsapp_compliance","title":"WhatsApp template compliance check","description":"Verify WhatsApp templates are approved before a broadcast campaign.","arguments":[]},{"name":"ticketing_refund_handling","title":"Ticketing refund handling","description":"Process a refund request with human approval for money movement.","arguments":["orderId"]},{"name":"ticketing_day_of_checkin","title":"Day-of event check-in","description":"Run check-in operations on event day.","arguments":["eventId"]},{"name":"ticketing_event_launch","title":"Event create and publish","description":"Create a new event, ticket types, and publish to registration.","arguments":["eventName"]}],"examplePrompts":["Give me an overview of the organization","Search workflow tools for family relationships, then link Grace as child of James","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","List Welcome Desk visitors due for follow-up (people_list_welcome_desk_visitors)","How many Runsheet portal access seats are in use vs our limit?","Search dashboard API for gift aid report, then invoke via giving_invoke_api_read","Which volunteer positions are still unfilled for Sunday's service?","Show me last Sunday's run sheet / service plan","Copy last Sunday's service order and production team into this week's plan","Copy Welcome Team volunteers from last week to this Sunday","Which guests have follow-ups due this week?"]}