Skip to main content
Glama
zencity-product

city-data-mcp

Official

city-data-mcp

An MCP server that gives Claude deep access to US public data — demographics, economics, crime, employment, weather, housing, transit, schools, budgets, and more across 30+ cities. Built for government intelligence workflows.

What it does

22 tools that let Claude query, compare, and synthesize real public data from 15+ federal and city-level sources:

Core Data Tools

Tool

Source

What it does

query_city_data

Socrata

Crime & 311 service requests (5 cities)

list_available_data

All

Discover available cities, datasets, and coverage

query_demographics

US Census ACS

Population, income, poverty, education, housing, commuting (30 cities)

compare_demographics

US Census ACS

Side-by-side comparison table for 2-6 cities

query_economics

FRED

Unemployment, housing index, personal income with trends (20 metros)

query_employment

BLS

Metro unemployment rate, employment, labor force (20 metros)

query_national_crime

FBI UCR

State-level crime stats with multi-year trends

query_weather

NWS

Current conditions and forecasts for any US city

query_air_quality

AirNow/EPA

Real-time air quality index (AQI) and pollutant levels

query_housing

HUD

Fair market rents, income limits, housing affordability

query_water

USGS

Water levels, streamflow, and conditions

query_representatives

Google Civic

Elected officials at all levels for any address

query_311_trends

Open311/SeeClickFix

Service request trends and patterns

query_transit

GTFS feeds

Public transit routes, performance, coverage

query_schools

Dept of Education

School district demographics, performance, funding

query_permits

City portals

Building permit activity and trends

query_budget

City portals

Municipal budget and expenditure data

query_traffic

City portals

Traffic safety and congestion data

Intelligence Tools

Tool

What it does

create_census_cohort

Find peer cities by demographic/economic similarity (fast, Census-only)

create_full_cohort

Rich peer cohort using demographics + economics + employment

create_city_briefing

Comprehensive city briefing pulling from all available data sources

map_issue_data

Map a community issue (e.g., "affordable housing") to relevant data across sources

track_city_changes

Track how a city's metrics have changed over time

Related MCP server: socrata-mcp

Quick start

Claude Desktop (local, stdio)

  1. Clone and build:

git clone https://github.com/zencity-product/city-data-mcp.git
cd city-data-mcp
npm install && npm run build
  1. Get free API keys:

  2. Add to Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "city-data-mcp": {
      "command": "node",
      "args": ["/path/to/city-data-mcp/dist/index.js"],
      "env": {
        "CENSUS_API_KEY": "your-census-key",
        "FRED_API_KEY": "your-fred-key"
      }
    }
  }
}
  1. Restart Claude Desktop.

Remote (HTTP mode)

Run as an HTTP server for remote access:

PORT=3000 CENSUS_API_KEY=xxx FRED_API_KEY=xxx node dist/index.js --http

MCP endpoint: http://localhost:3000/mcp Health check: http://localhost:3000/health

REST API

When running in HTTP mode, a REST API is also available at /api/ for non-MCP consumers (dashboards, scripts, other apps):

GET /api/cities              → all supported cities
GET /api/census/:city        → demographics
GET /api/economics/:city     → FRED economic indicators
GET /api/employment/:city    → BLS employment data
GET /api/crime/:city         → FBI crime stats
GET /api/weather/:city       → NWS weather
GET /api/air-quality/:city   → EPA air quality
GET /api/housing/:city       → HUD housing data
GET /api/water/:city         → USGS water conditions
GET /api/representatives/:city → elected officials
GET /api/311/:city           → service request trends
GET /api/transit/:city       → public transit
GET /api/schools/:city       → school district data
GET /api/permits/:city       → building permits
GET /api/budget/:city        → municipal budget
GET /api/traffic/:city       → traffic safety
GET /api/briefing/:city      → comprehensive city briefing
GET /api/changes/:city       → metrics change tracking

Example prompts

  • "Create a full briefing on Denver"

  • "Compare demographics for Denver, Austin, and Portland"

  • "What are the economic indicators for Seattle?"

  • "Find cities similar to Boston based on housing costs"

  • "Who are the elected representatives for 123 Main St, Chicago?"

  • "What's the air quality like in Los Angeles right now?"

  • "Show me school district data for Houston"

  • "Map the issue of 'affordable housing crisis' to data for San Francisco"

  • "Track how Phoenix has changed over the last 5 years"

  • "What's the transit coverage like in Portland?"

  • "Show me building permit trends in Austin"

Data sources

Source

Coverage

Freshness

Auth

US Census ACS

30 cities (demographics)

Annual (5-year estimates)

Free key

FRED

20 metros (economic indicators)

Monthly to annual

Free key

BLS

20 metros (employment)

Monthly

Optional key

FBI UCR

All states (crime stats)

Annual (1-2yr lag)

Reuses Census key

NWS

All US locations (weather)

Real-time

None

AirNow/EPA

All US locations (air quality)

Real-time

None

HUD

All US areas (housing)

Annual

None

USGS

All US monitoring stations (water)

Real-time

None

Google Civic

All US addresses (representatives)

Live

None

Open311/SeeClickFix

Participating cities (311)

Near real-time

None

Socrata

5 cities (crime, 311)

Near real-time

None

GTFS feeds

Major cities (transit)

Varies

None

City open data portals

Varies (permits, budgets, traffic)

Varies

None

Covered cities

Demographics (Census): NYC, Chicago, San Francisco, Los Angeles, Seattle, Houston, Phoenix, Philadelphia, San Antonio, San Diego, Dallas, Austin, Denver, Boston, Nashville, Portland, Baltimore, Atlanta, Miami, Washington D.C., Minneapolis, Detroit, Pittsburgh, Charlotte, Columbus, Indianapolis, Memphis, Milwaukee, Jacksonville, Raleigh

Economics (FRED) & Employment (BLS): NYC, Chicago, San Francisco, Los Angeles, Seattle, Houston, Phoenix, Denver, Boston, Austin, Dallas, Washington D.C., Atlanta, Miami, Portland, Detroit, Minneapolis, Philadelphia, Nashville, Charlotte

Weather, Air Quality, Housing, Water, Representatives: All US locations (national APIs)

311, Transit, Schools, Permits, Budgets, Traffic: City-specific coverage (varies)

Architecture

src/
├── index.ts              # Server entry (stdio + HTTP + REST transports)
├── cities.ts             # City registry lookup
├── types.ts              # Type definitions
└── sources/
    ├── census.ts         # US Census ACS (demographics)
    ├── fred.ts           # FRED (economic indicators)
    ├── bls.ts            # BLS (employment)
    ├── fbi.ts            # FBI UCR (crime statistics)
    ├── nws.ts            # National Weather Service
    ├── airnow.ts         # EPA AirNow (air quality)
    ├── hud.ts            # HUD (housing)
    ├── usgs.ts           # USGS (water)
    ├── civic.ts          # Google Civic (representatives)
    ├── socrata.ts        # Socrata (city-level crime, 311)
    ├── three11.ts        # Open311/SeeClickFix (service requests)
    ├── transit.ts        # GTFS (public transit)
    ├── schools.ts        # School district data
    ├── permits.ts        # Building permits
    ├── budget.ts         # Municipal budgets
    ├── traffic.ts        # Traffic safety & congestion
    ├── cohort.ts         # Census-based peer city cohort builder
    ├── full-cohort.ts    # Multi-source peer city cohort builder
    ├── briefing.ts       # Comprehensive city briefing generator
    ├── issue-mapper.ts   # Community issue → data mapper
    ├── change-tracker.ts # City metrics change tracking
    └── geo-resolver.ts   # Geographic coordinate resolution

International expansion

Research on extending to UK and Canada data sources is tracked separately. Key findings:

  • UK: 12/15 US categories have usable equivalents. Strongest: crime (data.police.uk), water (Environment Agency), demographics (ONS/Nomis).

  • Canada: StatCan WDS covers 6+ categories via one API. MSC GeoMet covers weather + air + water in one API.

License

MIT

Available Tools

28 tools
compare_demographicsCompare City DemographicsA

Compare demographic data across multiple US cities side by side. Works for ANY US city (~30,000 places). Returns population, income, poverty, education, housing, and commuting.

ParametersJSON Schema
NameRequiredDescriptionDefault
citiesYesList of 2-6 city names to compare (e.g., ['Denver', 'Austin', 'Portland'])

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It usefully discloses return categories (population, income, poverty, education, housing, commuting) and coverage breadth (~30,000 places, ANY US city), but says nothing about read-only nature, auth requirements, rate limits, or behavior on unrecognized city names.

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?

Three short sentences, front-loaded with the core purpose and scope before the return-field list. Efficient with minimal waste, though the trailing field enumeration is slightly listy.

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 one-parameter comparison tool with no output schema, the description adequately covers what it does, the breadth of supported cities, and what data comes back. It leaves minor gaps around input edge cases and constraint (2-6) enforcement, but is largely complete.

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 coverage is 100% and the single 'cities' parameter already documents the 2-6 array with an example. The description adds no syntax or format detail beyond the schema, which is expected at this coverage level (baseline 3).

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 (Compare) and resource (demographic data) with a clear scope: multiple US cities side by side. The 'side by side' framing hints at how it differs from single-city siblings like query_demographics, but no sibling is named explicitly, so an agent must still infer which tool to pick.

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?

The multi-city 'compare side by side' framing implies this is for comparing 2-6 cities, but there is no explicit when-to-use guidance and no named alternative (e.g., query_demographics for a single city). Usage is inferable from the phrasing rather than stated.

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

create_census_cohortCreate Census Peer Cohort (Fast)A

Find peer cities based on Census demographic data. Fast — uses only Census ACS data across ~75 cities.

Compares: population, income, poverty, education, housing costs, commuting patterns, region.

Criteria: "balanced", "size", "economics", "housing", "education", "commuting", "region".

Use this for quick demographic peer matching. For richer multi-source comparison (economics, crime, employment), use create_full_cohort instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityYesTarget city to find peers for (e.g., 'Denver', 'Austin')
criteriaNoWhat dimensions to weight most in finding peersbalanced
cohortSizeNoHow many peer cities to return (default 5)

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It usefully discloses that it uses only Census ACS data across about 75 cities and lists comparison dimensions, but it does not state whether it writes or stores anything, what permissions are needed, or what the return format 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.

Conciseness5/5

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

The description is front-loaded with purpose and speed, then lists compared dimensions and criteria, and ends with the alternative. Every sentence earns its place and there is no waste.

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 three-parameter read-style tool with 100% schema coverage and no output schema, the description is nearly complete: it covers purpose, data source, comparison criteria, and the alternative tool. It leaves minor gaps around return shape and side effects, but not enough to prevent correct invocation.

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 city, criteria, and cohortSize. The description lists the criteria enum values and comparison dimensions, adding some context, but does not add syntax or default behavior beyond the schema. Baseline 3 is appropriate when the schema does the heavy lifting.

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

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: find peer cities based on Census demographic data. It distinguishes this fast, Census-only tool from the richer multi-source sibling create_full_cohort. An agent can identify its scope and purpose 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?

It explicitly says to use this for quick demographic peer matching and directs the agent to create_full_cohort for richer multi-source comparison. The when-to-use and alternative conditions are stated plainly.

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

create_city_briefingCreate Comprehensive City BriefingA

Pull data from ALL available sources and assemble a structured executive briefing for a city in the US, UK, or Canada.

US: 14 data sources (Census, FRED, BLS, FBI, NWS, AirNow, HUD, USGS, Civic, 311, Transit, Schools, Permits, Budget). UK: 11 data sources (ONS demographics/economics/housing, Police crime, Met Office, DEFRA, Environment Agency, DfT, DfE, TWFY, Budget). CA: 9 data sources (StatCan demographics/economics/employment/crime/housing, MSC weather/air/water, Represent).

The "give me everything" tool. Takes 10-20 seconds. Country auto-detected or specify with country parameter.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityYesCity name (e.g., 'Denver', 'Manchester', 'Toronto')
countryNoCountry code. Auto-detected from city name if omitted. Required for ambiguous cities like London, Birmingham, Richmond, Hamilton, Cambridge, Windsor.

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full behavioral burden. It discloses useful traits such as broad source coverage, 10-20 second runtime, and country auto-detection, but it does not state read-only safety, auth requirements, rate limits, or failure handling.

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 front-loaded with purpose, then grouped source lists by country, and closes with usage and timing cues. The source enumerations are long but informative for setting expectations; there is little wasted 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?

For a complex aggregator with no output schema and no annotations, the description supplies source coverage, latency, and country handling. It leaves the exact briefing structure and error behavior unspecified, but gives enough context to select and invoke the tool correctly.

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 in the input schema. The description repeats country auto-detection and optional specification but adds no syntax or ambiguous-city details beyond what the schema provides, making the baseline score of 3 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 uses a specific verb and resource: 'Pull data from ALL available sources and assemble a structured executive briefing.' It states scope (city in US, UK, or Canada) and distinguishes itself from sibling query tools as the 'give me everything' tool, so an agent can identify it 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 Guidelines4/5

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

The phrase 'The give me everything tool' clearly signals when to use this broad aggregator over single-domain siblings. It also gives latency context (10-20 seconds). However, it does not explicitly name alternatives or state when not to use it.

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

create_full_cohortCreate Full Peer Cohort (Rich)A

Find peer cities using ALL data sources: Census demographics, FRED economics, BLS employment, and FBI crime data. Richer but slower than create_census_cohort (~50 cities pool).

Compares across 12 dimensions: population, income, poverty, education, home values, rent, housing price trend, unemployment, job growth, per-capita income, violent crime rate, and geographic region.

Criteria options:

  • "balanced" (default) — even weight across all dimensions

  • "economics" — prioritize unemployment, job growth, income

  • "livability" — prioritize crime, education, poverty

  • "safety" — heavily weight crime rates

  • "growth" — prioritize job growth, housing trends, employment

  • "affordability" — prioritize home values, rent, housing costs

Use this for comprehensive benchmarking. Takes longer due to multi-source API calls.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityYesTarget city to find peers for (e.g., 'Denver', 'Austin')
criteriaNoWhat dimensions to weight mostbalanced
cohortSizeNoHow many peer cities to return (default 5)

TDQS

A4.5/5.0
Behavior4/5

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

No annotations are provided, so the description carries the behavioral burden and does reasonably well: it discloses multi-source API calls, the slower runtime, and the ~50-city candidate pool. It does not address latency magnitude, failure behavior if a source is unavailable, or that this is a read-only operation, but the key cost/scope traits are surfaced.

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 core action and cost tradeoff, then structured into dimension list and criteria options. Slightly long, but every line (sources, dimensions, enum meanings) carries decision-relevant content rather than filler.

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?

No output schema exists, and the description compensates by spelling out the 12 dimensions being compared and the criteria weighting semantics, so the agent knows what it gets back conceptually. Remaining gaps are return shape details (e.g., scoring/ranking format) which are minor for this tool.

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 the schema's terse 'What dimensions to weight most' by explaining what each of the six criteria enum values actually prioritizes. That is genuine added meaning for the one parameter an agent is most likely to get wrong.

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+resource ('Find peer cities') and immediately scopes it to the union of four named data sources, listing the 12 comparison dimensions. It explicitly distinguishes itself from the sibling create_census_cohort, so an agent can route between them without opening either schema.

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

Usage Guidelines5/5

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

Provides an explicit alternative and the tradeoff that selects it: 'Richer but slower than create_census_cohort (~50 cities pool)' plus 'Use this for comprehensive benchmarking.' That is a clear when-to-use-this-vs-that signal.

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

list_available_dataList Available City DataA

List all supported cities and the data categories available for each. Use this to discover what data you can query.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses what is returned (supported cities and their data categories), which is useful behavioral context, but does not explicitly state that the operation is read-only, has no side effects, or requires no authentication. For a zero-parameter listing tool these are minor gaps, but the description could be more transparent about safety and return 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?

Two short sentences with zero waste; the core action and its purpose are front-loaded. Every sentence earns its place, making it easy for an agent to parse quickly.

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?

Given the tool's low complexity (0 parameters, no output schema), the description adequately explains what it returns and why to call it. It could specify the return format more precisely, but for a simple discovery endpoint it is sufficiently complete.

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?

There are zero parameters, so per the rubric the baseline is 4. The description adds no parameter information because none exist, and the schema already fully covers the empty input object.

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 ('List') and resource ('all supported cities and the data categories available for each'), clearly distinguishing this discovery tool from the many query_* siblings that retrieve actual data. An agent can tell immediately that this tool returns a catalog, not query results.

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 explicitly says 'Use this to discover what data you can query,' which gives clear context for when to call it before using query tools. However, it does not name specific alternatives or state when not to use it (e.g., if you already know the city/category).

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

map_issue_dataMap Community Issue to DataA

Given a community concern or issue topic, find all relevant hard data for a city. The cross-reference engine — "residents say X, here's what the data shows."

Available topics: Housing Affordability (housing affordability) — Housing costs, rent burden, fair market rents, home values, building permits, Public Safety (public safety) — Crime rates, police budget, 311 safety complaints, Traffic Safety (traffic safety) — Traffic fatalities, pedestrian safety, drunk driving crashes, congestion, Pedestrian & Cyclist Safety (pedestrian safety) — Pedestrian fatalities, cyclist deaths, Vision Zero, walkability, Transportation & Infrastructure (transportation) — Transit ridership, commuting patterns, road conditions, traffic safety, Education & Schools (education) — School enrollment, spending, student-teacher ratios, education levels, Economic Development & Jobs (economic development) — Unemployment, job growth, business permits, income levels, Environment & Sustainability (environment) — Air quality, water quality, parks, green space, Homelessness & Social Services (homelessness) — Poverty rates, housing costs, social spending, related 311 reports, Infrastructure & Utilities (infrastructure) — Water systems, roads, building activity, utility spending, Health & Wellness (health) — Air quality, health spending, poverty as health indicator.

Also accepts free-text issues (matched to closest topic by keywords).

Example: "housing affordability" in Denver → pulls home values, rent, FMR, permits, housing budget allocation.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityYesCity name (e.g., 'Denver', 'NYC')
issueYesIssue topic or free-text concern (e.g., 'housing affordability', 'public safety', 'residents complain about potholes')

TDQS

A4.1/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full behavioral burden. It discloses that free-text is keyword-matched to the closest topic and gives an example of what gets pulled, which is useful. However it never states that this is a read-only, non-mutating operation, nor what happens for an unrecognized topic or a city with no coverage.

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 sentence, and the long topical inventory is dense but earns its space because it supplies the missing enum values plus the data each topic returns. Slightly bloated by bolding/label repetition, but no filler sentences.

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 two-parameter tool with no output schema and no annotations, the description is largely sufficient: it explains inputs, accepted topic values, free-text behavior, and roughly what data each topic yields. It could note the shape of the returned data or the read-only nature, but nothing essential to a correct call 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% and both parameters are documented, so the schema baseline is met. The description goes beyond it by effectively supplying the missing enum for `issue` (0 enums in schema), enumerating 11 valid topic keys with their canonical strings and covering the free-text fallback — meaning the description materially improves how the agent fills that parameter.

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 all relevant hard data for a city' given an issue topic) and frames itself as a cross-reference engine, which cleanly distinguishes it from the many single-domain siblings like query_housing or query_traffic. An agent can tell this aggregates across domains rather than answering one metric.

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 'residents say X, here's what the data shows' framing plus the topical list makes the use case clear: map a concern to data. It implicitly routes away from single-domain siblings but never states an explicit when-not or names a preferred alternative for narrow lookups, so it stops 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.

query_air_qualityQuery Air QualityA

Get air quality data for a city in the US, UK, or Canada.

US: EPA AirNow — AQI (0-500 scale). Requires AIRNOW_API_KEY. UK: DEFRA UK-AIR — DAQI (1-10 scale). No API key needed. CA: MSC — AQHI (1-10+ scale). No API key needed.

Note: Each country uses a different scale. Country auto-detected or specify with country parameter.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityYesCity name (e.g., 'Denver', 'Manchester', 'Toronto')
countryNoCountry code. Auto-detected from city name if omitted. Required for ambiguous cities like London, Birmingham, Richmond, Hamilton, Cambridge, Windsor.

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and discloses valuable behavioral context: different per-country data sources and scales, and that the US endpoint requires AIRNOW_API_KEY while UK/CA do not. It stops short of describing return format, error behavior, or rate limits, but the auth and data-source disclosure is well beyond the schema.

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, followed by a scannable per-country breakdown and a single summarizing note. It is efficient, with only minor redundancy between the closing note and the schema's auto-detect guidance.

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 two-parameter query tool with no output schema and no annotations, the description covers the data sources, differing scales, and auth needs an agent needs to call it correctly. Return payload details are absent but are not strictly required given there is no 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 coverage is 100% and both parameters (including the country enum and its ambiguous-city guidance) are already documented in the schema. The description adds the meaning of the differing scales per country, but largely restates the auto-detection behavior already in the schema, so it lands at the baseline.

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 opens with a specific verb and resource ('Get air quality data for a city') and scopes the tool to the US, UK, and Canada, cleanly separating it from siblings like query_weather and query_public_health without needing to open any schema.

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?

It notes that country can be auto-detected or specified for ambiguous cities, which is useful invocation guidance, but it never states when to use this tool versus alternatives such as query_weather or query_public_health, nor any exclusions. Usage is implied rather than stated.

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

query_budgetQuery City BudgetB

City government budget data for a city in the US or UK.

US: Published municipal budgets — total budget, per-capita spending, category breakdown (30 cities). UK: Local authority spending — council tax Band D, total spending, category breakdown (11 cities). CA: Not yet available.

Country auto-detected or specify with country parameter.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityYesCity name (e.g., 'NYC', 'Manchester', 'Denver')
countryNoCountry code. Auto-detected from city name if omitted. Required for ambiguous cities like London, Birmingham, Richmond, Hamilton, Cambridge, Windsor.

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It discloses meaningful coverage constraints: US supports 30 cities, UK 11 cities, CA not available, which is genuinely useful scoping information. However, it says nothing about permissions, error behavior for unsupported cities, or data recency.

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 compact and front-loads the resource, then organizes availability by country in parallel structure. The final sentence about auto-detection duplicates schema content, but overall there is little waste.

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

Completeness3/5

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

For a read-only data query with a fully documented two-parameter schema, the description covers coverage scope adequately. It omits any sense of return structure (no output schema exists), pagination, or fallback behavior for unsupported cities, leaving some gaps for an agent to call confidently.

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 both parameters including the ambiguous-city list for the country field. The description's mention of country auto-detection reiterates what the schema already states, adding little beyond the structured fields. Baseline 3 is appropriate.

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 states the tool returns city government budget data and enumerates the specific fields available (total budget, per-capita spending, category breakdown, council tax Band D). This clearly distinguishes it from sibling query_* tools, though the opening 'City government budget data' is somewhat generic before the specifics arrive.

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

Usage Guidelines2/5

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

The description provides no when-to-use guidance, no conditions distinguishing it from siblings like query_city_data or query_economics, and no alternatives named. The country coverage notes imply availability constraints but do not tell the agent when this tool is the right choice.

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

query_city_dataQuery City Public DataA

Query publicly available data for a US city by category. US only (Socrata open data portals).

Supported cities: NYC, Chicago, San Francisco, Los Angeles, Seattle Supported categories: crime, 311

Returns recent data with category breakdown and sample records.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityYesCity name or abbreviation (e.g., 'NYC', 'Chicago', 'SF', 'LA', 'Seattle')
limitNoMaximum number of records to fetch (default 50)
categoryYesData category to query
daysBackNoHow many days of recent data to include (default 30)

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full behavioral burden. It does disclose the geographic restriction ('US only'), the open data portal source (Socrata), the constrained set of cities and categories, and the return shape ('recent data with category breakdown and sample records'). However, it says nothing about rate limits, authentication requirements, error behavior for unsupported cities, or pagination – meaningful gaps with zero annotation coverage.

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?

Four tight sentences, front-loaded with the core purpose, followed by the geographic/data-source constraint, supported values, and return shape. Zero filler; every sentence contributes useful scoping information.

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 4-parameter, no-output-schema tool, the description covers the essential context: what data, which cities, which categories, geographic restriction, data source, and what comes back. Parameter defaults are covered by the schema. Nothing an agent critically needs is absent.

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 four parameters including defaults (limit=50, daysBack=30). The description adds only the category values ('crime, 311') and city list, which are largely redundant with the schema's enum and description. Baseline 3 is appropriate when schema does the heavy lifting.

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 ('Query') and resource ('publicly available data for a US city by category'), and names the data source (Socrata). However, it does not distinguish itself from siblings like query_national_crime, query_311_trends, or query_demographics – an agent might reasonably ask why it would use this general query when specialized tools exist.

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?

The description implies usage context by listing supported cities and categories ('crime, 311'), giving an agent some idea of when this tool applies. But it provides no explicit when/when-not guidance, no mention of overlapping sibling tools (e.g., query_national_crime vs. the 'crime' category here), and no exclusions beyond 'US only'.

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

query_cost_of_livingQuery Cost of Living (CPI)B

Consumer Price Index data by metro area from the Bureau of Labor Statistics. Shows overall inflation rate and breakdown by category: food, housing, transportation, medical care, and energy.

17 metros available. Includes year-over-year inflation rates and monthly trend data.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityYesCity name (e.g., 'Denver', 'NYC', 'Chicago')

TDQS

B3.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It does disclose the data source, the coverage limit (17 metros), and the shape of the returned content (overall inflation rate plus category breakdown, YoY rates, monthly trends), which is useful. It does not say what happens for a metro outside the 17, whether this is cached/rate-limited, or how fresh the data is.

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?

Two short, front-loaded paragraphs with no filler; the source and scope lead, and the returned dimensions follow. Slightly abbreviated but nothing wasteful.

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 single-parameter read tool with no output schema, the description covers source, coverage, and return shape adequately. The main omission is behavior for unsupported cities and whether metro names must match a fixed list.

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 coverage is 100% and the single 'city' parameter is documented with examples in the schema itself. The description adds no extra parameter detail, so baseline 3 is appropriate when the schema fully covers the input.

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 states a specific resource (Consumer Price Index / cost-of-living data) with its authoritative source (Bureau of Labor Statistics) and the scope of coverage (metro areas, category breakdown). An agent can tell this is the CPI/inflation tool, though it does not explicitly contrast itself with close siblings like query_economics, query_city_data, or compare_demographics.

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

Usage Guidelines2/5

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

It gives a scope constraint ('17 metros available') that implicitly bounds when the tool is applicable, but there is no explicit when-to-use, when-not-to-use, or alternative-tool guidance. With ~28 siblings that overlap on city data, the absence of routing guidance is a real gap.

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

query_demographicsQuery City DemographicsA

Query demographic data for a city in the US, UK, or Canada.

US: Census ACS — population, income, poverty, education, housing, commuting (~30,000 places). UK: ONS/Nomis — population, households, age distribution. CA: StatCan Census Profile — population, income, households, immigration.

Country is auto-detected or specify with the country parameter. Required for ambiguous cities (London, Birmingham, etc.).

ParametersJSON Schema
NameRequiredDescriptionDefault
cityYesCity name (e.g., 'Denver', 'Manchester', 'Toronto')
countryNoCountry code. Auto-detected from city name if omitted. Required for ambiguous cities like London, Birmingham, Richmond, Hamilton, Cambridge, Windsor.

TDQS

A3.5/5.0
Behavior3/5

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

No annotations and no output schema, so the description carries the burden alone. It does disclose valuable behavioral context: the data sources per country, the ~30,000-place US coverage, and the auto-detection logic. It says nothing about return shape, data freshness/vintage, or failure behavior for unmatched cities.

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 core purpose, then cleanly organized as per-country data inventories, with invocation rules last. Slight redundancy with the schema's country description costs it the top score, but every line 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?

With no output schema or annotations, the description must stand alone, and it does cover scope, data categories, and input ambiguity. The remaining gap is the return format/structure, which an agent would want before calling.

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 coverage is 100% and the schema already documents both parameters, including the enum and the ambiguity rule, so the baseline is 3. The description largely restates the schema's auto-detection and ambiguous-city guidance rather than adding new semantics (no formats, no canonical city-name guidance beyond what the schema shows).

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 states a specific verb and resource ('Query demographic data for a city') and enumerates the dataset each country taps (Census ACS, ONS/Nomis, StatCan), which tells an agent exactly what it will get. It does not explicitly distinguish itself from the sibling compare_demographics or query_city_data, so it falls short of a 5.

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?

It gives useful invocation guidance — country is auto-detected, and must be supplied for ambiguous cities — but never says when to pick this tool over compare_demographics (multi-city comparison) or query_city_data. Usage context is implied rather than stated.

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

query_economicsQuery City Economic DataA

Query economic indicators for a city in the US, UK, or Canada.

US: FRED — unemployment, employment, housing price index, per capita income (20 major metros). UK: ONS — CPI, GDP, regional GVA, unemployment. CA: StatCan — CPI, GDP, retail trade (national/provincial).

Country auto-detected or specify with country parameter.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityYesCity name (e.g., 'Denver', 'Manchester', 'Toronto')
countryNoCountry code. Auto-detected from city name if omitted. Required for ambiguous cities like London, Birmingham, Richmond, Hamilton, Cambridge, Windsor.

TDQS

A3.5/5.0
Behavior3/5

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

No annotations exist, so the description carries the full burden. It usefully discloses the source agencies per country (FRED/ONS/StatCan) and the country auto-detection behavior, but does not cover permissions, rate limits, latency, or what the response contains.

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 core purpose, then compact per-country indicator lists with no wasted prose. The structure makes coverage easy to scan, which is earned length for a multi-region tool.

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 2-parameter, no-output-schema tool with no annotations, the description supplies the key missing context: which indicators exist in which country and how country resolution works. Return shape is not described, but the indicator enumeration substantially compensates.

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 both parameters including examples and the ambiguity caveat for London/Birmingham/Richmond. The description's 'auto-detected or specify' line largely restates the schema's country description, adding no new syntax or format detail. Baseline 3 applies.

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 (Query) and resource (economic indicators for a city), and enumerates the indicator families per country (FRED unemployment/HPI/income, ONS CPI/GDP/GVA, StatCan CPI/GDP/retail). It distinguishes itself from regional-scoped siblings, though it does not explicitly differentiate from overlapping siblings like query_employment or query_cost_of_living.

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 geography lists tell the agent what data this tool covers, and 'Country auto-detected or specify with country parameter' gives one operational rule. There is no explicit when-to-use vs alternatives guidance, nor any exclusion for overlapping siblings such as query_employment or query_housing.

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

query_employmentQuery City Employment DataA

Query employment statistics for a city in the US, UK, or Canada.

US: BLS — metro unemployment rate, total employment, labor force (20 major metros). UK: ONS/Nomis — regional unemployment rate. CA: StatCan LFS — unemployment, employment, participation rates (13 CMAs).

Country auto-detected or specify with country parameter.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityYesCity name (e.g., 'Denver', 'Manchester', 'Toronto')
countryNoCountry code. Auto-detected from city name if omitted. Required for ambiguous cities like London, Birmingham, Richmond, Hamilton, Cambridge, Windsor.

TDQS

A3.5/5.0
Behavior3/5

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

No annotations exist, so the description carries the full behavioral burden. It usefully discloses the underlying source per country (BLS, ONS/Nomis, StatCan LFS) and coverage breadth, but says nothing about rate limits, auth, caching, or freshness of the statistics.

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 purpose, then organizes source coverage in compact per-country lines with no filler. The structure is scannable and appropriately sized, though the final sentence slightly duplicates the schema's country parameter 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?

For a 2-parameter read tool with no annotations and no output schema, the description supplies the source landscape and country scope an agent needs to invoke it confidently. Return-value shape is unspecified, but that is a minor gap given the no-output-schema note.

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, including the ambiguous-city list. The description only repeats the auto-detect rule and country set, adding little beyond the schema; baseline 3 applies.

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 ('Query employment statistics for a city') and scopes the geography to US, UK, or Canada. It does not explicitly differentiate itself from close siblings like query_economics or query_demographics, so it stops short of a 5.

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?

Gives implied usage through the country-by-country data source breakdown and the auto-detection rule, but never states when to pick this over query_economics or compare_demographics. Guidance is inferable rather than explicit.

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

query_homelessnessQuery Homelessness DataA

HUD Point-in-Time (PIT) homelessness counts for US cities. Returns total homeless, sheltered vs unsheltered, chronic homelessness, veterans, families, unaccompanied youth, per-capita rates, and year-over-year trends.

20 cities available. Data from January 2024 PIT count (AHAR Part 1).

ParametersJSON Schema
NameRequiredDescriptionDefault
cityYesCity name (e.g., 'Denver', 'Los Angeles', 'Seattle')

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It usefully discloses provenance (January 2024 PIT count, AHAR Part 1) and coverage limits (20 cities), but does not describe return format, how missing cities are handled, or any data freshness caveats beyond the snapshot date.

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?

Two tight sentences that front-load the data source and enumerate returned measures before adding the coverage/date constraint. Efficient, though the long metric list borders on being a data dictionary.

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

Completeness3/5

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

For a simple one-parameter lookup with a fully documented schema, the description is enough to know what it returns and its source. It is still incomplete about behavior for unknown cities and the exact response shape, which is not covered by any 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 coverage is 100%, so the single city parameter is already documented with examples. The description does not add syntax, matching, or case-sensitivity details beyond what the schema provides, making the baseline of 3 correct.

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 source (HUD Point-in-Time), resource (homelessness counts), and scope (US cities, 20 available). It clearly distinguishes itself from thematic siblings like query_housing or query_demographics by naming the exact data source and the specific measures returned.

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 specificity of the data covered, so an agent can tell this is the tool for homelessness figures. However, there is no explicit when-to-use/when-not guidance and no routing against similar data tools such as query_housing or query_city_data.

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

query_housingQuery Housing DataA

Get housing data for a city in the US, UK, or Canada.

US: HUD — Fair Market Rents, area median income, income limits. No API key needed. UK: ONS/Land Registry — house prices, annual change. No API key needed. CA: StatCan/CREA — average/median price, price change, housing starts.

Country auto-detected or specify with country parameter.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityYesCity name (e.g., 'Denver', 'Manchester', 'Toronto')
countryNoCountry code. Auto-detected from city name if omitted. Required for ambiguous cities like London, Birmingham, Richmond, Hamilton, Cambridge, Windsor.

TDQS

A3.7/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does it reasonably well: it discloses the upstream sources per country and explicitly notes 'No API key needed' for US and UK, which is real auth context an agent cannot get elsewhere. It omits failure modes, rate limits, and return shape, so it is not 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.

Conciseness4/5

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

Front-loaded with the core statement, then per-country breakdowns that each carry distinct information (source, metrics, auth). No filler sentences, though the country-by-country list is on the verbose side for a two-parameter tool.

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?

No output schema and no annotations, so the description must do the work itself — and it largely does, telling the agent what data each country returns and that no credentials are needed. The main gap is return format (shape, units, currency normalization across US/UK/CA), which is left unspecified.

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 already document auto-detection and the ambiguous-city caveat, so the description largely repeats the schema. Baseline 3 is correct; it adds no format or syntax detail beyond what the schema provides.

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+resource ('Get housing data') and scopes it precisely to three countries with the data sources and metric families (FMR, median income, house prices, housing starts). It does not differentiate itself from the ~27 siblings, several of which touch adjacent domains (query_cost_of_living, query_permits), so it stops short of a 5.

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 resource (call it when you need city-level housing metrics), and it gives one practical rule — country auto-detected, or specify for ambiguous cities. It never states when to prefer a sibling such as query_cost_of_living or query_city_data, and no exclusions are given.

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

query_migrationQuery Population Migration & MobilityB

Census geographic mobility data showing population movement patterns. Returns what percentage of a city's population moved in from a different state or abroad in the past year, vs stayed in the same house.

Works for any US city (~30,000 places). Uses ACS 5-Year estimates, Table B07003.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityYesCity name (e.g., 'Denver', 'Austin', 'Boise')

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations, the description carries the burden; it usefully discloses provenance (ACS 5-Year, Table B07003) and geographic coverage (~30,000 places), which is real added context. However it omits read-only confirmation, latency, or any caveats about the estimates, so it is only partially transparent.

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?

Two tight sentences, metric front-loaded and source/coverage details relegated to the second. No wasted words, though it could be slightly more directive about invocation.

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 no output schema, the description does explain the return values (the percentages) and the geographic/data-source scope, which covers what an agent needs. Missing only usage routing and any behavioral caveats.

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?

Only one parameter and schema coverage is 100%, so the schema already documents 'city' with examples. The description adds the useful scope note that it works for any US city, but nothing about syntax or formats beyond the schema. Baseline 3 applies.

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 data domain (census geographic mobility) and the exact metric returned (percent moved in from another state/abroad vs stayed). This clearly separates it from generic siblings like query_demographics or query_city_data, though it never names an alternative.

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

Usage Guidelines2/5

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

No when-to-use guidance, no exclusions, and no mention of alternatives among the many query_* siblings. The agent must infer that this is for migration/mobility questions purely from the topic.

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

query_national_crimeQuery Crime StatisticsA

Query crime data for a city in the US, UK, or Canada.

US: FBI UCR — state-level violent/property crime, homicide, robbery, assault, multi-year trends. UK: data.police.uk — street-level crime by category (anti-social behaviour, burglary, robbery, violence, etc.). CA: StatCan UCR — Crime Severity Index, violent/non-violent CSI, homicide rate (CMA level).

Country auto-detected or specify with country parameter.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityYesCity name (e.g., 'Denver', 'Manchester', 'Toronto')
countryNoCountry code. Auto-detected from city name if omitted. Required for ambiguous cities like London, Birmingham, Richmond, Hamilton, Cambridge, Windsor.

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, and it does disclose meaningful behavioral traits: geographic granularity differs by country (US state-level, UK street-level, CA CMA-level) and UK data is reported by category. It says nothing about authentication, rate limits, data freshness/lag, or the shape of the result, which leaves real gaps for a data-retrieval tool.

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 purpose sentence followed by a tight, scannable per-country breakdown and a one-line note on country handling. Every sentence carries information and nothing is padded.

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 query tool with no output schema and no annotations, the description supplies the key context an agent needs: what each country returns and at what granularity. It is nearly complete, missing only return-format or data-freshness detail that an agent might benefit from.

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 both 'city' (with examples) and 'country' (enum plus auto-detect and ambiguous-city note). The description largely restates the auto-detection behavior, so baseline 3 is appropriate.

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 names a specific verb and resource ('query crime data') and scopes it to three countries, with per-country detail on the underlying sources (FBI UCR, data.police.uk, StatCan UCR). It clearly distinguishes the tool from non-crime siblings like query_public_health or query_demographics by domain, though it does not name any sibling 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 domain (call it when you need crime statistics) and it usefully notes that country is auto-detected and required for ambiguous cities such as London or Birmingham. However, it gives no explicit when-to-use vs alternative guidance and names no competing sibling tool.

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

query_permitsQuery Building PermitsB

Building permit trends from the Census Bureau's Building Permits Survey. US only. Shows 5-year trend (2020-2024) of permits and housing units authorized at the county level.

52 cities available. Rising permits = development activity; declining = slowdown.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityYesCity name (e.g., 'Austin', 'Phoenix', 'Seattle')

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations, the description must carry the behavioral burden; it discloses the data source, geographic limit (US only), granularity claim, and time window (2020-2024), which is genuinely useful. It says nothing about data freshness, caching, pagination, or return shape, and the 'county level' claim sits oddly against a city-only parameter.

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?

Two short, front-loaded paragraphs with no filler; the source and scope come first and availability second. Slight redundancy/ambiguity around cities vs. county-level output keeps it from a 5.

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?

No output schema or annotations exist, so the description does the heavy lifting and mostly succeeds: source, scope, timeframe, and dataset size are all covered. The unresolved city-vs-county granularity is the one real gap for an agent deciding whether the result matches its need.

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% for the single 'city' parameter, so the baseline is 3. The description adds the useful constraint '52 cities available', but the stated county-level granularity conflicts with the city-only input rather than clarifying it.

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?

Names a specific resource (building permit trends) with source (Census Bureau Building Permits Survey) and scope (US only, 5-year 2020-2024 trend). This clearly separates it from siblings like query_housing or query_city_data, though it never explicitly names the adjacent alternative.

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

Usage Guidelines2/5

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

No when-to-use or when-not-to-use guidance relative to siblings such as query_housing, query_city_data, or query_economics. The line 'Rising permits = development activity; declining = slowdown' is interpretation help, not selection guidance.

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

query_public_healthQuery Public Health DataA

Get public health indicators from CDC PLACES for a US city. Returns 30+ measures including obesity, diabetes, depression, mental health, smoking, binge drinking, insurance coverage, food insecurity, housing insecurity, loneliness, and disability rates.

Data from BRFSS (Behavioral Risk Factor Surveillance System). Covers 500+ US cities. No API key needed.

Great for: understanding community health challenges, anchoring social media health discussions with data.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityYesCity name (e.g., 'Denver', 'Austin', 'NYC')

TDQS

A3.7/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does disclose meaningful behavioral facts: data provenance (BRFSS/CDC PLACES), coverage breadth (500+ cities, 30+ measures), and no API key required. It omits error behavior and rate limits, keeping it 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.

Conciseness4/5

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

Front-loaded with the core action and source, then measure list, then usage hint. Efficient overall, though the trailing 'Great for' sentence leans slightly promotional.

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?

No output schema exists, but the description enumerates the returned measure categories, which largely compensates. Provenance and coverage are also covered; only return format specifics (units, aggregation level) are missing.

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% for the single 'city' parameter, so the schema already documents the format and examples. The description adds nothing beyond it, making the baseline 3 appropriate.

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+resource (get public health indicators) and names the data source (CDC PLACES) plus scope (US city). It clearly distinguishes from domain-different siblings like query_employment or query_weather, though it never names a sibling 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?

The 'Great for' line implies usage contexts (community health understanding, social media anchoring) but offers no explicit when-not conditions and no routing to alternatives like query_city_data or query_demographics.

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

query_representativesQuery Elected RepresentativesA

Look up elected officials for a city in the US, UK, or Canada.

US: Google Civic — federal, state, local officials. Requires GOOGLE_CIVIC_API_KEY. UK: TheyWorkForYou — MPs, constituency. Requires TWFY_API_KEY. CA: Represent (Open North) — federal MP, provincial MLA/MPP, municipal councillors. No API key needed.

Country auto-detected or specify with country parameter.

ParametersJSON Schema
NameRequiredDescriptionDefault
addressYesCity name or address (e.g., 'Denver', 'Manchester', 'Toronto')
countryNoCountry code. Auto-detected from city name if omitted. Required for ambiguous cities like London, Birmingham, Richmond, Hamilton, Cambridge, Windsor.

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses per-country auth requirements (GOOGLE_CIVIC_API_KEY, TWFY_API_KEY, none for CA), the source backends, and the auto-detection behavior. It omits error behavior, rate limits, and coverage limitations, keeping it 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?

Front-loaded purpose followed by a compact per-country block; every line (provider, official level covered, key requirement) carries information an agent needs before calling. No filler sentences.

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 2-parameter lookup with no output schema or annotations, the description covers the essentials: sources, auth, geographic scope, and the level of officials returned per country. It does not describe the response shape or attribution requirements, which is a minor gap given no 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 coverage is 100%, so both parameters are already documented in the schema, including the auto-detection and ambiguous-city rule. The description restates the country override rather than adding format or resolution detail beyond the structured fields, matching the baseline for high coverage.

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 ('look up elected officials') and scopes it to three countries with named upstream providers. It is immediately distinguishable from demographic, crime, or transit siblings, which query statistics rather than officeholders.

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 clear context for use: which backend serves each country, which require API keys, and that country is auto-detected or can be overridden. It stops short of naming alternatives or stating when not to use it, so it is context-rich but not routing-complete.

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

query_schoolsQuery School DataA

School data for a city in the US or UK.

US: NCES — enrollment, student-teacher ratios, finance data (52 cities). UK: DfE GIAS — school counts, types, Ofsted ratings by local authority. CA: Not yet available.

Country auto-detected or specify with country parameter.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityYesCity name (e.g., 'Denver', 'Manchester', 'Austin')
countryNoCountry code. Auto-detected from city name if omitted. Required for ambiguous cities like London, Birmingham, Richmond, Hamilton, Cambridge, Windsor.

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full behavioral burden. It does disclose valuable coverage limits (US limited to 52 cities, CA unsupported) and the underlying data sources (NCES, DfE GIAS), but says nothing about permissions, rate limits, response shape, or whether results are read-only snapshots.

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 core purpose, then organizes the data-source detail by country in a scannable structure. Every line earns its place, though the standalone 'CA: Not yet available.' line could be folded in without loss.

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 no output schema, the description does the work of indicating what data comes back per country, which is the right thing to cover. The 52-city US limitation is a helpful completeness note, though the exact response structure and any pagination or result-count behavior remain unstated.

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 the schema already documents both city and country, including the ambiguous-city rule. The description only restates auto-detection with the country parameter, adding no syntax or format detail beyond the schema. Baseline 3 applies.

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 (school data) and immediately enumerates what is returned per country — enrollment, student-teacher ratios, finance (US); school counts, types, Ofsted ratings (UK). An agent can tell this apart from siblings like query_demographics or search_uk_datasets from the description alone.

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?

It implies when the tool applies by scoping geography (US/UK supported, CA 'not yet available'), which usefully prevents misuse for Canadian cities. However, it names no alternative tool and gives no explicit when-to-use guidance relative to siblings such as search_uk_datasets or query_city_data.

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

query_trafficQuery Traffic Safety & CongestionB

Traffic safety data from NHTSA FARS and TTI congestion metrics. US only. Returns fatal crash statistics (2019-2022) including pedestrian, cyclist, and alcohol-related breakdowns.

County-level data as primary view with state-level context. Congestion data for 33 metros.

No API key needed. Works for any US city via geo-resolver.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityYesCity name (e.g., 'Denver', 'Austin', 'NYC')

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It does usefully disclose data vintage (2019-2022), coverage limits (county primary view, congestion only for 33 metros), and that no API key is required. However it omits response behavior, error handling, and anything about result size or freshness beyond the fixed year range.

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 data sources and scope, then coverage caveats. Every sentence carries information, though the staging of 'No API key needed' and the geo-resolver line is slightly disjointed from the rest.

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 no output schema, the description steps in to describe return contents (fatal crash statistics with pedestrian, cyclist, and alcohol breakdowns) and the county/state granularity. That is enough to call it correctly, though it doesn't hint at response shape or volume.

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?

There is a single parameter with 100% schema description coverage and inline examples ('Denver', 'Austin', 'NYC'). The description adds no format or naming guidance beyond the geo-resolver claim, so the schema does the work and a baseline 3 applies.

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 names a specific topic (traffic safety + congestion) and its underlying datasets (NHTSA FARS, TTI), which clearly distinguishes it from siblings like query_transit or query_city_data. It never explicitly contrasts itself with those alternatives, but the resource 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 Guidelines2/5

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

It states the geographic constraint ('US only') and that any US city works via the geo-resolver, but there is no when-to-use guidance, no mention of when to prefer query_transit or query_city_data, and no exclusions. The agent must infer the use case entirely.

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

query_transitQuery Public Transit / TransportA

Public transit and transport data for a city in the US or UK.

US: NTD — ridership by agency and mode, service hours, efficiency (53 cities). UK: DfT — road traffic, bus passengers, rail station usage (8 major cities). CA: Not yet available.

Country auto-detected or specify with country parameter.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityYesCity name (e.g., 'NYC', 'Manchester', 'Chicago')
countryNoCountry code. Auto-detected from city name if omitted. Required for ambiguous cities like London, Birmingham, Richmond, Hamilton, Cambridge, Windsor.

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It usefully discloses the underlying data sources and the unavailability of CA coverage, but says nothing about return format, data recency, pagination, or any auth/rate constraints an agent would need to set expectations.

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 text is short and front-loaded with the core purpose, then bullets the country coverage compactly. The bulleted fragments read slightly telegraphically but waste no words.

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 two-parameter, no-output-schema query tool, the description covers scope, sourcing, country handling, and a coverage gap (CA). What remains missing is how results are returned, but that is a minor gap given the tool's simplicity.

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, including the auto-detection rule and the ambiguous-city caveat. The description largely restates that same auto-detection behavior, adding little semantics beyond the schema, so the baseline 3 applies.

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

Purpose4/5

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

The description states a specific resource (public transit/transport data) and breaks it down by source and country (NTD ridership, DfT road/bus/rail), which lets an agent distinguish this from siblings like query_traffic or query_city_data. It stops short of naming an alternative tool directly, so it lands at a solid 4 rather than 5.

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?

It gives useful operational context – country auto-detected, CA not yet available, and that ambiguous city names require the country parameter. However, it never says when to choose this tool over query_traffic or search_uk_datasets, so usage selection remains implied rather than explicit.

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

query_waterQuery Water ConditionsB

Get real-time water monitoring data for a city in the US, UK, or Canada.

US: USGS — streamflow, gage height, water temperature. No API key needed. UK: Environment Agency — water levels, flow rates, flood warnings (England only). No API key needed. CA: MSC Hydrometric — water levels, discharge. No API key needed.

Country auto-detected or specify with country parameter.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityYesCity name (e.g., 'Denver', 'Manchester', 'Toronto')
countryNoCountry code. Auto-detected from city name if omitted. Required for ambiguous cities like London, Birmingham, Richmond, Hamilton, Cambridge, Windsor.

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the full behavioral burden. It discloses data sources and that no API key is needed, which is useful. However, it omits critical behavior: error handling for unsupported cities, rate limits, data freshness/update frequency, and what the response 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?

Information is front-loaded with the core purpose, then structured by country. Sentences are efficient and earn their place. Could be slightly tighter by combining the country bullets.

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

Completeness3/5

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

For a tool with 2 parameters (one enum) and no output schema, the description covers the essentials of what data is returned and source constraints. However, it lacks error behavior, output format details, and explicit tool selection guidance, leaving gaps for correct invocation.

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 baseline is 3. The description adds marginal value by listing the countries supported and noting auto-detection, but it doesn't provide additional syntax or format details beyond what the schema already documents.

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 ('Get') and resource ('real-time water monitoring data') with clear scope (US/UK/CA cities). Distinguishes itself from siblings like query_weather or query_air_quality by naming the data sources and metrics (streamflow, levels, discharge). However, it doesn't explicitly explain how it differs from query_city_data, which might be a broader aggregator.

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?

Implicitly tells when to use it (need real-time water data for a supported country), but provides no explicit when-not-to-use criteria or named alternatives. The country auto-detection and ambiguity warning imply usage context but don't guide selection among sibling tools.

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

query_weatherQuery City WeatherA

Get current weather conditions and forecast for a city in the US, UK, or Canada.

US: National Weather Service — conditions, forecast, alerts. No API key needed. UK: Met Office DataHub — hourly forecast. Requires METOFFICE_API_KEY. CA: MSC GeoMet — current conditions and forecast. No API key needed.

Country auto-detected or specify with country parameter.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityYesCity name (e.g., 'Denver', 'Manchester', 'Toronto')
countryNoCountry code. Auto-detected from city name if omitted. Required for ambiguous cities like London, Birmingham, Richmond, Hamilton, Cambridge, Windsor.

TDQS

A4.2/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden, and it does well: it discloses the upstream data source per country (NWS, Met Office DataHub, MSC GeoMet), the auth prerequisite for the UK (METOFFICE_API_KEY), and which providers need no key. It does not mention rate limits, failure behavior, or pagination, so it stops short of full behavioral coverage.

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 core purpose, then a compact per-country breakdown where each line earns its place. No redundancy or filler.

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 no output schema and no annotations, the description must carry the definition, and it covers coverage area, data sources, auth needs, and roughly what is returned (conditions, forecast, alerts). It could be slightly more complete by describing the response shape or error cases, but nothing essential for a correct call is missing.

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 coverage is 100%, and both parameters (city, country enum with auto-detection and ambiguity notes) are fully documented in the schema itself. The description restates country auto-detection and the ambiguous-city case but adds no syntax or format detail beyond structured data, so the baseline 3 applies.

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+resource ('Get current weather conditions and forecast') with an explicit geographic scope (US, UK, or Canada). It is immediately distinguishable from siblings like query_air_quality or query_water 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 Guidelines4/5

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

Gives clear context for how the tool behaves per country and how to disambiguate, and explicitly notes the UK path requires METOFFICE_API_KEY. However, it never states when to prefer this tool over an alternative (e.g., air quality or UK dataset search), so the routing guidance is implied rather than explicit.

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

search_uk_datasetsSearch UK Open DataB

Search the UK government's open data catalogue (data.gov.uk).

Returns dataset titles, publishers, formats, and links. No API key required.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum results to return (default 10)
queryYesSearch query (e.g., 'air quality', 'crime statistics', 'housing')

TDQS

B3.4/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral disclosure burden. It notes 'No API key required' and that results include titles, publishers, formats, and links, which is useful. But it omits rate limits, pagination behavior, whether the search supports filtering, and failure modes. This is a thin behavioral profile for a network-backed search tool.

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?

Three short sentences: purpose, return fields, and an operational note. Every sentence delivers information and is front-loaded with the primary action. No filler or redundancy.

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

Completeness3/5

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

For a simple two-parameter search tool with a fully documented schema and no output schema, the description covers the essentials: what it searches, what it returns, and that no auth is needed. However, without annotations it should do more to explain return shape (e.g., result count limits, pagination), and it doesn't help distinguish from the many sibling query tools. It is minimally complete but leaves gaps.

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. The description adds a concrete example of the catalogue domain ('data.gov.uk') and mentions the returned fields, which slightly enriches understanding of what the query parameter targets, but it doesn't add parameter syntax or format detail beyond the schema. The example-driven schema already provides good guidance, so the description is adequate but adds marginal value.

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 states a clear verb+resource: 'Search the UK government's open data catalogue (data.gov.uk).' This distinguishes it from the many query_* siblings that appear to target specific data domains (crime, housing, weather, etc.), since this is a general catalogue search. However, it does not explicitly name or contrast with those siblings to help an agent choose.

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?

The description implies usage by naming the catalogue to search, but offers no explicit when-to-use guidance or alternatives. Siblings like list_available_data or the numerous query_* tools could overlap, yet the description doesn't state when this broad search is preferable. No exclusions or prerequisites are given.

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

track_city_changesTrack City Changes Over TimeA

Show how a city is changing — what's improving, declining, or holding steady. Pulls trend data from BLS (unemployment), FRED (economics), FBI (crime), building permits, and 311 complaints.

Returns a directional dashboard: each metric tagged as improving, declining, or stable with supporting data. Great for spotting momentum or emerging problems.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityYesCity name (e.g., 'Denver', 'Austin', 'NYC')

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries full burden and does meaningful work: it discloses the underlying data sources, the return structure (per-metric improving/declining/stable tags), and the analytical framing. It omits anything about auth requirements, rate limits, latency, or data freshness, which are the remaining gaps.

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 core purpose, then supporting sources, then output shape. Mostly earns its place, though 'Great for spotting momentum or emerging problems' is soft marketing filler that a stricter version would cut.

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 one-parameter read-only aggregate with no output schema and no annotations, the description gives enough: what it aggregates, what it returns, and the directional tagging scheme. Only the absence of any data-source caveats or freshness notes keeps it from 5.

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?

Single parameter with 100% schema description coverage, so the schema already documents 'city' fully with examples. The description adds nothing about city syntax (e.g., supported formats, whether metro areas count), so baseline 3 applies.

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+resource ('show how a city is changing') and immediately names the aggregation scope — BLS, FRED, FBI, permits, 311 — which distinguishes it from the single-domain siblings like query_employment or query_311_trends. The output shape ('directional dashboard') is also stated, so an agent can tell what it gets 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 Guidelines4/5

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

Gives clear context ('spotting momentum or emerging problems'), which tells the agent this is a trend/aggregate tool rather than a raw-data query. However, it never names an alternative or states a when-not condition (e.g., use query_city_data for raw values), so the exclusion guidance is absent.

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. 28 tool updatesv0.2.0
    • First observedcompare_demographics
    • First observedcreate_census_cohort
    • First observedcreate_city_briefing
    • First observedcreate_full_cohort
    • First observedlist_available_data
    • First observedmap_issue_data
    • First observedquery_311_trends
    • First observedquery_air_quality
    • First observedquery_budget
    • First observedquery_city_data
    • First observedquery_cost_of_living
    • First observedquery_demographics
    • First observedquery_economics
    • First observedquery_employment
    • First observedquery_homelessness
    • First observedquery_housing
    • First observedquery_migration
    • First observedquery_national_crime
    • First observedquery_permits
    • First observedquery_public_health
    • First observedquery_representatives
    • First observedquery_schools
    • First observedquery_traffic
    • First observedquery_transit
    • First observedquery_water
    • First observedquery_weather
    • First observedsearch_uk_datasets
    • First observedtrack_city_changes

TDQS

A3.5/5.0

Scored across 28 tools

Disambiguation3/5

Most query_* tools target distinct datasets and domains, and descriptions often clarify when to use alternatives. However, query_city_data overlaps with query_311_trends and query_national_crime, while meta-tools like map_issue_data and create_city_briefing overlap with individual query tools, creating several ambiguous boundaries.

Naming Consistency5/5

Tool names consistently follow a snake_case verb_noun pattern: query_*, create_*, compare_*, list_*, map_*, track_*, search_*. Minor variations like query_311_trends and query_cost_of_living remain readable and within the same convention.

Tool Count2/5

With 28 tools, the server exceeds the ideal range and falls into the 25+ category, which is heavy for an agent to navigate. While the broad city-data domain explains some breadth, several tools could be parameterized or consolidated instead of exposed individually.

Completeness4/5

The surface covers a wide range of city data domains, including demographics, crime, economics, housing, transit, schools, health, and government budgets, plus aggregation tools. There are minor gaps in country coverage, such as Canada lacking transit, schools, budget, and traffic tools, but agents can work around these limitations.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    An MCP server that gives LLM agents typed, cached access to civic open-data portals via Socrata (SODA 2.1 + Discovery API), enabling search, query, profiling, sampling, and CSV export of datasets.
    6
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Remote MCP server exposing US Census (ACS 5-year) and FEMA flood data. Works as a connector in both Claude and ChatGPT.
    -