Skip to content

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.

Deletes · 8

24 tools: 8 can delete or cancel things and 16 only read.

Scanned Oct 21, 2026

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/mcp

Findings

Matches of fixed checks, with the text they matched.

1 warn
  • The description names a tool "get_event" that this server does not list.

    Matched text

    description: "...CE id used by attendance, volunteer and get_event tools; `event_id` is the series. Responses ar..."

    What this check looks for

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.

      Matched text

      description: "...CE id used by attendance, volunteer and get_event tools; `event_id` is the series. Responses ar..."

      What this check looks for
    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/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.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.