pickuppatrol-mcp
An MCP server for the PickUp Patrol school dismissal app that lets you read and change how your children leave school.
See your account and students —
pup_get_session(signed-in parent + linked students),pup_list_students,pup_get_student(optionallyraw: true), starting point for student/school ids.Read weekly defaults —
pup_get_default_plansshows how a child normally leaves school each weekday, plus whether defaults need a parent review.Read day-by-day plans —
pup_list_plansacross a date range for every student;pup_get_planfor one student on one date, including the option in force, note, early-dismissal time and whether the cutoff has locked it.Learn the school's rules —
pup_list_transportations(dismissal options with note/car-number/early-dismissal/cutoff rules),pup_get_school(profile, notify and cutoff times, settings),pup_list_car_numbers,pup_list_non_school_days(holidays/closures, and dates already changed).Change specific dates —
pup_set_plansets one or more dates to a dismissal option (with note, car number, early-dismissal time as required) or clears them back to the default.Change the weekly default —
pup_set_default_planssets weekdays (names or ids) or clears every default.Clear review prompts —
pup_mark_defaults_reviewed.Safe writes — every write asks for confirmation first (real prompt, or a preview + single-use, payload-bound
confirmTokentwo-step fallback configured byMCP_CONFIRM_MODE/MCP_CONFIRM_ELICITATION/MCP_CONFIRM_TTL_SECONDS), validates the school's own rules before sending, and re-reads to reportverified: true/false.Check connectivity —
pup_healthcheckverifies credentials sign in and, on failure, names the broken hop (no_credential,credential_rejected,verification_pending,edge_blocked,timeout,transport,http).
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@pickuppatrol-mcpChange my daughter's dismissal plan for tomorrow to after-school care"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
pickuppatrol-mcp
An MCP server for PickUp Patrol — the school dismissal app. Read and change how your children leave school: their weekly default plan, one-off changes for specific dates, and the school's dismissal options and cutoff times.
Developed and maintained by AI (Claude Code). Use at your own discretion.
What it talks to
app.pickuppatrol.net runs a ServiceStack JSON API
behind an Ionic/Vue SPA. There is no published API, but the service is reachable
server-side with an ordinary HTTPS request — no browser extension, no bot wall,
no captcha. The server signs in with your own email and password and holds the
resulting session in memory.
Every request shape is captured in docs/PICKUPPATROL-API.md,
read off the shipped client rather than guessed, and exercised against a real
account — reads, a write, and its restore.
Related MCP server: schoology-mcp
Install
// .mcp.json
{
"mcpServers": {
"pickuppatrol": {
"command": "npx",
"args": ["-y", "@chrischall/pickuppatrol-mcp"],
"env": {
"PICKUPPATROL_USERNAME": "you@example.com",
"PICKUPPATROL_PASSWORD": "…"
}
}
}
}For local development, copy .env.example to .env and fill it in.
The server starts without credentials — it answers the host's install-time probe and only reports the configuration error on the first tool call.
Tools
Reads
Tool | What it gives you |
| The signed-in account and the students linked to it |
| Every student with their weekly defaults and review flag |
| One student in full |
| A student's weekly default plan, day by day |
| Day-by-day plans across a date range |
| One student, one date — including whether it is locked |
| A school's dismissal options and the rules each imposes |
| School profile, notify times, cutoff times, settings |
| Dates no plan can be set for, and dates already changed |
| Car numbers the school issued to this account |
| Credentials sign in and the API answers; on failure, |
Reads are projected to known fields. Plan notes can be written by any guardian
on the account, and option hints and school settings by school staff, so every
read that carries them is marked untrusted_content with a note telling the
model to treat the text as data, not instructions. pup_list_plans,
pup_get_plan, pup_get_school and pup_get_student take raw: true for the
untouched API record (still marked untrusted) — the only way to see fields such
as SASId or SafetyFlag.
Writes — every one asks you to confirm first. A client that can show a
confirmation prompt (Claude Code) shows one, unless MCP_CONFIRM_ELICITATION=off.
Otherwise the first call makes no
change and returns a preview of the exact payload it would send plus a
confirmToken, and only a repeat call with that token makes the change — see
Confirmations.
Tool | What it changes |
| Dismissal for one or more specific dates, or clears them back to the default |
| The weekly default plan, or clears every default |
| The school's "defaults need review" prompt |
Confirmations
variable | default | |
|
| What a write does on a client that cannot show a confirmation prompt (claude.ai, Claude Desktop). |
|
|
|
|
| How long a token stays valid. |
| random per process | Signing key; set it only if tokens must survive a server restart. On mcp-host the host supplies a stable per-child key ( |
A token is single-use and bound to the exact payload. The second call re-reads
the student and rebuilds the payload, so if anything moved between the preview
and the approval — a different date or option, or (for default plans, which
round-trip the whole student record) a change made to the record meanwhile —
nothing is sent and you get DRAFT_CHANGED with a fresh preview.
Two things the tools do that the API does not
Rules are enforced before anything is sent. Each dismissal option carries its
own requirements — a note, a car number, an early-dismissal time, or a
restriction to particular students. pup_set_plan checks them against the
school's own list and refuses with the school's wording, so a rejected write is
a validation message rather than an opaque 400.
Writes are verified by re-reading. A 2xx from PickUp Patrol is not proof: a
change made after the school's cutoff is accepted and silently ignored. Every
write re-reads the affected dates and compares the transportation id and the
note — never ModifiedDate, which advances on its own and would make every
write look successful. The note is part of the proof because every dismissal
option seen so far requires one, which makes a note-only edit ordinary: an
id-only comparison would report success from a field that never had to move.
The result says verified: true/false, and names the dates that did not move.
Without the MCP server
skills/pickuppatrol-api/ is a shell-out skill covering the same API with
curl and jq, for scripts or a machine where the server is not installed.
Development
npm install
npm run build
npm test # fast
npm run test:coverage # coverage-enforced at 100%Tests never touch the network: the transport is injected, and the MCP tools run through a real in-memory client/server pair.
Two things about the API worth knowing
GetPlanEdit returns a date's override, not the effective plan. A date with
no specific plan reads back TransportationId: null even when the student has a
weekly default for that weekday. pup_get_plan passes that through as-is;
pup_list_students is where the weekly defaults live.
Sign-in is a session cookie, not a JWT. Authenticate returns
BearerToken: null on this deployment and sets ss-id/ss-pid/ss-opt. The
client keeps whichever the server returns and sends both, so a future switch to
JWTs needs no change here.
Safety notes
A rejected sign-in is never retried. PickUp Patrol counts failed attempts against the account and a lockout clears only through their support desk, so the error is cached and every later call fails instantly with the same message.
The weekly-default write is a read-modify-write of the whole student record, because the API has no default-plans endpoint. The server always reads the student immediately before writing, and changes only
DefaultPlans.Credentials live in
.env(gitignored) or the MCP host's config, and are never written to a result or a log.
License
MIT
Available Tools
14 toolspup_get_default_plansARead-only
A student's weekly default dismissal plan — how they normally leave school on each day of the week — and whether the defaults still need a parent review.
| Name | Required | Description | Default |
|---|---|---|---|
| student_id | Yes | Student id, from pup_list_students |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the agent knows this is a read-only operation. The description adds useful semantic context (weekly defaults and parent-review status) but does not disclose additional behavioral traits such as authentication needs, rate limits, or no-data behavior. This is acceptable for a simple read-only tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, compact sentence that front-loads the resource and then clarifies it with an em-dash aside. Every phrase adds meaning—weekly, default, per-day dismissal, and parent-review status—with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a one-parameter read-only tool with no output schema, the description sufficiently explains the return content: the default dismissal plan by weekday and the parent-review status. It could be more explicit about the exact output shape or behavior when no defaults exist, but it is otherwise adequate for selecting and invoking the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, student_id, is already fully documented in the schema with 'Student id, from pup_list_students', giving 100% schema description coverage. The description adds no parameter-level details, so it remains at the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the returned resource: a student's weekly default dismissal plan, per weekday, plus whether parent review is still needed. It conveys the 'default' nature that separates it from generic plan tools, but it does not explicitly state the verb 'get' or name sibling tools for differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance is provided, and no alternatives are mentioned. The context is implied—use this when you need default dismissal plans or review status—but an agent is not told how to choose between this and related tools like pup_get_plan or pup_list_plans.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pup_get_planARead-only
The dismissal plan for one student on one date — the option in force, any note, the early-dismissal time, and whether the date is locked because the cutoff has passed.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | YYYY-MM-DD | |
| student_id | Yes | Student id, from pup_list_students |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already indicates this is a safe read operation, and the description adds meaningful behavioral detail: it returns the option in force, any note, the early-dismissal time, and whether the date is locked due to a passed cutoff. This goes beyond the schema and annotations by clarifying the scope and output aspects. It does not disclose error behavior, but for a read-only lookup this is a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense sentence that front-loads the core purpose and then uses an em-dash list to enumerate the returned components. Every phrase earns its place with no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read-only tool with no output schema, the description provides enough context to understand the returned fields. It names the key output elements, though it does not fully explain what 'locked because the cutoff has passed' means in practice or what values 'option in force' can take. Overall, it is sufficiently complete for selecting and invoking the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both student_id and date fully described in the input schema. The tool description does not add new parameter-level details beyond the schema, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource: a dismissal plan for one student on one date, and enumerates its contents (option, note, early-dismissal time, locked status). It lacks an explicit verb like 'retrieve' or 'get,' but the scoping to a single student and date clearly distinguishes it from sibling tools like pup_list_plans and pup_set_plan.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the phrase 'for one student on one date,' which suggests it is the single-plan lookup rather than lists or defaults. However, the description does not explicitly state when to use this tool versus alternatives such as pup_get_default_plans or pup_list_plans, nor does it mention any exclusions or preconditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pup_get_schoolARead-only
A school profile together with its per-weekday notify times and plan cutoff times, and the settings that decide whether parents may set plans at all.
| Name | Required | Description | Default |
|---|---|---|---|
| school_id | Yes | School id, from pup_list_students |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already covers the safety profile, and the description adds useful return-content detail. It does not disclose behavior such as error handling for unknown school_ids, data sourcing beyond 'profile', or response shape; with annotations present, 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, well-structured sentence that front-loads the core object and then appends the specific component groups. No filler, redundancy, or unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only get-by-ID tool, the description names the essential return components and the schema covers the one parameter. It is complete for basic invocation, though it does not describe error/not-found behavior or response formatting, which would be useful without an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully describes school_id as an integer sourced from pup_list_students, and the tool description adds no parameter-level meaning. Since schema coverage is 100%, the baseline 3 applies; there is no gap requiring the description to compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource (school profile) and specifies its distinctive content: per-weekday notify times, plan cutoff times, and parent-plan settings. This clearly distinguishes it from sibling getters like pup_get_student and pup_get_plan, though it states the result as a noun phrase rather than an explicit retrieval verb.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The use case is implied: call this when you need a school's profile and plan-related settings. However, it does not explicitly state when to prefer this over alternatives or mention any exclusions or prerequisites, leaving the agent to infer selection from the name and content.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pup_get_sessionARead-only
The signed-in PickUp Patrol parent account: name, email, last sign-in, and the students linked to it. Start here to discover student and school ids.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds useful context beyond that by naming exactly what the session contains and how it can be used to bootstrap discovery of related IDs, which is helpful given there is no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no wasted words. It front-loads the core meaning of the session object and adds the key usage hint about discovering IDs, making it easy for an agent to scan and act on.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only session getter with no output schema, the description covers the essential return contents and the intended entry-point use case. It could be marginally richer by noting that the linked students contain the IDs to be extracted, but overall it is complete enough for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema is empty with zero parameters, so there are no parameter semantics for the description to clarify. The description appropriately reinforces that the tool is a simple starting point, matching the baseline expected for a no-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource as 'The signed-in PickUp Patrol parent account' and lists the key fields returned: name, email, last sign-in, and linked students. It also explains its role as the starting point for discovering student and school IDs, which distinguishes it from sibling student/school-specific tools, though it lacks an explicit verb like 'returns' or 'gets'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Start here to discover student and school ids' gives clear contextual guidance for when to call this tool before other tools. It does not explicitly name alternatives or exclusions, but the entry-point framing is sufficient for a zero-parameter session retrieval tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pup_get_studentARead-only
One student in full, including the default dismissal plan for each weekday. Pass raw: true for the untouched API record.
| Name | Required | Description | Default |
|---|---|---|---|
| raw | No | Return the unprojected API record instead of the summary | |
| student_id | Yes | Student id, from pup_list_students |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes safety, so the description's main contribution is the projection behavior: by default a summary is returned and raw:true returns the untouched API record. This goes beyond the annotation and helps an agent understand output variation, though error and edge-case behavior are not described.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler; the main deliverable is stated first and the optional raw behavior is given second. The structure is easy to scan and each sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read-only tool, the description covers the core return content and the summary-vs-raw distinction. No output schema exists, so a little more detail about the full shape could help, but the essentials for selecting and calling the tool are present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters. The description's 'Pass raw: true for the untouched API record' restates the raw parameter's meaning with slightly different wording but adds no substantive information beyond the property description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource ('one student') and a distinguishing feature: the full record includes the default dismissal plan for each weekday. It clearly differentiates this from list-style siblings such as pup_list_students, though it does not use an explicit verb like 'returns'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for retrieving a single complete student record rather than a list or a plan-only resource, but it does not explicitly state when to choose it over siblings like pup_get_default_plans or pup_list_students. There are no exclusion criteria or alternative routes mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pup_healthcheckARead-only
Verify the configured credentials sign in and the PickUp Patrol API answers. Reports the server version, the students the account can see, and — when it fails — an error.kind saying which hop broke: no_credential (nothing configured), credential_rejected (PickUp Patrol refused the username/password), verification_pending (a two-factor account), edge_blocked (a CDN/WAF refused the request before PickUp Patrol saw it, so the credentials were never judged), timeout, transport or http. Read-only; never returns the credentials.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With only readOnlyHint provided by annotations, the description carries the rest and does so richly: it enumerates the exact error.kind values (no_credential, credential_rejected, verification_pending, edge_blocked, timeout, transport, http) and explains the causal distinction (edge_blocked means credentials were never judged). It also discloses a security trait — credentials are never returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first sentence, followed by return contents and the failure taxonomy. The em-dash enumeration is dense but each element is load-bearing; the only minor cost is that it reads as one long sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must explain return values, and it does: server version, visible students, and the error.kind taxonomy for failures. Nothing an agent needs to interpret a result is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing to disambiguate; the baseline for a 0-param tool is 4. No parameter detail is needed or missing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: verify credentials sign in and the API answers. It is clearly distinguishable from the data-fetching siblings (pup_list_students, pup_get_session, etc.) because its purpose is a connectivity/credential diagnostic rather than data retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The failure-mode taxonomy implies this is a diagnostic to run when something is broken, but the description never states when to call it versus siblings or as a prerequisite step. Usage is implied rather than explicit, so it lands at minimum-viable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pup_list_car_numbersARead-only
The car numbers a school has issued to this account, for dismissal options where usesCarNumbers is true.
| Name | Required | Description | Default |
|---|---|---|---|
| school_id | Yes | School id, from pup_list_students |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description does not need to restate that. It adds a small behavioral detail about the dependency on usesCarNumbers, which is useful context. It does not contradict the annotations, but the added behavioral disclosure is minimal beyond what annotations already convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The entire description is a single, dense sentence that front-loads the resource ('car numbers') and immediately provides the usage condition. There is no filler or redundancy; it earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one parameter and no output schema, the description gives the essential information: what it returns, for what purpose, and under what condition. It omits the response shape, but that is not strictly necessary given the absence of an output schema. The mention of usesCarNumbers is a key contextual detail that helps the agent decide when to call it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description for school_id is fully covered (100%), including guidance to obtain it from pup_list_students. The tool description does not add parameter-specific detail, but that is acceptable because the schema already provides sufficient meaning. The baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns the list of car numbers issued to a school for the account, and specifies the context (dismissal options). This differentiates it from sibling list tools like pup_list_students or pup_list_transportations, though it does not explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear usage condition: it is for dismissal options where usesCarNumbers is true. This gives the agent a specific criterion for selecting this tool, but it does not explicitly state when not to use it or mention alternative tools, so it stops short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pup_list_non_school_daysARead-only
Dates a plan cannot be set for at a school (holidays, closures, weekends), and optionally the dates in a range that already differ from the student defaults.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | YYYY-MM-DD | |
| school_id | Yes | School id, from pup_list_students | |
| start_date | No | YYYY-MM-DD; with end_date, also return dates that differ from the default |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes safety, and the description adds substantive behavior: the result includes holidays, closures, and weekends, and optionally includes range dates that differ from student defaults. It does not mention output format or ordering, but it provides a meaningful semantic contract beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single compact sentence that front-loads the main purpose and then adds the optional behavior. It is not verbose, though the two behaviors are packed together in a slightly dense way that could be clearer if separated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool, the description is adequate: it explains the main result and the optional mode. However, there is no output schema, and the description does not specify the return shape or what happens when no date range is provided, such as whether all non-school days are returned or only some default window.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description echoes the optional start_date/end_date behavior by referencing 'dates in a range' and 'student defaults,' but it does not add new parameter syntax, formats, or details beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource (a school) and the semantic content: dates a plan cannot be set for, namely holidays, closures, and weekends, plus an optional mode for dates differing from student defaults. This differentiates it from sibling tools about students, plans, transport, and schools, though it lacks an explicit verb like 'returns' or 'lists.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied: use this when you need dates when plans cannot be set at a school or when checking date-range differences against defaults. However, there is no explicit when-to-use guidance, no mention of alternatives, and no exclusions among the sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pup_list_plansARead-only
Day-by-day dismissal plans across a date range for every student on the account, as PickUp Patrol returns them.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | Yes | YYYY-MM-DD | |
| start_date | Yes | YYYY-MM-DD |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already signals this is a safe read. The description adds that it returns data 'as PickUp Patrol returns them,' but this is vague and doesn't clarify pagination, ordering, or limits. It provides minimal extra behavioral context beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence that efficiently communicates the tool's purpose and scope with no wasted words. It avoids repeating schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should hint at what a 'plan' contains or how results are structured. It only says 'day-by-day dismissal plans,' which is vague. The description is adequate for triggering a call but not for interpreting the response, leaving the agent to guess the structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with both parameters described as YYYY-MM-DD. The description mentions 'date range' but adds no additional semantic detail beyond what the schema already provides. Baseline 3 applies since the schema carries the meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb (list) and resource (dismissal plans), and specifies the scope: day-by-day across a date range for every student. It differentiates from siblings like pup_get_plan (single student) and pup_get_default_plans (defaults) by emphasizing 'every student' and 'across a date range.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context: use this to get a comprehensive list of plans for all students over a period. It does not explicitly name alternatives or when not to use it, but the scope is clear enough that an agent can infer it's not for single-student or default-plan queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pup_list_studentsARead-only
Every student on the account, each with their weekly default dismissal plan and whether those defaults still need a parent review.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already communicates that this is a safe read operation, lowering the burden on the description. The description adds useful outcome context (each student's plan and review state) but does not disclose ordering, pagination, or other runtime behavior. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One compact sentence conveys scope and content with no filler. The key idea, 'every student on the account,' is front-loaded, and every phrase earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only list tool with no output schema, the description sufficiently describes the returned information: all students, their default dismissal plan, and review status. Nothing essential is missing for an agent to know when to call this tool and what it will get back.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so there is nothing for the description to explain about inputs. The description does add meaning by summarizing what the account-wide result set contains, which is sufficient given the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource ('every student on the account') and what is included per student, so an agent can tell this is a list-all tool. It lacks an explicit imperative verb and does not explicitly contrast with siblings like pup_get_student, though the plural framing and account-wide scope make the purpose reasonably clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this is the account-wide student listing and that it surfaces dismissal-plan review status, which gives helpful context. However, it does not explicitly state when to prefer this over pup_get_student, pup_list_plans, or pup_get_default_plans, nor does it mention exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pup_list_transportationsARead-only
The dismissal options a school offers (bus, car pickup, walker, absent …) with the rules each one imposes: whether a note is required, whether it takes a car number, whether it is an early dismissal, and the daily cutoff time. Read this before setting a plan.
| Name | Required | Description | Default |
|---|---|---|---|
| school_id | Yes | School id, from pup_list_students | |
| include_inactive | No | Include options the school has deactivated (default false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds domain context about the returned data (rules for each dismissal option) beyond the readOnlyHint annotation, and reinforces that it's a read operation by advising to read it before a plan-setting write. No contradictions; it doesn't disclose every behavioral detail, but annotations already cover the safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler. The first sentence packs the essential content (what the list contains and the rule fields), and the second sentence gives actionable usage guidance. Very efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description sufficiently explains what will be returned and the domain. It could be slightly more explicit that it returns a list, but the name and plural phrasing imply it. Combined with the annotated read-only behavior and parameter descriptions, an agent can call it correctly without missing critical information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and both parameters already have clear descriptions (school_id from pup_list_students, include_inactive with default false). The tool description adds no parameter-specific guidance, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool lists dismissal options a school offers, with specific rule attributes (note required, car number, early dismissal, cutoff time). This clearly identifies the resource and differentiates it from siblings like pup_list_plans or pup_list_car_numbers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Read this before setting a plan' provides clear context and a prerequisite for using pup_set_plan. However, it doesn't explicitly compare to alternatives or say when not to use it, so it falls just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pup_mark_defaults_reviewedA
Mark a student's default plans as reviewed, clearing the school's 'needs review' prompt. Asks the user to confirm first: a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE).
| Name | Required | Description | Default |
|---|---|---|---|
| reviewed | No | Defaults to true | |
| student_id | Yes | Student id, from pup_list_students | |
| confirmToken | No | ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 "confirmation-required" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure, and it does so well by explaining the confirmation requirement生长 and the two-step fallback with confirmToken. It also clarifies that the token must never be invented or reused prow. It does not mention edge cases like idempotency or what happens if the defaults are already reviewed, but the core behavior is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no fluff: the first states purpose and effect, the second packs the confirmation behavior and fallback contract. Every clause earns its place, and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description is quite complete. It covers what the tool does, the confirmation flow, the token contract, and the fallback mode. It could briefly mention the success response or the behavior when reviewed=false, but the essential information an agent needs to invoke it correctly is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3 even without parameter details in the description. The description adds the high-level purpose of marking as reviewed, but the schema already documents student_id, reviewed, and confirmToken in depth. The description does not materially extend parameter understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Mark a student's default plans as reviewed.' It also states the concrete effect, 'clearing the school's needs review prompt,' which makes the tool's purpose unmistakable and helps distinguish it from siblings like pup_set_default_plans.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly establishes the context in which the tool is used: to mark defaults as reviewed and clear the prompt. It also explains the confirmation flow, which is essential usage guidance. It does not explicitly name alternatives or state when not to use the tool, so it falls just short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pup_set_default_plansA
Change a student's weekly default dismissal plan for one or more weekdays, or clear every default. This is how the child leaves school on any date without a specific plan. Asks the user to confirm first: a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE). Read pup_list_transportations first.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Weekdays to change, as names ("Monday") or ids (1 = Sunday … 7 = Saturday) | |
| note | No | Note for the school; required by some options | |
| clear_all | No | Remove every weekday default instead of setting one (days is ignored) | |
| student_id | Yes | Student id, from pup_list_students | |
| confirmToken | No | ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 "confirmation-required" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation. | |
| transportation_id | No | Dismissal option id from pup_list_transportations | |
| early_dismissal_time | No | HH:MM, required when the option is an early dismissal |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for behavioral disclosure. It thoroughly explains the confirmation mechanism (both the client-supported prompt and the two-step token fallback), the clear_all behavior ('days is ignored'), and parameter dependencies (note required by some options, early_dismissal_time required for early dismissal). It does not mention reversibility or permission requirements, but the mutation side effect and confirmation flow are well covered. Slightly more depth could be added on what happens to existing defaults when setting new ones.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well-structured. The main purpose is front-loaded, followed by the confirmation behavior and a precondition. The confirmToken explanation is long but necessary for correctness. There is no fluff, but it could be trimmed slightly without losing critical information. It is not overly verbose for a tool with this complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (7 parameters, mutation, confirmation flow, no annotations), the description is quite complete. It covers the primary purpose, the two-step confirmation fallback, the precondition for reading transportation options, and parameter dependencies. The absence of an output schema is acceptable. Missing details like error handling or what happens on invalid inputs are minor and not essential for correct invocation. Overall, an agent can call this tool correctly with the information provided.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The tool description adds minimal parameter semantics beyond what the schema already provides; it references pup_list_transportations for transportation_id and mentions the two-step token flow, but these are also in the schema. It does not significantly compensate for any gaps because there are none. The description adds a small amount of contextual guidance (read order), so it stays at baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Change' and the resource 'student's weekly default dismissal plan', with explicit scope: 'for one or more weekdays, or clear every default.' It also clarifies the semantic context ('This is how the child leaves school on any date without a specific plan'), which distinguishes it from siblings like pup_set_plan (specific date) and pup_get_default_plans (retrieval). No ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear precondition: 'Read pup_list_transportations first.' It also explains the confirmation flow and when the confirmToken is needed. However, it does not explicitly name alternative tools for when a specific plan exists or when to use pup_set_plan instead. The implied distinction is present but not explicit, so it falls just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pup_set_planA
Change how a student is dismissed on one or more specific dates, or clear those dates back to the student's weekly default. This changes how a child actually leaves school. Asks the user to confirm first: a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE). The preview shows the exact payload. Read pup_list_transportations first — options differ in whether they require a note, a car number or an early-dismissal time.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | Note for the school; required by some options | |
| dates | Yes | One or more YYYY-MM-DD dates to apply this plan to | |
| car_number | No | Car number, for options where usesCarNumbers is true | |
| student_id | Yes | Student id, from pup_list_students | |
| confirmToken | No | ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 "confirmation-required" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation. | |
| transportation_id | Yes | Dismissal option id from pup_list_transportations, or null to clear these dates back to the student's default plan | |
| early_dismissal_time | No | HH:MM, required when the option is an early dismissal |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it delivers: it warns that this changes how a child actually leaves school, discloses the required user confirmation, and explains the preview-and-confirmToken behavior in clients without elicitation support. This is exactly the behavioral context an agent needs before calling a stateful mutating tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action, then covers confirmation behavior and prerequisites. Each sentence earns its place; there is no filler or restating of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a 7-parameter tool with no annotations and no output schema, the description is unusually complete: it explains side effects, confirmation modes, the confirmToken contract, the preview, and the prerequisite lookup. Nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already documents conditional requirements for note, car_number, and early_dismissal_time. The description adds the meta-guidance that those requirements vary by dismissal option and that the transportation list must be consulted, which is a small but genuine increment over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: changing how a student is dismissed on one or more specific dates, plus the clearing behavior back to the student's weekly default. This makes the tool's scope unambiguous and sets it apart from the default-plan tool in its sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear prerequisite ('Read pup_list_transportations first') and explains the confirmation workflow and the two-step fallback with confirmToken. It does not explicitly name alternative tools or say when not to use this one, but 'weekly default' plus 'specific dates' implies the boundary.
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.
3 tool updates
v1.1.0- Changed
pup_mark_defaults_reviewed2 fields changed- removed
Input schema / properties / confirmRemoved value: -{ - "description": "Must be true to proceed. Without this, the tool returns a preview.", - "type": "boolean" -} - added
Input schema / properties / confirmTokenAdded value: +{ + "description": "ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 \"confirmation-required\" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.", + "type": "string" +}
- Changed
pup_set_default_plans2 fields changed- removed
Input schema / properties / confirmRemoved value: -{ - "description": "Must be true to proceed. Without this, the tool returns a preview.", - "type": "boolean" -} - added
Input schema / properties / confirmTokenAdded value: +{ + "description": "ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 \"confirmation-required\" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.", + "type": "string" +}
- Changed
pup_set_plan2 fields changed- removed
Input schema / properties / confirmRemoved value: -{ - "description": "Must be true to proceed. Without this, the tool returns a preview.", - "type": "boolean" -} - added
Input schema / properties / confirmTokenAdded value: +{ + "description": "ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 \"confirmation-required\" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.", + "type": "string" +}
11 tool updates
v1.0.0- Changed
pup_get_default_plans1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
pup_get_plan1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
pup_get_school1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
pup_get_student1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
pup_list_car_numbers1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
pup_list_non_school_days1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
pup_list_plans1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
pup_list_transportations1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
pup_mark_defaults_reviewed1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
pup_set_default_plans1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
pup_set_plan1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
14 tool updates
v0.1.2- First observed
pup_get_default_plans - First observed
pup_get_plan - First observed
pup_get_school - First observed
pup_get_session - First observed
pup_get_student - First observed
pup_healthcheck - First observed
pup_list_car_numbers - First observed
pup_list_non_school_days - First observed
pup_list_plans - First observed
pup_list_students - First observed
pup_list_transportations - First observed
pup_mark_defaults_reviewed - First observed
pup_set_default_plans - First observed
pup_set_plan
TDQS
Scored across 14 tools
Tools separate reads (list/get) from writes (set/mark) and cover distinct resources (students, plans, schools, transportations, car numbers). Minor overlap exists: pup_get_student and pup_get_default_plans both expose default plans, and pup_list_students vs pup_get_session both list students, but descriptions clarify scope.
All tools use the pup_ prefix and mostly follow a verb_noun pattern (list/get/set/mark). pup_healthcheck is the lone noun-style outlier, but the overall convention remains predictable and readable.
14 tools is well within the ideal range and each maps to a clear operation in the dismissal-planning domain. No redundant or trivial tools inflate the set.
Reads, writes, clears, and review-status operations cover the full plan lifecycle for students across dates, defaults, schools, transportations, and non-school days. Discovery paths (session/students) provide the IDs needed for deeper calls, leaving no obvious dead ends.
Maintenance
Related MCP Connectors
MCP server providing attendance data queries via the CloudTime API.
The official Planning Center MCP server for interacting with your ministry's data.
A MCP server that works with Google Calendar to manage event listing, reading, and updates.
An MCP server that automatically collects feedback on your MCP server.
Related MCP Servers
- AlicenseAqualityAmaintenanceMCP server for Infinite Campus parent portal with multi-district support, enabling parents to query student data like grades, assignments, attendance, and send messages across multiple school districts from a single interface.20951 npm4MIT
- AlicenseNot gradedqualityCmaintenanceAn MCP server that automates login to PAUSD Schoology via ClassLink and provides tools to fetch grades, upcoming assignments, and recent posts.MIT
- FlicenseAqualityDmaintenanceAn MCP server that allows you to book and cancel office cab and lunch reservations using natural language, with optional automation features like attendance-based scheduling and Outlook leave detection.6-

afkbot-mcpofficial
AlicenseNot gradedqualityAmaintenanceMCP server for AFKBot PTO management that allows users to file and manage time-off requests from any MCP-compatible client.MIT