Skip to main content
Glama
chrischall

pickuppatrol-mcp

by chrischall

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

pup_get_session

The signed-in account and the students linked to it

pup_list_students

Every student with their weekly defaults and review flag

pup_get_student

One student in full

pup_get_default_plans

A student's weekly default plan, day by day

pup_list_plans

Day-by-day plans across a date range

pup_get_plan

One student, one date — including whether it is locked

pup_list_transportations

A school's dismissal options and the rules each imposes

pup_get_school

School profile, notify times, cutoff times, settings

pup_list_non_school_days

Dates no plan can be set for, and dates already changed

pup_list_car_numbers

Car numbers the school issued to this account

pup_healthcheck

Credentials sign in and the API answers; on failure, error.kind says which hop broke (edge_blocked, credential_rejected, …)

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

pup_set_plan

Dismissal for one or more specific dates, or clears them back to the default

pup_set_default_plans

The weekly default plan, or clears every default

pup_mark_defaults_reviewed

The school's "defaults need review" prompt

Confirmations

variable

default

MCP_CONFIRM_MODE

ask-user

What a write does on a client that cannot show a confirmation prompt (claude.ai, Claude Desktop). ask-user: two steps — the first call does nothing and returns a preview plus a token, and the model must get your approval in chat before calling again with it. auto: the same two steps, but the model may use the token after reviewing the preview itself. refuse: writes are refused on such clients. A client that can show prompts (Claude Code) always gets the real prompt, unless MCP_CONFIRM_ELICITATION=off. An unrecognised value is treated as refuse.

MCP_CONFIRM_ELICITATION

on

off never shows a confirmation prompt, so every client gets the MCP_CONFIRM_MODE path. Set it for a client that claims to support prompts but never shows one (the write hangs — opencode 2.0.x). Any other value stays on, with a warning on stderr.

MCP_CONFIRM_TTL_SECONDS

600

How long a token stays valid.

MCP_CONFIRM_SECRET

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 (MCP_HOST_CONFIRM_SECRET) and spent tokens are recorded under MCP_DATA_DIR, so an approval survives an idle restart.

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 tools
pup_get_default_plansA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
student_idYesStudent id, from pup_list_students

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYesYYYY-MM-DD
student_idYesStudent id, from pup_list_students

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
school_idYesSchool id, from pup_list_students

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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_studentA
Read-only

One student in full, including the default dismissal plan for each weekday. Pass raw: true for the untouched API record.

ParametersJSON Schema
NameRequiredDescriptionDefault
rawNoReturn the unprojected API record instead of the summary
student_idYesStudent id, from pup_list_students

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_numbersA
Read-only

The car numbers a school has issued to this account, for dismissal options where usesCarNumbers is true.

ParametersJSON Schema
NameRequiredDescriptionDefault
school_idYesSchool id, from pup_list_students

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNoYYYY-MM-DD
school_idYesSchool id, from pup_list_students
start_dateNoYYYY-MM-DD; with end_date, also return dates that differ from the default

TDQS

A3.6/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_plansA
Read-only

Day-by-day dismissal plans across a date range for every student on the account, as PickUp Patrol returns them.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateYesYYYY-MM-DD
start_dateYesYYYY-MM-DD

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

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

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_studentsA
Read-only

Every student on the account, each with their weekly default dismissal plan and whether those defaults still need a parent review.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
school_idYesSchool id, from pup_list_students
include_inactiveNoInclude options the school has deactivated (default false)

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
reviewedNoDefaults to true
student_idYesStudent id, from pup_list_students
confirmTokenNoONLY 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

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoWeekdays to change, as names ("Monday") or ids (1 = Sunday … 7 = Saturday)
noteNoNote for the school; required by some options
clear_allNoRemove every weekday default instead of setting one (days is ignored)
student_idYesStudent id, from pup_list_students
confirmTokenNoONLY 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_idNoDismissal option id from pup_list_transportations
early_dismissal_timeNoHH:MM, required when the option is an early dismissal

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNoNote for the school; required by some options
datesYesOne or more YYYY-MM-DD dates to apply this plan to
car_numberNoCar number, for options where usesCarNumbers is true
student_idYesStudent id, from pup_list_students
confirmTokenNoONLY 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_idYesDismissal option id from pup_list_transportations, or null to clear these dates back to the student's default plan
early_dismissal_timeNoHH:MM, required when the option is an early dismissal

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 3 tool updatesv1.1.0
    • Changedpup_mark_defaults_reviewed2 fields changed
      • removedInput schema / properties / confirm
        Removed value: -{
        -  "description": "Must be true to proceed. Without this, the tool returns a preview.",
        -  "type": "boolean"
        -}
      • addedInput schema / properties / confirmToken
        Added 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"
        +}
    • Changedpup_set_default_plans2 fields changed
      • removedInput schema / properties / confirm
        Removed value: -{
        -  "description": "Must be true to proceed. Without this, the tool returns a preview.",
        -  "type": "boolean"
        -}
      • addedInput schema / properties / confirmToken
        Added 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"
        +}
    • Changedpup_set_plan2 fields changed
      • removedInput schema / properties / confirm
        Removed value: -{
        -  "description": "Must be true to proceed. Without this, the tool returns a preview.",
        -  "type": "boolean"
        -}
      • addedInput schema / properties / confirmToken
        Added 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"
        +}
  2. 11 tool updatesv1.0.0
    • Changedpup_get_default_plans1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedpup_get_plan1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedpup_get_school1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedpup_get_student1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedpup_list_car_numbers1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedpup_list_non_school_days1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedpup_list_plans1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedpup_list_transportations1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedpup_mark_defaults_reviewed1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedpup_set_default_plans1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedpup_set_plan1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
  3. 14 tool updatesv0.1.2
    • First observedpup_get_default_plans
    • First observedpup_get_plan
    • First observedpup_get_school
    • First observedpup_get_session
    • First observedpup_get_student
    • First observedpup_healthcheck
    • First observedpup_list_car_numbers
    • First observedpup_list_non_school_days
    • First observedpup_list_plans
    • First observedpup_list_students
    • First observedpup_list_transportations
    • First observedpup_mark_defaults_reviewed
    • First observedpup_set_default_plans
    • First observedpup_set_plan

TDQS

A4/5.0

Scored across 14 tools

Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness5/5

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

ActivityActive
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers