# ChurchSuite MCP by usefulapi (remote · churchsuite.usefulapi.io)

Read ChurchSuite contacts, children, small groups, rotas, events and attendance; add contact notes.

- Trust score: 65/100 (medium)
- Change this week: +5
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-10-18

## Components

- remote · `churchsuite.usefulapi.io`: 65/100 (this document), [markdown](https://verifymcp.io/servers/io-usefulapi-churchsuite/churchsuite.md), [page](https://verifymcp.io/servers/io-usefulapi-churchsuite/churchsuite)

## Channel facts

- Endpoint: `https://churchsuite.usefulapi.io/mcp`
- Transports: `streamable-http`
- Auth: `required`
- Version: `1.2.1`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-10-18.

- **Endpoint Security**: 78/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token.
  - HTTPS enforcement could not be verified: the plaintext port redirected somewhere other than https, so enforcement is unproven.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
  - The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents.
- **Transport & Reachability**: 0/100
  - Transport check failed: declared streamable-http, but the endpoint redirected instead of responding directly.
- **Schema Quality & AI Usability**: 79/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 3648 tokens (~145/item across 25 items; 25 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 27/100
  - Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 98/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 93% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 25 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 26 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 60/100
  - Spec-recency check failed: implements MCP spec 2025-06-18; the latest is 2026-07-28.

## Install

### How do I install the ChurchSuite MCP by usefulapi server?

ChurchSuite MCP by usefulapi is a hosted endpoint at https://churchsuite.usefulapi.io/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add --transport http io-usefulapi-churchsuite 'https://churchsuite.usefulapi.io/mcp'
```

### Cursor

```json
{
  "mcpServers": {
    "io-usefulapi-churchsuite": {
      "url": "https://churchsuite.usefulapi.io/mcp"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "io-usefulapi-churchsuite": {
      "type": "http",
      "url": "https://churchsuite.usefulapi.io/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.io-usefulapi-churchsuite]
url = "https://churchsuite.usefulapi.io/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "io-usefulapi-churchsuite": {
      "type": "remote",
      "url": "https://churchsuite.usefulapi.io/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add io-usefulapi-churchsuite --url 'https://churchsuite.usefulapi.io/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  io-usefulapi-churchsuite:
    url: "https://churchsuite.usefulapi.io/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "io-usefulapi-churchsuite": {
      "Transport": "http",
      "Url": "https://churchsuite.usefulapi.io/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add io-usefulapi-churchsuite -t streamable-http -u 'https://churchsuite.usefulapi.io/mcp'
```

### Other

```json
{
  "mcpServers": {
    "io-usefulapi-churchsuite": {
      "type": "http",
      "url": "https://churchsuite.usefulapi.io/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-10-17 (score 65, +1)

No change was recorded against any check on this day. Stability & Change Management went from 20 to 23. That category is still filling its 30-day observation window: 6 days of observed history at the previous scan, 7 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-15 (score 64, +1)

No change was recorded against any check on this day. Stability & Change Management went from 13 to 17. That category is still filling its 30-day observation window: 4 days of observed history at the previous scan, 5 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-14 (score 63, +2)

- [security] The server rewrote its instructions, which are the text every model session reads
- [functional] The server now declares the “prompts” capability
- [functional] First check of Schema quality: 100
- [functional] New prompt “getting_started”
- [functional] Server version: 1.4.0 → 1.5.0

### 2026-10-13 (score 61, +1)

No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-12 (score 60, 0)

- [functional improvement] Stability: unverified → 0.07

### 2026-10-10 (score 60)

First indexed and scored.

## MCP tools (25)

### `churchsuite_get_account` (~59 tokens)

Get church account

The church's ChurchSuite account summary: name, unique id, subdomain, time zone, currency, language and first day of week (no billing or data-protection contact details). A good first call. API: GET /account/info.

### `churchsuite_list_sites` (~70 tokens)

List sites

List the church's sites (campuses/congregations: id, name, initials, address). Site ids filter contacts, children, groups, events and plans. API: GET /account/sites.

Input parameters:

- `ids` (array): Only these sites (numeric ChurchSuite ids, up to 100).

### `churchsuite_list_contacts` (~196 tokens)

List address book contacts

Search or list adult contacts in the Address Book (name, contact details, address, sites, status, tags via tag_ids). Personal data: ask only for what you need. API: GET /addressbook/contacts.

Input parameters:

- `order_by` (string): Sort order, field:direction.
- `page` (integer): Page number (default 1). Use next_page from the previous reply.
- `per_page` (integer): Items per page, 1-100 (default 25).
- `q` (string): Fuzzy search on first/last/formal name, email, telephone, mobile and address.
- `site_ids` (array): Only these sites (numeric ChurchSuite ids, up to 100).
- `status` (string): Only contacts with this status.
- `tag_ids` (array): Only these tags (contacts with ANY of them) (numeric ChurchSuite ids, up to 100).

### `churchsuite_get_contact` (~74 tokens)

Get a contact

Get one Address Book contact by id: names, sex, date of birth, marital status and spouse id, address, phones, email, job, custom fields, communication preferences, sites, status. API: GET /addressbook/contacts/{id}.

Input parameters:

- `contact_id` (integer, required): The contact's numeric id.

### `churchsuite_list_contact_notes` (~61 tokens)

List contact notes

List the pastoral/admin notes on a contact (content, pinned, visibility, who wrote it and when), pinned first. API: GET /addressbook/contacts/{id}/notes.

Input parameters:

- `contact_id` (integer, required): The contact's numeric id.

### `churchsuite_add_contact_note` (~152 tokens)

Add a note to a contact

WRITE: add a new note to a contact's record in ChurchSuite (it is visible to other ChurchSuite users who can see the contact, unless private_to_me is true). Only adds a note: never edits or deletes anything, sends nothing to the contact. API: POST /addressbook/contacts/{id}/notes.

Input parameters:

- `contact_id` (integer, required): The contact's numeric id.
- `content` (string, required): The note text.
- `pinned` (boolean): Pin the note to the top of the contact's notes (default false).
- `private_to_me` (boolean): true = only the API user can see the note (ChurchSuite visible_to.just_me). Default: no restriction.

### `churchsuite_list_contact_tags` (~125 tokens)

List address book tags

List Address Book tags (id, name, category, whether it is a smart tag). Use a tag id as tag_ids in list_contacts to list the people with that tag. API: GET /addressbook/tags.

Input parameters:

- `order_by` (string): Sort order, field:direction.
- `page` (integer): Page number (default 1). Use next_page from the previous reply.
- `per_page` (integer): Items per page, 1-100 (default 25).
- `q` (string): Fuzzy search on the tag name.

### `churchsuite_list_children` (~254 tokens)

List children

Search or list children in the Children module (name, date of birth, school year, contact details, sites, status, consent flags). Medical and additional-needs fields are left out unless include_medical is true. API: GET /children/children.

Input parameters:

- `group_ids` (array): Only these children's groups (see list_children_groups) (numeric ChurchSuite ids, up to 100).
- `include_medical` (boolean): true = also return the medical, medical_short, doctor_details and additional_needs fields (sensitive; default false).
- `order_by` (string): Sort order, field:direction.
- `page` (integer): Page number (default 1). Use next_page from the previous reply.
- `per_page` (integer): Items per page, 1-100 (default 25).
- `q` (string): Fuzzy search on first/last/formal name, email, mobile and address.
- `site_ids` (array): Only these sites (numeric ChurchSuite ids, up to 100).
- `status` (string): Only children with this status.
- `tag_ids` (array): Only these tags (numeric ChurchSuite ids, up to 100).

### `churchsuite_get_child` (~105 tokens)

Get a child

Get one child by id (names, date of birth, school, contact details, custom fields, consents, sites, status). Medical and additional-needs fields only with include_medical: true. API: GET /children/children/{id}.

Input parameters:

- `child_id` (integer, required): The child's numeric id.
- `include_medical` (boolean): true = also return the medical, medical_short, doctor_details and additional_needs fields (sensitive; default false).

### `churchsuite_list_children_groups` (~107 tokens)

List children's groups

List the Children module's groups (classes/age groups: id, name, entry age, check-in capacity and ratio, status). API: GET /children/groups.

Input parameters:

- `page` (integer): Page number (default 1). Use next_page from the previous reply.
- `per_page` (integer): Items per page, 1-100 (default 25).
- `q` (string): Fuzzy search on the group name.
- `status` (string)

### `churchsuite_list_small_groups` (~205 tokens)

List small groups

List small groups (home groups/life groups: name, day, time, frequency, location, description, dates, sign-up options). API: GET /smallgroups/groups.

Input parameters:

- `cluster_ids` (array): Only these clusters (numeric ChurchSuite ids, up to 100).
- `days` (array): Only groups meeting on these days.
- `frequency` (string)
- `order_by` (string): Sort order, field:direction.
- `page` (integer): Page number (default 1). Use next_page from the previous reply.
- `per_page` (integer): Items per page, 1-100 (default 25).
- `q` (string): Fuzzy search on the group name and location.
- `site_ids` (array): Only these sites (numeric ChurchSuite ids, up to 100).
- `view` (string): Groups whose date range is in the past, active now, active or future, or future.

### `churchsuite_get_small_group` (~56 tokens)

Get a small group

Get one small group by id (schedule, location, description, custom fields, sign-up options, sites). API: GET /smallgroups/groups/{id}.

Input parameters:

- `group_id` (integer, required): The small group's numeric id.

### `churchsuite_list_small_group_members` (~214 tokens)

List small group members

List small group memberships (group id, person = contact or child id, status, role ids, joined date). Filter by group to get a group's members, or by contact/child to get a person's groups; look people up with get_contact / get_child. API: GET /smallgroups/members.

Input parameters:

- `child_ids` (array): Only these children (numeric ChurchSuite ids, up to 100).
- `contact_ids` (array): Only these contacts (numeric ChurchSuite ids, up to 100).
- `group_ids` (array): Only these small groups (numeric ChurchSuite ids, up to 100).
- `order_by` (string): Sort order, field:direction.
- `page` (integer): Page number (default 1). Use next_page from the previous reply.
- `per_page` (integer): Items per page, 1-100 (default 25).
- `role_id` (integer): Only members with this role id.
- `status` (string)

### `churchsuite_list_events` (~231 tokens)

List calendar events

List calendar events (name, start/end, status, category, location, description, sign-up options, sites). Use starts_after/starts_before (YYYY-MM-DD) for a date window. API: GET /calendar/events.

Input parameters:

- `category_ids` (array): Only these event categories (see list_event_categories) (numeric ChurchSuite ids, up to 100).
- `order_by` (string): Sort order, field:direction.
- `page` (integer): Page number (default 1). Use next_page from the previous reply.
- `per_page` (integer): Items per page, 1-100 (default 25).
- `q` (string): Fuzzy search on the event name.
- `sequence_id` (integer): Only events of this recurring sequence.
- `site_ids` (array): Only these sites (numeric ChurchSuite ids, up to 100).
- `starts_after` (string): Only events starting after this date (YYYY-MM-DD).
- `starts_before` (string): Only events starting before this date (YYYY-MM-DD).
- `status` (string)

### `churchsuite_get_event` (~55 tokens)

Get a calendar event

Get one calendar event by id (times, status, category, location, description, visibility, sign-up options). API: GET /calendar/events/{id}.

Input parameters:

- `event_id` (integer, required): The event's numeric id.

### `churchsuite_list_event_categories` (~102 tokens)

List event categories

List calendar categories (id, name, colour, status). Use the ids as category_ids in list_events. API: GET /calendar/categories.

Input parameters:

- `page` (integer): Page number (default 1). Use next_page from the previous reply.
- `per_page` (integer): Items per page, 1-100 (default 25).
- `q` (string): Fuzzy search on the category name.
- `status` (string)

### `churchsuite_list_ministries` (~163 tokens)

List rota ministries

List the Rotas module's ministries (worship team, welcome team…: id, name, description, days, rota and rotation type, status, sites). API: GET /rotas/ministries.

Input parameters:

- `ids` (array): Only these ministries (numeric ChurchSuite ids, up to 100).
- `page` (integer): Page number (default 1). Use next_page from the previous reply.
- `per_page` (integer): Items per page, 1-100 (default 25).
- `q` (string): Fuzzy search on the ministry name.
- `site_ids` (array): Only these sites (numeric ChurchSuite ids, up to 100).
- `statuses` (array): Only ministries with these statuses.

### `churchsuite_list_ministry_teams` (~123 tokens)

List ministry teams

List the teams inside rota ministries (id, ministry id, name, order). API: GET /rotas/ministry_teams.

Input parameters:

- `ministry_ids` (array): Only these ministries (numeric ChurchSuite ids, up to 100).
- `page` (integer): Page number (default 1). Use next_page from the previous reply.
- `per_page` (integer): Items per page, 1-100 (default 25).
- `team_ids` (array): Only these teams (numeric ChurchSuite ids, up to 100).

### `churchsuite_list_ministry_members` (~174 tokens)

List ministry members

List who serves in rota ministries (ministry id, team id, person = contact or child id, role ids). Look people up with get_contact / get_child. API: GET /rotas/ministry_members.

Input parameters:

- `ministry_ids` (array): Only these ministries (numeric ChurchSuite ids, up to 100).
- `order_by` (string): Sort order, field:direction.
- `page` (integer): Page number (default 1). Use next_page from the previous reply.
- `per_page` (integer): Items per page, 1-100 (default 25).
- `role_ids` (array): Only these roles (numeric ChurchSuite ids, up to 100).
- `team_ids` (array): Only these teams (numeric ChurchSuite ids, up to 100).

### `churchsuite_list_unavailability` (~204 tokens)

List rota unavailability

List the dates people said they are unavailable to serve (person, description, start/end). Filter by person, ministry or a date window. API: GET /rotas/unavailability.

Input parameters:

- `child_ids` (array): Only these children (numeric ChurchSuite ids, up to 100).
- `contact_ids` (array): Only these contacts (numeric ChurchSuite ids, up to 100).
- `ministry_ids` (array): Only these ministries (numeric ChurchSuite ids, up to 100).
- `order_by` (string): Sort order, field:direction.
- `page` (integer): Page number (default 1). Use next_page from the previous reply.
- `per_page` (integer): Items per page, 1-100 (default 25).
- `starts_after` (string): Only unavailability starting after this date (YYYY-MM-DD).
- `starts_before` (string): Only unavailability starting before this date (YYYY-MM-DD).

### `churchsuite_list_service_plans` (~174 tokens)

List service plans

List service plans from the Planning module (name, date, time, status, linked event, sites). API: GET /planning/plans.

Input parameters:

- `order_by` (string): Sort order, field:direction.
- `page` (integer): Page number (default 1). Use next_page from the previous reply.
- `per_page` (integer): Items per page, 1-100 (default 25).
- `q` (string): Fuzzy search on the plan name.
- `site_ids` (array): Only these sites (numeric ChurchSuite ids, up to 100).
- `starts_after` (string): Only plans dated after this date (YYYY-MM-DD).
- `starts_before` (string): Only plans dated before this date (YYYY-MM-DD).
- `status` (string)

### `churchsuite_list_plan_items` (~126 tokens)

List service plan items

List the running order of one or more service plans (items: type, name, song arrangement, duration, start time, notes, people). API: GET /planning/plan_items.

Input parameters:

- `order_by` (string): Sort order, field:direction.
- `page` (integer): Page number (default 1). Use next_page from the previous reply.
- `per_page` (integer): Items per page, 1-100 (default 25).
- `plan_ids` (array, required): The plan ids (from list_service_plans), up to 20.

### `churchsuite_list_giving_funds` (~122 tokens)

List giving funds

List the church's giving funds (id, name, description, Gift Aid / tax-deductible flags, whether shown in Donate, status). Funds only: no donors, donations or amounts. API: GET /giving/funds.

Input parameters:

- `page` (integer): Page number (default 1). Use next_page from the previous reply.
- `per_page` (integer): Items per page, 1-100 (default 25).
- `q` (string): Fuzzy search on the fund name.
- `status` (string)

### `churchsuite_list_gatherings` (~128 tokens)

List attendance gatherings

List the Attendance module's gatherings (services/meetings whose attendance is counted: id, name, sites, status). API: GET /attendance/gatherings.

Input parameters:

- `page` (integer): Page number (default 1). Use next_page from the previous reply.
- `per_page` (integer): Items per page, 1-100 (default 25).
- `q` (string): Fuzzy search on the gathering name.
- `site_ids` (array): Only these sites (numeric ChurchSuite ids, up to 100).
- `status` (string)

### `churchsuite_list_attendance_records` (~165 tokens)

List attendance records

List attendance records (headcounts per gathering and date: total number, total people, notes), sorted by date. Filter by gathering, weekday or a date window (YYYY-MM-DD). API: GET /attendance/records.

Input parameters:

- `days` (array): Only records on these weekdays.
- `gathering_ids` (array): Only these gatherings (numeric ChurchSuite ids, up to 100).
- `is_after` (string): Only records after this date (YYYY-MM-DD).
- `is_before` (string): Only records before this date (YYYY-MM-DD).
- `page` (integer): Page number (default 1). Use next_page from the previous reply.
- `per_page` (integer): Items per page, 1-100 (default 25).

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/io-usefulapi-churchsuite/churchsuite#diagnostics

## Score history

- 2026-10-18: 65
- 2026-10-17: 65
- 2026-10-16: 64
- 2026-10-15: 64
- 2026-10-14: 63
- 2026-10-13: 61
- 2026-10-12: 60
- 2026-10-10: 60

## Common questions

### What is the ChurchSuite MCP by usefulapi server?

ChurchSuite MCP by usefulapi is listed in the public MCP registry as io.usefulapi/churchsuite. Read ChurchSuite contacts, children, small groups, rotas, events and attendance; add contact notes. This page covers its hosted endpoint (https://churchsuite.usefulapi.io/mcp).

### Is the ChurchSuite MCP by usefulapi server safe to use?

ChurchSuite MCP by usefulapi scores 65 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the ChurchSuite MCP by usefulapi server expose?

ChurchSuite MCP by usefulapi exposes 25 tools: churchsuite_get_account, churchsuite_list_sites, churchsuite_list_contacts, churchsuite_get_contact, churchsuite_list_contact_notes, and 20 more. Their descriptions and schemas cost roughly 3,445 tokens of context every time the server is loaded.

### Does the ChurchSuite MCP by usefulapi server require authentication?

Yes. ChurchSuite MCP by usefulapi asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.

### Is the ChurchSuite MCP by usefulapi server still maintained?

ChurchSuite MCP by usefulapi is still listed as active in the MCP registry. We last reached this channel on 18 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

## Links

- Remote endpoint: https://churchsuite.usefulapi.io/mcp
- Repository: https://github.com/m190/usefulapi-mcp
- Website: https://usefulapi.io/churchsuite/
- Changelog RSS feed: https://verifymcp.io/servers/io-usefulapi-churchsuite/churchsuite.xml
- Changelog JSON feed: https://verifymcp.io/servers/io-usefulapi-churchsuite/churchsuite.json
- HTML version of this page: https://verifymcp.io/servers/io-usefulapi-churchsuite/churchsuite
