alertcamp
Server Details
Catch campsite, cabin, permit and day-use cancellations at 1,600+ parks in Canada and the US.
- Status
- Healthy
- Uptime
- 19.1% over 21 days
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 26 tools
The set is built on a clean resource model (park → campground → zone → site) plus two clearly separated alert kinds (single alerts vs multi-night itineraries), and the descriptions explicitly police the boundary between them ('NOT FOR ROUTE BACKCOUNTRY', 'list_my_alerts CANNOT show these'). Pause/resume come in three unambiguous scopes (alert, itinerary, account master switch), and the read tools target distinct levels of the same hierarchy. I found no pair an agent could plausibly confuse given the guidance given.
Every tool follows a strict verb_noun snake_case convention: create_/get_/list_/update_/delete_/pause_/resume_ plus a clear object (alert, itinerary, park, zone_map, matches, all_alerts). The object vocabulary is reused consistently across verbs, so the whole surface is predictable from the names alone.
26 tools is at the heavy end, but the domain genuinely spans two entity types with full lifecycles plus discovery of parks, campgrounds, zones, sites, equipment, routes and matches. Each tool maps to a real, non-redundant operation (the six pause/resume variants differ by scope). Slightly over what is comfortable, but not padded.
Full lifecycle coverage exists for both alerts and itineraries (create, get, update, delete, pause, resume) alongside the discovery and check-in tools an agent needs (search_parks, list_routes, list_matches, quota reporting). The known asymmetries — selections can only narrow, nights cannot be edited, plans are in-app only — are deliberate and explicitly documented rather than silent gaps.
Available Tools
26 toolscreate_alertCreate a cancellation alertAInspect
Watch a park for cancellations and notify the user when a matching stay opens up.
TWO QUOTAS can refuse this. The tier quota limits ACTIVE alerts and total watched sites. Separately, a user may hold at most 100 alerts in TOTAL — paused and expired ones included — and at that cap nothing new can be created until some are deleted (pausing does not help). list_my_alerts reports both, and a refusal here returns the same numbers in its structuredContent alongside the message.
NOT FOR ROUTE BACKCOUNTRY. Where a park sells backcountry as a traverse — a different site each night — this tool refuses it, because the app offers no plain backcountry alert there and the owner could not inspect or edit one. get_park reports supports_routes: true for those parks; call create_itinerary instead, and note a ONE-NIGHT route is the normal way to watch a single backcountry night, not a workaround.
THREE DATE MODES — pick the one the inventory uses, or the alert can never match:
Nights (most camping). date_start/date_end are a SEARCH WINDOW, not the stay: date_end is the last night that may be booked, and nights_min is the shortest stay worth notifying about.
Entry date (Quetico backcountry, Recreation.gov wilderness permits). These sell ONE ENTRY DATE against a daily quota, not a run of nights — asking for 1 night and 5 returns identical availability. Pass entry_dates with the exact dates wanted; date_start/date_end are then derived from them. A nights-based alert on this inventory NEVER matches. get_park reports backcountry_is_entry_date: true for these parks.
Day use (parking time slots, shuttles, Ontario Parks daily vehicle permits). These sell a SLOT or PERMIT on a given day. Pass day_use_cells as {site_id: [dates]}. A park offering this has DayUse in its camp_types. Ontario permits go on sale 5 days ahead; an alert for a later day is accepted and starts matching when the day is released.
Use list_park_campgrounds first to get campground ids, then list_campground_zones — for GoingToCamp parks the ZONES are the campgrounds a person names, so a park-wide selection is both imprecise and the largest thing you can ask for. Within a campground, pass ["all"] for zone_ids/site_ids to watch everything, or specific ids to narrow. Every id must be an ID, never a name, and must belong to the park you name.
If this is refused for SIZE, narrowing is the remedy: fewer zones, or specific site_ids. Falling back to the whole park makes the selection bigger and will fail again.
tier_label is the plan's real name — "essai" is French for trial and is NOT one; it is the permanent free plan.
Site caps are READABLE — max_sites_per_alert comes back from list_campground_zones for a campground and from get_alert for an existing alert, and it is per PROVIDER: the same free plan is 200 sites on Ontario Parks and 1 on Oregon State Parks, because a GoingToCamp scan reads a campground in one request while an Aspira scan costs one request per site. The number is readable, so it never has to be established by experiment: a throwaway alert spends a quota slot, and pausing a live one switches off the user's watch.
RESOLVE EVERY NARROWING INTO site_ids BEFORE creating this. If the user asked for a shaded site, one near the water, one with a fire pit or 50-amp power, read the attributes from list_zone_sites and pass the ids that qualify — do not pass ["all"] and describe the narrowing in prose.
The reason is the OTHER client: the account holder opens this alert in the AlertCamp app, which lists the sites it watches and has no way to show a filter. An alert on ["all"] looks like an alert on everything, cannot be checked, and cannot be edited back. An explicit list is visible, verifiable and editable by the person who owns it.
Same for position: if the ask was about the beach, the water or a quiet corner, pick the ids from get_zone_map or the lat/lng in list_zone_sites. An alert on the whole zone will notify them about every site in it, including the ones they ruled out.
| Name | Required | Description | Default |
|---|---|---|---|
| park_id | Yes | The park's id, from search_parks or get_park. | |
| date_end | No | YYYY-MM-DD — the last bookable NIGHT. Same rule as date_start. | |
| pets_only | No | Only sites that allow pets. | |
| tent_pads | No | Backcountry ZONE inventory only (Parks Canada): how many tent pads the party needs. Ignored elsewhere. | |
| date_start | No | YYYY-MM-DD. Required in nights mode; omit in entry-date or day-use mode and it is derived from the dates you picked. | |
| nights_max | No | Nights mode only. Optional ceiling. | |
| nights_min | No | Nights mode only. | |
| notify_sms | No | Text message on a match. Pro tier only and silently dropped otherwise, needs a verified phone number, and it is the one channel that costs real money per send — it stays off unless the user has asked for texts. | |
| party_size | No | People in the party. Where inventory is per bed or per person (huts, some backcountry zones) an opening must fit this many. | |
| split_stay | No | Accept a stay split across DIFFERENT sites rather than one site for every night. More matches, at the cost of moving camp mid-trip. | |
| days_filter | No | Which arrival nights count. 'weekends' narrows hard — it also cuts how often the alert can fire, so say so. | |
| entry_dates | No | ENTRY-DATE mode: the exact dates wanted, YYYY-MM-DD. Use for parks where get_park reports backcountry_is_entry_date. Tightly capped by tier (the free tier allows one), so ask for the dates that matter rather than a whole month. | |
| notify_push | No | Send a push notification to the account holder's phone when something opens. | |
| webhook_url | No | https URL to POST openings to — how YOU find out this alert fired, since MCP cannot push anything to you. Optional: without it, use list_matches to check in, and the account holder still gets their normal push/email. The response returns a webhook_secret ONCE. Each delivery carries X-AlertCamp-Signature (v1=HMAC-SHA256 over "<timestamp>.<body>") and X-AlertCamp-Timestamp — verify both before trusting a payload, and reject old timestamps. | |
| is_tent_only | No | Only tent-only sites, for campers who want to avoid being pitched beside RVs. NOT the same as equipment_filter_mode 'tent'. | |
| notify_email | No | Paid tiers only; silently dropped otherwise. | |
| activity_type | No | camping, chalet, canoe_camping, backcountry, fishing, boat, equestrian, day_use. Must be an activity the selected sites actually offer. Omitting it does NOT watch every activity — it is derived from the selection, and refused when the selection spans several. Send the one the user asked for whenever you know it: an alert carries exactly one activity and the owner cannot change that to 'any' in the app. | |
| day_use_cells | No | DAY-USE mode: {site_id: ["YYYY-MM-DD", ...]} — the exact slot/day cells wanted. Set once, at creation: these cannot be edited afterwards. | |
| is_accessible | No | Only wheelchair-accessible sites. | |
| has_electricity | No | Only sites with an electrical hookup. | |
| is_pull_through | No | Only pull-through sites (no reversing) — for big rigs. | |
| sub_equipment_id | No | From list_equipment_options for this park's provider. Never guess it: the integers are per-provider and a wrong one filters to the wrong sites silently. | |
| campground_selections | Yes | At least one campground to watch. | |
| equipment_filter_mode | No | What the user is camping IN. 'any' watches every site regardless. Pair 'tent' or 'rv' with sub_equipment_id from list_equipment_options — the mode alone does not say WHICH trailer. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| label | No | |
| park_id | No | |
| user_id | No | |
| date_end | No | |
| provider | No | |
| is_active | No | |
| park_name | No | |
| pets_only | No | |
| tent_pads | No | |
| alert_type | No | |
| created_at | No | |
| date_start | No | |
| nights_max | No | |
| nights_min | No | |
| notify_sms | No | |
| party_size | No | |
| scan_count | No | |
| shade_only | No | |
| split_stay | No | |
| updated_at | No | |
| booking_url | No | |
| created_via | No | |
| days_filter | No | |
| entry_dates | No | |
| notify_push | No | |
| is_tent_only | No | |
| notify_email | No | |
| webhook_note | No | |
| activity_type | No | |
| day_use_cells | No | |
| is_accessible | No | |
| out_of_season | No | |
| webhook_secret | No | |
| has_electricity | No | |
| is_pull_through | No | |
| last_checked_at | No | |
| waterfront_only | No | |
| created_by_agent | No | |
| last_notified_at | No | |
| sub_equipment_id | No | |
| notification_count | No | |
| cancellations_found | No | |
| availabilities_found | No | |
| campground_selections | No | |
| equipment_filter_mode | No | |
| op_access_point_resource_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare it is a non-read-only, non-idempotent, open-world write. The description adds far more: two independent quotas and how they are reported, refusal returning the same numbers in structuredContent, the webhook_secret returned once with signature/timestamp verification, SMS cost and silent dropping of tier-gated channels, and the non-editable nature of day_use_cells and activity_type.
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?
Front-loaded with purpose, then quotas, then the exclusion, then date modes — a sensible order for a 24-parameter tool, and most sentences earn their place. It is nonetheless very long, and the final two paragraphs argue the same point (resolve narrowing into explicit site_ids) twice, once for verifiability and once for position, which is redundant.
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 this complex — 24 parameters, nested objects, two enums, a quota system, three mutually exclusive date modes — the description covers every decision an agent must make before calling. An output schema exists, so return values are correctly left unelaborated beyond the refusal-shaped structuredContent note.
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%, so the baseline is 3, but the description goes well beyond per-field docs by explaining cross-parameter interplay: nights vs entry-date vs day-use modes and which fields are derived or ignored in each, the ['all'] semantics for zone_ids/site_ids, and the warning that sub_equipment_id integers are per-provider. This is meaning the schema alone cannot carry.
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?
Opens with a specific verb and resource: 'Watch a park for cancellations and notify the user when a matching stay opens up.' The scope is further pinned by explicit exclusions (route backcountry → create_itinerary), so an agent can separate it from create_itinerary, update_alert and get_alert without opening a schema.
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?
Names the alternative (create_itinerary) and the exact condition that selects it (get_park reports supports_routes: true), including the one-night-route nuance. It also gives the prerequisite call chain (list_park_campgrounds → list_campground_zones → list_zone_sites), the remedy when refused for size, and when each of the three date modes applies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_itineraryCreate a route alertAInspect
Watch a MULTI-NIGHT TRAVERSE — a trip needing a different zone each night, which create_alert cannot express. Use this whenever the user describes moving camp: 'four nights across the Rockwall', 'the Skyline end to end'.
TWO WAYS TO SPECIFY IT:
PLANNED (prefer this). Call list_routes, pass the chosen variant's id as route_id, and OMIT nights — they are filled in from the route. park_id comes with it too.
CUSTOM. Pass nights yourself: an ordered list, one entry per night, each naming a campground_id and the zone site_ids that would satisfy it. A night's site_ids are an OR-set — 'night 2 can be Numa Creek OR Tumbling Creek' is one alert, not two. 'all' is refused: a route needs explicit zones.
THE WINDOW IS A SEARCH WINDOW, not the trip. Every start day between window_start and window_end is tried, so a wider window is more chances to fire. It must span at least as many days as the route has nights, or nothing could ever match.
A route counts as ONE alert against quota however many nights it runs, and its legs never appear in list_my_alerts.
REFUSALS ARE INFORMATIVE, not retryable. A custom route can be refused as not walkable (non-adjacent zones), as mixing accommodation types that are booked separately, or as mixing single-permit traverses — a permit is one booking for the whole trip. Re-sending the same nights will be refused again: offer a planned route, or nights the provider can actually sell together.
| Name | Required | Description | Default |
|---|---|---|---|
| nights | No | Custom route only. Ordered, one per night; omit when passing route_id. | |
| park_id | No | Required for a custom route; implied by route_id. | |
| route_id | No | A variant id from list_routes. Supplies the nights and the park, and skips the adjacency check. | |
| tent_pads | No | Parks Canada zone backcountry: pads the party needs. Feeds the capacity gate on every night. | |
| notify_sms | No | Pro tier only, needs a verified phone, and it is the one channel that costs real money per send — it stays off unless the user has asked for texts. | |
| party_size | No | People in the party. Where inventory is per bed or per person (huts, some backcountry zones) an opening must fit this many. | |
| window_end | Yes | YYYY-MM-DD — latest day the trip may still be running. Must leave room for every night. | |
| notify_push | No | Send a push notification to the account holder's phone when something opens. | |
| notify_email | No | Paid tiers only; silently dropped otherwise. | |
| window_start | Yes | YYYY-MM-DD — earliest start day to try. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| legs | No | |
| nights | No | |
| park_id | No | |
| provider | No | |
| route_id | No | |
| is_active | No | |
| park_name | No | |
| tent_pads | No | |
| created_at | No | |
| notify_sms | No | |
| party_size | No | |
| scan_count | No | |
| window_end | No | |
| booking_url | No | |
| created_via | No | |
| notify_push | No | |
| open_routes | No | |
| notify_email | No | |
| window_start | No | |
| last_checked_at | No | |
| created_by_agent | No | |
| last_notified_at | No | |
| notification_count | No | |
| distinct_zone_count | No | |
| availabilities_found | No | |
| night_openings_latest | No | |
| night_openings_recent | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare it is a non-read, non-destructive, non-idempotent, open-world writer, but the description adds traits annotations cannot carry: the window is a search window rather than the trip itself, a route counts as one alert against quota, its legs never surface in list_my_alerts, and refusals are non-retryable. That is material behavior a caller needs before invoking.
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?
Front-loaded with the core distinction and split into labeled sections (two ways, window, quota, refusals) so nothing important is buried. It is on the long side with heavy capitalization and emphasis, but nearly every sentence carries decision-relevant information rather than filler.
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 10-parameter, open-world mutation tool with an output schema covering returns, the description supplies exactly the missing pieces: the two invocation modes, window semantics, quota accounting, notification cost caveats, and refusal behavior. Nothing an agent needs to call it correctly 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?
Schema coverage is 100% and the per-field descriptions are already strong (OR-set site_ids, notify_sms cost, inventory-matching party_size). The description still adds real meaning the schema lacks: the planned-vs-custom decision, that nights are omitted when route_id is given, and that route_id skips the adjacency check.
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 resource and scope ('a MULTI-NIGHT TRAVERSE — a trip needing a different zone each night') and explicitly distinguishes itself from the sibling create_alert, which 'cannot express' this. An agent can route between this and create_alert without opening either schema.
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?
Gives an explicit trigger ('use this whenever the user describes moving camp' with quoted examples), then ranks the two specification modes with 'PLANNED (prefer this)', and names the fallback when a custom route is refused. Alternatives, preferences, and failure handling are all spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_alertDelete an alertADestructiveIdempotentInspect
Permanently remove an alert from the user's list. PREFER pause_alert when the user may want it back — pausing keeps the configuration and is reversible.
Deleting is nonetheless necessary, not just tidy: a user may hold at most 100 alerts INCLUDING paused and expired ones, and once that cap is reached nothing new can be created until some are deleted. Deleting is PERMANENT and takes the alert's scan history and accumulated odds with it; a recreated alert starts from zero. Ask the account holder which alerts they mean before deleting any you did not just create for them in this conversation — they may hold alerts they never mentioned, and "delete my alerts" is not an instruction to empty the list.
| Name | Required | Description | Default |
|---|---|---|---|
| alert | Yes | The alert as the account holder would recognise it, copied EXACTLY from this alert's `label` in list_my_alerts or get_alert. Their client shows the arguments of this call for approval, so without it they are asked to confirm a bare id. Checked against the record: a label naming something else is refused. | |
| alert_id | Yes | The alert to delete. |
Output Schema
| Name | Required | Description |
|---|---|---|
| deleted | Yes | |
| alert_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the danger profile is partly covered structurally. The description still earns credit by disclosing consequences annotations cannot express: deletion is permanent and destroys scan history and accumulated odds, and a recreated alert restarts from zero, plus the 100-alert cap mechanics. It does not add much beyond that, and with rich annotations present a 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?
Front-loaded with the action and the preferred alternative before the justification, so an agent gets the decision rule first. The single dense paragraph is longer than typical but nearly every clause carries operational weight; it could be split for scannability but there is little true filler.
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 destructive, irreversible tool the description covers reversibility, the alternative, the capacity constraint that forces deletion, and the confirmation obligation. With an output schema present it need not describe return values, and annotations plus the 100%-covered schema carry the rest.
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% and the schema already explains both fields in detail, including the exact-label requirement and why the label is needed for client-side approval. The description adds no parameter-level syntax or format beyond that, so the high-coverage baseline of 3 applies; its 'ask the account holder which alerts they mean' note is guidance, not parameter semantics.
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 and resource ('Permanently remove an alert from the user's list') and immediately names the sibling it must not be confused with, pause_alert. An agent can separate this from pause_alert, update_alert and delete_itinerary without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit alternative and the condition that selects it ('PREFER pause_alert when the user may want it back'), then states when deletion is genuinely required (the 100-alert cap including paused and expired). It also sets a procedural precondition: confirm which alerts the account holder means before deleting any the agent did not just create.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_itineraryDelete a route alertADestructiveIdempotentInspect
Permanently remove a route and stop watching every night of it. PREFER pause_itinerary when the user may want it back — pausing keeps the nights and is reversible, and the nights cannot be rebuilt by editing. A deleted route has to be planned again from scratch, and its nights cannot be rebuilt by editing. Ask the account holder which routes they mean before deleting any you did not just create for them in this conversation.
| Name | Required | Description | Default |
|---|---|---|---|
| route | Yes | The route as the account holder would recognise it, copied EXACTLY from this route's `label` in list_my_itineraries or get_itinerary. Their client shows the arguments of this call for approval, so without it they are asked to confirm a bare id. Checked against the record: a label naming something else is refused. | |
| itinerary_id | Yes | The route to delete. |
Output Schema
| Name | Required | Description |
|---|---|---|
| deleted | Yes | |
| itinerary_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover destructive=true and idempotent=true, so the bar is lower, yet the description still adds real context: what is lost (every night of the route), that the loss is irreversible, that nights cannot be rebuilt by editing, and that deletion must be confirmed with the account holder. This goes well beyond the annotation set.
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?
Front-loaded correctly with the destructive action first and the alternative second, but the clause 'the nights cannot be rebuilt by editing' is repeated verbatim in consecutive sentences, which is dead weight in an otherwise tight description.
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?
An output schema exists so return values need no explanation, and annotations carry the safety profile. For this complexity level the description covers purpose, irreversibility, the sibling alternative, and the confirmation prerequisite — nothing an agent needs 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 description coverage is 100%, so the schema already carries parameter meaning — including the cross-checked `route` label and its refusal behavior. The description adds no syntax or format detail for either parameter, so the baseline 3 applies.
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 and resource — 'Permanently remove a route and stop watching every night of it' — with the permanence qualifier that separates it from the pause/resume siblings. An agent can distinguish it from pause_itinerary without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: 'PREFER pause_itinerary when the user may want it back', gives the reason (reversibility), and adds a confirmation protocol ('Ask the account holder which routes they mean before deleting any you did not just create'). When-to-use, when-to-use-something-else, and a prerequisite are all present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_alertGet one alertARead-onlyIdempotentInspect
One alert with its scan metrics and, in site_limits, what this alert may watch on ITS provider — read that before offering to widen a selection.
NOTE: scan_count and last_checked_at are a MINIMUM across the alert's polling targets, which are scanned independently and phase-staggered — so a fresh multi-zone alert can legitimately show scan_count 0 with a timestamp that predates its own creation. That is the laggard target, not a fault.
| Name | Required | Description | Default |
|---|---|---|---|
| alert_id | Yes | Alert id. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| park_id | No | |
| date_end | No | |
| is_active | No | |
| park_name | No | |
| date_start | No | |
| nights_max | No | |
| nights_min | No | |
| scan_count | No | |
| site_limits | No | |
| activity_type | No | |
| last_checked_at | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/destructive=false, so safety is covered. The description adds genuinely non-obvious behavioral context: scan_count and last_checked_at are a MINIMUM across phase-staggered polling targets, warning the agent not to misread a fresh multi-zone alert's zero count as a fault. That is real value beyond structured fields, though it omits auth or rate-limit behavior.
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 clause, followed by a clearly labeled NOTE. Both sentences carry information — one about output shape and one about a subtle data trap — with little filler, though the sentence structure is dense.
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 single-entity getter with an output schema present, the description covers the essential ambiguity (the counterlag explanation) and points at the site_limits payload. Nothing critical is missing, though the lack of any sibling routing keeps it just short of complete.
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 a single alert_id parameter, so the schema fully documents the input. The description adds no syntax or constraint detail for alert_id, matching the baseline-3 expectation when structured data carries the load.
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 a specific verb+resource (retrieving one alert) and describes its payload (scan metrics, site_limits contents), which is far better than a tautology. It does not, however, explicitly distinguish itself from the sibling list_my_alerts, leaving that separation to inference.
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 one actionable instruction — read site_limits before offering to widen a selection — which implies usage context. But it never says when to use get_alert versus list_my_alerts or update_alert, so the alternative-selection guidance is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_day_use_windowGet a day-use zone's bookable datesARead-onlyIdempotentInspect
The dates a DAY-USE grid offers (start / end), the max_span_days one alert may cover, and closed_cells — the slot/date pairs whose booking window has already shut.
Call this before setting day_use_cells. Day use is the one inventory whose season appears NOWHERE in the provider's API — only in the availability grid, and it moves when the next season is released — so dates chosen without it are a guess, and a guess outside the window is an alert that can never match.
Where the permits go on sale at a published time, list_zone_sites returns next_release_at for the zone. AlertCamp force-checks the target the moment that instant passes, so a user does not need to be at their phone for the drop — AlertCamp polls on the drop itself.
Day use also dies during its own arrival day: each slot has its own cutoff, so a date being in the future does not make it live. Skip anything in closed_cells.
| Name | Required | Description | Default |
|---|---|---|---|
| zone_id | Yes | A day-use zone, from list_campground_zones on a park whose camp_types include DayUse. |
Output Schema
| Name | Required | Description |
|---|---|---|
| end | No | |
| note | No | |
| start | No | |
| closed_cells | No | |
| max_span_days | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent, so the description adds higher-value context instead of repeating them: the season appears only in the availability grid and shifts when the next season releases, each slot has its own cutoff so a future date is not necessarily live, and closed_cells must be skipped. This is real behavioral disclosure an agent could not infer.
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?
Front-loaded and information-dense, but the middle paragraph about next_release_at and AlertCamp polling the drop is tangential to this read tool and inflates the definition. Some sentences explain alert mechanics rather than how to call this tool.
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 an output schema present, the description needn't document return values, yet it still explains the non-obvious fields (max_span_days, closed_cells). A single-parameter read tool is fully specified: what it returns, why it's needed, and what to do with closed_cells.
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 there is a single parameter; the schema already states zone_id comes from list_campground_zones on DayUse parks. The description restates the DayUse precondition but adds no new format or derivation detail, so the baseline 3 applies.
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 and resource ('the dates a DAY-USE grid offers') plus the concrete return fields (start/end, max_span_days, closed_cells). It is clearly distinguishable from siblings like list_zone_sites and create_alert without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Call this before setting day_use_cells' and explains why (the season is not exposed anywhere else in the provider's API). It also routes the agent to list_zone_sites for next_release_at, giving a clear when-to-use and an alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_itineraryGet one route alertARead-onlyIdempotentInspect
One route with its per-night legs, each night's zone, and any openings found so far.
Each opening carries a status saying what became of it, in the same three words list_matches uses: rebooked (a sweep saw one of its nights taken), open_at_last_scan (seen whole at status_as_of, which is when we LOOKED) and unverified (the alert is paused or deleted, so nothing is known after that). status_meaning in the result spells them out. This is how to answer “is it still available” — there is no live check.
| Name | Required | Description | Default |
|---|---|---|---|
| itinerary_id | Yes | The route alert's id, from list_my_itineraries or create_itinerary. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| legs | No | |
| nights | No | |
| park_id | No | |
| provider | No | |
| route_id | No | |
| is_active | No | |
| park_name | No | |
| tent_pads | No | |
| created_at | No | |
| notify_sms | No | |
| party_size | No | |
| scan_count | No | |
| window_end | No | |
| booking_url | No | |
| created_via | No | |
| notify_push | No | |
| open_routes | No | |
| notify_email | No | |
| window_start | No | |
| status_meaning | No | |
| last_checked_at | No | |
| created_by_agent | No | |
| last_notified_at | No | |
| notification_count | No | |
| distinct_zone_count | No | |
| availabilities_found | No | |
| night_openings_latest | No | |
| night_openings_recent | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld), and the description goes well beyond them: it defines the three status values, ties them to list_matches' vocabulary, explains status_as_of as 'when we LOOKED', and warns there is no live check. This is exactly the freshness/liveness semantics an agent needs to interpret results correctly.
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?
Front-loaded with the return shape, then the status vocabulary, then the usage note. Dense but every sentence carries meaning; only minor tightening is possible.
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 an output schema present, the description need not explain return values, yet it adds the status semantics and liveness caveat that make the output interpretable. It is complete for invocation, with the only gap being the unclear relation to the get_alert sibling and the alert-vs-itinerary naming.
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% and the single parameter is documented in the schema (its id comes from list_my_itineraries or create_itinerary). The description adds no parameter-level detail, so the baseline 3 applies.
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 precisely what the tool returns: one route with per-night legs, each night's zone, and openings with statuses. It is clearly singular and distinguishable from the list_* siblings, though the verb is implicit (a noun-phrase return description) and the title's 'route alert' wording sits awkwardly against the itinerary_id parameter.
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 explicit context for use — 'This is how to answer "is it still available" — there is no live check' — which tells the agent exactly when this tool is the right call. It does not, however, name exclusions or contrast with the retrieval sibling get_alert, so alternatives remain unaddressed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_parkGet one parkARead-onlyIdempotentInspect
Full detail for a single park: provider, activities, coordinates, booking URL, whether its backcountry is sold as zones rather than numbered sites, and backcountry_is_entry_date — which decides whether an alert here uses entry_dates or a nights range.
| Name | Required | Description | Default |
|---|---|---|---|
| park_id | Yes | Park id. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | No | |
| is_hot | No | |
| latitude | No | |
| provider | No | |
| is_active | No | |
| longitude | No | |
| camp_types | No | |
| created_at | No | |
| site_count | No | |
| updated_at | No | |
| booking_url | No | |
| website_url | No | |
| hot_camp_types | No | |
| op_park_map_id | No | |
| supports_routes | No | |
| campground_count | No | |
| wilderness_count | No | |
| backcountry_is_zone | No | |
| op_resource_location_id | No | |
| backcountry_is_entry_date | No | |
| op_transaction_location_id | No | |
| backcountry_has_release_schedule | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is fully covered without the description. The description adds domain context (backcountry sold as zones vs numbered sites; entry-date vs nights semantics) but says nothing about the tool's own behavior — no error case for an unknown park_id, no note that missing parks return nothing — so it sits at the baseline-plus level.
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 gets to the point immediately and then lists only fields that carry decision value (booking URL, zones-vs-sites, backcountry_is_entry_date). The field enumeration is dense but each item earns its place; no filler or restatement of the title.
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?
An output schema exists, so return values need not be explained — yet the description helpfully flags the two fields an agent must interpret (zones-vs-numbered-sites, backcountry_is_entry_date) for downstream alert creation, which is exactly the domain nuance that raw schema text would miss. The only real gap is the missing pointer to how one obtains a park_id.
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?
One required parameter with 100% schema description coverage, though that schema text is only 'Park id.' The description never clarifies where a park_id comes from or what it looks like, so it adds nothing beyond the schema. Per the high-coverage rule, baseline 3 applies.
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 ('Full detail for a single park') and enumerates the salient contents, which cleanly separates it from list-oriented siblings like search_parks, list_park_campgrounds and list_zone_sites. An agent can pick this over those siblings without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: fetching one park's full record when the id is known. No alternative is named (e.g. 'use search_parks to find a park_id'), and no precondition is spelled out. The one useful routing hint is indirect — backcountry_is_entry_date determines whether an alert uses entry_dates or a nights range — but it is framed as a field explanation, not as when-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_zone_mapGet a site mapARead-onlyIdempotentInspect
The drawn site map as an IMAGE, plus the pixel position of every site on it — the same sheet the app shows a person, with the SITE NUMBERS drawn on at their stored pins.
Use it for questions the rows cannot answer in words: which sites sit by the water, at the end of a loop, away from the road. Amenity icons on these sheets have no machine-readable labels, so read the picture as the user would, then convert what you see back into site ids with the coordinates returned alongside it. Say which sites you picked and why, so the user can disagree with your reading.
The numbers are OURS, not the provider's — these sheets are published without them — so name sites by those numbers and call again with your shortlist as highlight_site_ids.
Some clients display an image returned by a tool and some discard it, and this call cannot report which happened — so whether the user is looking at this sheet is unknown here. Every map also carries an image_url to the same labelled picture, which works in any client and can be passed on: offer it rather than assuming the image arrived. Findings stated in words stand on their own either way.
Takes a zone_id, or a campground_id for every sheet in it. Where a campground ships one sheet for all its zones, that sheet is returned for any zone within it.
NOT every inventory has one, and its absence is not a dead end: geographic inventories (Recreation.gov, the Aspira tenants, the UseDirect states) carry real lat/lng per site instead, which list_zone_sites returns and which you can reason about without a picture. This tool says so explicitly rather than failing. has_map on list_campground_zones tells you in advance.
| Name | Required | Description | Default |
|---|---|---|---|
| zone_id | No | From list_campground_zones — has_map says whether a sheet exists. | |
| annotate | No | Default true: the site numbers are drawn onto the sheet. Pass false for the provider's untouched image. | |
| campground_id | No | Instead of zone_id: every sheet in the campground, each labelled with the zone it draws. | |
| highlight_site_ids | No | Draw these sites in red with a ring and the rest plain. Call again with your shortlist so the USER can SEE the sites you are recommending instead of taking your word for where they are. |
Output Schema
| Name | Required | Description |
|---|---|---|
| maps | Yes | |
| sites | Yes | |
| caveats | No | |
| labels_drawn | No | |
| coordinate_origin | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: discloses that the site numbers are 'OURS, not the provider's,' that every sheet carries an image_url usable in any client, that the tool cannot report whether the client displayed the image, and that absence of a map resolves to an explicit statement rather than a failure. These are exactly the operational traits annotations cannot express.
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?
Front-loads the core output (image + coordinates) in the first sentence, which is the right structure. The body is long and mildly repetitive across five paragraphs, but nearly every sentence carries operational substance (naming convention, image fallback, absence handling), so little is pure padding.
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?
An output schema exists, so return values need no prose. The description still covers the hard edges an agent needs — our-not-provider numbering, client display uncertainty, image_url fallback, and non-fatal absence — leaving no material gap for a 4-parameter read 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%, so the baseline is 3. The description adds genuine meaning beyond the schema by explaining the zone_id vs campground_id interaction ('Where a campground ships one sheet for all its zones, that sheet is returned for any zone within it'), which the schema does not state, and reinforces the round-trip workflow for highlight_site_ids.
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 and resource — returns the drawn site map as an IMAGE plus the pixel position of every site — and immediately distinguishes it from the row-oriented sibling list_zone_sites. An agent can tell exactly what this returns versus what the row data gives.
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?
Explicitly frames the use case as 'questions the rows cannot answer in words: which sites sit by the water, at the end of a loop, away from the road,' names the alternative (list_zone_sites with real lat/lng for geographic inventories), and points to has_map on list_campground_zones for pre-flight checks. When-to-use, when-not, and the alternative are all present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_campground_zonesList a campground's zonesARead-onlyIdempotentInspect
Zones within a campground — the level at which most inventories are actually organised. In many of them one campground row holds the several campgrounds a person would name (Sandbanks is one row holding Outlet River A and B, Cedars, Woodlands and West Lake A/B/C), so stopping at list_park_campgrounds can make a park look like a single undifferentiated site pool. Elsewhere a campground has one default zone and this simply confirms it.
Call this before create_alert whenever the user names a part of a park ("near the beach", "the quiet loop", a campground by name), and pass the zone ids in campground_selections.
Also returns the caller's site caps for this provider and tier: max_sites_per_alert is what ONE alert may watch, and each zone's site_count says whether a selection fits. A park-wide selection is the BIGGEST one available, so it is the wrong fallback when a narrower one was refused for size.
A zone answers "which campground", NOT "which site". If the user named somewhere INSIDE one — the beach, the waterfront, a quiet loop, near the washrooms, away from the road — picking the right zone is half the answer, and the sites within it still differ. Where has_map is true, call get_zone_map before create_alert and choose site_ids from it; where the sites carry lat/lng, list_zone_sites gives you the same thing in coordinates. Watching the whole zone is a fine fallback, but say that is what you did.
| Name | Required | Description | Default |
|---|---|---|---|
| campground_id | Yes | From list_park_campgrounds. |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | No | |
| zones | Yes | |
| campground_id | No | |
| max_sites_per_alert | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, openWorld, non-destructive), and the description adds behavior beyond them: it returns the caller's max_sites_per_alert cap and per-zone site_count, warns that park-wide is the wrong size fallback, and clarifies zone-vs-site scope. That is genuinely useful operational context not derivable from structured fields.
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?
Front-loaded with the core purpose and routing rule, and the sentences each carry information. It is somewhat verbose though: the Sandbanks parenthetical and the beach/quiet-loop examples restate the same zone-vs-site point twice, which dilutes the otherwise tight structure.
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 an output schema present, the description correctly avoids explaining return values, yet still surfaces the one return detail an agent must act on (site caps and site_count for sizing a selection). Combined with the downstream routing to get_zone_map/list_zone_sites/create_alert, an agent has everything needed to call it correctly.
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 is a single parameter with 100% schema description coverage, so the schema already documents campground_id as coming from list_park_campgrounds. The description's 'pass the zone ids in campground_selections' refers to create_alert, not this tool's parameter, so it adds essentially no syntax or format meaning beyond the schema. Baseline 3 applies.
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 first sentence states the verb and resource implicitly (listing zones within a campground) and immediately frames the granularity distinction from list_park_campgrounds. An agent can distinguish this from the sibling list_park_campgrounds without reading either schema, and the concrete Sandbanks example makes the resource concrete.
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?
Explicit when-to-use ('Call this before create_alert whenever the user names a part of a park'), an explicit anti-pattern ('stopping at list_park_campgrounds can make a park look like a single undifferentiated site pool'), and named downstream alternatives (get_zone_map, list_zone_sites). This is the full when/when-not/alternatives set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_equipment_optionsList a provider's equipment typesARead-onlyIdempotentInspect
The equipment vocabulary an alert can filter on, for the park's provider. Each entry is a sub_equipment_id (a per-provider integer — Recreation.gov spells "Trailer/RV up to 30 ft" as -18013), a name, and a kind of 'tent' or 'rv'.
Call this whenever the user describes what they are camping IN — a tent, a van, a 30-foot trailer. You cannot set the equipment filter without it, and guessing the integer sets the wrong one silently.
A length-bracketed option means AT MOST that length: a 30-foot trailer takes the 30 ft bracket, never the 35.
| Name | Required | Description | Default |
|---|---|---|---|
| park_id | No | The provider is resolved from the park. | |
| provider | No | Instead of park_id, if you know it. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| options | Yes | |
| provider | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld), so the description's added value is the warning that a guessed integer silently selects the wrong option, plus the concrete ID-format example. It does not discuss auth or pagination, but for a read-only lookup that 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?
Three short, front-loaded blocks: what it returns, when to call it and why it matters, then the length-bracket rule. Every sentence carries information the agent cannot get from annotations or schema.
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?
An output schema exists so return values need no explanation, and the description still covers the ID semantics and the bracket interpretation rule that the output schema alone would not convey well. Nothing needed to call this correctly 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 both parameters (park_id, provider) are already documented in the schema, including the fact that provider is resolved from the park. The description adds no parameter syntax or precedence detail of its own, so the baseline 3 applies.
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 and resource ('the equipment vocabulary an alert can filter on, for the park's provider') and describes the exact entry shape (sub_equipment_id, name, kind). An agent knows precisely what this returns and that it is the vocabulary source for an alert filter, distinguishing it from every alert/itinerary sibling.
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?
Gives an explicit trigger ('Call this whenever the user describes what they are camping IN — a tent, a van, a 30-foot trailer') plus the consequence of skipping it ('You cannot set the equipment filter without it, and guessing the integer sets the wrong one silently'). No sibling actually competes here, so naming an alternative is unnecessary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_matchesList openings foundARead-onlyIdempotentInspect
Openings the user's alerts have found, newest first. This is how an agent CHECKS IN on an alert it created — MCP has no way to push, so nothing will arrive on its own.
Pass since (the cursor from a previous call) to get only what is new. Without it you get the most recent matches, which may include ones the user has already seen and acted on.
A match is a snapshot of what was free when the scan ran, and every row carries a status saying what became of it. rebooked means a later scan saw the site taken again — it is gone, and rebooked_at says when. open_at_last_scan means we are still watching and have not seen it taken as of status_as_of, which is the last time we LOOKED, not a live check. unverified means the alert is paused, deleted or past its window, so nothing is known after status_as_of. Report the status and its timestamp rather than calling a stored opening bookable: campsite cancellations are frequently rebooked within minutes.
Openings arrive as site numbers, which say nothing about where a site IS. If the user cares about position, get_zone_map (drawn inventories) or the lat/lng from list_zone_sites (geographic ones) locates the sites named here, so you can lead with the ones they actually want.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Default 25. | |
| since | No | Cursor from a previous call. Only matches detected after it are returned. | |
| alert_id | No | Restrict to one alert. |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | No | |
| cursor | No | |
| matches | Yes | |
| status_meaning | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly, idempotent, non-destructive, openWorld), and the description goes well beyond them: matches are point-in-time snapshots, the three status values are defined (rebooked, open_at_last_scan, unverified), and it warns that status_as_of is a look time rather than a live check. It even advises against calling a stored opening bookable because cancellations get rebooked within minutes. This is exactly the extra behavioral context the annotations cannot carry.
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?
Front-loads the definition and the polling rationale, then moves to status semantics and finally the site-locating caveat. It is longer than typical, but the length is dense and largely justified by domain-specific status rules; only minor trimming would be possible.
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?
An output schema exists, so return values need not be re-explained, and the description still covers the cursor pattern, status interpretation, and timestamp caveats that an agent needs to use results correctly. Nothing material is missing for a read-only list 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 coverage is 100%, so baseline is 3, but the description adds real meaning for `since`: it is the cursor from a previous call, and omitting it returns recent matches that may already be seen/acted on. That clarifies the trade-off the schema only names. `alert_id` and `limit` are left to 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?
States a specific verb and resource ('Openings the user's alerts have found') plus ordering ('newest first'), and frames it as the check-in mechanism for alerts an agent created. An agent can distinguish it from get_alert or list_my_alerts immediately.
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?
Explicitly explains why to call it (MCP cannot push, so polling is the only way to learn about matches), how to use it incrementally via `since` cursor, and what happens if you omit it. It also names alternatives for a related need (get_zone_map and list_zone_sites for locating sites), so routing is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_my_alertsList my alertsARead-onlyIdempotentInspect
The signed-in user's cancellation alerts, newest first. Each carries its park, date window, nights, and whether it is currently active.
PLAN NAMING: the tier value "essai" is French for "trial", but the plan is the permanent FREE tier — no expiry, no card, no countdown. tier_label carries the name the app shows for it, which is "Free".
PLAN CHANGES: no tool here changes a plan. Subscriptions are in-app purchases, which Apple and Google require to go through their own billing, so only the account holder can change one, and only in the AlertCamp app on their phone. The remedies these tools can apply to a limit are narrowing a selection, pausing, and deleting.
ROUTES ARE NOT IN THIS LIST. A multi-night traverse is a separate kind of alert whose per-night legs are excluded here, so a user with routes watches more than this shows — quota.route_alerts says how many, and list_my_itineraries returns them. Check it before summarising what they watch or suggesting something be deleted.
Also returns quota: total_alerts counts every alert INCLUDING paused and expired, max_total_alerts is the hard cap, and remaining is what is left. When remaining reaches 0, create_alert fails until alerts are deleted — pausing does not free a slot.
| Name | Required | Description | Default |
|---|---|---|---|
| active_only | No | Only currently-active alerts. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| quota | Yes | |
| total | No | |
| alerts | Yes | |
| alerts_paused | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavior beyond the annotations: exact quota semantics (total_alerts includes paused/expired, max_total_alerts is a hard cap, remaining=0 makes create_alert fail and pausing does not free a slot), the exclusion of route legs, and the fact that no tool can change a plan. These are precisely the facts an agent needs to avoid mis-summarising or suggesting impossible remedies.
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?
Front-loads purpose and return contents, then uses labeled sections for the disambiguation blocks, so it is easy to skim. The PLAN NAMING and PLAN CHANGES material sits somewhat tangentially on a simple list tool, but each block guards against a plausible agent error and no sentence is purely redundant.
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?
An output schema exists, yet the description still supplies the interpretive context the schema cannot (French 'essai' = permanent free tier, tier_label is the display name, quota counters overlap paused/expired alerts). Nothing needed to call or correctly report on this tool 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?
Only one optional boolean (active_only) and schema coverage is 100%, so the schema already carries the meaning. The description references active status in its field list but adds no filter syntax or default behavior, matching the baseline for fully documented params.
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+scope: the signed-in user's cancellation alerts, ordered newest first, and enumerates the fields each carries (park, date window, nights, active status). It explicitly distinguishes itself from list_my_itineraries and list_routes, which an agent could otherwise confuse it with.
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?
Gives concrete routing guidance: 'Check it before summarising what they watch or suggesting something be deleted,' and points to list_my_itineraries for route alerts and quota.route_alerts for counts. Lacks explicit when-not-to-use framing against siblings like get_alert, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_my_itinerariesList my route alertsARead-onlyIdempotentInspect
The user's multi-night ROUTE alerts — a traverse that needs a different site each night (Parks Canada and BC backcountry, Recreation.gov itinerary permits).
list_my_alerts CANNOT show these. A route is a parent plus one leg per night, and the legs are excluded from every alert listing so a four-night traverse does not read as four alerts. So call this too before telling the user what they are watching, before counting their quota, and certainly before suggesting they delete something to free a slot.
A route counts as ONE alert against quota however many nights it runs.
Each opening carries a status saying what became of it, in the same three words list_matches uses: rebooked (a sweep saw one of its nights taken), open_at_last_scan (seen whole at status_as_of, which is when we LOOKED) and unverified (the alert is paused or deleted, so nothing is known after that). status_meaning in the result spells them out. This is how to answer “is it still available” — there is no live check.
| Name | Required | Description | Default |
|---|---|---|---|
| active_only | No | True to list only alerts that are currently active; false to include paused ones. | |
| include_expired | No | Include routes whose window has passed. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| total | No | |
| itineraries | Yes | |
| status_meaning | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already cover the safety profile (readOnly, idempotent, non-destructive), but the description adds substantial operational context: a route counts as ONE quota slot regardless of nights, legs are excluded from alert listings, there is no live availability check, and status_as_of is when the scan LOOKED. That is exactly the kind of behavior an agent cannot infer from annotations or 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?
Front-loaded with the definition and the sibling exclusion, and the quota and status explanations each earn their place. It is somewhat long with emphatic phrasing ('certainly before', capitalized LOOKED), but no sentence is pure filler.
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?
An output schema exists, so return structure needn't be described, and the description still explains the status vocabulary (rebooked, open_at_last_scan, unverified) and points to status_meaning in the result. Combined with quota semantics and the no-live-check caveat, nothing needed to call or interpret this correctly 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% with two optional booleans whose descriptions already explain active_only and include_expired. The description only indirectly touches these (mentioning paused and deleted alerts in the status paragraph), adding little syntax or semantics beyond the schema. Baseline 3 applies when the schema does the heavy lifting.
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 and resource — the user's multi-night ROUTE alerts (itineraries) — and defines what a route is (a parent plus one leg per night, each night a different site). It explicitly distinguishes itself from the close sibling list_my_alerts, which 'CANNOT show these', so an agent can pick correctly without opening either schema.
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?
Gives explicit when-to-call guidance ('call this too before telling the user what they are watching, before counting their quota, and certainly before suggesting they delete something') and names the alternative (list_my_alerts) plus why it fails. Both the trigger conditions and the routing are spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_park_campgroundsList a park's campgroundsARead-onlyIdempotentInspect
Campgrounds within a park, including Parks Canada day use and Recreation.gov permit areas. A campground is what an alert watches; its zones and sites are the bookable inventory.
| Name | Required | Description | Default |
|---|---|---|---|
| park_id | Yes | Park id. |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | No | |
| park_id | No | |
| campgrounds | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint=false, openWorldHint), so the bar is lower. The description adds useful data-coverage context by naming Parks Canada day use and Recreation.gov permit areas as included sources, but does not disclose anything further about volume, pagination, or how the aggregated sources behave.
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 wasted words, and the scope statement is front-loaded before the conceptual clarification. Slightly fragmentary opening (no leading verb) but efficient overall.
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 an output schema present, annotations covering safety, and a single fully documented parameter, the description only needs to frame scope and the campground/zone/site model — which it does. A pointer to the downstream zone/site tools would make it fully complete, but nothing needed to call it correctly 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 description coverage is 100% for the single park_id parameter, so the schema already documents the only input. The description adds no syntax, format, or identifier guidance beyond what the schema provides, making the baseline 3 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 resource and scope ('Campgrounds within a park') and adds domain semantics — a campground is what an alert watches, while zones and sites are the bookable inventory — which helps separate it from list_campground_zones and list_zone_sites. It lacks an explicit verb in the description body, but the title supplies 'List', leaving the purpose unambiguous.
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 rather than stated: the hierarchy note ('its zones and sites are the bookable inventory') hints that an agent should call this before drilling into zones/sites, but no condition or alternative is named explicitly. There is no when-not guidance and no direct pointer to list_campground_zones or list_zone_sites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_routesList a park's planned routesARead-onlyIdempotentInspect
Pre-planned multi-night traverses for a park — the Rockwall, the Skyline, a coastal loop — grouped by trail, each with the paces it can be walked at ('Rockwall, 4 nights' and 'Rockwall, 3 nights' are two variants of one trail).
START HERE for any multi-night trip. Pass a variant's id to create_itinerary as route_id and its nights come with it — you do not have to restate them. A curated route also SKIPS the adjacency check, because it follows a real trail and is connected by construction.
An empty list is the NORMAL answer for most parks, not an error: it means no route has been planned there, and a custom one is the only option. Providers that enforce zone adjacency will refuse a custom route unless their trail graph has been crawled, so if create_itinerary refuses one, that is why — offer a planned route instead of retrying.
| Name | Required | Description | Default |
|---|---|---|---|
| park_id | Yes | Park id. | |
| pets_only | No | Hide routes where any night forbids dogs. A route is only offerable when EVERY night passes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| total | No | |
| trails | Yes | |
| park_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent safety, but the description adds non-obvious behavior: an empty list is the normal answer, curated routes skip the adjacency check by construction, and zone-adjacency providers will refuse custom routes unless the trail graph has been crawled. That is context an agent cannot derive from structured fields.
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?
Front-loaded with the core purpose before routing guidance and edge cases, and each sentence carries distinct information. It is longer than most list-tool descriptions and slightly overstuffed, but no sentence is filler.
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?
An output schema exists, so return values needn't be explained, and the description still tells the agent how to consume the returned id and how to interpret an empty result. For a read tool with sibling alternatives, nothing an agent needs to call it correctly 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 description coverage is 100% for both park_id and pets_only, so the schema carries parameter meaning and the baseline of 3 applies. The description mentions a 'variant's id' only as an output value, adding nothing beyond what the schema already documents for the input parameters.
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 and resource: pre-planned multi-night traverses for a park, grouped by trail with pace variants. The 'Rockwall, 4 nights' vs 'Rockwall, 3 nights' example makes the unit of return unambiguous and distinguishes it from siblings like get_zone_map or list_park_campgrounds.
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?
Explicitly says 'START HERE for any multi-night trip,' names the downstream tool (create_itinerary) and the parameter to feed (route_id), and explains what to do when a custom route is refused. When-to-use and what-to-do-instead are both stated, not inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_zone_sitesList a zone's sitesARead-onlyIdempotentInspect
Individual sites in a zone, for a site-level alert. Returns each site's id, number, camp type, and its position — lat/lng where the inventory is geographic (Recreation.gov, the Aspira tenants, the UseDirect states), or map_x/map_y pixels where it ships a drawn map sheet instead. A site has one or the other, never both.
Paginated: a zone can hold hundreds (Outlet River A has 176), so total may exceed what one call returns — use offset to continue.
When the zone's inventory opens at a published instant, next_release_at gives it. AlertCamp polls ON that drop and notifies within a tick, which is what the alert replaces sitting at a phone for it.
Each site also carries its SEASON where the provider publishes one ("Apr 15 to Oct 14"), which is year-less and repeats annually. Check it before picking dates: an alert outside the season scans for months and can never match, and says nothing about why.
Where the provider publishes them, each site also carries what it is LIKE — shade, proximity_to_water, has_fire_pit, electricity_amps, capacity_rating, driveway_surface. These are how you answer "a shady one" or "lakefront with 50 amp": filter the rows yourself and pass the qualifying site_ids to create_alert. Absence means UNSTATED, not absent, so say how many sites actually carried the attribute you used.
For position rather than amenity — near the water, the beach, the washrooms — use lat/lng where the inventory is geographic, or the sheet get_zone_map returns where it is pixel.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Default 100. | |
| offset | No | Number of rows to skip, for paging through a long list; 0 for the first page. | |
| zone_id | Yes | From list_campground_zones. | |
| accommodation_type | No | Optional filter. |
Output Schema
| Name | Required | Description |
|---|---|---|
| sites | Yes | |
| total | No | |
| offset | No | |
| zone_id | No | |
| returned | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent/destructive/openWorld, but the description adds substantial behavior: pagination with total exceeding one page, next_release_at semantics and that AlertCamp polls on the drop, year-less repeating seasons that silently never match, and the critical 'absence means UNSTATED, not absent' caveat.
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?
Front-loaded with the resource and its fields, and each paragraph carries distinct operational value (pagination, drop timing, seasons, amenities). It is on the long side and the closing position paragraph partially restates the lat/lng-vs-pixel point made in the opening, costing a point.
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?
An output schema exists, yet the description still gives the agent everything needed to interpret rows and act on them — geometry type, season semantics, sparse attributes, and paging. Nothing material is missing for a read-only listing 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 coverage is 100%, so baseline is 3; the description earns above that by explaining why offset is needed (zones of hundreds of sites) and by tying lat/lng vs map_x/map_y to whether the inventory is geographic or a drawn sheet. accommodation_type is not elaborated beyond the schema's 'Optional filter'.
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 and resource ('Individual sites in a zone') and enumerates exactly what each row carries (id, number, camp type, position, season, amenity attributes). It is clearly distinguishable from get_zone_map, which it names for the pixel-sheet case.
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?
Explicitly routes results into create_alert ('pass the qualifying site_ids to create_alert') and names get_zone_map as the alternative for pixel maps. It gives strong conditional context, though it never states an explicit when-not-to-use case for the tool itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pause_alertPause an alertAIdempotentInspect
Stop monitoring without deleting. Reversible with resume_alert. A paused alert keeps its configuration and frees no quota until it expires.
| Name | Required | Description | Default |
|---|---|---|---|
| alert_id | Yes | The alert's id, from list_my_alerts or create_alert. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| park_id | No | |
| user_id | No | |
| date_end | No | |
| provider | No | |
| is_active | No | |
| park_name | No | |
| pets_only | No | |
| tent_pads | No | |
| alert_type | No | |
| created_at | No | |
| date_start | No | |
| nights_max | No | |
| nights_min | No | |
| notify_sms | No | |
| party_size | No | |
| scan_count | No | |
| shade_only | No | |
| split_stay | No | |
| updated_at | No | |
| booking_url | No | |
| created_via | No | |
| days_filter | No | |
| entry_dates | No | |
| notify_push | No | |
| is_tent_only | No | |
| notify_email | No | |
| activity_type | No | |
| day_use_cells | No | |
| is_accessible | No | |
| out_of_season | No | |
| has_electricity | No | |
| is_pull_through | No | |
| last_checked_at | No | |
| waterfront_only | No | |
| created_by_agent | No | |
| last_notified_at | No | |
| sub_equipment_id | No | |
| notification_count | No | |
| cancellations_found | No | |
| availabilities_found | No | |
| campground_selections | No | |
| equipment_filter_mode | No | |
| op_access_point_resource_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true and destructiveHint=false, and the description is consistent with both. It adds real behavioral context beyond the annotations: configuration is retained and quota is not freed, plus an expiry qualifier. The 'until it expires' clause is left unexplained, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, zero filler, with the core action and the non-deleting scope front-loaded before the reversibility note.
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?
An output schema exists, so return values need not be described; the safety profile is carried by annotations. The description covers the remaining decision-relevant facts (reversible, config retained, quota impact) for a single-parameter 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% and the alert_id description already names its source (list_my_alerts or create_alert). The prose adds no parameter-level detail beyond the schema, so the baseline 3 applies.
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 ('Stop monitoring' of an alert) and immediately scopes it against the nearest sibling with 'without deleting'. An agent can distinguish pause_alert from delete_alert and resume_alert without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the reversal path explicitly ('Reversible with resume_alert') and implicitly steers away from delete_alert via 'without deleting'. It gives clear context but never states an explicit when-not-to-pause condition or prerequisite.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pause_all_alertsPause every alert at onceAIdempotentInspect
The account's MASTER SWITCH. While it is on, nothing is scanned and no notification is sent, whatever each alert's own is_active says — the scheduler skips the account entirely.
This is the whole account, not one alert: pause_alert is the per-alert one. It is reversible with resume_all_alerts and changes no alert's configuration.
It is also SILENT. A user whose alerts are paused sees them listed as usual and simply never hears anything, so this is for someone who has said they are done looking for now — the end of a season, a trip booked — not a way to quieten one noisy alert.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| alerts_paused | Yes | |
| alerts_affected | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it discloses that no scanning or notification occurs regardless of each alert's is_active, that configuration is unchanged, and — crucially — that the pause is SILENT, so the user sees alerts listed normally but hears nothing. That silent-failure mode is exactly the kind of behavior an agent cannot infer from readOnlyHint/idempotentHint alone.
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?
Three short paragraphs, front-loaded with the master-switch framing before the sibling comparison and the silent-behavior warning. Slightly verbose in the closing clause, but each sentence adds a distinct fact an agent needs.
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 mutation with annotations and an output schema present, the description covers scope, effect on the scheduler, reversibility, config immutability, and the silent-observability caveat. Nothing material is left for the agent to guess.
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 no parameters, so per the rubric the baseline is 4; there is no parameter surface the description needs to compensate for.
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?
Names a specific action and scope: the account-wide master switch that pauses everything, with the mechanic spelled out (scheduler skips the account entirely, overriding per-alert is_active). It explicitly distinguishes itself from the sibling pause_alert by calling itself 'the whole account, not one alert'.
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?
Gives an explicit when-to-use (end of a season, a trip booked — user is done looking) and an explicit when-not (not a way to quieten one noisy alert, use pause_alert instead). It also names the reverse operation, resume_all_alerts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pause_itineraryPause a route alertAIdempotentInspect
Stop watching a route, parent and every night together — pausing has to be atomic or the route keeps polling some nights it can never complete. Reversible with resume_itinerary. pause_alert does NOT work on a route.
| Name | Required | Description | Default |
|---|---|---|---|
| itinerary_id | Yes | The route alert's id, from list_my_itineraries or create_itinerary. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| legs | No | |
| nights | No | |
| park_id | No | |
| provider | No | |
| route_id | No | |
| is_active | No | |
| park_name | No | |
| tent_pads | No | |
| created_at | No | |
| notify_sms | No | |
| party_size | No | |
| scan_count | No | |
| window_end | No | |
| booking_url | No | |
| created_via | No | |
| notify_push | No | |
| open_routes | No | |
| notify_email | No | |
| window_start | No | |
| last_checked_at | No | |
| created_by_agent | No | |
| last_notified_at | No | |
| notification_count | No | |
| distinct_zone_count | No | |
| availabilities_found | No | |
| night_openings_latest | No | |
| night_openings_recent | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare it a non-destructive, idempotent, open-world mutation, and the description adds value beyond that: it discloses reversibility via resume_itinerary and an atomicity requirement ('has to be atomic or the route keeps polling some nights'). The rationale is useful though awkwardly worded.
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?
It is short and the guidance (reversibility, sibling exclusion) is packed in, but the em-dash sentence is convoluted and the opening clause ('parent and every night together') is opaque, so structure is only adequate.
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 an output schema present, return values need no explanation, and the annotations carry the safety profile. The description supplies reversibility and routing context, leaving little an agent needs that is missing, though the semantics of 'atomic' pausing could be spelled out more clearly.
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 a single fully documented itinerary_id, so the schema does the heavy lifting. The description adds no syntax, format, or sourcing detail for the id beyond what the schema already states, so the baseline 3 applies.
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 core action ('Stop watching a route') and the tool name plus sibling set make clear this pauses an itinerary route alert rather than an alert. However, the cryptic clause 'parent and every night together' muddies what exactly is being paused, so it is clear but not crisp.
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 explicitly routes the agent away from a sibling: 'pause_alert does NOT work on a route,' implying this tool is the correct one for routes. It also names resume_itinerary as the inverse operation. No explicit when-to-pause guidance beyond that routing distinction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resume_alertResume a paused alertAIdempotentInspect
Resume monitoring. Re-checks quota, so it can be refused if the user has since filled their tier with other alerts.
| Name | Required | Description | Default |
|---|---|---|---|
| alert_id | Yes | The alert's id, from list_my_alerts or create_alert. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| park_id | No | |
| user_id | No | |
| date_end | No | |
| provider | No | |
| is_active | No | |
| park_name | No | |
| pets_only | No | |
| tent_pads | No | |
| alert_type | No | |
| created_at | No | |
| date_start | No | |
| nights_max | No | |
| nights_min | No | |
| notify_sms | No | |
| party_size | No | |
| scan_count | No | |
| shade_only | No | |
| split_stay | No | |
| updated_at | No | |
| booking_url | No | |
| created_via | No | |
| days_filter | No | |
| entry_dates | No | |
| notify_push | No | |
| is_tent_only | No | |
| notify_email | No | |
| activity_type | No | |
| day_use_cells | No | |
| is_accessible | No | |
| out_of_season | No | |
| has_electricity | No | |
| is_pull_through | No | |
| last_checked_at | No | |
| waterfront_only | No | |
| created_by_agent | No | |
| last_notified_at | No | |
| sub_equipment_id | No | |
| notification_count | No | |
| cancellations_found | No | |
| availabilities_found | No | |
| campground_selections | No | |
| equipment_filter_mode | No | |
| op_access_point_resource_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds a genuinely non-obvious behavioral trait the annotations cannot express: resuming re-checks quota and may be refused if the tier is now full, which tells the agent to expect a possible failure path.
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 short sentences with zero filler; the core action is front-loaded and the caveat follows immediately. Every clause 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?
With an output schema present and annotations covering idempotency and safety, the description only needed to add behavioral context, and it flags the quota-refusal path. It does not state that the alert must currently be paused or how a refusal surfaces, but those are minor omissions for a single-parameter 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?
Only one parameter exists and schema description coverage is 100% – the schema already explains that alert_id comes from list_my_alerts or create_alert. The description adds nothing about the identifier, so the baseline 3 applies.
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 a specific verb+resource ('Resume monitoring') and the title pins it to 'a paused alert', which separates it from resume_all_alerts and resume_itinerary. However, 'monitoring' alone is slightly abstract and the description never explicitly names the alert as the resumed object, so it relies on the title to close the gap.
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 verb (resume a paused alert) but the description gives no explicit when-to-use or when-not-to-use guidance, and does not route the agent to pause_alert, resume_all_alerts, or update_alert as alternatives. The refusal condition is a precondition, not usage routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resume_all_alertsResume every alert at onceAIdempotentInspect
Turn the account's master switch back off, so its alerts are scanned again.
Openings found during the pause are NOT replayed: the first cycle after resuming is suppressed deliberately, so the user gets what is free from now on rather than a burst of history. Each alert keeps whatever is_active it had, so one paused individually stays paused.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| alerts_paused | Yes | |
| alerts_affected | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavior beyond the annotations: openings found during the pause are NOT replayed, the first cycle after resuming is deliberately suppressed, and each alert retains its own is_active so individually paused alerts stay paused. These are exactly the non-obvious effects an agent could not derive from readOnlyHint/idempotentHint alone.
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?
Three short, dense sentences with no filler, and the most decision-relevant surprise (no replay of paused openings) is front-loaded after the effect statement. The misleading 'back off' phrasing in sentence one is the only structural weakness.
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 annotations covering the safety profile and an output schema handling return values, the description supplies the behavioral caveats it must. The remaining gap is routing: it never states that this is the account-wide counterpart to pause_all_alerts rather than resume_alert.
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 the baseline is 4. There is no schema content for the description to enrich or duplicate, and it correctly says nothing about nonexistent inputs.
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 second clause states the concrete effect — 'its alerts are scanned again' — and the scope ('account's', 'every alert' in the title) distinguishes it from the single-alert sibling resume_alert. However, the lead sentence 'Turn the account's master switch back off' is confusingly worded for a resume operation and briefly reads as the opposite of the tool name, which costs it a 5.
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 only implied: an agent infers this is the counterpart to pause_all_alerts and that there must be a prior pause, but no sentence says when to choose this over resume_alert or pause_all_alerts. No prerequisites or exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resume_itineraryResume a route alertCIdempotentInspect
Start watching a paused route again.
| Name | Required | Description | Default |
|---|---|---|---|
| itinerary_id | Yes | The route alert's id, from list_my_itineraries or create_itinerary. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| legs | No | |
| nights | No | |
| park_id | No | |
| provider | No | |
| route_id | No | |
| is_active | No | |
| park_name | No | |
| tent_pads | No | |
| created_at | No | |
| notify_sms | No | |
| party_size | No | |
| scan_count | No | |
| window_end | No | |
| booking_url | No | |
| created_via | No | |
| notify_push | No | |
| open_routes | No | |
| notify_email | No | |
| window_start | No | |
| last_checked_at | No | |
| created_by_agent | No | |
| last_notified_at | No | |
| notification_count | No | |
| distinct_zone_count | No | |
| availabilities_found | No | |
| night_openings_latest | No | |
| night_openings_recent | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true, openWorldHint=true, non-destructive and non-readOnly, so the safety profile is covered. The description adds no behavioral context beyond repeating 'start watching' – it doesn't say what resuming affects, whether alerts/notifications restart, or what side effects occur.
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 with zero waste. It is concise, though it could trade some brevity for the missing precondition and side-effect 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?
Against an output schema and full annotation coverage, the description is adequate only in the narrowest sense. It omits the paused-state precondition, side effects of resuming, and routing to sibling resume/pause tools, leaving real gaps for a state-changing 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 coverage is 100% and the itinerary_id parameter is fully documented in the schema, including where to obtain it, so the description needn't repeat it. Baseline 3 applies; the description adds no additional parameter 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?
States a specific verb ('Start watching ... again') and resource ('a paused route'), distinguishing it from pause_itinerary and resume_alert by naming the paused-route scope. However, it conflates 'route' with 'itinerary' terminology used by the schema and siblings, which blurs the object it acts on.
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 when-to-use guidance, no prerequisites, and no reference to alternatives like resume_alert or resume_all_alerts. It also fails to state that the target must currently be paused, which is the essential precondition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_parksSearch parksARead-onlyIdempotentInspect
Find parks by name across every supported provider (Canadian provincial/federal parks plus US Recreation.gov, UseDirect and AspiraOne tenants). Returns each park's id, provider and the activities it offers. Use the returned park id with the other tools.
backcountry_is_entry_date marks a park whose backcountry sells an ENTRY DATE rather than nights — those need create_alert's entry_dates, not a nights range. DayUse in camp_types marks day-use inventory (parking slots, shuttle seats, daily vehicle permits), which needs day_use_cells.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum parks to return (default 25). | |
| query | No | Park name, or part of one. | |
| provider | No | Provider id. Omit to search every provider. This is the complete list of supported providers — use it to answer which providers or regions AlertCamp covers. Canada: accvi_huts (ACC Vancouver Island Section), accwhistler_huts (ACC Whistler Section), alberta_parks (Alberta Parks), ahwt (Algonquin Highlands Water Trails), acc_huts (Alpine Club of Canada), bc_parks (BC Parks), catfish (Catfish Creek Conservation Authority), thunderbay (City of Thunder Bay), cvhs_huts (Columbia Valley Hut Society), ncc (Gatineau Park), grand_river (Grand River Conservation Authority), hamilton (Hamilton Conservation Authority), kmc_huts (Kootenay Mountaineering Club), long_point_region (Long Point Region CA), maitland_valley (Maitland Valley Conservation Authority), manitoba_parks (Manitoba Parks), new_brunswick_parks (New Brunswick Provincial Parks), newfoundland_parks (Newfoundland & Labrador Provincial Parks), niagara (Niagara Peninsula Conservation Authority), nwt_parks (Northwest Territories Parks), nova_scotia_parks (Nova Scotia Provincial Parks), ontario_parks (Ontario Parks), otonabee (Otonabee Conservation), parks_canada (Parks Canada), ipe_parks (PEI Provincial Parks), rippleridge_huts (Ripple Ridge Recreation Association), saskat_parks (Saskatchewan Parks), spearhead_huts (Spearhead Huts), st_clair_region (St. Clair Region Conservation Authority), st_lawrence_parks (St. Lawrence Parks Commission), trca (Toronto & Region Conservation Authority), upper_thames (Upper Thames River Conservation Authority), yukon_parks (Yukon Parks). United States: arizona_parks (Arizona State Parks & Trails), california_parks (California State Parks), florida_parks (Florida State Parks), illinois_parks (Illinois State Parks), michigan_parks (Michigan State Parks), minnesota_parks (Minnesota State Parks), mississippi_parks (Mississippi State Parks), missouri_parks (Missouri State Parks), nevada_parks (Nevada State Parks), new_york_parks (New York State Parks), north_dakota_parks (North Dakota State Parks), ohio_parks (Ohio State Parks), oregon_parks (Oregon State Parks), recreation_gov (Recreation.gov), texas_parks (Texas State Parks), utah_parks (Utah State Parks), virginia_parks (Virginia State Parks), wash_parks (Washington State Parks), wisconsin_parks (Wisconsin State Parks), wyoming_parks (Wyoming State Parks). | |
| camp_type | No | Restrict to parks offering this activity: Camping, Chalet, CanoeCamping, Backcountry, Boat, Equestrian, DayUse. |
Output Schema
| Name | Required | Description |
|---|---|---|
| parks | Yes | |
| total | No | |
| returned | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the description needn't restate safety. It instead adds behavioral semantics beyond the annotations: the meaning of backcountry_is_entry_date (sells an entry date, not nights) and DayUse in camp_types (parking slots, shuttle seats, daily vehicle permits). Return fields are covered by the output schema, so no credit needed there.
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?
Front-loaded with purpose and return shape, then a usage pointer, then two tightly scoped field-semantics notes. Every sentence carries information; the only mild cost is that the two trailing flag explanations are somewhat abruptly attached without connective framing.
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 an output schema and full annotation/schema coverage, the description supplies what structured fields cannot: how returned flags change downstream tool calls. Pagination behavior beyond the documented limit default is not addressed, which is a minor gap for a paginated search.
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%, so the baseline is 3, but the description adds genuine meaning beyond the schema: it explains that a DayUse value in camp_types indicates day-use inventory requiring day_use_cells, and that backcountry_is_entry_date changes alert semantics. That is semantic context the enum list alone does not convey.
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 and resource ('Find parks by name') plus scope ('across every supported provider') and enumerates what distinguishes coverage (Canadian provincial/federal plus US Recreation.gov, UseDirect, AspiraOne). This separates it cleanly from get_park (by id) and list_park_campgrounds (per park).
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?
Gives clear downstream routing ('Use the returned park id with the other tools') and explicitly names which tools consume which field semantics (create_alert's entry_dates, day_use_cells). It does not explicitly say when to prefer this over get_park or list_park_campgrounds, so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_alertEdit an alertADestructiveIdempotentInspect
Change an existing alert instead of replacing it. Dates, nights, notifications, party size, activity and equipment can all be edited, and the campground_selections can be NARROWED.
Prefer this over delete-and-recreate: an alert carries its scan history and accumulated odds, a recreate throws both away and leaves the user unwatched in between. Prefer it over a second alert too — every alert costs a slot against the tier limit and the 100-alert cap.
SELECTIONS ONLY NARROW. You may remove sites, zones or campgrounds; you may not add any, and you may not change the park. Quota is priced on what an alert watches, so an edit that grew a selection would route around the check that priced it. To watch MORE, create a second alert, or delete this one and create it again with the full list — and say which you did.
Omit a field to leave it alone; pass null to clear one.
| Name | Required | Description | Default |
|---|---|---|---|
| alert_id | Yes | The alert's id, from list_my_alerts or create_alert. | |
| date_end | No | YYYY-MM-DD — the last bookable NIGHT. | |
| pets_only | No | Only sites that allow pets. | |
| tent_pads | No | Backcountry ZONE inventory only (Parks Canada): how many tent pads the party needs. Ignored elsewhere. | |
| date_start | No | YYYY-MM-DD. | |
| nights_max | No | Longest stay to accept, in nights; omit to accept any length from nights_min up. | |
| nights_min | No | Shortest stay to accept, in nights. | |
| notify_sms | No | Text message on a match. Pro tier only and silently dropped otherwise, needs a verified phone number, and it is the one channel that costs real money per send — it stays off unless the user has asked for texts. | |
| party_size | No | People in the party. Where inventory is per bed or per person (huts, some backcountry zones) an opening must fit this many. | |
| split_stay | No | Accept a stay split across DIFFERENT sites rather than one site for every night. More matches, at the cost of moving camp mid-trip. | |
| days_filter | No | Which arrival days count: every day, weekends only, or weekdays only. | |
| entry_dates | No | ENTRY-DATE inventory only: the exact dates wanted, YYYY-MM-DD. Replaces the current set, so pass every date you still want. | |
| notify_push | No | Send a push notification to the account holder's phone when something opens. | |
| is_tent_only | No | Only tent-only sites, for campers who want to avoid being pitched beside RVs. NOT the same as equipment_filter_mode 'tent'. | |
| notify_email | No | Paid tiers only; silently dropped otherwise. | |
| activity_type | No | The activity the alert watches (as listed on the park: camping, backcountry, day_use, …). | |
| is_accessible | No | Only wheelchair-accessible sites. | |
| has_electricity | No | Only sites with an electrical hookup. | |
| is_pull_through | No | Only pull-through sites (no reversing) — for big rigs. | |
| sub_equipment_id | No | From list_equipment_options for this park's provider. Never guess it: the integers are per-provider and a wrong one filters to the wrong sites silently. | |
| campground_selections | No | The NARROWED selection — a strict subset of what the alert already watches. Anything not listed stops being watched. | |
| equipment_filter_mode | No | What the user is camping IN. 'any' watches every site regardless. Pair 'tent' or 'rv' with sub_equipment_id from list_equipment_options — the mode alone does not say WHICH trailer. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| park_id | No | |
| user_id | No | |
| date_end | No | |
| provider | No | |
| is_active | No | |
| park_name | No | |
| pets_only | No | |
| tent_pads | No | |
| alert_type | No | |
| created_at | No | |
| date_start | No | |
| nights_max | No | |
| nights_min | No | |
| notify_sms | No | |
| party_size | No | |
| scan_count | No | |
| shade_only | No | |
| split_stay | No | |
| updated_at | No | |
| booking_url | No | |
| created_via | No | |
| days_filter | No | |
| entry_dates | No | |
| notify_push | No | |
| is_tent_only | No | |
| notify_email | No | |
| activity_type | No | |
| day_use_cells | No | |
| is_accessible | No | |
| out_of_season | No | |
| has_electricity | No | |
| is_pull_through | No | |
| last_checked_at | No | |
| waterfront_only | No | |
| created_by_agent | No | |
| last_notified_at | No | |
| sub_equipment_id | No | |
| notification_count | No | |
| cancellations_found | No | |
| availabilities_found | No | |
| campground_selections | No | |
| equipment_filter_mode | No | |
| op_access_point_resource_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, but the description supplies the 'why': narrowing silently drops anything not listed, selections can only shrink so a growth edit would circumvent quota pricing, and SMS notifications cost real money and are silently dropped off-tier. It also states the omit-vs-null mutation contract, which is the core behavioral rule for a partial-update 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?
Well front-loaded — purpose, then alternatives, then the narrowing constraint, then the omit/null rule — and every paragraph earns its place. It loses a point for mild repetition between the delete-and-recreate warning in paragraph two and the same remedy restated at the end of paragraph three.
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 22-parameter partial-update tool with an output schema (so return values need no explanation) and full schema coverage, the description covers the remaining unknowns: mutation semantics, the narrowing-only invariant, quota and slot side effects, and the cost/silent-drop behavior of notification channels. Nothing needed to call it correctly 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 description coverage is 100%, so the baseline is 3 and the schema already carries field meanings. The description adds genuinely new semantics the schema lacks: the union-wide 'omit to leave alone, null to clear' rule and the hard constraint that campground_selections may only narrow and never change the park.
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 opening sentence gives a specific verb and resource ('change an existing alert'), and the 'instead of replacing it' qualifier immediately separates it from delete-and-recreate and from create_alert in the sibling set. The follow-on sentence enumerates the editable field families, so an agent knows the scope without opening the schema.
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?
Explicit when-to-use against two named alternatives: prefer this over delete-and-recreate (preserves scan history and odds, avoids an unwatched gap) and over a second alert (slot and 100-alert cap costs). It also gives the correct escape hatch when the user needs MORE coverage — create a second alert or delete-and-recreate — closing the loop rather than leaving the agent stuck.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_itineraryEdit a route alertADestructiveIdempotentInspect
Change a route's window, party size, tent pads or notification channels.
THE NIGHTS CANNOT BE EDITED. Their order and adjacency are validated as a whole when the route is created, so changing one in isolation could leave a trip the provider will not sell. To walk a different line, delete this route and create a new one — and say that is what you did.
Widening the window is the single most useful edit: more candidate start days is more chances to fire. Send window_start and window_end TOGETHER — one alone is merged with the stored value and may end up too short for the route's length.
| Name | Required | Description | Default |
|---|---|---|---|
| tent_pads | No | Tent pads the party needs, for backcountry zones that sell pads rather than sites. | |
| notify_sms | No | Pro tier only, needs a verified phone, and costs real money per send. | |
| party_size | No | People in the party. Where inventory is per bed or per person (huts, some backcountry zones) an opening must fit this many. | |
| window_end | No | YYYY-MM-DD. | |
| notify_push | No | Send a push notification to the account holder's phone when something opens. | |
| itinerary_id | Yes | The route alert's id, from list_my_itineraries or create_itinerary. | |
| notify_email | No | Also send an email when something opens (paid plans). | |
| window_start | No | YYYY-MM-DD. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| legs | No | |
| nights | No | |
| park_id | No | |
| provider | No | |
| route_id | No | |
| is_active | No | |
| park_name | No | |
| tent_pads | No | |
| created_at | No | |
| notify_sms | No | |
| party_size | No | |
| scan_count | No | |
| window_end | No | |
| booking_url | No | |
| created_via | No | |
| notify_push | No | |
| open_routes | No | |
| notify_email | No | |
| window_start | No | |
| last_checked_at | No | |
| created_by_agent | No | |
| last_notified_at | No | |
| notification_count | No | |
| distinct_zone_count | No | |
| availabilities_found | No | |
| night_openings_latest | No | |
| night_openings_recent | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=true, and idempotentHint=true, so safety and idempotency are covered. The description adds important runtime context not in annotations: that nights are validated as a whole and cannot be edited in isolation, and that window_start/window_end must be sent together or they are merged with stored values. This is valuable, but it doesn't discuss reversibility or failure modes beyond the merge behavior.
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 purpose, then the key constraint (nights), then the recommended action (window edit). It's three paragraphs and mostly earns its place, though the 'say that is what you did' instruction could be seen as slightly procedural. Still efficient for the amount of useful guidance conveyed.
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 an 8-parameter mutation tool with full schema coverage, an output schema, and rich annotations, the description covers the critical behavioral nuances (night immutability, window merge behavior) without needing to explain the return shape. The only gap is that it doesn't mention the destructiveHint implications or any permission requirements for notify channels beyond what the schema says, but those are largely covered in the schema descriptions.
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 adds meaning beyond the schema by explaining the interaction between window_start and window_end (must be sent together, one alone is merged and may leave the window too short) and by characterizing widening the window as the most useful edit. That's real semantic guidance not captured in schema descriptions.
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 ('Change a route's window, party size, tent pads or notification channels') and distinguishes the tool from the sibling update_alert. It also explicitly names what it cannot edit (nights), which sharpens the boundary against related tools.
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 explicit when-to-use and when-not-to-use guidance: nights cannot be edited and the user should delete and recreate instead. It also recommends a workflow ('say that is what you did') and highlights the highest-value edit (widening the window), which is actionable guidance an agent can follow.
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.
11 tool updates
- Changed
create_alert3 fields changed- added
Input schema / properties / notify_push / descriptionAdded value: +"Send a push notification to the account holder's phone when something opens." - added
Input schema / properties / park_id / descriptionAdded value: +"The park's id, from search_parks or get_park." - added
Input schema / properties / party_size / descriptionAdded value: +"People in the party. Where inventory is per bed or per person (huts, some backcountry zones) an opening must fit this many."
- Changed
create_itinerary2 fields changed- added
Input schema / properties / notify_push / descriptionAdded value: +"Send a push notification to the account holder's phone when something opens." - added
Input schema / properties / party_size / descriptionAdded value: +"People in the party. Where inventory is per bed or per person (huts, some backcountry zones) an opening must fit this many."
- Changed
get_itinerary1 field changed- added
Input schema / properties / itinerary_id / descriptionAdded value: +"The route alert's id, from list_my_itineraries or create_itinerary."
- Changed
list_my_itineraries1 field changed- added
Input schema / properties / active_only / descriptionAdded value: +"True to list only alerts that are currently active; false to include paused ones."
- Changed
list_zone_sites1 field changed- added
Input schema / properties / offset / descriptionAdded value: +"Number of rows to skip, for paging through a long list; 0 for the first page."
- Changed
pause_alert1 field changed- added
Input schema / properties / alert_id / descriptionAdded value: +"The alert's id, from list_my_alerts or create_alert."
- Changed
pause_itinerary1 field changed- added
Input schema / properties / itinerary_id / descriptionAdded value: +"The route alert's id, from list_my_itineraries or create_itinerary."
- Changed
resume_alert1 field changed- added
Input schema / properties / alert_id / descriptionAdded value: +"The alert's id, from list_my_alerts or create_alert."
- Changed
resume_itinerary1 field changed- added
Input schema / properties / itinerary_id / descriptionAdded value: +"The route alert's id, from list_my_itineraries or create_itinerary."
- Changed
update_alert7 fields changed- added
Input schema / properties / activity_type / descriptionAdded value: +"The activity the alert watches (as listed on the park: camping, backcountry, day_use, …)." - added
Input schema / properties / alert_id / descriptionAdded value: +"The alert's id, from list_my_alerts or create_alert." - added
Input schema / properties / days_filter / descriptionAdded value: +"Which arrival days count: every day, weekends only, or weekdays only." - added
Input schema / properties / nights_max / descriptionAdded value: +"Longest stay to accept, in nights; omit to accept any length from nights_min up." - added
Input schema / properties / nights_min / descriptionAdded value: +"Shortest stay to accept, in nights." - added
Input schema / properties / notify_push / descriptionAdded value: +"Send a push notification to the account holder's phone when something opens." - added
Input schema / properties / party_size / descriptionAdded value: +"People in the party. Where inventory is per bed or per person (huts, some backcountry zones) an opening must fit this many."
- Changed
update_itinerary5 fields changed- added
Input schema / properties / itinerary_id / descriptionAdded value: +"The route alert's id, from list_my_itineraries or create_itinerary." - added
Input schema / properties / notify_email / descriptionAdded value: +"Also send an email when something opens (paid plans)." - added
Input schema / properties / notify_push / descriptionAdded value: +"Send a push notification to the account holder's phone when something opens." - added
Input schema / properties / party_size / descriptionAdded value: +"People in the party. Where inventory is per bed or per person (huts, some backcountry zones) an opening must fit this many." - added
Input schema / properties / tent_pads / descriptionAdded value: +"Tent pads the party needs, for backcountry zones that sell pads rather than sites."
26 tool updates
- First observed
create_alert - First observed
create_itinerary - First observed
delete_alert - First observed
delete_itinerary - First observed
get_alert - First observed
get_day_use_window - First observed
get_itinerary - First observed
get_park - First observed
get_zone_map - First observed
list_campground_zones - First observed
list_equipment_options - First observed
list_matches - First observed
list_my_alerts - First observed
list_my_itineraries - First observed
list_park_campgrounds - First observed
list_routes - First observed
list_zone_sites - First observed
pause_alert - First observed
pause_all_alerts - First observed
pause_itinerary - First observed
resume_alert - First observed
resume_all_alerts - First observed
resume_itinerary - First observed
search_parks - First observed
update_alert - First observed
update_itinerary
Publisher details
- Operator
- 16560768 Canada Inc. · Publisher source
- Operator website
- https://alert.camp/
- Vendor relationship
- First-party
- Documentation
- https://alert.camp/en/agents
- Trust center
- Not available
- Restrictions
- Requires an AlertCamp account (free plan available) and the AlertCamp mobile app, where each connection is approved with a short code shown by the client. No paid plan, admin approval or custom OAuth app is needed; the agent inherits the account's existing plan limits. OAuth 2.1 with PKCE; CIMD and dynamic client registration are both supported, redirect URIs must be https. No regional restrictions. · Publisher source
Related MCP Connectors
Live BC Parks campsite and day-pass status with freshness and official booking links.
Campground search, live availability, weather, safety, and gear for 10,000+ US campgrounds.
Live US campground availability, wildfire and river conditions, and trails on public land.
US backcountry permit and campground rules, dates and recorded openings. Read-only, no sign-in.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI clients to search and browse camping availability across Alberta Parks, BC Parks, and Parks Canada, including front-country and backcountry campgrounds, through a unified set of tools.-
- AlicenseAqualityDmaintenanceConnects to the Tentahead API to facilitate campsite searching and group trip planning for Illinois state parks. It provides live availability, weather forecasts, safety alerts, and EV charging data to streamline outdoor adventure planning.9MIT
- AlicenseAqualityDmaintenanceEnables AI agents to query and manage campground reservations, sites, and rate plans via the Campspot Online Booking API.8MIT
- AlicenseNot gradedqualityDmaintenanceProvides access to the National Park Service API to search for U.S. national parks, view park details, check alerts and closures, find visitor centers, campgrounds, and upcoming events.73 npmMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.