Skip to main content
Glama
ChurchSuite Bookings MCP

ChurchSuite Bookings MCP

by stevehaskew

ChurchSuite Bookings MCP

Tests License: MIT

A lightweight FastMCP server that exposes read-only ChurchSuite booking data as MCP tools.

Setup

  1. Create an API-enabled user or an OAuth App in ChurchSuite to obtain a Client ID and Client Secret (see ChurchSuite auth docs). Grant it the bookings.read, rotas.read, and addressbook.read scopes.

  2. Install dependencies:

    uv sync
  3. Copy .env.example to .env and fill in your credentials, or export the variables directly:

    export CHURCHSUITE_CLIENT_ID=...
    export CHURCHSUITE_CLIENT_SECRET=...
  4. Run the server:

    uv run churchsuite-mcp

Related MCP server: Dezrez Rezi MCP server

Tools

  • list_bookings(status?, starts_after?, starts_before?, customer_ids?, type_ids?, q?, page?, per_page?) — list bookings with optional filters.

  • get_booking(id) — fetch a single booking by ID.

  • list_booked_resources(booking_ids?, page?, per_page?) — list resources booked against bookings.

  • list_resources(category?, q?, status?, page?, per_page?) — list bookable resources (rooms, equipment, etc.).

  • get_resource(id) — fetch a single bookable resource by ID.

  • list_ministries(statuses?, q?, ids?, page?, per_page?) — list Rotas ministries.

  • get_ministry(id) — fetch a single ministry, including its serving days/time/rotation type.

  • list_ministry_teams(ministry_ids?, team_ids?, page?, per_page?) — list teams within ministries.

  • get_ministry_team(id) — fetch a single ministry team.

  • list_ministry_members(ministry_ids?, role_ids?, team_ids?, page?, per_page?) — list ministry members.

  • list_rota_roles(member_ids?, ministry_ids?, page?, per_page?) — list roles defined within ministries.

  • find_serving_pattern(person_id, person_type) — find a person's ministry memberships and their recurring serving pattern (days/time/rotation type).

Note on rotas: ChurchSuite's API v2 does not expose individual rota slot assignments or dates — only ministry membership and a ministry's recurring schedule definition. find_serving_pattern is the closest available answer to "when am I next serving?": it returns the ministries/ teams/roles a person belongs to and how often that ministry serves, not a confirmed next date.

Using with an MCP client

Add to your client's MCP config (e.g. .mcp.json for Claude Code):

{
  "mcpServers": {
    "churchsuite-bookings": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/churchsuite-mcp", "churchsuite-mcp"],
      "env": {
        "CHURCHSUITE_CLIENT_ID": "your-client-id",
        "CHURCHSUITE_CLIENT_SECRET": "your-client-secret"
      }
    }
  }
}

Claude chat (desktop app)

To add this as a local MCP server in the Claude desktop app, open Settings → Developer → Edit Config to locate claude_desktop_config.json, then add the same churchsuite-bookings entry under mcpServers:

{
  "mcpServers": {
    "churchsuite-bookings": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/churchsuite-mcp", "churchsuite-mcp"],
      "env": {
        "CHURCHSUITE_CLIENT_ID": "your-client-id",
        "CHURCHSUITE_CLIENT_SECRET": "your-client-secret"
      }
    }
  }
}

Replace /path/to/churchsuite-mcp with the absolute path to this project (e.g. /Users/steve/churchsuite-mcp), fill in your real Client ID/Secret, then restart Claude for the change to take effect.

Auth

Authentication uses the OAuth2 Client Credentials grant against https://login.churchsuite.com/oauth2/token. Access tokens are cached in memory and transparently refreshed before they expire.

Available Tools

16 tools
find_next_booking_by_nameA

Find the next upcoming booking whose name/title fuzzy-matches the given string.

Searches /bookings/bookings by name (ChurchSuite's q filter also matches date, reference, and sequence_id). from_date (YYYY-MM-DD) is inclusive and defaults to today.

Inputs: name (required), from_date, status. Returns: object

find_next_booking_for_resourceA

Find the next upcoming booking that has a specific resource booked against it.

Provide either resource_id, or resource_name to resolve it via a fuzzy search against /bookings/resources (must match exactly one resource). from_date (YYYY-MM-DD) is inclusive and defaults to today.

Note: ChurchSuite's API has no resource or date filter on /bookings/booked_resources, so this fetches every booked resource record and filters client-side - it may be slow on accounts with a long booking history.

Inputs: resource_id, resource_name, from_date. Returns: object

find_serving_patternA

Find which Rotas ministries/teams/roles a person belongs to, and their typical serving pattern.

IMPORTANT: ChurchSuite's API v2 does not expose individual rota slot assignments or dates, only ministry membership and a ministry's recurring schedule definition (days, starts_at/ends_at, rotation_type). This tool cannot tell you the exact next date someone is rostered on; it returns the ministries they serve in plus that ministry's recurrence pattern so you can describe roughly how often/when they serve (e.g. "fortnightly on Sundays at 09:30"). For a confirmed next serving date, the user should check My ChurchSuite directly.

Inputs: person_id (required), person_type (required). Returns: object

get_bookingA

Retrieve a single ChurchSuite booking by its ID.

Inputs: id (required). Returns: object

get_contactA

Retrieve a single addressbook contact by its ID.

Inputs: id (required). Returns: object

get_ministryB

Retrieve a single Rotas ministry by its ID, including its serving days, times, and rotation type.

Inputs: id (required). Returns: object

get_ministry_teamB

Retrieve a single Rotas ministry team by its ID.

Inputs: id (required). Returns: object

get_resourceA

Retrieve a single bookable resource by its ID.

Inputs: id (required). Returns: object

list_booked_resourcesB

List resources booked against ChurchSuite bookings, optionally filtered by booking ID.

Inputs: booking_ids, page, per_page. Returns: object

list_bookingsA

List ChurchSuite bookings, optionally filtered by status, date range, customer, type, or a fuzzy search string.

Dates (starts_after/starts_before) must be in YYYY-MM-DD format.

Inputs: status, starts_after, starts_before, customer_ids, +4 more. Returns: object

list_contactsB

List addressbook contacts, optionally filtered by status, tag, or a fuzzy search string.

Use this to find a contact's numeric ID (person_id, with person_type "addressbook_contact") for use with find_serving_pattern. The fuzzy search (q) matches against first_name, last_name, formal_name, email, telephone, mobile, address, job, and employer.

Inputs: status, q, tag_ids, page, +1 more. Returns: object

list_ministriesC

List ChurchSuite Rotas ministries (e.g. Worship, Production), optionally filtered by status or name.

Inputs: statuses, q, ids, page, +1 more. Returns: object

list_ministry_membersA

List members of Rotas ministries, optionally filtered by ministry, role, or team.

Each member links to a person (an addressbook contact or child) via person.id and person.type. There is no API filter by person, so to find a specific person's memberships, list members for the relevant ministries/teams and filter the results by person.id client-side.

Inputs: ministry_ids, role_ids, team_ids, page, +1 more. Returns: object

list_ministry_teamsB

List the teams within Rotas ministries, optionally filtered by ministry or team ID.

Inputs: ministry_ids, team_ids, page, per_page. Returns: object

list_resourcesC

List the bookable resources (rooms, equipment, etc.) that can be booked against a booking.

Inputs: category, q, status, page, +1 more. Returns: object

list_rota_rolesC

List the roles (e.g. Worship Leader, Sound Engineer) defined within Rotas ministries.

Inputs: member_ids, ministry_ids, page, per_page. Returns: object

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.4/5.0

    Scored across 16 tools

    Disambiguation5/5

    Each tool targets a distinct entity or action: specific 'find' tools for next booking by name vs resource, separate 'get' and 'list' for each data type (bookings, contacts, ministries, etc.). No overlapping purposes.

    Naming Consistency5/5

    All tool names use consistent snake_case with a verb_noun pattern ('list_', 'get_', 'find_'). No mixing of conventions, making the set predictable.

    Tool Count4/5

    With 16 tools, the set covers bookings, contacts, resources, and rotas comprehensively. Slightly above the ideal range but still well-scoped; each tool has a clear role.

    Completeness2/5

    The tool set is entirely read-only, lacking any create, update, or delete operations. For a 'Bookings' server, missing mutation tools is a significant gap that will hinder common tasks.

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      C
      maintenance
      Enables MCP clients to search availability, read services, resources, bookings and customers, and, when writes are enabled, reserve slots, create or cancel bookings, and add or update customers.
      10
      MIT
    • A
      license
      A
      quality
      C
      maintenance
      It enables MCP clients such as Claude and ChatGPT to read an estate agency's Dezrez Rezi CRM data, including properties and their timelines, people, groups, and offers. It is read-only and applies privacy redactions by default.
      10
      MIT
    • A
      license
      Not graded
      quality
      C
      maintenance
      Lets MCP clients such as Claude and ChatGPT read a rota and time-and-attendance account, exposing venues, groups, shifts, absences and absence types, time entries, venue events and staff names through read-only tools that never return pay data.
      MIT
    • A
      license
      A
      quality
      C
      maintenance
      Enables MCP clients such as Claude and ChatGPT to read a Timesheet Portal account, including timesheet time and cost reports, invoices, leave bookings and balances, projects or jobs, clients, users and cost centres, across both the Standard and Recruitment editions. It is read-only, with personal and pay data withheld unless explicitly requested.
      8
      MIT