DogPolicies MCP Server
You can use DogPolicies MCP server to get sourced, dated dog-travel rules for California and Nevada and to search, plan, compare, monitor, and report corrections.
Search parks, beaches, trails, hotels, campgrounds, cabins, and restaurant patios by name, type, county, state, region, point/radius, dogs allowed, or off-leash status.
Explore everything dog-related near a town, county, or point, grouped by kind and sorted by distance.
Get full place records with rules, facts, sources, quotes, confidence, freshness, and not-stated fields.
Compare two to six places side by side on leash rules, fees, weight limits, pets per room, and reliability.
Plan a dog trip with stays that fit weight, dog count, nights, and pet-fee budget, plus nearby outings and patios.
Find hotels for a specific dog with match/possible verdicts, fee arithmetic, cheapest-first sorting, and optional possible matches.
Look up hotel-chain pet policies, listed exceptions, and property counts.
Browse ready-made answers to common dog-policy questions.
Find dog-friendly stops along major California and Nevada highways in driving order.
Retrieve one rule by stable ID with source, quote, confidence, verified date, and freshness.
Track verification events and rule changes since a date, globally or near a town/point.
Attach records via MCP resources and use built-in prompts for common trips and rule citations.
File corrections for human review, the only write tool.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@DogPolicies MCP ServerCan my 70 lb dog stay at a Monterey hotel for under $50 a night?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
DogPolicies MCP server
dogpolicies.com · Verified dog rules for California and Nevada travel, for AI assistants. Install guide and example.
Ask Claude, Cursor or any MCP client "can my 70 lb dog stay at a Monterey hotel for under $50?", "what can my dog do in Carmel?" or "plan three nights in Tahoe with two dogs" and get an answer with the official source, the date it was checked and a link to the record. No API key, no account, no configuration: the data ships inside the package.
npx dogpolicies-mcp demo
What it answers
Whether dogs are allowed at 2,400+ parks, beaches, trails, hotels, campgrounds, cabin resorts and restaurant patios, with leash rules, restrictions, weight limits and pet fees.
Which hotel will take your dog: weight, number of dogs, nights and a fee budget, with the fee arithmetic spelled out ("2 dogs x 3 nights x $25 per pet per night = $150, capped at $100 per stay").
A whole trip in one call: where to stay with this dog, what to do, where to eat, near any town or county.
Dog-friendly stops along I-5, US-101, Highway 1, I-15, I-80, US-50, US-95 and US-93, in driving order.
Hotel chain pet policies (Motel 6, Red Roof, Kimpton and more) and which properties are exceptions.
Side-by-side comparisons, and what changed since a date, everywhere or near a town.
Areas the way travelers name them: East Bay, Lake Tahoe, Big Sur, Yosemite, Death Valley, the Mendocino Coast and the Bay Area's metros, as a filter, a place name in
nearandplan_trip, and a resource.
Every fact comes from an official source (an agency page or the business's own policy) with the date it was checked. Every result starts with a one-line citation and ends with DogPolicies, dogpolicies.com, CC BY 4.0, verified {date}. When a source does not state something, the record says "not stated" instead of guessing.
Related MCP server: Dog API MCP Server
Install
Pick the first one that fits; they all give the same server.
1. Claude (claude.ai or Claude Desktop): add the hosted connector, nothing to install
Settings → Connectors → Add custom connector → name DogPolicies, URL https://dogpolicies.com/mcp/ → Add. Then turn it on in the chat's tools menu. No Node.js, no file editing; works on every plan that has connectors.
2. Claude Desktop: one-click extension
Download dogpolicies-mcp-.mcpb from the latest release and open it (double-click, or Claude Desktop → Settings → Extensions → Install Extension). The data is inside; nothing else to install.
3. One command, any client
npx dogpolicies-mcp install # Claude Desktop (default)
npx dogpolicies-mcp install --client cursor # or vscode | windsurf | claude-code, or --all
npx dogpolicies-mcp install --hosted # the remote URL form instead of a local server
npx dogpolicies-mcp install --dry-run # show what would change, change nothingIt finds the client's config on Windows, macOS and Linux, creates the file or the mcpServers key if missing, merges one entry without touching other settings, writes a timestamped backup first, refuses (and explains) a file it cannot parse, does nothing the second time, needs no admin rights, and prints the exact restart step. On Windows it writes the form that works (cmd /c npx ...). Requires Node.js 20.19 or newer.
4. One-click buttons (hosted server, no Node.js)
Both buttons add the hosted server at https://dogpolicies.com/mcp/; the client asks you to confirm.
5. Claude Code
claude mcp add dogpolicies -- npx -y dogpolicies-mcp # macOS, Linux
claude mcp add dogpolicies -- cmd /c npx -y dogpolicies-mcp # Windows
claude mcp add --transport http dogpolicies https://dogpolicies.com/mcp/ # hosted, any OS6. By hand
Settings → Developer → Edit Config (the file is %APPDATA%\Claude\claude_desktop_config.json on Windows, ~/Library/Application Support/Claude/claude_desktop_config.json on macOS). If the file has no mcpServers key yet, add one:
{
"mcpServers": {
"dogpolicies": { "command": "npx", "args": ["-y", "dogpolicies-mcp"] }
}
}On Windows use "command": "cmd", "args": ["/c", "npx", "-y", "dogpolicies-mcp"]. Then fully quit Claude Desktop (tray icon → Quit on Windows, Cmd+Q on macOS) and reopen it.
~/.cursor/mcp.json (global) or .cursor/mcp.json in a project, same mcpServers block as above (Windows: the cmd /c form), or { "url": "https://dogpolicies.com/mcp/" } for the hosted server.
~/.copilot/mcp-config.json (what the guided flow calls Global → Copilot Global) with the same mcpServers block, or from a terminal:
code --add-mcp '{"name":"dogpolicies","type":"stdio","command":"npx","args":["-y","dogpolicies-mcp"]}'~/.codeium/windsurf/mcp_config.json, same mcpServers block, or { "serverUrl": "https://dogpolicies.com/mcp/" }.
Local HTTP
npx dogpolicies-mcp --http --port 3737 # http://127.0.0.1:3737/mcpTroubleshooting
It does not show up after installing. Restart properly. Claude Desktop must be fully quit: right-click the tray icon (Windows) or Claude menu → Quit (macOS); closing the window leaves it running. Cursor: toggle the server in Settings → MCP. VS Code: MCP: List Servers → Start. Windsurf: Refresh in the MCP panel.
Check the server itself.
npx dogpolicies-mcp checkloads the data and calls every tool;npx dogpolicies-mcp demoprints a real answer. If these work, the problem is the client's config or restart.Where the client's logs are. Claude Desktop:
%APPDATA%\Claude\logs\mcp.logandmcp-server-dogpolicies.log(Windows),~/Library/Logs/Claude/(macOS). Cursor: Output panel → MCP Logs. VS Code: MCP: List Servers → Show Output. Claude Code:claude mcp list, or--mcp-debug."spawn npx ENOENT" on Windows. The client starts commands without a shell and
npxis a.cmdfile. Use"command": "cmd", "args": ["/c", "npx", "-y", "dogpolicies-mcp"](the installer writes this), or the hosted connector.Node version.
node --versionmust be 20.19 or newer (npxcomes with Node). The hosted connector and the Claude Desktop extension need no Node at all (the extension uses Claude Desktop's own).Behind a corporate proxy.
npxneeds to reach registry.npmjs.org once to fetch the package; setHTTPS_PROXY(npm readsnpm config set proxytoo) or use the extension or the hosted connector, which need no npm. The server itself makes one background request to dogpolicies.com for newer data and works offline without it; setDOGPOLICIES_OFFLINE=1to never try.Still stuck? Open an issue with the output of
npx dogpolicies-mcp check, your OS and client: https://github.com/xultrax-web/dogpolicies-mcp/issues
Try it in the terminal
npx dogpolicies-mcp demo # off-leash beaches near San Diego, with citations
npx dogpolicies-mcp demo "Monterey" # hotels in Monterey for a 70 lb dog, 2 nights, fees worked out
npx dogpolicies-mcp check # load the data and call every tool onceThe demo output is the exact text an assistant receives:
- Coronado Dog Beach (Coronado, CA): Yes, with restrictions. Dogs may be off leash only on the
designated Dog Beach area at 200 Ocean Boulevard ... Source: City of Coronado, checked
2026-10-26. Record: https://dogpolicies.com/places/coronado-dog-beach/ (CC BY 4.0; cite with link).
`coronado-dog-beach` · Coronado, San Diego County, California · 3 mi · freshness freshTools
Tool | What it does |
| Search by name, type (beach, park, trail, lodging, campground, cabins, restaurant), county, state, region or a point and radius; filter to dogs allowed or off-leash. |
| Everything dog-related near a town, county or point, grouped by kind and sorted by distance. Takes a town name; no coordinates needed. |
| Full record for one place: every fact, its source with URL, date and quote, rule ids, and what the source does not state. |
| Two to six places side by side: dogs allowed, leash, fee, weight limit, pets per room, freshness, who confirmed. |
| A stay in a town with this dog: stays that fit (fee for the whole stay worked out), beaches, parks, trails and patios nearby. |
| Hotels that take a specific dog: weight, number of dogs, nights, fee budget. Verdicts (match, possible, excluded), cheapest first, fee arithmetic shown. |
| A chain's published pet policy, its listed exceptions and property counts. |
| Ready-made answers to common questions ("Which California state parks allow dogs?"). |
| Dog stops along a highway by mile and direction: rest areas with pet areas, hotels, campgrounds, parks, beaches. |
| One rule by its stable id, with source, quote, confidence, verified date and freshness. |
| Verification events and rule changes since a date, newest first. |
| The same, limited to a radius around a town or point. |
| Files a correction for a person to verify. Nothing is published automatically. The only tool that writes. |
Every tool returns readable markdown by default and structured JSON (response_format: "json"), with an output schema. Every record carries confidence (stated, inferred_from_agency, inherited_brand), freshness (fresh, due, stale, unreadable, computed for today), verified_at, url and source_urls. Errors set isError with a code: not_found, invalid, rate_limited, unavailable, offline. The full reference, generated from the code, is docs/tools.md.
Resources and prompts
Resources let a client attach a record without a tool call: dogpolicies://place/{id}, dogpolicies://brand/{id}, dogpolicies://answer/{slug}, dogpolicies://route/{id}, dogpolicies://area/{id} (all with completion), plus dogpolicies://about, dogpolicies://answers and dogpolicies://status. Prompts give a client's slash menu the common trips: plan_dog_trip, check_hotel_for_dog, road_trip_with_dog, what_can_my_dog_do_here, cite_a_rule, with town-name completion.
How the data stays current
The package ships a dated snapshot (as_of in every result). On start it serves that snapshot immediately, then checks https://dogpolicies.com/data/mcp-snapshot-v1.json in the background and, when a newer one exists, swaps it in and caches it for next time. Until the site is deployed there, that check fails fast and silently and the bundled data serves on its own. Set DOGPOLICIES_OFFLINE=1 (or pass --offline) to never use the network. All options: docs/configuration.md.
Privacy
Nothing is collected. No telemetry, analytics or crash reporting; tool arguments are never logged above
debuglevel (stderr, your terminal).What leaves your machine: one conditional GET for the data snapshot on start, and, only when you use
dogpolicies_report_correction, the correction text you typed plus an optional contact you chose to give. Both go to dogpolicies.com over https and nowhere else.--offlinestops both.Threat model and controls: docs/security.md.
License and attribution
Code: MIT.
Data: CC BY 4.0. Attribute "DogPolicies" with a link to https://dogpolicies.com/ and cite each record with its URL and verified date; every result includes a ready-made citation line. Chain-hotel names and locations come from OpenStreetMap under the ODbL and say so in
record_license.The rules are a sourced, dated summary, not legal advice. Confirm with the agency or the business before you go, especially when a record says
stale,unreadableorinherited_brand. Service animals are governed by the ADA, not these pet rules. Terms: https://dogpolicies.com/terms/
Report a wrong rule
Tell your assistant "that rule is wrong" and it can file a correction with dogpolicies_report_correction, or use the form on any record page. A person re-reads the official source, usually within a week; the record's verification history shows the result.
For developers
import { createRuntime, createServer, connectInProcess } from "dogpolicies-mcp";
const ctx = createRuntime({ overrides: { offline: true } });
const { client, close } = await connectInProcess(ctx);
const r = await client.callTool({
name: "dogpolicies_plan_trip",
arguments: { place: "Monterey", dog_weight_lb: 70, nights: 3 },
});
console.log(r.content[0].text);
await close();createServer(ctx) returns an McpServer from the official @modelcontextprotocol/server SDK for any transport. The reusable, dog-free core (dogpolicies-mcp/core) and how to build another server on it: docs/architecture.md. Versioning and deprecation: docs/versioning.md. Contributing: CONTRIBUTING.md.
Tests: npm test runs unit, contract, security, performance, surface, eval (33 real questions scored for tool selection and answer facts) and fuzz tests; npm run test:e2e packs the tarball and runs it over stdio. CI runs on Linux, macOS and Windows with Node 20, 22 and 24.
Available Tools
13 toolsdogpolicies_browse_answersBrowse answered questionsARead-onlyIdempotentInspect
Ready-made lists that answer common questions (list the state parks, national parks, beaches or hotels that allow dogs), such as "Which California national parks allow dogs?" or "Where can dogs go off leash on California beaches?".
Without a slug, lists every question with its slug and result count. With a slug, returns that question's places.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | No | Question slug from the list, e.g. "off-leash-dog-beaches-california" | |
| limit | No | Maximum results to return | |
| offset | No | Results to skip, for pagination | |
| response_format | No | 'markdown' for readable text, 'json' for structured data | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| as_of | Yes | Date the data was built (YYYY-MM-DD) |
| total | Yes | |
| places | No | |
| license | Yes | |
| questions | No | |
| attribution_url | Yes | |
| attribution_text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, closed-world, and non-destructive behavior. The description adds valuable mode-dependent return behavior: listing all questions with slug and result count, or returning places for a given slug. It does not detail pagination, but the schema covers that.
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 appropriately sized and front-loads the core purpose with examples. The second paragraph efficiently explains the two modes. It is slightly verbose with examples but every sentence contributes useful context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and annotations cover safety, the description is complete enough for an agent to call the tool correctly. It explains both modes, including how to obtain slugs from the list mode, which is essential for chaining.
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 defines each parameter. The description adds meaning beyond the schema by explaining that omitting slug lists all questions with their slugs and counts, while providing a slug returns that question's places. This clarifies the optional slug's behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it provides ready-made lists answering common dog-access questions and gives concrete examples. It distinguishes the tool's nature as curated Q&A lists rather than free-text search, though it does not name a specific sibling alternative.
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 explains the two usage modes: without a slug to list all questions, and with a slug to fetch places for a specific question. It gives clear context for when each mode applies, though it does not explicitly exclude or compare against sibling tools like search_places.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dogpolicies_changes_nearWhat changed near a townARead-onlyIdempotentInspect
Verification events (confirmed, changed, source gone, blocked, disputed) since a date for places within a radius of a town, county or point, newest first. The way to answer "has anything changed around Tahoe since my last trip?" or to re-check a saved itinerary. Use dogpolicies_changes_since for everything everywhere.
Example: "What changed near Monterey since September?" -> place="Monterey", since="2026-09-01"
| Name | Required | Description | Default |
|---|---|---|---|
| near | No | A point instead of a town; give one of place or near | |
| limit | No | Maximum results to return | |
| place | No | A city, county or area in California or Nevada, e.g. "Monterey", "South Lake Tahoe", "Washoe County, NV", "Las Vegas", "East Bay" or "Lake Tahoe" | |
| since | Yes | Date, YYYY-MM-DD | |
| offset | No | Results to skip, for pagination | |
| outcome | No | Only events with this outcome | |
| radius_miles | No | Search radius in miles around the town or point (an area is its own boundary; the radius is ignored) | |
| response_format | No | 'markdown' for readable text, 'json' for structured data | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| as_of | Yes | Date the data was built (YYYY-MM-DD) |
| count | Yes | |
| label | Yes | |
| total | Yes | |
| events | Yes | |
| license | Yes | |
| has_more | Yes | |
| radius_miles | Yes | |
| attribution_url | Yes | |
| attribution_text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, non-destructive) and closed-world scope, so the description is free to add result-shape behavior: it discloses the five possible outcome values and that results come back newest first. It does not mention pagination limits behavior or the ignore-radius-for-areas rule (that lives in the schema), so it is strong but not exhaustive.
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 resource and scope in the first sentence, then usage, then an example — a sensible order with almost no filler. The example line partially repeats the routing sentence's intent, but it earns its place by demonstrating parameter granularity.
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 geo-filtered read tool with a nested point object and an existing output schema, the description covers what it must: what is returned, ordering, the place-vs-point choice, and the sibling routing. Return-value details are correctly left to the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and every parameter carries a description, including the place/near mutual exclusion and the radius caveat, so the schema does the heavy lifting. The worked example (place="Monterey", since="2026-09-01") usefully shows the date format and place granularity in action, but adds nothing the schema has not already documented.
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 (verification events with their outcome types), a specific scope (within a radius of a town, county or point), ordering (newest first), and explicitly names the sibling it is not ('Use dogpolicies_changes_since for everything everywhere'). An agent can distinguish it from the cluster of similarly-named siblings 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?
Gives two concrete use cases ("has anything changed around Tahoe since my last trip?", re-checking a saved itinerary) and an explicit routing rule to the alternative tool, dogpolicies_changes_since, for unfiltered use. When-to-use and when-not are both present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dogpolicies_changes_sinceChanges since a dateARead-onlyIdempotentInspect
Everything that changed in the whole data set since a date: verification events and rule changes everywhere, newest first, so an agent can poll cheaply instead of re-reading every record. Each entry names the place, what happened (confirmed, changed, source_gone, blocked, disputed), who checked, and links the record.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum results to return | |
| since | Yes | Date, YYYY-MM-DD | |
| offset | No | Results to skip, for pagination | |
| outcome | No | Only events with this outcome | |
| response_format | No | 'markdown' for readable text, 'json' for structured data | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| as_of | Yes | Date the data was built (YYYY-MM-DD) |
| count | Yes | |
| total | Yes | |
| events | Yes | |
| license | Yes | |
| has_more | Yes | |
| rule_changes | Yes | |
| attribution_url | Yes | |
| attribution_text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare this is a read-only, idempotent, non-destructive operation. The description adds useful behavior beyond that: results are newest first, entries include place, outcome, who checked, and record links, and the outcome set is enumerated. It does not cover auth or rate limits, but it provides solid behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that quickly states the purpose before adding detail. It is dense but every clause is relevant, though the outcome enumeration duplicates schema information slightly.
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 safety and an output schema present, the description provides enough context to call the tool correctly: what changes are included, ordering, entry contents, and the polling use case. It need not explain return values further because the output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents parameters like since, limit, offset, outcome, and response_format. The description reinforces the date scope and outcome categories but does not add syntax or format details beyond what the schema provides; baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and scope: changes in the whole data set since a date, covering verification events and rule changes. The phrase 'whole data set' and 'everywhere' implicitly distinguishes it from the location-scoped sibling dogpolicies_changes_near, so an agent can tell which change-feed tool to use.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear usage context: an agent can poll this cheaply instead of re-reading every record. It does not explicitly name alternatives or exclusions, but the contrast with 'whole data set' versus a near-scoped feed is clear enough for an agent to infer when to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dogpolicies_compare_placesCompare places side by sideARead-onlyIdempotentInspect
Which one is better for a dog? Compare two to six places on the facts that decide a dog trip: dogs allowed, leash rule, where dogs may go, pet fee, weight limit, pets per room, restrictions, plus confidence, freshness and who confirmed each record. One row per fact, one column per place, every place with its citation.
Use after a search returned candidates and the user asks "which one?". Ids come from any search result. Example: ids=["carmel-beach","asilomar-state-beach"].
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | Two to six place ids from search results | |
| response_format | No | 'markdown' for readable text, 'json' for structured data | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| rows | Yes | |
| as_of | Yes | Date the data was built (YYYY-MM-DD) |
| places | Yes | |
| license | Yes | |
| attribution_url | Yes | |
| attribution_text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds genuinely new behavioral context: the output layout (one row per fact, one column per place, citations for every place) and the inclusion of confidence, freshness and confirmer provenance — information not visible from the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the user's question and the comparison scope, then usage and example in a compact second paragraph. Slightly redundant in repeating the 2–6 range already enforced by the schema, but otherwise every sentence carries content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and annotations covering safety, the description correctly focuses on comparison semantics and provenance rather than return-value mechanics. What an agent needs to select and invoke it is essentially all present; only explicit sibling exclusions are 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%, so baseline is 3. The description goes beyond it by restating the 2–6 cardinality constraint in prose and supplying a concrete ids example (["carmel-beach","asilomar-state-beach"]), which clarifies id format in a way the schema's plain string type does not.
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 question-form verb framing ('Compare two to six places') and enumerates exactly which attributes are compared (dogs allowed, leash rule, pet fee, weight limit, etc.). This clearly distinguishes it from dogpolicies_get_place (single place) and dogpolicies_search_places (candidate discovery).
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 states the trigger condition: 'Use after a search returned candidates and the user asks "which one?"' and notes that ids come from any search result, with a concrete example. No explicit when-not clause (e.g., 'do not use for a single place, use get_place'), so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dogpolicies_find_hotelsFind hotels for a dogARead-onlyIdempotentInspect
Find hotels and motels in California and Nevada that will take a specific dog, with the estimated pet fee for the stay.
Each hotel is sorted into "match" (the policy says yes on everything asked), "possible" (nothing rules it out, but something needs a call: a hotel that decides case by case, an unstated weight limit, a limit the hotel lifts with its approval, an "up to" fee) or excluded (left out). Matches come first, cheapest pet fee first. The fee arithmetic is spelled out for every result.
Examples:
"Will a Monterey hotel take my 70 lb Lab for under $50?" -> county="Monterey", dog_weight_lb=70, max_total_fee=50
"Two dogs, three nights near Palm Springs" -> near={lat:33.83, lon:-116.55}, dogs=2, nights=3
"Is the Motel 6 in Fresno dog friendly?" -> query="Motel 6 Fresno"
"A Las Vegas hotel for my 60 lb dog" -> county="Clark", state="NV", dog_weight_lb=60
| Name | Required | Description | Default |
|---|---|---|---|
| area | No | Area id, the name a traveler gives the trip: san-francisco, east-bay, peninsula, south-bay, north-bay, lake-tahoe, big-sur, mendocino-coast, yosemite, death-valley | |
| dogs | No | Number of dogs | |
| near | No | Limit to places near a point; results are sorted by distance | |
| brand | No | Only this hotel brand | |
| limit | No | Maximum results to return | |
| query | No | Words in the hotel name, city or brand | |
| state | No | "CA" or "NV". Also tells apart counties with the same name, such as Humboldt. | |
| county | No | County name without "County", in California or Nevada, e.g. "Monterey" or "Washoe" | |
| nights | No | Nights of the stay | |
| offset | No | Results to skip, for pagination | |
| region | No | Region id, e.g. central-coast, san-diego or reno-tahoe-nevada | |
| dog_weight_lb | No | The dog's weight in pounds | |
| max_total_fee | No | Most the guest will pay in pet fees for the whole stay, USD | |
| response_format | No | 'markdown' for readable text, 'json' for structured data | markdown |
| include_possible | No | Include hotels that need a call to confirm |
Output Schema
| Name | Required | Description |
|---|---|---|
| as_of | Yes | Date the data was built (YYYY-MM-DD) |
| count | Yes | |
| total | Yes | |
| counts | Yes | |
| hotels | Yes | |
| offset | Yes | |
| license | Yes | |
| has_more | Yes | |
| attribution_url | Yes | |
| attribution_text | 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, closed-world), so the description is free to spend its words on non-obvious result behavior — and it does: the match/possible/excluded bucketing rules, what elevates a hotel to 'possible', and the sort order (matches first, cheapest pet fee first). That is output behavior an agent could not infer from the schema and is exactly the kind of context that changes how results should be reported to a user.
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 one-sentence purpose, then the ranking/eligibility semantics, then four examples that each exercise a different parameter path with no redundancy. Every sentence earns its place and no example repeats another's parameter combination.
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 15-parameter tool with a nested object, four enums and an output schema, the description covers scope, eligibility semantics, ordering and query-to-parameter mapping well. The remaining gap is modest: no mention of how the sibling lookup/planning tools relate, and no note that the underlying policy data can change (relevant given the changes_since/changes_near siblings).
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 the per-parameter burden. The description still adds genuine value by demonstrating how free-form traveler questions decompose into parameter combinations (county vs. near vs. query vs. county+state, plus dogs/nights feeding the fee estimate), which the schema alone does not teach.
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 hotels/motels) plus the two filters that matter most: pet-friendly for a specific dog and pet fee for the stay, scoped to California and Nevada. This is clearly distinct from siblings like search_places, get_place or plan_trip, which operate on places/policies rather than answering a lodging question.
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 four worked examples give concrete when-to-use signals across the main query shapes (county + weight + budget, point proximity + party size, name lookup, county + state). What's missing is an explicit steer on when to prefer a sibling such as dogpolicies_search_places, dogpolicies_plan_trip or dogpolicies_compare_places instead, so the boundary with siblings is left implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dogpolicies_get_brand_policyGet hotel brand pet policyARead-onlyIdempotentInspect
A hotel chain's published pet policy: pets per room, weight limit, fee, rules, listed exceptions and how many California and Nevada properties carry it.
Brands covered: Best Western (best-western), Extended Stay America (extended-stay-america), Kimpton Hotels (kimpton), La Quinta by Wyndham (la-quinta), Motel 6 (motel-6), Red Roof Inn (red-roof). Example: brand="red-roof" or brand="Kimpton".
| Name | Required | Description | Default |
|---|---|---|---|
| brand | Yes | Brand id or name | |
| response_format | No | 'markdown' for readable text, 'json' for structured data | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| url | Yes | |
| name | Yes | |
| as_of | Yes | Date the data was built (YYYY-MM-DD) |
| facts | Yes | |
| answer | Yes | |
| license | Yes | |
| not_stated | Yes | Expected facts the sources do not state; never guess these |
| source_urls | Yes | |
| verified_at | Yes | |
| attribution_url | Yes | |
| attribution_text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuine context the annotations don't: what content the policy contains (limits, fees, exceptions) and the added dimension of California/Nevada property counts. It omits what happens for an unrecognized brand, 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?
Two compact blocks: the return payload first, then the accepted inputs. Every element earns its place, and the enumerated brand list directly reduces lookup failures rather than padding the text.
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 explain return structure, and it still summarizes payload contents well. The only real gap is behavior for a brand outside the six listed chains — an agent can't tell whether that errors or fuzzy-matches.
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 earns more by listing the exact accepted brand values and showing that both slug ('red-roof') and display-name ('Kimpton') forms work — detail the schema's 'Brand id or name' does not resolve on its own.
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 names the resource precisely (a hotel chain's published pet policy) and enumerates the fields returned: pets per room, weight limit, fee, rules, exceptions, and CA/NV property counts. The brand-level scope is clear enough to separate it from property-level siblings like dogpolicies_get_place, though no sibling is named explicitly.
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 brand-level framing and the enumerated brand list, so an agent can infer 'use this for chain-wide policy'. However, there is no explicit when-to-use/when-not statement and no routing to alternatives such as dogpolicies_get_place for a specific property or dogpolicies_get_rule for a regulation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dogpolicies_get_placeGet place detailsARead-onlyIdempotentInspect
The full record for one place you already know by id: every dog rule with its display text, the rules list, and each source with its URL, publisher, capture date and quote. Full rules and sources for one place: every fact with its display text, the rules list, and each source with its URL, publisher, capture date and quote.
Use after dogpolicies_search_places or dogpolicies_find_hotels, which return ids. Example: id="carmel-beach".
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Place id, e.g. "fort-funston" | |
| response_format | No | 'markdown' for readable text, 'json' for structured data | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| uid | Yes | Stable id that survives a rename |
| url | Yes | |
| name | Yes | |
| type | Yes | |
| as_of | Yes | Date the data was built (YYYY-MM-DD) |
| facts | Yes | |
| rules | Yes | |
| answer | Yes | |
| status | Yes | |
| license | Yes | |
| sources | Yes | |
| citation | Yes | Copy-ready citation: answer, source, date checked, record URL, license |
| freshness | Yes | fresh: inside its review interval; due: past it; stale: past twice it, confirm before you go; unreadable: the last check could not read the source |
| confidence | Yes | stated: the place's own source says it; inferred_from_agency: an agency-wide rule; inherited_brand: the chain's policy, not confirmed by this hotel |
| not_stated | Yes | Expected facts the sources do not state; never guess these |
| review_due | Yes | |
| source_urls | Yes | |
| verified_at | Yes | |
| confirmed_by | Yes | |
| rule_records | Yes | |
| record_license | Yes | |
| attribution_url | Yes | |
| attribution_text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds useful content-shape context (rules carry display text; sources carry URL, publisher, capture date, quote), which tells the agent this is the heavy-detail endpoint versus a search hit; it does not mention response size or cost of a full fetch.
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 front-loaded first sentence is good, but the second sentence re-says the same thing ('Full rules and sources for one place: every fact with its display text, the rules list, and each source with its URL, publisher, capture date and quote'), a near-duplicate that consumes space without new information. The usage hint and example are buried after the redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description need not explain return values, and annotations cover the safety profile, so the remaining burden is provenance and precondition — both addressed via the sibling-tool routing. A note on behavior for unknown or ambiguous ids is the only meaningful gap.
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 both parameters are documented, including the response_format enum, so the baseline is 3. The only added value is an example id ("carmel-beach"), which duplicates the schema's own example ("fort-funston") and adds nothing about id format or fallback behavior when an id is unknown.
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 full record for one place') and enumerates what that record contains: dog rules, rules list, and sources with URL, publisher, capture date and quote. It also distinguishes itself from siblings by noting the id comes from dogpolicies_search_places or dogpolicies_find_hotels, though the second sentence restates the first almost verbatim rather than adding scope.
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?
'Use after dogpolicies_search_places or dogpolicies_find_hotels, which return ids' gives a clear precondition and names the producing tools. It stops short of exclusions — nothing says when to prefer dogpolicies_get_rule, dogpolicies_compare_places, or a search snippet instead of pulling the full record.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dogpolicies_get_ruleGet one rule by idARead-onlyIdempotentInspect
One rule (a fee, a leash rule, a weight limit) by its stable id, with its value, the source it cites, the quote, its confidence, the date it was verified and its freshness, plus the place's citation line. Rule ids look like "rul__" and appear in every place result as rule_records.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Rule id, e.g. "rul_t6cqwy0x4ce2dmpq_fee" | |
| response_format | No | 'markdown' for readable text, 'json' for structured data | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| rule | Yes | |
| as_of | Yes | Date the data was built (YYYY-MM-DD) |
| place | Yes | |
| license | Yes | |
| attribution_url | Yes | |
| attribution_text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered. The description adds useful content about what the record carries (source, quote, confidence, verified date, freshness, citation line), but says nothing about behavior on a missing/unknown id or any lookup limits. With annotations carrying the safety burden, this is adequate but not rich.
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, and the id-format note is a legitimate second sentence rather than filler. The middle list of returned fields is somewhat dense and partly duplicates the output schema, but each element is informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-by-id tool with a full output schema and complete parameter coverage, the description supplies everything an agent needs: what it returns, what the id looks like, and where ids come from. The only gap is behavior on an unknown id, which is a minor omission given the output schema handles the return shape.
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 both parameters are already documented, and the schema itself supplies a concrete id example. The description adds marginal value by explaining the id pattern 'rul_<place uid>_<kind>' and its origin in place results, but gives no guidance on response_format beyond what the enum already conveys.
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 (fetch one rule by stable id) and immediately disambiguates what a 'rule' is with concrete examples (fee, leash rule, weight limit). This clearly separates it from sibling tools like dogpolicies_get_place, which returns a whole place rather than a single rule.
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 note that rule ids 'appear in every place result as rule_records' tells the agent where to get an id, which implies the get_place -> get_rule workflow. However, it never explicitly says when to use this instead of get_place or get_brand_policy, and gives no exclusions or error conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dogpolicies_nearWhat is near a townARead-onlyIdempotentInspect
Anything for dogs around a town, county or point: everything dog-related nearby, grouped by kind: beaches, parks, trails, hotels, campgrounds, cabins, places to eat and rest areas, each sorted by distance, with the dog rule and citation for each. The one call to make when a user names a place and asks "what can I do with my dog there?".
Takes a town or county name (no coordinates needed) or a point. Use dogpolicies_find_hotels when the question is about a specific dog's weight or budget, dogpolicies_plan_trip for a whole stay, dogpolicies_search_places for one kind with filters.
Examples:
"What can my dog do in Carmel?" -> place="Carmel"
"Dog beaches and parks around South Lake Tahoe" -> place="South Lake Tahoe", types=["beach","park"]
"Anything dog-friendly within 5 miles of here" -> near={lat:36.6, lon:-121.9}, radius_miles=5
| Name | Required | Description | Default |
|---|---|---|---|
| near | No | A point instead of a town; give one of place or near | |
| place | No | A city, county or area in California or Nevada, e.g. "Monterey", "South Lake Tahoe", "Washoe County, NV", "Las Vegas", "East Bay" or "Lake Tahoe" | |
| types | No | Kinds to include; all by default | |
| per_type | No | Nearest results to show per kind | |
| radius_miles | No | Search radius in miles around the town or point (an area is its own boundary; the radius is ignored) | |
| response_format | No | 'markdown' for readable text, 'json' for structured data | markdown |
| dogs_allowed_only | No | Leave out places where dogs are not allowed |
Output Schema
| Name | Required | Description |
|---|---|---|
| as_of | Yes | Date the data was built (YYYY-MM-DD) |
| label | Yes | |
| total | Yes | |
| center | Yes | |
| groups | Yes | |
| license | Yes | |
| radius_miles | Yes | |
| attribution_url | Yes | |
| attribution_text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
It adds significant behavioral context not in the schema, specifically that the results include the dog rule and citation for each entry. It also details that the output is grouped by kind and sorted by distance, which is valuable runtime information.
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?
While effective, the description is quite verbose due to the large amount of routing logic and examples it needs to provide. It is appropriately sized for the complexity but could be slightly tightened.
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?
The definition is exceptionally complete. It covers both primary input methods (`place` and `near`), expected output behavior (grouped, sorted, cited), and clear boundaries for its utility compared to other sibling tools.
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?
With 100% schema coverage, the baseline is high. The description compensates by clearly defining the usage of the `place` parameter (city, county, area) and explaining how the `types` parameter works (kinds to include; all by default).
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 is highly specific, defining the scope ('everything dog-related nearby') and the output structure (grouped by kind, sorted by distance). It clearly distinguishes this general search from specialized sibling 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?
It provides explicit branching logic for tool selection. It instructs the agent to use this tool for general inquiries while pointing to `dogpolicies_find_hotels`, `dogpolicies_plan_trip`, and `dogpolicies_search_places` for specific use cases (budget, whole trip, or one kind of place).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dogpolicies_plan_tripPlan a trip with a dogARead-onlyIdempotentInspect
Plan a stay in a California or Nevada town with a dog, in one call: where to stay (hotels, campgrounds and cabins that will take this dog, with the pet fee for the whole stay worked out), what to do (beaches, parks and trails that allow dogs, nearest first) and where to eat (patios that take dogs), every item with its citation.
Give the town or county and the dog: weight, how many dogs, nights, and the most the user will pay in pet fees. Use dogpolicies_route_stops for the drive there and dogpolicies_near for a quick list without the stay check.
Examples:
"Three nights in Monterey with our 70 lb Lab, pet fees under $100" -> place="Monterey", dog_weight_lb=70, nights=3, max_total_fee=100
"A weekend in South Lake Tahoe with two small dogs" -> place="South Lake Tahoe", dogs=2, nights=2
"Camping near Mammoth Lakes with a dog" -> place="Mono County", stay_types=["campground","cabins"]
| Name | Required | Description | Default |
|---|---|---|---|
| dogs | No | Number of dogs | |
| near | No | A point instead of a town; give one of place or near | |
| place | No | A city, county or area in California or Nevada, e.g. "Monterey", "South Lake Tahoe", "Washoe County, NV", "Las Vegas", "East Bay" or "Lake Tahoe" | |
| nights | No | Nights of the stay | |
| stay_types | No | Kinds of stay to consider | |
| per_section | No | Results per section | |
| radius_miles | No | Search radius in miles around the town or point (an area is its own boundary; the radius is ignored) | |
| dog_weight_lb | No | The dog's weight in pounds | |
| max_total_fee | No | Most the guest will pay in pet fees for the whole stay, USD | |
| response_format | No | 'markdown' for readable text, 'json' for structured data | markdown |
| include_possible | No | Include stays that need a call to confirm |
Output Schema
| Name | Required | Description |
|---|---|---|
| as_of | Yes | Date the data was built (YYYY-MM-DD) |
| asked | Yes | |
| label | Yes | |
| stays | Yes | |
| license | Yes | |
| outings | Yes | |
| stay_counts | Yes | |
| radius_miles | Yes | |
| attribution_url | Yes | |
| attribution_text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so safety needs no restating. The description adds real behavioral context beyond that: results are aggregated in one call, pet fees are computed for the entire stay rather than per night, activities are ordered nearest first, and every item carries a citation. It does not discuss truncation or how partial matches are signalled, keeping it just short of 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?
Output scope is front-loaded in the first sentence, then inputs, then sibling alternatives, then three compact examples. Every sentence carries information; the labeled example list is easy to scan and none of the examples 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?
Eleven parameters, a nested `near` object and an output schema are all accounted for: the description tells the agent what the response contains by section, which inputs are needed, and when a sibling is a better fit. With annotations covering safety and the output schema covering return shape, nothing an agent needs in order to invoke 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 description coverage is 100%, so the baseline is 3, but the description goes beyond it by demonstrating how conversational phrasing maps onto argument values ('a weekend' to nights=2, 'two small dogs' to dogs=2, an area name substituted for a town plus stay_types). That mapping guidance is genuine value the schema cannot supply, though most individual parameters are still 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 ('Plan a stay ... with a dog, in one call') and enumerates the three sections produced (stay with pet fee for the whole stay, dog-friendly things to do nearest-first, dog-friendly patios), each with citations. An agent can distinguish this from dogpolicies_near or dogpolicies_find_hotels 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?
Explicit routing: use dogpolicies_route_stops for the drive and dogpolicies_near for a quick list without the stay check. It also states the required inputs (town or county plus dog weight, dog count, nights, fee cap) and shows three worked request-to-argument mappings, including the non-obvious one mapping 'camping near Mammoth Lakes' to place="Mono County".
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dogpolicies_report_correctionReport a correctionAInspect
File a correction when a user says a rule on a record is wrong or has changed (a fee went up, a beach closed to dogs, a hotel now takes two pets). The report goes to a person who re-reads the official source; nothing is published automatically and the record does not change until it is verified. Give the place id, what is wrong in a sentence or two, and the official page the user saw, if any. Never send personal details beyond an optional contact the user offers.
| Name | Required | Description | Default |
|---|---|---|---|
| contact | No | How to reach the reporter, only if they offer it | |
| message | Yes | What is wrong, in the user's words | |
| place_id | Yes | Place id from a search result | |
| source_url | No | The official page that shows the current rule, if the user has it |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | |
| status | Yes | |
| place_id | Yes | |
| report_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, it discloses that the report goes to a person who re-reads the official source, that nothing is published automatically, and that the record does not change until verified. It also includes a privacy constraint, and none of this contradicts the mutation/non-destructive annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the trigger and behavior, then parameter guidance, then privacy. Four sentences, each carrying useful information with no 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 need not be explained, and the annotations cover safety hints. The description supplies the trigger, human-review behavior, parameter guidance, and privacy constraint needed to invoke the tool 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?
Schema coverage is 100%, so the baseline is 3, but the description adds meaningful usage guidance for all four parameters: place id, a sentence or two for the message, the official page if available, and an optional contact. It mostly reinforces the schema rather than adding deep parameter-specific 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, 'File a correction,' and defines the triggering scenario with concrete examples such as a fee change or beach closure. No sibling tool appears to be a correction-reporting tool, so the purpose is 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?
Gives a clear when-to-use condition: when a user says a rule on a record is wrong or has changed. It does not explicitly name when not to use it or list alternatives among the sibling lookup/search tools, but the context is strong enough for an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dogpolicies_route_stopsDog stops along a highwayARead-onlyIdempotentInspect
Dog-friendly stops along a California or Nevada highway, in driving order: rest areas (Caltrans rest areas with pet areas; Nevada rest areas, where leashed dogs are allowed), travel stops with dog parks, hotels, cabin resorts and campgrounds or RV parks near the road (all checked against the dog's weight and the pet-fee budget) and parks or beaches that allow dogs.
Each stop has its mile on the route and its distance off the road. Each route covers one state and stops at the state line. California miles follow the Caltrans odometer: north on I-5 (from the Mexican border), US-101 (from Los Angeles), Highway 1 (from Dana Point) and I-15 (i-15, San Diego to Primm); east on I-80 (i-80, San Francisco to the Nevada line) and US-50 (us-50, West Sacramento to Stateline). Nevada routes count Nevada mileposts from the California line, matching the exit numbers: north on I-15 (i-15-nevada), east on I-80 (i-80-nevada) and US-50 (us-50-nevada, Stateline to Utah); north on US-95 (us-95-nevada, California line to Oregon) and US-93 (us-93-nevada, Hoover Dam to Idaho), whose miles include the stretches they share with other highways. Where Highway 1 runs on US-101, stops on that stretch say so in on_road. Give a starting point with from_mile or near, and a direction.
Routes covered: I-5 (i-5, 796 miles), US-101 (us-101, 809 miles), Highway 1 (highway-1, 736 miles), I-15 (i-15, 294 miles), I-80 (i-80, 204 miles), US-50 (us-50, 109 miles), I-15 (i-15-nevada, 124 miles), I-80 (i-80-nevada, 410 miles), US-50 (us-50-nevada, 409 miles), US-95 (us-95-nevada, 664 miles), US-93 (us-93-nevada, 526 miles).
Examples:
"Driving north on I-5 from Los Angeles with a 70 lb dog, where can we stop?" -> near={lat:34.05, lon:-118.24}, direction="north", dog_weight_lb=70
"Pet areas on the Grapevine" -> from_mile=170, to_mile=222, kinds=["rest_area","park"]
"Heading south on 101 from San Francisco to Santa Barbara, where can the dog run?" -> route="us-101", near={lat:37.77, lon:-122.42}, to_mile=100, direction="south"
"Dog-friendly hotel near Redding under $40 a night" -> near={lat:40.59, lon:-122.39}, kinds=["lodging"], max_total_fee=40
"Driving I-80 east from Reno with a dog, where can we stop?" -> route="i-80-nevada", near={lat:39.53, lon:-119.81}, direction="east"
| Name | Required | Description | Default |
|---|---|---|---|
| dogs | No | Number of dogs | |
| near | No | Start from the route mile nearest this point | |
| kinds | No | Kinds of stops to include; all by default | |
| limit | No | Maximum results to return | |
| route | No | Route id | i-5 |
| nights | No | Nights of the stay | |
| offset | No | Results to skip, for pagination | |
| to_mile | No | Stop at this route mile | |
| direction | No | Direction of travel. Route miles increase going north, or east on I-80 and US-50; north and east both mean increasing miles | north |
| from_mile | No | Start at this route mile | |
| dog_weight_lb | No | The dog's weight in pounds | |
| max_total_fee | No | Most the guest will pay in pet fees for the whole stay, USD | |
| response_format | No | 'markdown' for readable text, 'json' for structured data | markdown |
| dog_friendly_only | No | Leave out stops where dogs are not allowed |
Output Schema
| Name | Required | Description |
|---|---|---|
| as_of | Yes | Date the data was built (YYYY-MM-DD) |
| count | Yes | |
| guide | Yes | |
| route | Yes | |
| stops | Yes | |
| total | Yes | |
| offset | Yes | |
| license | Yes | |
| has_more | Yes | |
| attribution_url | Yes | |
| attribution_text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/closed-world, so safety is covered. The description adds genuine behavioral context beyond that: results are weight- and pet-fee-filtered, each stop carries mile and off-road distance, routes stop at state lines, and US-101/Highway-1 overlaps are flagged via on_road.
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 purpose is front-loaded in the first sentence, which is strong. However, the second and third paragraphs are dense walls of route-mile arcana (odometer origins, shared-highway stretches, per-route mileage) that largely restate the route enum and slow an agent down before it reaches the usable examples.
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 14-parameter tool with an output schema, the description supplies the one thing the schema doesn't enforce — that a starting point and direction are needed — and explains mileage conventions. Return values need no explanation given the output schema; pagination and multi-dog semantics are left to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description meaningfully enriches several parameters: direction is explained as increasing-miles north/east, route ids are tied to specific highways and lengths, max_total_fee is scoped to the whole stay, and dog_weight_lb drives lodging eligibility. It doesn't address offset/limit pagination or the dogs count.
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 — dog-friendly stops along a California or Nevada highway — and adds the ordering guarantee (driving order), the kinds of stops, and the filtering rules (dog weight, pet-fee budget). It also implicitly distinguishes itself from siblings like search_places or find_hotels by being route/mile-based rather than place-query-based.
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?
Provides five worked examples that map natural-language questions to invocations, plus the explicit rule 'Give a starting point with from_mile or near, and a direction.' It does not name the sibling alternatives (e.g. dogpolicies_near, dogpolicies_find_hotels) or state when to prefer them, so routing between tools is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dogpolicies_search_placesSearch placesARead-onlyIdempotentInspect
Search parks, beaches, trails, hotels, campgrounds and cabin resorts in California and Nevada by name, location and dog rules.
Returns one page of places with a one-line answer ("Yes, on a leash no longer than 6 feet."), status (yes, yes_restricted, no, varies), verification date and page URL. Use dogpolicies_get_place for full rules and sources, and dogpolicies_find_hotels to check a specific dog's weight and budget at hotels.
Examples:
"Off-leash beaches near San Diego" -> type="beach", off_leash=true, near={lat:32.72, lon:-117.16}
"Can I bring my dog to Point Lobos?" -> query="Point Lobos"
"State parks in Marin County that allow dogs" -> type="park", county="Marin", dogs_allowed=true
"Lake Tahoe beaches in Nevada that allow dogs" -> type="beach", state="NV", dogs_allowed=true
"Off-leash dog parks in Las Vegas" -> type="park", off_leash=true, county="Clark", state="NV"
"RV parks in Fresno County that take dogs" -> type="campground", county="Fresno", dogs_allowed=true
"Dog-friendly cabins in June Lake" -> type="cabins", query="June Lake", dogs_allowed=true
"Restaurants with a dog-friendly patio in Alameda" -> type="restaurant", query="Alameda"
| Name | Required | Description | Default |
|---|---|---|---|
| area | No | Area id, the name a traveler gives the trip: san-francisco, east-bay, peninsula, south-bay, north-bay, lake-tahoe, big-sur, mendocino-coast, yosemite, death-valley | |
| near | No | Limit to places near a point; results are sorted by distance | |
| type | No | Kind of place; campground covers campgrounds and RV parks (some also rent cabins), cabins covers cabin resorts with no campground, restaurant covers restaurants, cafes, bars, breweries and tasting rooms (dogs on the patio, by the owner's published policy) | |
| limit | No | Maximum results to return | |
| query | No | Words to match in the name, city, county or brand | |
| state | No | "CA" or "NV". Also tells apart counties with the same name, such as Humboldt. | |
| county | No | County name without "County", in California or Nevada, e.g. "Monterey" or "Washoe" | |
| offset | No | Results to skip, for pagination | |
| region | No | Region id, e.g. central-coast, san-diego or reno-tahoe-nevada | |
| off_leash | No | true: only places where the managing agency allows dogs off leash, at least at some times | |
| dogs_allowed | No | true: only places that allow dogs somewhere; false: only places that do not | |
| response_format | No | 'markdown' for readable text, 'json' for structured data | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| as_of | Yes | Date the data was built (YYYY-MM-DD) |
| count | Yes | |
| total | Yes | |
| offset | Yes | |
| places | Yes | |
| license | Yes | |
| has_more | Yes | |
| attribution_url | Yes | |
| attribution_text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is a safe, read-only, idempotent, closed-world search. The description adds useful behavioral context by stating that it returns one page of places with a one-line answer, status values, verification date, and page URL, plus a pointer elsewhere for fuller detail. It does not discuss rate limits or auth, but those are less relevant for a read-only search in this context.
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 purpose, return behavior, and sibling routing, followed by concrete examples for a complex 12-parameter search tool. The examples are numerous but each demonstrates a distinct query pattern, so they earn their 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?
Given the 12 optional parameters, rich schema, output schema, and sibling tools, the description covers what the tool does, how results look, where to go for deeper rules or hotel-specific checks, and how to translate common natural-language queries into parameters. Nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all 12 parameters thoroughly. The description still adds value by mapping natural-language queries to concrete parameter combinations such as type="beach", off_leash=true, near={lat,lon}, and by illustrating county/state/query usage.
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 and resource: search places (parks, beaches, trails, hotels, campgrounds, cabin resorts) in California and Nevada by name, location, and dog rules. It explicitly distinguishes itself from dogpolicies_get_place for full rules/sources and dogpolicies_find_hotels for hotel weight/budget checks.
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 provides direct routing guidance: use dogpolicies_get_place for full rules and sources, and dogpolicies_find_hotels to check a specific dog's weight and budget at hotels. The examples further clarify when to use this search tool for natural-language place queries.
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.
5 tool updates
v0.2.9- Changed
dogpolicies_changes_near2 fields changed- changed
Input schema / properties / place / descriptionPrevious value: -"A city or county in California or Nevada, e.g. \"Monterey\", \"South Lake Tahoe\", \"Washoe County, NV\" or \"Las Vegas\""New value: +"A city, county or area in California or Nevada, e.g. \"Monterey\", \"South Lake Tahoe\", \"Washoe County, NV\", \"Las Vegas\", \"East Bay\" or \"Lake Tahoe\"" - changed
Input schema / properties / radius_miles / descriptionPrevious value: -"Search radius in miles around the town or point"New value: +"Search radius in miles around the town or point (an area is its own boundary; the radius is ignored)"
- Changed
dogpolicies_find_hotels1 field changed- changed
Input schema / properties / area / descriptionPrevious value: -"Area id inside a region (a tourist area such as a valley, coast or metro), when the data has areas"New value: +"Area id, the name a traveler gives the trip: san-francisco, east-bay, peninsula, south-bay, north-bay, lake-tahoe, big-sur, mendocino-coast, yosemite, death-valley"
- Changed
dogpolicies_near2 fields changed- changed
Input schema / properties / place / descriptionPrevious value: -"A city or county in California or Nevada, e.g. \"Monterey\", \"South Lake Tahoe\", \"Washoe County, NV\" or \"Las Vegas\""New value: +"A city, county or area in California or Nevada, e.g. \"Monterey\", \"South Lake Tahoe\", \"Washoe County, NV\", \"Las Vegas\", \"East Bay\" or \"Lake Tahoe\"" - changed
Input schema / properties / radius_miles / descriptionPrevious value: -"Search radius in miles around the town or point"New value: +"Search radius in miles around the town or point (an area is its own boundary; the radius is ignored)"
- Changed
dogpolicies_plan_trip2 fields changed- changed
Input schema / properties / place / descriptionPrevious value: -"A city or county in California or Nevada, e.g. \"Monterey\", \"South Lake Tahoe\", \"Washoe County, NV\" or \"Las Vegas\""New value: +"A city, county or area in California or Nevada, e.g. \"Monterey\", \"South Lake Tahoe\", \"Washoe County, NV\", \"Las Vegas\", \"East Bay\" or \"Lake Tahoe\"" - changed
Input schema / properties / radius_miles / descriptionPrevious value: -"Search radius in miles around the town or point"New value: +"Search radius in miles around the town or point (an area is its own boundary; the radius is ignored)"
- Changed
dogpolicies_search_places1 field changed- changed
Input schema / properties / area / descriptionPrevious value: -"Area id inside a region (a tourist area such as a valley, coast or metro), when the data has areas"New value: +"Area id, the name a traveler gives the trip: san-francisco, east-bay, peninsula, south-bay, north-bay, lake-tahoe, big-sur, mendocino-coast, yosemite, death-valley"
13 tool updates
v0.2.0- First observed
dogpolicies_browse_answers - First observed
dogpolicies_changes_near - First observed
dogpolicies_changes_since - First observed
dogpolicies_compare_places - First observed
dogpolicies_find_hotels - First observed
dogpolicies_get_brand_policy - First observed
dogpolicies_get_place - First observed
dogpolicies_get_rule - First observed
dogpolicies_near - First observed
dogpolicies_plan_trip - First observed
dogpolicies_report_correction - First observed
dogpolicies_route_stops - First observed
dogpolicies_search_places
TDQS
Scored across 13 tools
Most tools have clearly distinct roles, and the descriptions explicitly cross-reference when to use one over another (e.g., search_places vs. near vs. plan_trip vs. find_hotels). However, several tools return overlapping place listings (search_places, near, browse_answers, find_hotels), so an agent must read descriptions carefully to avoid choosing a broader or narrower tool than intended.
Every tool uses the same dogpolicies_ prefix followed by a consistent snake_case verb_noun or noun_qualifier pattern (search_places, get_place, changes_near, report_correction). The convention is predictable throughout with no mixed casing or stylistic outliers.
At 13 tools, the set fits comfortably in the well-scoped 3–15 range. Each tool covers a distinct capability—discovery, detail lookup, planning, change tracking, comparison, correction reporting, and route stops—without obvious redundancy.
The surface covers the full lifecycle for a dog-policy domain: finding places, getting full records and individual rules, checking hotel and brand policies, planning trips, comparing candidates, monitoring changes, reporting corrections, and finding route stops. No obvious gaps or dead ends are apparent for the stated California/Nevada dog-travel purpose.
Maintenance
Related MCP Connectors
US backcountry permit and campground rules, dates and recorded openings. Read-only, no sign-in.
U.S. law library for AI: court decisions, statutes, court rules and citation checks. Read-only.
Staylist World is a hotel comparison service your AI assistant can call directly. The free MCP server (https://staylist.world/mcp, Streamable HTTP, no auth) covers 80,000+ hotels with ratings, review summaries, published policies and booking links. No API key, no sign-up. Tools: search_hotels by city, name or need; get_hotel for overviews, amenities and published policies; get_booking_link; list_destinations; and get_reviews. There is also a REST API and Markdown versions of hotel pages. Unknown facts are marked as unknown. New: get_reviews returns a hotel's 1–2 star guest reviews from the last 24 months with the count out of all reviews; or paste staylist.world/reviews?hotel=<name> into any assistant.
Give AI assistants access to real-time data. Search the web, compare flights, find hotels, and more.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI assistants to search for pet sitters, manage bookings, and handle pet profiles through the Rover pet services marketplace. It facilitates direct communication with sitters and service management using Playwright-based browser automation.137 npm2MIT
- FlicenseNot gradedqualityDmaintenanceEnables interaction with the Dog API through natural language, supporting operations like listing breeds, fetching images, and more.-
- FlicenseNot gradedqualityDmaintenanceProvides AI assistants read-only access to discover and compare 184,900+ beaches, lakes, and swimming spots worldwide with current planning signals.-
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to fetch dog breed data, including descriptions, attributes, and group information, via the Dog API through natural language queries.-