ChurchSuite Bookings MCP
by stevehaskew
README.md
# ChurchSuite Bookings MCP
[](https://github.com/stevehaskew/churchsuite-mcp/actions/workflows/test.yml)
[](LICENSE)
A lightweight [FastMCP](https://gofastmcp.com) 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](https://developer.churchsuite.com/auth)). Grant it
the `bookings.read`, `rotas.read`, and `addressbook.read` scopes.
2. Install dependencies:
```bash
uv sync
```
3. Copy `.env.example` to `.env` and fill in your credentials, or export the
variables directly:
```bash
export CHURCHSUITE_CLIENT_ID=...
export CHURCHSUITE_CLIENT_SECRET=...
```
4. Run the server:
```bash
uv run churchsuite-mcp
```
## 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):
```json
{
"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`:
```json
{
"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.
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.
Maintenance
ActivityInactive
ResponsivenessNo issues