Breeze ChMS MCP by usefulapi
by usefulapi.io · remote · no sign-in to list tools · v1.16.3 · published by io.usefulapi
Manage Breeze ChMS people, tags, events, check-ins, volunteers and contributions.
24 tools: 8 can delete or cancel things and 16 only read.
Scanned Oct 21, 2026
- Deletes or cancels8Claude Code: deny: see these tools
- Can't be undone0Claude Code: ask
- Changes things0Claude Code: ask
- Only reads16Claude Code: allow: see these tools
1 check matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http breeze-chms https://breeze-chms.usefulapi.io/mcpFindings
Matches of fixed checks, with the text they matched.
The description names a tool "get_event" that this server does not list.
What this check looks forMatched text
description: "...CE id used by attendance, volunteer and get_event tools; `event_id` is the series. Responses ar..."
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
24 tools
Deletes or cancels 8Claude Code: deny
breeze_add_eventWRITE: create an event on the church calendar, optionally as another instance of an existing series.No findings
Why it is in this group
- The name "breeze_add_event" says "add": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it WRITE: create an event on the church calendar, optionally as another instance of an existing series. Times are Unix timestamps in seconds. This server cannot delete events, so a mistaken event must be removed in the Breeze app. Breeze: GET /api/events/add.
Annotations the server declares
- title: Add an event
- destructiveHint: true
breeze_add_personWRITE: create a new person profile with a first and last name, and optionally set profile fields in the same call (same field shape as breeze_update_person).No findings
Why it is in this group
- The name "breeze_add_person" says "add": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it WRITE: create a new person profile with a first and last name, and optionally set profile fields in the same call (same field shape as breeze_update_person). Check breeze_list_people first to avoid duplicates. Returns the new profile including its id. Breeze: GET /api/people/add.
Annotations the server declares
- title: Add a person
- destructiveHint: true
breeze_add_tagWRITE: create a new tag, at the top level or inside a folder.No findings
Why it is in this group
- The name "breeze_add_tag" says "add": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it WRITE: create a new tag, at the top level or inside a folder. Returns the new tag with its id. Breeze: GET /api/tags/add_tag.
Annotations the server declares
- title: Create a tag
- destructiveHint: true
breeze_assign_tagWRITE: add a tag to one person (e.g.No findings
Why it is in this group
- The name "breeze_assign_tag" says "assign": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it WRITE: add a tag to one person (e.g. put them in a small group or list). Undo with breeze_unassign_tag. Breeze: GET /api/tags/assign.
Annotations the server declares
- title: Assign a tag to a person
- destructiveHint: true
breeze_record_attendanceWRITE: record attendance for one person at one event instance — check them in (default) or check them out (records when they left; checking out someone not checked in creates a rec…No findings
Why it is in this group
- The description's first verb is "write": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it WRITE: record attendance for one person at one event instance — check them in (default) or check them out (records when they left; checking out someone not checked in creates a record with matching in/out times). Breeze: GET /api/events/attendance/add.
Annotations the server declares
- title: Check a person in or out
- destructiveHint: true
breeze_schedule_volunteerWRITE: schedule one person as a volunteer for one event instance.No findings
Why it is in this group
- The name "breeze_schedule_volunteer" says "schedule": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it WRITE: schedule one person as a volunteer for one event instance. Breeze: GET /api/volunteers/add.
Annotations the server declares
- title: Schedule a volunteer
- destructiveHint: true
breeze_unassign_tagWRITE: remove a tag from one person.No findings
Why it is in this group
- The name "breeze_unassign_tag" says "unassign": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it WRITE: remove a tag from one person. The person and the tag both remain; re-assign with breeze_assign_tag. Breeze: GET /api/tags/unassign.
Annotations the server declares
- title: Remove a tag from a person
- destructiveHint: true
breeze_update_personWRITE: set profile fields on an existing person — email, phone, address, dates, multiple-choice options, family role, and custom fields.No findings
Why it is in this group
- The name "breeze_update_person" says "update": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it WRITE: set profile fields on an existing person — email, phone, address, dates, multiple-choice options, family role, and custom fields. Only the fields you pass change; the previous values are overwritten (read them first with breeze_get_person if you may need to restore them). field_id and option ids come from breeze_list_profile_fields. Breeze: GET /api/people/update.
Annotations the server declares
- title: Update a person
- destructiveHint: true
Only reads 16Claude Code: allow
breeze_get_account_summaryThe church account this key belongs to: name, subdomain, status, timezone and country/currency.No findings
Why it is in this group
- The name "breeze_get_account_summary" says "get": a word for reading.
Description, as the server wrote it The church account this key belongs to: name, subdomain, status, timezone and country/currency. A cheap way to confirm BREEZE_SUBDOMAIN and BREEZE_API_KEY are right. Breeze: GET /api/account/summary.
Annotations the server declares
- title: Get the account summary
- readOnlyHint: true
breeze_get_eventFetch one event instance, optionally with the other instances in its series (then the response is an array of {id, start} only).No findings
Why it is in this group
- The name "breeze_get_event" says "get": a word for reading.
Description, as the server wrote it Fetch one event instance, optionally with the other instances in its series (then the response is an array of {id, start} only). Cached by Breeze, may lag up to 15 minutes. Breeze: GET /api/events/list_event.
Annotations the server declares
- title: Get an event instance
- readOnlyHint: true
breeze_get_personFetch one person's profile by id, including address and — by default — every profile field keyed by field_id, plus family members.No findings
Why it is in this group
- The name "breeze_get_person" says "get": a word for reading.
Description, as the server wrote it Fetch one person's profile by id, including address and — by default — every profile field keyed by field_id, plus family members. Pair with breeze_list_profile_fields to label the field ids. Breeze: GET /api/people/{person_id}.
Annotations the server declares
- title: Get a person
- readOnlyHint: true
breeze_list_account_logThe account's audit log for one action type (e.g.No findings
Why it is in this group
- The name "breeze_list_account_log" says "list": a word for reading.
Description, as the server wrote it The account's audit log for one action type (e.g. person_updated, tag_assign, contribution_added), optionally within a date range or by one user. Good for 'what changed since…' and incremental sync. Breeze: GET /api/account/list_log.
Annotations the server declares
- title: List the account log
- readOnlyHint: true
breeze_list_attendanceWho checked in to one event instance (person_id, check-in time created_on, check_out), optionally with each person's details, or the anonymous head count instead.No findings
Why it is in this group
- The name "breeze_list_attendance" says "list": a word for reading.
Description, as the server wrote it Who checked in to one event instance (person_id, check-in time created_on, check_out), optionally with each person's details, or the anonymous head count instead. Breeze: GET /api/events/attendance/list.
Annotations the server declares
- title: List attendance
- readOnlyHint: true
breeze_list_calendarsList the church's event calendars (id, name, color and iCal feed address).No findings
Why it is in this group
- The name "breeze_list_calendars" says "list": a word for reading.
Description, as the server wrote it List the church's event calendars (id, name, color and iCal feed address). The id is the category_id for breeze_list_events and breeze_add_event. Breeze: GET /api/events/calendars/list.
Annotations the server declares
- title: List calendars
- readOnlyHint: true
breeze_list_contributionsList recorded contributions (gifts) given within a date range, optionally narrowed by giver (with their family), amount, payment method, fund, envelope, batch or form.No findings
Why it is in this group
- The name "breeze_list_contributions" says "list": a word for reading.
Description, as the server wrote it List recorded contributions (gifts) given within a date range, optionally narrowed by giver (with their family), amount, payment method, fund, envelope, batch or form. Read-only: this server never adds, edits or deletes gifts. Legacy endpoint: no longer shown on Breeze's current API reference; churches whose giving runs through Tithely may get an error. Breeze: GET /api/giving/list.
Annotations the server declares
- title: List contributions
- readOnlyHint: true
breeze_list_eventsList event instances in a date range (default: the current month), optionally on one calendar.1 finding
Why it is in this group
- The name "breeze_list_events" says "list": a word for reading.
Findings
- Warn
The description names a tool "get_event" that this server does not list.
What this check looks forMatched text
description: "...CE id used by attendance, volunteer and get_event tools; `event_id` is the series. Responses ar..."
Description, as the server wrote it List event instances in a date range (default: the current month), optionally on one calendar. Each row's `id` is the INSTANCE id used by attendance, volunteer and get_event tools; `event_id` is the series. Responses are cached by Breeze and may lag up to 15 minutes. Breeze: GET /api/events.
Annotations the server declares
- title: List events
- readOnlyHint: true
breeze_list_form_entriesSubmissions to one form (id, created_on, person_id), and with details=true each entry's responses keyed by form field_id (see breeze_list_form_fields).No findings
Why it is in this group
- The name "breeze_list_form_entries" says "list": a word for reading.
Description, as the server wrote it Submissions to one form (id, created_on, person_id), and with details=true each entry's responses keyed by form field_id (see breeze_list_form_fields). Breeze: GET /api/forms/list_form_entries.
Annotations the server declares
- title: List form entries
- readOnlyHint: true
breeze_list_form_fieldsThe fields of one form (field_id, field_type, name, options).No findings
Why it is in this group
- The name "breeze_list_form_fields" says "list": a word for reading.
Description, as the server wrote it The fields of one form (field_id, field_type, name, options). Form entry responses are keyed by these field_ids. Breeze: GET /api/forms/list_form_fields.
Annotations the server declares
- title: List form fields
- readOnlyHint: true
breeze_list_formsList the church's online forms (id, name, url_slug, is_archived) — active ones by default, or archived ones.No findings
Why it is in this group
- The name "breeze_list_forms" says "list": a word for reading.
Description, as the server wrote it List the church's online forms (id, name, url_slug, is_archived) — active ones by default, or archived ones. Breeze: GET /api/forms/list_forms.
Annotations the server declares
- title: List forms
- readOnlyHint: true
breeze_list_fundsList giving funds (id, name, tax_deductible, is_default), optionally with the total given to each.No findings
Why it is in this group
- The name "breeze_list_funds" says "list": a word for reading.
Description, as the server wrote it List giving funds (id, name, tax_deductible, is_default), optionally with the total given to each. Legacy endpoint: no longer shown on Breeze's current API reference; churches whose giving runs through Tithely may get an error. Breeze: GET /api/funds/list.
Annotations the server declares
- title: List funds
- readOnlyHint: true
breeze_list_peopleList people in the church database, optionally filtered (by tag, status, gender, etc.) and paginated with limit/offset.No findings
Why it is in this group
- The name "breeze_list_people" says "list": a word for reading.
Description, as the server wrote it List people in the church database, optionally filtered (by tag, status, gender, etc.) and paginated with limit/offset. Without details you get id, first_name, last_name and photo path; with details=true every profile field is returned keyed by field_id (slower). Filter keys are profile field_ids (see breeze_list_profile_fields) or special keys, e.g. {"tag_contains":"y_16681"} for people in a tag, or {"2000138015":"226-227"} for a Status field matching options 226 or 227. Breeze: GET /api/people.
Annotations the server declares
- title: List people
- readOnlyHint: true
breeze_list_profile_fieldsThe church's profile layout: sections, each with its fields (field_id, field_type, name) and, for multiple-choice fields, their options (option_id, name).No findings
Why it is in this group
- The name "breeze_list_profile_fields" says "list": a word for reading.
Description, as the server wrote it The church's profile layout: sections, each with its fields (field_id, field_type, name) and, for multiple-choice fields, their options (option_id, name). Needed to read person details, to build list_people filters, and to write fields with breeze_add_person / breeze_update_person. Breeze: GET /api/profile.
Annotations the server declares
- title: List profile fields
- readOnlyHint: true
breeze_list_tagsList tags (Breeze's groups/lists) with id, name, created_on and folder_id, optionally only those in one folder.No findings
Why it is in this group
- The name "breeze_list_tags" says "list": a word for reading.
Description, as the server wrote it List tags (Breeze's groups/lists) with id, name, created_on and folder_id, optionally only those in one folder. To list the people in a tag, call breeze_list_people with filter {"tag_contains":"y_<tag_id>"}. Breeze: GET /api/tags/list_tags.
Annotations the server declares
- title: List tags
- readOnlyHint: true
breeze_list_volunteersVolunteers scheduled for one event instance: person_id, response, comment, rsvped_on and role_ids.No findings
Why it is in this group
- The name "breeze_list_volunteers" says "list": a word for reading.
Description, as the server wrote it Volunteers scheduled for one event instance: person_id, response, comment, rsvped_on and role_ids. Breeze: GET /api/volunteers/list.
Annotations the server declares
- title: List volunteers
- readOnlyHint: true
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 1.16.3. Values in angle brackets are yours to fill in.
claude mcp add --transport http breeze-chms https://breeze-chms.usefulapi.io/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__breeze-chms__breeze_get_account_summary",
"mcp__breeze-chms__breeze_list_people",
"mcp__breeze-chms__breeze_get_person",
"mcp__breeze-chms__breeze_list_profile_fields",
"mcp__breeze-chms__breeze_list_tags",
"mcp__breeze-chms__breeze_list_events",
"mcp__breeze-chms__breeze_get_event",
"mcp__breeze-chms__breeze_list_calendars",
"mcp__breeze-chms__breeze_list_attendance",
"mcp__breeze-chms__breeze_list_forms",
"mcp__breeze-chms__breeze_list_form_fields",
"mcp__breeze-chms__breeze_list_form_entries",
"mcp__breeze-chms__breeze_list_volunteers",
"mcp__breeze-chms__breeze_list_account_log",
"mcp__breeze-chms__breeze_list_funds",
"mcp__breeze-chms__breeze_list_contributions"
],
"ask": [],
"deny": [
"mcp__breeze-chms__breeze_add_person",
"mcp__breeze-chms__breeze_update_person",
"mcp__breeze-chms__breeze_add_tag",
"mcp__breeze-chms__breeze_assign_tag",
"mcp__breeze-chms__breeze_unassign_tag",
"mcp__breeze-chms__breeze_add_event",
"mcp__breeze-chms__breeze_record_attendance",
"mcp__breeze-chms__breeze_schedule_volunteer"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as breeze-chms. Review it before you use it.