Skip to main content
Glama
DogPolicies MCP Server

DogPolicies MCP Server

by xultrax-web

DogPolicies MCP server

dogpolicies.com · Verified dog rules for California and Nevada travel, for AI assistants. Install guide and example.

Ask Claude, Cursor or any MCP client "can my 70 lb dog stay at a Monterey hotel for under $50?", "what can my dog do in Carmel?" or "plan three nights in Tahoe with two dogs" and get an answer with the official source, the date it was checked and a link to the record. No API key, no account, no configuration: the data ships inside the package.

npx dogpolicies-mcp demo

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.

  • Areas the way travelers name them: East Bay, Lake Tahoe, Big Sur, Yosemite, Death Valley, the Mendocino Coast and the Bay Area's metros, as a filter, a place name in near and plan_trip, and a resource.

Every fact comes from an official source (an agency page or the business's own policy) with the date it was checked. Every result starts with a one-line citation and ends with DogPolicies, dogpolicies.com, CC BY 4.0, verified {date}. When a source does not state something, the record says "not stated" instead of guessing.

Related MCP server: Dog API MCP Server

Install

Pick the first one that fits; they all give the same server.

1. Claude (claude.ai or Claude Desktop): add the hosted connector, nothing to install

Settings → Connectors → Add custom connector → name DogPolicies, URL https://dogpolicies.com/mcp/ → Add. Then turn it on in the chat's tools menu. No Node.js, no file editing; works on every plan that has connectors.

2. Claude Desktop: one-click extension

Download dogpolicies-mcp-.mcpb from the latest release and open it (double-click, or Claude Desktop → Settings → Extensions → Install Extension). The data is inside; nothing else to install.

3. One command, any client

npx dogpolicies-mcp install                      # Claude Desktop (default)
npx dogpolicies-mcp install --client cursor      # or vscode | windsurf | claude-code, or --all
npx dogpolicies-mcp install --hosted             # the remote URL form instead of a local server
npx dogpolicies-mcp install --dry-run            # show what would change, change nothing

It finds the client's config on Windows, macOS and Linux, creates the file or the mcpServers key if missing, merges one entry without touching other settings, writes a timestamped backup first, refuses (and explains) a file it cannot parse, does nothing the second time, needs no admin rights, and prints the exact restart step. On Windows it writes the form that works (cmd /c npx ...). Requires Node.js 20.19 or newer.

4. One-click buttons (hosted server, no Node.js)

Add to Cursor Install in VS Code Install in VS Code Insiders

Both buttons add the hosted server at https://dogpolicies.com/mcp/; the client asks you to confirm.

5. Claude Code

claude mcp add dogpolicies -- npx -y dogpolicies-mcp                      # macOS, Linux
claude mcp add dogpolicies -- cmd /c npx -y dogpolicies-mcp               # Windows
claude mcp add --transport http dogpolicies https://dogpolicies.com/mcp/   # hosted, any OS

6. By hand

Settings → Developer → Edit Config (the file is %APPDATA%\Claude\claude_desktop_config.json on Windows, ~/Library/Application Support/Claude/claude_desktop_config.json on macOS). If the file has no mcpServers key yet, add one:

{
  "mcpServers": {
    "dogpolicies": { "command": "npx", "args": ["-y", "dogpolicies-mcp"] }
  }
}

On Windows use "command": "cmd", "args": ["/c", "npx", "-y", "dogpolicies-mcp"]. Then fully quit Claude Desktop (tray icon → Quit on Windows, Cmd+Q on macOS) and reopen it.

~/.cursor/mcp.json (global) or .cursor/mcp.json in a project, same mcpServers block as above (Windows: the cmd /c form), or { "url": "https://dogpolicies.com/mcp/" } for the hosted server.

~/.copilot/mcp-config.json (what the guided flow calls Global → Copilot Global) with the same mcpServers block, or from a terminal:

code --add-mcp '{"name":"dogpolicies","type":"stdio","command":"npx","args":["-y","dogpolicies-mcp"]}'

~/.codeium/windsurf/mcp_config.json, same mcpServers block, or { "serverUrl": "https://dogpolicies.com/mcp/" }.

Local HTTP

npx dogpolicies-mcp --http --port 3737     # http://127.0.0.1:3737/mcp

Troubleshooting

  • It does not show up after installing. Restart properly. Claude Desktop must be fully quit: right-click the tray icon (Windows) or Claude menu → Quit (macOS); closing the window leaves it running. Cursor: toggle the server in Settings → MCP. VS Code: MCP: List Servers → Start. Windsurf: Refresh in the MCP panel.

  • Check the server itself. npx dogpolicies-mcp check loads the data and calls every tool; npx dogpolicies-mcp demo prints a real answer. If these work, the problem is the client's config or restart.

  • Where the client's logs are. Claude Desktop: %APPDATA%\Claude\logs\mcp.log and mcp-server-dogpolicies.log (Windows), ~/Library/Logs/Claude/ (macOS). Cursor: Output panel → MCP Logs. VS Code: MCP: List Servers → Show Output. Claude Code: claude mcp list, or --mcp-debug.

  • "spawn npx ENOENT" on Windows. The client starts commands without a shell and npx is a .cmd file. Use "command": "cmd", "args": ["/c", "npx", "-y", "dogpolicies-mcp"] (the installer writes this), or the hosted connector.

  • Node version. node --version must be 20.19 or newer (npx comes with Node). The hosted connector and the Claude Desktop extension need no Node at all (the extension uses Claude Desktop's own).

  • Behind a corporate proxy. npx needs to reach registry.npmjs.org once to fetch the package; set HTTPS_PROXY (npm reads npm config set proxy too) or use the extension or the hosted connector, which need no npm. The server itself makes one background request to dogpolicies.com for newer data and works offline without it; set DOGPOLICIES_OFFLINE=1 to never try.

  • Still stuck? Open an issue with the output of npx dogpolicies-mcp check, your OS and client: https://github.com/xultrax-web/dogpolicies-mcp/issues

Try it in the terminal

npx dogpolicies-mcp demo              # off-leash beaches near San Diego, with citations
npx dogpolicies-mcp demo "Monterey"   # hotels in Monterey for a 70 lb dog, 2 nights, fees worked out
npx dogpolicies-mcp check             # load the data and call every tool 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}, dogpolicies://area/{id} (all with completion), plus dogpolicies://about, dogpolicies://answers and dogpolicies://status. Prompts give a client's slash menu the common trips: plan_dog_trip, check_hotel_for_dog, road_trip_with_dog, what_can_my_dog_do_here, cite_a_rule, with town-name completion.

How the data stays current

The package ships a dated snapshot (as_of in every result). On start it serves that snapshot immediately, then checks https://dogpolicies.com/data/mcp-snapshot-v1.json in the background and, when a newer one exists, swaps it in and caches it for next time. Until the site is deployed there, that check fails fast and silently and the bundled data serves on its own. Set DOGPOLICIES_OFFLINE=1 (or pass --offline) to never use the network. All options: docs/configuration.md.

Privacy

  • Nothing is collected. No telemetry, analytics or crash reporting; tool arguments are never logged above 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, county or area in California or Nevada, e.g. "Monterey", "South Lake Tahoe", "Washoe County, NV", "Las Vegas", "East Bay" or "Lake Tahoe"
sinceYesDate, YYYY-MM-DD
offsetNoResults to skip, for pagination
outcomeNoOnly events with this outcome
radius_milesNoSearch radius in miles around the town or point (an area is its own boundary; the radius is ignored)
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.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover safety (readOnly, idempotent, non-destructive) and closed-world scope, so the description is free to add result-shape behavior: it discloses the five possible outcome values and that results come back newest first. It does not mention pagination limits behavior or the ignore-radius-for-areas rule (that lives in the schema), so it is strong but not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the resource and scope in the first sentence, then usage, then an example — a sensible order with almost no filler. The example line partially repeats the routing sentence's intent, but it earns its place by demonstrating parameter granularity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter geo-filtered read tool with a nested point object and an existing output schema, the description covers what it must: what is returned, ordering, the place-vs-point choice, and the sibling routing. Return-value details are correctly left to the output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema description coverage is 100% and every parameter carries a description, including the place/near mutual exclusion and the radius caveat, so the schema does the heavy lifting. The worked example (place="Monterey", since="2026-09-01") usefully shows the date format and place granularity in action, but adds nothing the schema has not already documented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource (verification events with their outcome types), a specific scope (within a radius of a town, county or point), ordering (newest first), and explicitly names the sibling it is not ('Use dogpolicies_changes_since for everything everywhere'). An agent can distinguish it from the cluster of similarly-named siblings without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives two concrete use cases ("has anything changed around Tahoe since my last trip?", re-checking a saved itinerary) and an explicit routing rule to the alternative tool, dogpolicies_changes_since, for unfiltered use. When-to-use and when-not are both present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

dogpolicies_changes_sinceChanges since a 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, the name a traveler gives the trip: san-francisco, east-bay, peninsula, south-bay, north-bay, lake-tahoe, big-sur, mendocino-coast, yosemite, death-valley
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.6/5.0
Behavior5/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 is free to spend its words on non-obvious result behavior — and it does: the match/possible/excluded bucketing rules, what elevates a hotel to 'possible', and the sort order (matches first, cheapest pet fee first). That is output behavior an agent could not infer from the schema and is exactly the kind of context that changes how results should be reported to a user.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded one-sentence purpose, then the ranking/eligibility semantics, then four examples that each exercise a different parameter path with no redundancy. Every sentence earns its place and no example repeats another's parameter combination.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

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, four enums and an output schema, the description covers scope, eligibility semantics, ordering and query-to-parameter mapping well. The remaining gap is modest: no mention of how the sibling lookup/planning tools relate, and no note that the underlying policy data can change (relevant given the changes_since/changes_near siblings).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

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 carries the per-parameter burden. The description still adds genuine value by demonstrating how free-form traveler questions decompose into parameter combinations (county vs. near vs. query vs. county+state, plus dogs/nights feeding the fee estimate), which the schema alone does not teach.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (find hotels/motels) plus the two filters that matter most: pet-friendly for a specific dog and pet fee for the stay, scoped to California and Nevada. This is clearly distinct from siblings like search_places, get_place or plan_trip, which operate on places/policies rather than answering a lodging question.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The four worked examples give concrete when-to-use signals across the main query shapes (county + weight + budget, point proximity + party size, name lookup, county + state). What's missing is an explicit steer on when to prefer a sibling such as dogpolicies_search_places, dogpolicies_plan_trip or dogpolicies_compare_places instead, so the boundary with siblings is left implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

dogpolicies_get_brand_policyGet hotel brand pet 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, county or area in California or Nevada, e.g. "Monterey", "South Lake Tahoe", "Washoe County, NV", "Las Vegas", "East Bay" or "Lake Tahoe"
typesNoKinds to include; all by default
per_typeNoNearest results to show per kind
radius_milesNoSearch radius in miles around the town or point (an area is its own boundary; the radius is ignored)
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.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

It adds significant behavioral context not in the schema, specifically that the results include the dog rule and citation for each entry. It also details that the output is grouped by kind and sorted by distance, which is valuable runtime information.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

While effective, the description is quite verbose due to the large amount of routing logic and examples it needs to provide. It is appropriately sized for the complexity but could be slightly tightened.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The definition is exceptionally complete. It covers both primary input methods (`place` and `near`), expected output behavior (grouped, sorted, cited), and clear boundaries for its utility compared to other sibling tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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

With 100% schema coverage, the baseline is high. The description compensates by clearly defining the usage of the `place` parameter (city, county, area) and explaining how the `types` parameter works (kinds to include; all by default).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description is highly specific, defining the scope ('everything dog-related nearby') and the output structure (grouped by kind, sorted by distance). It clearly distinguishes this general search from specialized sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides explicit branching logic for tool selection. It instructs the agent to use this tool for general inquiries while pointing to `dogpolicies_find_hotels`, `dogpolicies_plan_trip`, and `dogpolicies_search_places` for specific use cases (budget, whole trip, or one kind of place).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

dogpolicies_plan_tripPlan a trip with a 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, county or area in California or Nevada, e.g. "Monterey", "South Lake Tahoe", "Washoe County, NV", "Las Vegas", "East Bay" or "Lake Tahoe"
nightsNoNights of the stay
stay_typesNoKinds of stay to consider
per_sectionNoResults per section
radius_milesNoSearch radius in miles around the town or point (an area is its own boundary; the radius is ignored)
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.7/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 safety needs no restating. The description adds real behavioral context beyond that: results are aggregated in one call, pet fees are computed for the entire stay rather than per night, activities are ordered nearest first, and every item carries a citation. It does not discuss truncation or how partial matches are signalled, keeping it just short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Output scope is front-loaded in the first sentence, then inputs, then sibling alternatives, then three compact examples. Every sentence carries information; the labeled example list is easy to scan and none of the examples is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Eleven parameters, a nested `near` object and an output schema are all accounted for: the description tells the agent what the response contains by section, which inputs are needed, and when a sibling is a better fit. With annotations covering safety and the output schema covering return shape, nothing an agent needs in order to invoke this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3, but the description goes beyond it by demonstrating how conversational phrasing maps onto argument values ('a weekend' to nights=2, 'two small dogs' to dogs=2, an area name substituted for a town plus stay_types). That mapping guidance is genuine value the schema cannot supply, though most individual parameters are still left to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Plan a stay ... with a dog, in one call') and enumerates the three sections produced (stay with pet fee for the whole stay, dog-friendly things to do nearest-first, dog-friendly patios), each with citations. An agent can distinguish this from dogpolicies_near or dogpolicies_find_hotels without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit routing: use dogpolicies_route_stops for the drive and dogpolicies_near for a quick list without the stay check. It also states the required inputs (town or county plus dog weight, dog count, nights, fee cap) and shows three worked request-to-argument mappings, including the non-obvious one mapping 'camping near Mammoth Lakes' to place="Mono County".

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

dogpolicies_report_correctionReport a correctionAInspect

File a correction when a user says a rule on a record is wrong or has changed (a fee went up, a beach closed to dogs, a hotel now takes two pets). The report goes to a person who re-reads the official source; nothing is published automatically and the record does not change until it is verified. Give the place id, what is wrong in a sentence or two, and the official page the user saw, if any. Never send personal details beyond an optional contact the user offers.

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, the name a traveler gives the trip: san-francisco, east-bay, peninsula, south-bay, north-bay, lake-tahoe, big-sur, mendocino-coast, yosemite, death-valley
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.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish that this is a safe, read-only, idempotent, closed-world search. The description adds useful behavioral context by stating that it returns one page of places with a one-line answer, status values, verification date, and page URL, plus a pointer elsewhere for fuller detail. It does not discuss rate limits or auth, but those are less relevant for a read-only search in this context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with purpose, return behavior, and sibling routing, followed by concrete examples for a complex 12-parameter search tool. The examples are numerous but each demonstrates a distinct query pattern, so they earn their place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the 12 optional parameters, rich schema, output schema, and sibling tools, the description covers what the tool does, how results look, where to go for deeper rules or hotel-specific checks, and how to translate common natural-language queries into parameters. Nothing essential for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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

Schema coverage is 100%, so the schema already documents all 12 parameters thoroughly. The description still adds value by mapping natural-language queries to concrete parameter combinations such as type="beach", off_leash=true, near={lat,lon}, and by illustrating county/state/query usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

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 resource: search places (parks, beaches, trails, hotels, campgrounds, cabin resorts) in California and Nevada by name, location, and dog rules. It explicitly distinguishes itself from dogpolicies_get_place for full rules/sources and dogpolicies_find_hotels for hotel weight/budget checks.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides direct routing guidance: use dogpolicies_get_place for full rules and sources, and dogpolicies_find_hotels to check a specific dog's weight and budget at hotels. The examples further clarify when to use this search tool for natural-language place queries.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 5 tool updatesv0.2.9
    • Changeddogpolicies_changes_near2 fields changed
      • changedInput schema / properties / place / description
        Previous value: -"A city or county in California or Nevada, e.g. \"Monterey\", \"South Lake Tahoe\", \"Washoe County, NV\" or \"Las Vegas\""New value: +"A city, county or area in California or Nevada, e.g. \"Monterey\", \"South Lake Tahoe\", \"Washoe County, NV\", \"Las Vegas\", \"East Bay\" or \"Lake Tahoe\""
      • changedInput schema / properties / radius_miles / description
        Previous value: -"Search radius in miles around the town or point"New value: +"Search radius in miles around the town or point (an area is its own boundary; the radius is ignored)"
    • Changeddogpolicies_find_hotels1 field changed
      • changedInput schema / properties / area / description
        Previous value: -"Area id inside a region (a tourist area such as a valley, coast or metro), when the data has areas"New value: +"Area id, the name a traveler gives the trip: san-francisco, east-bay, peninsula, south-bay, north-bay, lake-tahoe, big-sur, mendocino-coast, yosemite, death-valley"
    • Changeddogpolicies_near2 fields changed
      • changedInput schema / properties / place / description
        Previous value: -"A city or county in California or Nevada, e.g. \"Monterey\", \"South Lake Tahoe\", \"Washoe County, NV\" or \"Las Vegas\""New value: +"A city, county or area in California or Nevada, e.g. \"Monterey\", \"South Lake Tahoe\", \"Washoe County, NV\", \"Las Vegas\", \"East Bay\" or \"Lake Tahoe\""
      • changedInput schema / properties / radius_miles / description
        Previous value: -"Search radius in miles around the town or point"New value: +"Search radius in miles around the town or point (an area is its own boundary; the radius is ignored)"
    • Changeddogpolicies_plan_trip2 fields changed
      • changedInput schema / properties / place / description
        Previous value: -"A city or county in California or Nevada, e.g. \"Monterey\", \"South Lake Tahoe\", \"Washoe County, NV\" or \"Las Vegas\""New value: +"A city, county or area in California or Nevada, e.g. \"Monterey\", \"South Lake Tahoe\", \"Washoe County, NV\", \"Las Vegas\", \"East Bay\" or \"Lake Tahoe\""
      • changedInput schema / properties / radius_miles / description
        Previous value: -"Search radius in miles around the town or point"New value: +"Search radius in miles around the town or point (an area is its own boundary; the radius is ignored)"
    • Changeddogpolicies_search_places1 field changed
      • changedInput schema / properties / area / description
        Previous value: -"Area id inside a region (a tourist area such as a valley, coast or metro), when the data has areas"New value: +"Area id, the name a traveler gives the trip: san-francisco, east-bay, peninsula, south-bay, north-bay, lake-tahoe, big-sur, mendocino-coast, yosemite, death-valley"
  2. 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.3/5.0

Scored across 13 tools

Disambiguation4/5

Most tools have clearly distinct roles, and the descriptions explicitly cross-reference when to use one over another (e.g., search_places vs. near vs. plan_trip vs. find_hotels). However, several tools return overlapping place listings (search_places, near, browse_answers, find_hotels), so an agent must read descriptions carefully to avoid choosing a broader or narrower tool than intended.

Naming Consistency5/5

Every tool uses the same dogpolicies_ prefix followed by a consistent snake_case verb_noun or noun_qualifier pattern (search_places, get_place, changes_near, report_correction). The convention is predictable throughout with no mixed casing or stylistic outliers.

Tool Count5/5

At 13 tools, the set fits comfortably in the well-scoped 3–15 range. Each tool covers a distinct capability—discovery, detail lookup, planning, change tracking, comparison, correction reporting, and route stops—without obvious redundancy.

Completeness5/5

The surface covers the full lifecycle for a dog-policy domain: finding places, getting full records and individual rules, checking hotel and brand policies, planning trips, comparing candidates, monitoring changes, reporting corrections, and finding route stops. No obvious gaps or dead ends are apparent for the stated California/Nevada dog-travel purpose.

Maintenance

ActivityNo data
ResponsivenessSyncing

Related MCP Connectors

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
    7 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
    D
    maintenance
    Enables AI assistants to fetch dog breed data, including descriptions, attributes, and group information, via the Dog API through natural language queries.
    -