Skip to main content
Glama
xultrax-web

DogPolicies MCP Server

by xultrax-web

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

npm CI license: MIT code, CC BY 4.0 data MCP 2026-07-28 Node 20+

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-mcp

Claude 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/mcp

Requires 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 once

The 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 fresh

Tools

Tool

What it does

dogpolicies_search_places

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.

dogpolicies_near

Everything dog-related near a town, county or point, grouped by kind and sorted by distance. Takes a town name; no coordinates needed.

dogpolicies_get_place

Full record for one place: every fact, its source with URL, date and quote, rule ids, and what the source does not state.

dogpolicies_compare_places

Two to six places side by side: dogs allowed, leash, fee, weight limit, pets per room, freshness, who confirmed.

dogpolicies_plan_trip

A stay in a town with this dog: stays that fit (fee for the whole stay worked out), beaches, parks, trails and patios nearby.

dogpolicies_find_hotels

Hotels that take a specific dog: weight, number of dogs, nights, fee budget. Verdicts (match, possible, excluded), cheapest first, fee arithmetic shown.

dogpolicies_get_brand_policy

A chain's published pet policy, its listed exceptions and property counts.

dogpolicies_browse_answers

Ready-made answers to common questions ("Which California state parks allow dogs?").

dogpolicies_route_stops

Dog stops along a highway by mile and direction: rest areas with pet areas, hotels, campgrounds, parks, beaches.

dogpolicies_get_rule

One rule by its stable id, with source, quote, confidence, verified date and freshness.

dogpolicies_changes_since

Verification events and rule changes since a date, newest first.

dogpolicies_changes_near

The same, limited to a radius around a town or point.

dogpolicies_report_correction

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 debug level (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. --offline stops 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, unreadable or inherited_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 tools
dogpolicies_browse_answersBrowse answered questionsA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
slugNoQuestion slug from the list, e.g. "off-leash-dog-beaches-california"
limitNoMaximum results to return
offsetNoResults to skip, for pagination
response_formatNo'markdown' for readable text, 'json' for structured datamarkdown

Output Schema

NameRequiredDescription
as_ofYesDate the data was built (YYYY-MM-DD)
totalYes
placesNo
licenseYes
questionsNo
attribution_urlYes
attribution_textYes

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already 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.

Purpose4/5

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.

Usage Guidelines4/5

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 townA
Read-onlyIdempotent
Inspect

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"

NameRequiredDescriptionDefault
nearNoA point instead of a town; give one of place or near
limitNoMaximum results to return
placeNoA city or county in California or Nevada, e.g. "Monterey", "South Lake Tahoe", "Washoe County, NV" or "Las Vegas"
sinceYesDate, YYYY-MM-DD
offsetNoResults to skip, for pagination
outcomeNoOnly events with this outcome
radius_milesNoSearch radius in miles around the town or point
response_formatNo'markdown' for readable text, 'json' for structured datamarkdown

Output Schema

NameRequiredDescription
as_ofYesDate the data was built (YYYY-MM-DD)
countYes
labelYes
totalYes
eventsYes
licenseYes
has_moreYes
radius_milesYes
attribution_urlYes
attribution_textYes

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents 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.

Purpose5/5

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.

Usage Guidelines5/5

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 dateA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
limitNoMaximum results to return
sinceYesDate, YYYY-MM-DD
offsetNoResults to skip, for pagination
outcomeNoOnly events with this outcome
response_formatNo'markdown' for readable text, 'json' for structured datamarkdown

Output Schema

NameRequiredDescription
as_ofYesDate the data was built (YYYY-MM-DD)
countYes
totalYes
eventsYes
licenseYes
has_moreYes
rule_changesYes
attribution_urlYes
attribution_textYes

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents 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.

Purpose5/5

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.

Usage Guidelines4/5

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 sideA
Read-onlyIdempotent
Inspect

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"].

NameRequiredDescriptionDefault
idsYesTwo to six place ids from search results
response_formatNo'markdown' for readable text, 'json' for structured datamarkdown

Output Schema

NameRequiredDescription
rowsYes
as_ofYesDate the data was built (YYYY-MM-DD)
placesYes
licenseYes
attribution_urlYes
attribution_textYes

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 dogA
Read-onlyIdempotent
Inspect

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

NameRequiredDescriptionDefault
areaNoArea id inside a region (a tourist area such as a valley, coast or metro), when the data has areas
dogsNoNumber of dogs
nearNoLimit to places near a point; results are sorted by distance
brandNoOnly this hotel brand
limitNoMaximum results to return
queryNoWords in the hotel name, city or brand
stateNo"CA" or "NV". Also tells apart counties with the same name, such as Humboldt.
countyNoCounty name without "County", in California or Nevada, e.g. "Monterey" or "Washoe"
nightsNoNights of the stay
offsetNoResults to skip, for pagination
regionNoRegion id, e.g. central-coast, san-diego or reno-tahoe-nevada
dog_weight_lbNoThe dog's weight in pounds
max_total_feeNoMost the guest will pay in pet fees for the whole stay, USD
response_formatNo'markdown' for readable text, 'json' for structured datamarkdown
include_possibleNoInclude hotels that need a call to confirm

Output Schema

NameRequiredDescription
as_ofYesDate the data was built (YYYY-MM-DD)
countYes
totalYes
countsYes
hotelsYes
offsetYes
licenseYes
has_moreYes
attribution_urlYes
attribution_textYes

TDQS

A4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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 policyA
Read-onlyIdempotent
Inspect

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

NameRequiredDescriptionDefault
brandYesBrand id or name
response_formatNo'markdown' for readable text, 'json' for structured datamarkdown

Output Schema

NameRequiredDescription
idYes
urlYes
nameYes
as_ofYesDate the data was built (YYYY-MM-DD)
factsYes
answerYes
licenseYes
not_statedYesExpected facts the sources do not state; never guess these
source_urlsYes
verified_atYes
attribution_urlYes
attribution_textYes

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 detailsA
Read-onlyIdempotent
Inspect

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

NameRequiredDescriptionDefault
idYesPlace id, e.g. "fort-funston"
response_formatNo'markdown' for readable text, 'json' for structured datamarkdown

Output Schema

NameRequiredDescription
idYes
uidYesStable id that survives a rename
urlYes
nameYes
typeYes
as_ofYesDate the data was built (YYYY-MM-DD)
factsYes
rulesYes
answerYes
statusYes
licenseYes
sourcesYes
citationYesCopy-ready citation: answer, source, date checked, record URL, license
freshnessYesfresh: inside its review interval; due: past it; stale: past twice it, confirm before you go; unreadable: the last check could not read the source
confidenceYesstated: 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_statedYesExpected facts the sources do not state; never guess these
review_dueYes
source_urlsYes
verified_atYes
confirmed_byYes
rule_recordsYes
record_licenseYes
attribution_urlYes
attribution_textYes

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness3/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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 idA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
idYesRule id, e.g. "rul_t6cqwy0x4ce2dmpq_fee"
response_formatNo'markdown' for readable text, 'json' for structured datamarkdown

Output Schema

NameRequiredDescription
ruleYes
as_ofYesDate the data was built (YYYY-MM-DD)
placeYes
licenseYes
attribution_urlYes
attribution_textYes

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 townA
Read-onlyIdempotent
Inspect

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

NameRequiredDescriptionDefault
nearNoA point instead of a town; give one of place or near
placeNoA city or county in California or Nevada, e.g. "Monterey", "South Lake Tahoe", "Washoe County, NV" or "Las Vegas"
typesNoKinds to include; all by default
per_typeNoNearest results to show per kind
radius_milesNoSearch radius in miles around the town or point
response_formatNo'markdown' for readable text, 'json' for structured datamarkdown
dogs_allowed_onlyNoLeave out places where dogs are not allowed

Output Schema

NameRequiredDescription
as_ofYesDate the data was built (YYYY-MM-DD)
labelYes
totalYes
centerYes
groupsYes
licenseYes
radius_milesYes
attribution_urlYes
attribution_textYes

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 dogA
Read-onlyIdempotent
Inspect

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"]

NameRequiredDescriptionDefault
dogsNoNumber of dogs
nearNoA point instead of a town; give one of place or near
placeNoA city or county in California or Nevada, e.g. "Monterey", "South Lake Tahoe", "Washoe County, NV" or "Las Vegas"
nightsNoNights of the stay
stay_typesNoKinds of stay to consider
per_sectionNoResults per section
radius_milesNoSearch radius in miles around the town or point
dog_weight_lbNoThe dog's weight in pounds
max_total_feeNoMost the guest will pay in pet fees for the whole stay, USD
response_formatNo'markdown' for readable text, 'json' for structured datamarkdown
include_possibleNoInclude stays that need a call to confirm

Output Schema

NameRequiredDescription
as_ofYesDate the data was built (YYYY-MM-DD)
askedYes
labelYes
staysYes
licenseYes
outingsYes
stay_countsYes
radius_milesYes
attribution_urlYes
attribution_textYes

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

NameRequiredDescriptionDefault
contactNoHow to reach the reporter, only if they offer it
messageYesWhat is wrong, in the user's words
place_idYesPlace id from a search result
source_urlNoThe official page that shows the current rule, if the user has it

Output Schema

NameRequiredDescription
urlYes
statusYes
place_idYes
report_idYes

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 highwayA
Read-onlyIdempotent
Inspect

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"

NameRequiredDescriptionDefault
dogsNoNumber of dogs
nearNoStart from the route mile nearest this point
kindsNoKinds of stops to include; all by default
limitNoMaximum results to return
routeNoRoute idi-5
nightsNoNights of the stay
offsetNoResults to skip, for pagination
to_mileNoStop at this route mile
directionNoDirection of travel. Route miles increase going north, or east on I-80 and US-50; north and east both mean increasing milesnorth
from_mileNoStart at this route mile
dog_weight_lbNoThe dog's weight in pounds
max_total_feeNoMost the guest will pay in pet fees for the whole stay, USD
response_formatNo'markdown' for readable text, 'json' for structured datamarkdown
dog_friendly_onlyNoLeave out stops where dogs are not allowed

Output Schema

NameRequiredDescription
as_ofYesDate the data was built (YYYY-MM-DD)
countYes
guideYes
routeYes
stopsYes
totalYes
offsetYes
licenseYes
has_moreYes
attribution_urlYes
attribution_textYes

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness3/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 placesA
Read-onlyIdempotent
Inspect

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"

NameRequiredDescriptionDefault
areaNoArea id inside a region (a tourist area such as a valley, coast or metro), when the data has areas
nearNoLimit to places near a point; results are sorted by distance
typeNoKind 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)
limitNoMaximum results to return
queryNoWords to match in the name, city, county or brand
stateNo"CA" or "NV". Also tells apart counties with the same name, such as Humboldt.
countyNoCounty name without "County", in California or Nevada, e.g. "Monterey" or "Washoe"
offsetNoResults to skip, for pagination
regionNoRegion id, e.g. central-coast, san-diego or reno-tahoe-nevada
off_leashNotrue: only places where the managing agency allows dogs off leash, at least at some times
dogs_allowedNotrue: only places that allow dogs somewhere; false: only places that do not
response_formatNo'markdown' for readable text, 'json' for structured datamarkdown

Output Schema

NameRequiredDescription
as_ofYesDate the data was built (YYYY-MM-DD)
countYes
totalYes
offsetYes
placesYes
licenseYes
has_moreYes
attribution_urlYes
attribution_textYes

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

  1. 13 tool updatesv0.2.0
    • First observeddogpolicies_browse_answers
    • First observeddogpolicies_changes_near
    • First observeddogpolicies_changes_since
    • First observeddogpolicies_compare_places
    • First observeddogpolicies_find_hotels
    • First observeddogpolicies_get_brand_policy
    • First observeddogpolicies_get_place
    • First observeddogpolicies_get_rule
    • First observeddogpolicies_near
    • First observeddogpolicies_plan_trip
    • First observeddogpolicies_report_correction
    • First observeddogpolicies_route_stops
    • First observeddogpolicies_search_places

TDQS

A4.1/5.0

Scored across 13 tools

Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness5/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

  • US backcountry permit and campground rules, dates and recorded openings. Read-only, no sign-in.

    https://api.permitsnag.com/mcp
  • U.S. law library for AI: court decisions, statutes, court rules and citation checks. Read-only.

    https://mcp.legalopsdepot.com/mcp
  • 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

    https://dogslifeapp.com/mcp
  • 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.

    https://staylist.world/mcp

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Enables 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.
    13
    14 npm
    2
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables interaction with the Dog API through natural language, supporting operations like listing breeds, fetching images, and more.
    -
  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables AI assistants to fetch dog breed data, including descriptions, attributes, and group information, via the Dog API through natural language queries.
    -