Skip to main content
Glama

pco-services-mcp

A local MCP server that lets Claude (Claude Code, Claude Desktop, or any MCP client) work with your own Planning Center Services schedule as a volunteer. It's for churches that haven't turned on Planning Center's hosted MCP connector, and it covers the one thing that connector can't do: managing your blockout dates.

It signs in with your own Personal Access Token, so it sees exactly what you can see in Planning Center and nothing more.

What it can do

Tool

Does

my_schedule

When you're next serving: date, service and rehearsal times (in the church's time zone), team, position, and whether you've accepted

plan_team

Who else is scheduled on that plan, grouped by team

team_contacts

Email addresses and phone numbers for the people on that plan

contact_info

Someone's email and phone, found by name among the people on your upcoming plans

service_order

The order of service: songs, keys, arrangements, lengths

list_attachments

Charts, lead sheets and audio attached to the plan's songs

download_attachments

Saves those files to your download folder (PDFs only with file_types: ["pdf"])

list_blockouts

Your blockout dates

add_blockout

Block out a day, a date range or a time, once or repeating (daily/weekly/monthly/yearly, every 1–8, "2nd Sunday" style monthly)

remove_blockout

Delete a blockout (a repeating one is deleted as a whole series)

skip_blockout_date

Make yourself available on one date of a repeating blockout

The plan tools only work for plans you're scheduled on. plan_team shows people by name, team, position and status only. The two contact tools show email addresses and phone numbers, and only where Planning Center already lets you see them (usually the people on your own teams); for anyone else they say the details aren't visible, rather than working around it.

Related MCP server: Planning Center Online (PCO) MCP Server

Set up

Needs uv and Python 3.10+.

git clone https://github.com/<you>/pco-services-mcp
cd pco-services-mcp
uv sync
  1. Create a Personal Access Token at https://api.planningcenteronline.com/oauth/applications.

  2. Run uv run pco-services-mcp login in a terminal and paste the Application ID and Secret when asked (they aren't shown). They're checked with Planning Center, then stored in your operating system's credential store (Windows Credential Manager, macOS Keychain, Secret Service on Linux). They are never written to a file.

  3. uv run pco-services-mcp status confirms the token works; logout removes it.

Claude Code

claude mcp add --scope user pco-services -- uv --directory /path/to/pco-services-mcp run pco-services-mcp

Claude Desktop

Add to claude_desktop_config.json (on Windows, use the full path to uv.exe):

{
  "mcpServers": {
    "pco-services": {
      "command": "uv",
      "args": ["--directory", "/path/to/pco-services-mcp", "run", "pco-services-mcp"]
    }
  }
}

Configuration

Variable

Default

Purpose

PCO_DOWNLOAD_DIR

~/Documents/Planning Center

Where attachments are saved, one folder per plan

PCO_TIME_ZONE

your church's time zone in Planning Center

IANA zone (e.g. America/Chicago) used for whole-day blockouts

PCO_APPLICATION_ID, PCO_SECRET

unset

Use instead of the credential store; set both or neither

How it keeps your data and token safe

  • The token is only ever sent to https://api.planningcenteronline.com/services/v2/…, plus one People endpoint, /people/v2/people/<id>/phone_numbers (Services has no phone numbers). Every URL, including paging links in Planning Center's own responses, is checked first.

  • Files are fetched from Planning Center's storage host by a separate client that carries no credentials. Download links never appear in errors or logs.

  • Downloads only go under the download folder; file names come from Planning Center and are cleaned before use. A small .pco-attachments.json in each plan folder records what this tool wrote, so it never overwrites a file it didn't create.

  • Whole-day blockouts run 00:00:00–23:59:59 in the church's time zone, exactly like ones made in Planning Center. If that zone can't be determined, it refuses rather than guessing.

Development

uv run pytest
uv run ruff check src tests scripts && uv run ruff format --check src tests scripts

All tests use synthetic data; there are no recorded Planning Center responses in this repo.

Keeping your church private

This repo is designed to be published without revealing which church its maintainer attends.

  1. git config core.hooksPath .githooks turns on the pre-commit and commit-msg hooks.

  2. Create .leakcheck-denylist (gitignored) with one identifying term per line: church name, city, campus names, website domain, address, your Planning Center ids, people's full names. The hooks refuse to run without it.

  3. The hooks block any commit whose paths, added lines or message contain a denylisted term, your current token (raw or Base64-encoded), or something shaped like a secret.

  4. Before publishing, run uv run python scripts/leak_check.py --history, which checks every commit, message and branch.

The check can't find a term you never listed, or an old token that matches no known shape. Removing something in a later commit doesn't remove it from history; rewrite history before publishing instead.

Licence

MIT

Available Tools

11 tools
add_blockoutA

Add a blockout so you aren't scheduled.

start/end: YYYY-MM-DD for whole days (end defaults to start), or ISO date-times (end required; no offset means church time). repeat with every=N repeats every N periods; monthly_by picks the same date or the Nth week of the month. repeat_until is a date.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNo
everyNo
startYes
reasonNo
repeatNonone
monthly_byNo
repeat_untilNo

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=true, so the write/safety profile is largely covered. The description adds genuinely non-obvious behavioral detail about timezone handling ('no offset means church time') and defaulting rules, but says nothing about what happens on overlapping/duplicate blockouts, whether the blockout is visible to others, or error conditions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the one-line purpose, then a dense but waste-free parameter block. Every sentence earns its place, though the telegraphic clause stacking ('repeat with every=N repeats every N periods; monthly_by picks...') is harder to parse than it needs to be.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter mutation tool with no output schema and zero schema documentation, the description covers formats well but is silent on the return/confirmation, error behavior, whether the new blockout replaces or coexists with existing ones, and the `reason` field. Adequate but with clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage the description must carry parameter meaning and it mostly does: start/end formats (date vs ISO datetime), end-required-for-datetimes, offset-less = church time, every=N repetition, monthly_by day_of_month vs Nth week, repeat_until as a date. The `reason` parameter is never mentioned, leaving one of seven parameters undocumented in both schema and description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb ('Add') plus resource ('blockout') with the operational effect stated ('so you aren't scheduled'). It is trivially distinguishable from remove_blockout, list_blockouts and skip_blockout_date by name, but the description never names or contrasts those siblings explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'so you aren't scheduled' implies the use case (marking personal unavailability), which is enough context to pick this over my_schedule. However there is no guidance on when to prefer skip_blockout_date vs remove_blockout, no mention of prerequisites, permissions, or conflict behavior.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

contact_infoA
Read-only

Email and phone for someone on your upcoming plans, found by any part of their name.

Searches the people scheduled on the plans of your next 10 schedule entries. emails or phones is null where Planning Center doesn't let you see that person's details.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this as a read-only, open-world lookup. The description adds useful behavioral context beyond the annotations: the scope is limited to the next 10 schedule entries, and email or phone fields may be null when Planning Center hides a person's details due to permissions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded in the first sentence, and the second sentence adds scope and permission-based null behavior without redundancy. Every sentence earns its place and the definition is appropriately short for a one-parameter lookup tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only lookup with no output schema, the description is complete enough: it names the returned fields, states the search scope, and explains when those fields may be null. An agent has what it needs to call the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description must carry parameter meaning, and it does by specifying that the single name parameter matches on any part of a person's name. It does not, however, clarify case sensitivity, exact-match fallback, or handling of ambiguous partial names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the specific resource returned (email and phone) and the search method (any part of the person's name). It is clear enough to distinguish this from a generic directory tool, but it does not explicitly contrast itself with close siblings such as team_contacts or my_schedule.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the context of use by specifying people on upcoming plans and the next 10 schedule entries. It does not state when to choose this tool over alternatives like team_contacts, nor does it offer exclusions or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

download_attachmentsA

Download attachments for one of your plans into the configured download folder.

attachment_ids (from list_attachments) and file_types (e.g. ["pdf"]) narrow the set; with neither, every downloadable file is fetched. Files already current are skipped.

ParametersJSON Schema
NameRequiredDescriptionDefault
plan_idYes
file_typesNo
attachment_idsNo
service_type_idYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare non-read-only, non-destructive, open-world, so the write-to-disk nature is expected; the description adds real context beyond that: files land in a configured download folder and already-current files are skipped (idempotency). It omits any auth/permission or volume/rate context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences with the core action front-loaded; the filter semantics follow, and nothing is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema and no annotation detail on results, but the description covers destination and skip behavior, which is what an agent needs to reason about side effects. The unexplained required parameters (plan_id, service_type_id) are the remaining gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. It does explain attachment_ids (with their source tool) and file_types (with an example) plus the unfiltered default, but the two REQUIRED parameters, plan_id and service_type_id, receive no explanation at all.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Download) and resource (attachments) scoped to 'one of your plans', with the destination ('configured download folder') named. It also distinguishes itself from list_attachments by pointing there as the source of attachment_ids.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explains the two operating modes clearly: filtered via attachment_ids/file_types, or everything when neither is supplied. It routes to list_attachments for obtaining IDs, but gives no explicit when-not-to-use guidance (e.g. volume, rate, or re-run caveats).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_attachmentsC
Read-only

Files attached to one of your plans (charts, lead sheets, audio), labelled by song.

ParametersJSON Schema
NameRequiredDescriptionDefault
plan_idYes
service_type_idYes

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered by structured data. The description adds the nature of the returned content (attachment metadata grouped by song), but says nothing about scope, refresh/recency, or whether this returns only metadata rather than file contents.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single compact sentence with the resource front-loaded and the content examples in parentheses; nothing is wasted. It is arguably over-terse for a two-required-parameter tool, but there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotations describing scope, the description should carry more: it never explains how the two required IDs relate, what identifying fields each attachment carries, or how this differs from download_attachments. For a required-two-parameter listing tool it is under-specified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for both required parameters, and the description does not mention either one. plan_id is self-evident from the prose ('one of your plans'), but service_type_id is entirely opaque and undocumented in both the schema and the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource clearly (files attached to a plan) and even enumerates content types (charts, lead sheets, audio), so an agent knows what comes back. However it is a noun phrase with no explicit verb, and it does not differentiate itself from the adjacent sibling download_attachments (fetch metadata vs retrieve the file bytes).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no statement of prerequisites, and no mention of the alternative download_attachments. The agent gets no instruction about when this list is the right call versus downloading, or how to obtain the required plan_id and service_type_id.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_blockoutsC
Read-only

Your blockout dates (times shown in the church's time zone).

ParametersJSON Schema
NameRequiredDescriptionDefault
include_pastNo

TDQS

C2.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds a genuinely useful behavioral detail — that returned times are in the church's time zone — but says nothing about ordering, whether past blockouts are excluded by default, or what the result looks like.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tight sentence with no filler and the time-zone caveat placed up front. It is concise, though the brevity comes at the cost of under-specification rather than being a deliberate structural choice.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple zero-required-parameter read tool with no output schema, a short description is defensible, and the time-zone note is valuable. However, the wholly undocumented 'include_past' parameter leaves a real gap an agent would need to close elsewhere.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for the single parameter 'include_past', and the description never mentions it. An agent cannot learn from the description that setting include_past=true is how past blockouts are surfaced, so the parameter's meaning must be guessed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource ('blockout dates') and implies a read via 'Your', but supplies no verb of its own; the agent must rely on the tool name 'list_blockouts'. It also does not distinguish itself from siblings add_blockout, remove_blockout, or skip_blockout_date.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no mention of prerequisites, and no reference to alternatives among the several blockout-related siblings. The agent is left to infer usage context entirely.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

my_scheduleA
Read-only

When you're next serving: date, service and rehearsal times, team, position and status.

Times are local to the church, in the returned time_zone; times is null where Planning Center doesn't show you the plan. Returns service_type_id and plan_id for plan_team, service_order and attachments.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered; the description contributes real extra context: times are church-local with a returned time_zone, and times is null when Planning Center hides the plan. These nullability and timezone semantics are exactly the kind of behavior an agent cannot infer from annotations alone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the user-relevant outcome ("When you're next serving") before the field list, and every clause carries information. Slightly dense, semicolon-joined phrasing but no filler sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description takes on the return-value burden and discharges it well (fields, timezone, null case, IDs for follow-on tools). The only material gap is the undocumented limit parameter, which matters for a list-style tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter (limit, default 10) has 0% schema description coverage and is never mentioned in the description, so its meaning, maximum, or pagination role is undocumented anywhere. The description compensates richly on the return side but leaves the only input unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description concretely states what the tool returns — the user's next serving assignment with date, service/rehearsal times, team, position and status. It never names itself against the sibling tools it sits beside (plan_team, service_order, etc.), so the differentiation is only implicit via the returned IDs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by "When you're next serving" and by the note that service_type_id/plan_id are returned "for plan_team, service_order and attachments," which hints at a chaining workflow. There is no explicit when-to-use or when-not-to-use guidance, and no statement of an alternative source for schedule data.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plan_teamC
Read-only

Who is scheduled on one of your plans, grouped by team, with position and status.

ParametersJSON Schema
NameRequiredDescriptionDefault
plan_idYes
service_type_idYes

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered; the description adds that results are grouped by team and carry position and status, which is useful since no output schema exists. It says nothing about permissions, whether the plan must be active/published, or the openWorldHint implication that data may come from external systems.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with the salient grouping and field detail front-loaded; no filler. It is a fragment rather than a complete sentence, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and 0% parameter coverage, the description must do the heavy lifting, and it only partially does: the return shape is sketched, but both required parameters are undocumented and there is no usage context. An agent could guess plan_id but has no basis for supplying service_type_id.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and both parameters are required, so the description carries the full burden – yet it never explains what plan_id or service_type_id are, or how the latter scopes the result. 'One of your plans' only loosely gestures at plan_id and leaves service_type_id completely unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific resource and scope – the team roster for a given plan, including position and status – which is enough to distinguish it from list-style siblings like team_contacts or my_schedule. It is written as a noun phrase describing the return rather than an action verb, and it never names or contrasts with a sibling tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance and no mention of alternatives such as my_schedule or team_contacts, which occupy adjacent roster/schedule territory. 'One of your plans' implies the caller must already know a plan id, but the condition for choosing this tool over siblings is left entirely to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_blockoutA
DestructiveIdempotent

Delete one of your blockouts. For a repeating blockout this deletes the WHOLE series; use skip_blockout_date to drop a single date instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
blockout_idYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered. The description adds the critical scope-of-destruction detail that a repeating blockout deletes the WHOLE series, which is not recoverable from the annotations alone. It stops short of stating ownership/permission requirements or failure behavior, so not a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero waste, with the destructive scope stated first and the alternative routing second. Nothing to trim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-param destructive tool with no output schema, annotations plus the series-deletion warning cover what an agent needs. Minor gaps remain around ownership/permissions and behavior on an invalid or already-deleted ID.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter exists and schema description coverage is 0%; the description adds no syntax or provenance for blockout_id (e.g., that it comes from list_blockouts). The lone ID is self-describing in name, so this is minimally adequate rather than broken.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (delete) and resource (one of your blockouts), and explicitly distinguishes the whole-series case from the single-date case handled by skip_blockout_date. An agent can pick this tool without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit routing rule: for a repeating blockout use skip_blockout_date to drop a single date instead. The alternative and the condition that selects it are both named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

service_orderC
Read-only

The order of service for one of your plans: songs, keys, arrangements and lengths.

ParametersJSON Schema
NameRequiredDescriptionDefault
plan_idYes
service_type_idYes

TDQS

C2.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, covering the safety profile. The description adds useful return-content context (songs, keys, arrangements, lengths), but does not explain permissions, errors, or pagination.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, compact sentence with no filler. Its weakness is under-specification rather than verbosity, but the phrasing is front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tool with two required parameters, 0% schema description coverage, and no output schema, the description does not do enough. It gives a rough sense of returned content but omits parameter meaning, usage context, and call prerequisites.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning. It implies plan_id via 'one of your plans' but does not explain service_type_id or the required relationship between the two parameters. Service_type_id is completely undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies the resource domain ('order of service for one of your plans: songs, keys, arrangements and lengths'), but it is a noun phrase with no explicit verb. An agent can infer it retrieves service order data, especially given readOnlyHint, but the action is not stated outright.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no indication of when to use this tool versus alternatives, what prerequisites exist, or what conditions apply. The nearby sibling tools are largely unrelated, so the gap is less harmful, but the description offers no usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

skip_blockout_dateA
Destructive

Make you available on one date of a repeating blockout, keeping the rest of the series.

This can't be undone through the API (only in Planning Center itself, or by deleting the series).

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes
blockout_idYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructiveHint=true and readOnlyHint=false, and the description adds genuinely new context beyond them: the action cannot be undone through the API and would require the Planning Center UI or deleting the series. This is a critical warning that materially affects invocation decisions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the action and followed by the irreversibility warning. No filler; every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter mutation tool with no output schema, the description covers the key risk (irreversibility) and the semantic result. The only notable gap is date/ID format guidance, which is minor given the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description only implicitly conveys that blockout_id identifies the series while date identifies the single skipped occurrence. It adds some relational meaning but no format details (e.g., date format) that an agent would need to construct a valid call.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action (make you available on one date of a repeating blockout) and clarifies the scope (keeping the rest of the series). This clearly distinguishes it from siblings like remove_blockout or add_blockout. It is not quite a crisp verb+resource phrasing but is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'keeping the rest of the series' implies the use case versus remove_blockout, but there is no explicit when-to-use or when-not-to-use guidance. The agent must infer the alternative from the sibling names alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

team_contactsB
Read-only

Email addresses and phone numbers for the people on one of your plans.

emails or phones is null where Planning Center doesn't let you see that person's details.

ParametersJSON Schema
NameRequiredDescriptionDefault
plan_idYes
service_type_idYes

TDQS

B3.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses a genuinely non-obvious behavioral trait: emails or phones come back null when Planning Center hides a person's details, i.e. partial results are expected. That adds real value beyond readOnlyHint/openWorldHint, though it says nothing about auth requirements or pagination.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the return payload followed by the null caveat. Slightly awkward phrasing ('emails or phones is null') but every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tool with no output schema, the description does convey what comes back and the null case. However, with two required, undocumented parameters, an agent still lacks enough to construct a correct call.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Both parameters (plan_id, service_type_id) have 0% schema description coverage and no enum values, and the description says only 'one of your plans' without explaining what either id refers to or how to obtain them. The description fails to compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States the resource ('email addresses and phone numbers for the people on one of your plans') clearly enough that an agent knows this retrieves contact data for a plan. It does not distinguish itself from the sibling contact_info, so nothing tells the agent why to pick this one.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this versus contact_info or plan_team, no prerequisites beyond the implied required ids, and no exclusions. Usage can only be inferred from the noun phrase.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 11 tool updatesv0.1.0
    • First observedadd_blockout
    • First observedcontact_info
    • First observeddownload_attachments
    • First observedlist_attachments
    • First observedlist_blockouts
    • First observedmy_schedule
    • First observedplan_team
    • First observedremove_blockout
    • First observedservice_order
    • First observedskip_blockout_date
    • First observedteam_contacts

TDQS

B3.4/5.0

Scored across 11 tools

Disambiguation4/5

Most tools target clearly distinct resources: attachments (list/download), blockouts (list/add/remove/skip), schedule views, and service order. The one soft overlap is team_contacts vs contact_info, which both return emails/phones, but the descriptions separate them by lookup path (per-plan vs name-search across upcoming plans). An agent can tell them apart, though it may hesitate.

Naming Consistency3/5

About half the tools use a clean verb_noun pattern (list_attachments, add_blockout, remove_blockout, skip_blockout_date), but the rest are bare noun phrases (my_schedule, plan_team, team_contacts, contact_info, service_order). Mixed conventions, yet still readable and non-conflicting.

Tool Count5/5

11 tools is squarely in the well-scoped range, and each one maps to a concrete task (check schedule, manage blockouts, fetch attachments, view team/contact info). Nothing feels redundant or vestigial.

Completeness4/5

The blockout lifecycle is well covered (list, add, remove, skip a single date) and the schedule/plan/attachment surfaces are present. Minor gaps: no edit/update for an existing blockout and no standalone way to enumerate plans or service types (they are surfaced indirectly via my_schedule IDs).

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    A
    quality
    D
    maintenance
    Enables AI assistants to interact with Planning Center Online accounts across modules like People, Services, Giving, and Calendar. It provides tools for searching people, managing service plans, tracking donations, and monitoring events through the PCO API.
    29
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Integrates the Planning Center Online API with an MCP server to enable natural language interaction with church management data. It allows users to query service information, manage workflows, and retrieve data through conversational prompts.
    11
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to access Planning Center Online data including worship plans, song library, teams, and volunteer information through natural language queries and direct tools.
    1
    MIT