DogPolicies MCP Server
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.
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.
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
Claude Code
claude mcp add dogpolicies -- npx -y dogpolicies-mcpClaude Desktop
Settings → Developer → Edit Config, then add:
{
"mcpServers": {
"dogpolicies": {
"command": "npx",
"args": ["-y", "dogpolicies-mcp"]
}
}
}Cursor
Settings → MCP → Add new global MCP server (or .cursor/mcp.json in a project):
{
"mcpServers": {
"dogpolicies": {
"command": "npx",
"args": ["-y", "dogpolicies-mcp"]
}
}
}VS Code
.vscode/mcp.json in a workspace, or MCP: Add Server from the command palette:
{
"servers": {
"dogpolicies": {
"type": "stdio",
"command": "npx",
"args": ["-y", "dogpolicies-mcp"]
}
}
}Hosted (no install)
Once the site is live, the same tools are served over Streamable HTTP at https://dogpolicies.com/mcp/ for clients that connect by URL:
claude mcp add --transport http dogpolicies https://dogpolicies.com/mcp/Local HTTP
npx dogpolicies-mcp --http --port 3737 # http://127.0.0.1:3737/mcpRequires Node.js 20.19 or newer.
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} (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 or county in California or Nevada, e.g. "Monterey", "South Lake Tahoe", "Washoe County, NV" or "Las Vegas" | |
| 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 | |
| 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?
The annotations already declare this as a read-only, idempotent, non-destructive operation, so the safety profile is covered. The description adds useful behavioral context beyond annotations by naming the event outcomes, saying results are newest first, and explaining the radius/place scope, though it does not add much about pagination or response 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 core operation and scope, then gives usage context, the sibling alternative, and a compact example. Every sentence adds routing or invocation value without repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich input schema, output schema, and safety annotations, the description is complete enough for an agent to select and invoke the tool correctly. It covers purpose, scope, ordering, event types, usage context, and the key alternative, while relying on structured fields for detailed optional parameters and return values.
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 all eight parameters, including enums and nested point fields. The description adds a useful example mapping place and since, and reinforces the town/county/point radius concept, but it does not explain optional filters like outcome, limit, offset, or response_format beyond what the schema supplies.
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 resource and verb-like operation: verification events since a date within a radius of a town, county, or point, returned newest first. It explicitly distinguishes this from dogpolicies_changes_since, which covers everything everywhere, so an agent can route correctly without opening the schemas.
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 concrete usage conditions: answer questions like whether anything changed around Tahoe since a last trip, or re-check a saved itinerary. It also names the alternative tool dogpolicies_changes_since and states when to use that instead, which removes ambiguity.
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 inside a region (a tourist area such as a valley, coast or metro), when the data has areas | |
| 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's added value is in result behavior: the match/possible/excluded taxonomy, the rule that matches come first ordered by cheapest pet fee, and that fee arithmetic is shown per result. That is meaningful context an agent cannot get from annotations. It does not address pagination behavior or what an empty result set looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose sentence, then a compact taxonomy paragraph, then four tight examples — the ordering is sensible and nothing is filler. It runs slightly long overall, but each example demonstrates a genuinely different invocation pattern.
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, enums and an output schema, the description covers purpose, result classification, ordering and query-shaping examples well. It never states how the competing geography filters (state, region, area, county, near, query) interact or take precedence, which is the one thing an agent could get wrong on a tool this wide.
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 would be 3; the description earns above that by showing concrete parameter pairings that the schema never illustrates (near={lat,lon} for 'near Palm Springs', county+state for disambiguating, query for a named property). One minor inconsistency: the schema says 'near' results are sorted by distance while the description says matches sort by cheapest pet fee, leaving the precedence ambiguous.
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 plus scope: find hotels/motels in California and Nevada that accept a specific dog, including estimated pet fee. That is far more precise than the title alone. It stops short of naming any sibling (e.g. dogpolicies_search_places or dogpolicies_near) to explain how this differs from a generic place search.
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 effectively show how real user questions map onto parameter combinations (county+weight+fee cap, near+count, query, state+weight), which is strong practical guidance for invocation. What is missing is explicit routing: nothing says when to choose this over dogpolicies_near or dogpolicies_search_places, nor any exclusion conditions.
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 or county in California or Nevada, e.g. "Monterey", "South Lake Tahoe", "Washoe County, NV" or "Las Vegas" | |
| 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 | |
| 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?
Annotations already declare read-only, idempotent, non-destructive and closed-world, so the safety profile is free; the description adds real value by describing the result shape (grouped by kind, distance-sorted, dog rule plus citation per entry). The notable omission is the geographic limit — the tool only covers California and Nevada (lat/lon bounds and the place field say so), yet a user asking about Portland would get a confusing result and the description never warns of this.
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 identity sentence, then usage routing, then compact examples — each block does distinct work. The examples are the highest-value part for an agent composing arguments and are formatted for scanning rather than prose.
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, and all seven parameters are documented in the schema. The remaining gap is scope: neither the description nor the annotations disclose the CA/NV-only coverage, which is the most likely cause of a wrongly-invoked call given the open-ended "anything nearby" framing.
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 an extra point by demonstrating argument composition through worked examples (place alone, place plus types, near plus radius_miles). It does not clarify the interaction between dogs_allowed_only and the rest-area/stop kinds, or what per_type does to a radius-wide search beyond the schema text.
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?
"Anything for dogs around a town, county or point" gives a specific resource and scope, immediately followed by what is returned (beaches, parks, trails, lodging, food, rest areas grouped by kind and sorted by distance). The one-liner "the one call to make when a user names a place and asks 'what can I do with my dog there?'" pins down its role against the many siblings.
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 to alternatives with the selecting condition: find_hotels for weight/budget questions, plan_trip for a whole stay, search_places for a single kind with filters. It also pre-empts the common input ambiguity by stating no coordinates are needed for a town, and the three examples map realistic user phrasings to arguments.
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 or county in California or Nevada, e.g. "Monterey", "South Lake Tahoe", "Washoe County, NV" or "Las Vegas" | |
| 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 | |
| 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?
The annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds value beyond that: it says the pet fee is computed for the whole stay, that activities come 'nearest first', and that every item carries a citation. It does not explain what 'Include stays that need a call to confirm' means operationally, which keeps it out of the top score.
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 first sentence is front-loaded with the outcome and its three sections, followed by a short input paragraph and compact examples. The examples take meaningful space but each illustrates a distinct parameter mapping (fee cap, multi-dog, county + stay_types), so they earn their place. Minor redundancy between the input sentence and the examples' parameter lists.
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 11 parameters, a nested `near` object, an output schema, and full annotations, the description covers the primary decision inputs and outcome shape well. It omits the point-coordinate alternative (`near`), radius_miles, per_section and response_format, but the schema documents those fully and the output schema removes the need to explain return values.
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 3 is the baseline. The description goes further by grouping the required inputs semantically ('the town or county and the dog: weight, how many dogs, nights, and the most the user will pay in pet fees') and by showing in the examples that max_total_fee is per stay and that county names unlock camping results. It leaves radius_miles, per_section, response_format and the `near` object 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?
The description uses a specific verb and resource ('Plan a stay ... with a dog, in one call') and enumerates exactly the three sections it returns: lodging, activities and dog-friendly patios. It also scopes the region (California or Nevada) and distinguishes itself by naming the siblings it is not (dogpolicies_route_stops, dogpolicies_near), so an agent can tell the tools apart 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?
The description gives explicit routing: 'Use dogpolicies_route_stops for the drive there and dogpolicies_near for a quick list without the stay check', which names the alternatives and the condition that selects them. Three worked examples map realistic user phrasings ('camping near Mammoth Lakes' -> stay_types, 'two small dogs' -> dogs=2) to invocations, so the agent knows both when to use it and how to translate requests.
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 inside a region (a tourist area such as a valley, coast or metro), when the data has areas | |
| 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 declare readOnly/idempotent/non-destructive, so the bar is lower, but the description still adds real context: one page of results, the status vocabulary (yes, yes_restricted, no, varies), the one-line answer format, verification dates, and that near-results are distance-sorted. It does not spell out rate limits or how offset/limit interact across pages.
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, return shape, and sibling routing come first, which is the right order. The eight examples are individually useful but collectively heavy; a few overlap in shape (multiple type+county+dogs_allowed variants), so some trimming would preserve the value.
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 12-parameter, fully documented, output-schema-backed search tool, nothing an agent needs to call it correctly is missing: scope, filters, return shape, pagination parameter, and handoffs to the right siblings are all present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description earns above that by mapping natural-language requests onto concrete parameter combinations (type+off_leash+near, type+county+dogs_allowed, type+state+dogs_allowed), which is information the schema alone doesn't convey. It doesn't add format hints beyond what the schema enumerations already provide.
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 (search places), the covered categories, geography (California and Nevada), and the filterable axes (name, location, dog rules). It also explicitly distinguishes itself from dogpolicies_get_place and dogpolicies_find_hotels, so an agent can route without opening another 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 two sibling tools and the exact condition that selects each: get_place for full rules and sources, find_hotels for a specific dog's weight and budget. The worked examples further show when a name query versus structured filters is the right shape.
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.
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 separated purposes: get_place, search_places, find_hotels, compare_places, plan_trip, route_stops, changes_since/near, and report_correction each target a distinct task. The main overlap is between search_places, near, browse_answers, and plan_trip, all of which can return dog-friendly places, but the descriptions give useful guidance on when to use each.
All tools use a consistent snake_case pattern with the dogpolicies_ prefix, which makes the set predictable and readable. A few names deviate from a strict verb_noun pattern (near, route_stops, changes_since, changes_near), but they remain understandable and are not chaotic.
The server has 13 tools, which fits well within a reasonable range for a rich domain covering place lookup, search, comparison, trip planning, hotels, routes, change tracking, and corrections. Each tool appears to serve a distinct workflow rather than being redundant filler.
The surface covers the full read-only research lifecycle: discovery via search/browse/near, detail retrieval via get_place and get_rule, comparison, hotel-specific matching, trip planning, highway routing, change monitoring, and correction reporting. For a dog-policy reference limited to California and Nevada, there are no obvious dead ends.
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.
DogsLife turns a dog's age and your day into a plan, with six read-only tools. Potty schedule (8 to 52 weeks): how long the puppy can usually hold it, how often to go out, whether to plan night trips, and a sample day with clock times. Sleep needs (8 weeks to 24 months): typical sleep per 24 hours, how much the night covers, and how many hours of naps are left. Walks and exercise (8 weeks to 20 years): daily minutes for the dog's age, size and energy. Feeding schedule (8 weeks to 24 months): meals a day, meal times and when to switch to adult food. Adult weight (6 to 18 months): an estimate from age and current weight. Dog age: human years from the AVMA chart (up to 16 years). Same rules and sources (VCA, AKC, PetMD, Agria, Zoetis, Royal Kennel Club, PDSA, AVMA) as the calculators on dogslifeapp.com. Answers in 23 languages, with an interactive day-timeline card (MCP Apps). Read-only, no sign-in, nothing stored. Docs: https://dogslifeapp.com/connect.html
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.
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.1314 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 gradedqualityBmaintenanceEnables AI assistants to fetch dog breed data, including descriptions, attributes, and group information, via the Dog API through natural language queries.-