churchtools-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| CT_URL | Yes | The URL of your ChurchTools instance, e.g. https://your-church.church.tools. Must be https; the server follows no redirects. | |
| CT_PASSWORD | Yes | The password for the ChurchTools account. Keep the value in double quotes in .env, since a # in an unquoted value starts a comment. With 2FA enabled, Claude is asked for the current authenticator code at login. | |
| CT_USERNAME | Yes | The username (email address) of the ChurchTools account the server logs in as, e.g. you@example.org. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| ct_search_personsA | Finds persons by text, email, status or archive state. Lists only id, first and last name, email and status id; use ct_get_person for the whole record. |
| ct_get_personC | Shows the whole record of one person. |
| ct_create_personA | Writes nothing: returns a plan to create a person, with persons of the same name as possible duplicates. Department ids come from GET /person/masterdata (ct_api_request). Most instances also demand statusId and campusId in fields, both from the same masterdata; an instance that makes the privacy agreement mandatory also demands privacyPolicyAgreementTypeId, privacyPolicyAgreementWhoId and privacyPolicyAgreementDate, which only the user can state. If ChurchTools refuses a duplicate, the result names duplicatePersonId. |
| ct_update_personB | Writes nothing: returns a plan that patches only the fields whose value changes; null clears a field. |
| ct_delete_personA | Writes nothing: returns a plan to delete a person; the preview shows the whole record, as a delete cannot be undone. |
| ct_search_groupsA | Finds groups by text, group type or status. Lists only id, name, group type id and status id; use ct_get_group for the whole group. |
| ct_get_groupA | Shows a group's id, name, information (type, status, note, meeting time…) and settings. Its roles come from GET /groups/{groupId}/roles (ct_api_request). |
| ct_list_group_membersB | Lists a group's members with person id, name, role id (groupTypeRoleId) and membership status. |
| ct_create_groupB | Writes nothing: returns a plan to create a group. If ChurchTools refuses a group of the same name, the result says so. |
| ct_update_groupB | Writes nothing: returns a plan that patches only the fields whose value changes; null clears a field. Fields go by their flat names, e.g. name, note, groupStatusId, visibility. |
| ct_delete_groupB | Writes nothing: returns a plan to delete a group and with it every membership; the preview shows the whole group, as a delete cannot be undone. |
| ct_add_group_memberA | Writes nothing: returns a plan that adds the person to the group. A person who is already a member is an error; use ct_update_group_member. Role ids come from GET /groups/{groupId}/roles (ct_api_request). |
| ct_update_group_memberA | Writes nothing: returns a plan that patches only the membership fields whose value changes: role, status, comment, start and end date. |
| ct_remove_group_memberA | Writes nothing: returns a plan that removes the person from the group; the preview shows the whole membership. |
| ct_list_calendarsA | Lists every calendar the user can see with id, name and visibility. |
| ct_list_appointmentsA | Lists the occurrences of appointments in the given calendars and date range, each with appointment id, calendar id, title, the occurrence's start and end, and repeatId (0 once, any other value a series). Use ct_get_appointment for the whole appointment. |
| ct_get_appointmentA | Shows the stored appointment (for a series: its first occurrence, repeat pattern, exceptions and additional dates) with its calculated dates. |
| ct_create_appointmentB | Writes nothing: returns a plan to create an appointment, a single one by default or a series through repeatId in fields. |
| ct_update_appointmentA | Writes nothing: returns a plan that changes the stored appointment. ChurchTools has no partial update here, so the plan sends the whole current appointment with the changes; the preview lists the changed fields. For a series the change applies to every occurrence. |
| ct_delete_appointmentB | Writes nothing: returns a plan to delete an appointment; for a series every occurrence goes. The preview shows the whole appointment, as a delete cannot be undone. |
| ct_list_eventsA | Lists the events in a date range with id, name, start, end, canceled state and their service assignments (id, serviceId, personId, assignee name, isAccepted, isValid). Use ct_get_event for service names and the whole event. |
| ct_get_eventB | Shows the whole event with each service assignment: its id (the eventServiceId of the service tools), serviceId, service name, personId, assignee name, isAccepted and isValid (false for a superseded or declined assignment). |
| ct_list_servicesA | Lists every service (e.g. sermon, sound) with id, name, service group id and service group name. |
| ct_update_eventA | Writes nothing: returns a plan that changes whether the event is canceled, its note or its admins; ChurchTools takes no other event field here. Only fields whose value changes are sent. |
| ct_delete_eventA | Writes nothing: returns a plan to delete an event with its service assignments; the preview shows the whole event, as a delete cannot be undone. |
| ct_assign_event_serviceA | Writes nothing: returns a plan that assigns one service assignment of an event (ct_get_event) to a ChurchTools person (personId) or to a name; give exactly one. For a helper without a ChurchTools account, ct_set_external_event_service is the alternative. ChurchTools gives the filled assignment a new id; ct_get_event shows it. |
| ct_set_external_event_serviceA | Writes nothing: returns a plan that fills one service assignment of an event (ct_get_event) with the name of a helper who has no ChurchTools account. For a ChurchTools person use ct_assign_event_service. ChurchTools gives the filled assignment a new id; ct_get_event shows it. |
| ct_loginA | Logs in with the configured user. If the account has 2FA, ask the user for the current code and pass it; never guess it. Without 2FA, omit the code. A new call replaces the current session. |
| ct_statusA | Shows whether the configuration is valid, the login state, the logged-in user and the ChurchTools version, build and site name. |
| ct_execute_planA | Runs the writes of a plan that a ChurchTools write tool returned. Call it only after the user saw the preview and said yes. A token is valid once, for 10 minutes. Every guarded record is re-read first; if one changed, nothing is written. |
| ct_search_apiA | Finds operations of this instance's ChurchTools REST API by keywords over method, path, summary and tags. Use it for anything no other tool covers, then ct_get_operation for the parameters and ct_api_request to call it. |
| ct_get_operationA | Shows the parameters and the request body schema of one ChurchTools API operation. Schemas are cut below depth 4, long answers at 20 000 characters. |
| ct_api_requestA | Calls any operation of the ChurchTools REST API. GET runs at once. POST, PUT, PATCH and DELETE write nothing: they return a plan with a preview and a token for ct_execute_plan. The path must match an operation of the spec, with every value filled in. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 33 tools
Most tools map to a single resource/action, and the plan/preview write workflow is explicit, so agents can usually select correctly. However, the generic ct_search_api/ct_get_operation/ct_api_request trio overlaps in capability with every specialized tool, and the event-service assignment tools require close reading to distinguish.
All names use a consistent ct_ snake_case prefix and mostly follow verb_noun (list_, get_, create_, update_, delete_, search_). A few exceptions such as ct_status, ct_login, and ct_api_request break the verb_noun pattern but remain readable and consistent in style.
33 tools is heavy for an MCP server, and the generic API fallback means some specialized tools are optional rather than essential. Still, the broad ChurchTools domain (persons, groups, appointments, events, services) and the safe plan/execute pattern justify a larger surface, so it is borderline rather than excessive.
Core resources have strong lifecycle coverage: persons and groups are near-CRUD, appointments have full CRUD, and events support list/get/update/delete plus service assignment. Minor gaps remain (e.g., no create_event, calendar/service CRUD), but the generic ct_api_request provides a documented workaround.