Skip to main content
Glama
chris-page-gov

mcp-geo

MCP Geo Server

A research Model Context Protocol (MCP) server for geospatial (Ordnance Survey) and statistical (Office of National Statistics) data. If you have Docker installed and Internet access, have this running in 3 minutes.

Public Launch Caveat

This repository is a personal development project. It is not production code and is not approved by Warwickshire County Council or the Department for Science, Innovation and Technology.

All opinions expressed, decisions made, and implementation choices documented in this repository come from a novice learning the opportunities afforded by emerging AI and MCP technology.

This repository is a diary of that learning journey, not a recommended course of action and not a formal proposal.

Related MCP server: ontario-data-mcp

Start here — run the server and ask it a question

This section is for first-time users. You do not need to understand MCP or the internal architecture — just follow the steps and your AI assistant will gain UK geographic and statistics awareness.

1) Get access key (2 minutes)

Create a free Ordnance Survey Data Hub key:

Optional:

  • NOMIS_UID and NOMIS_SIGNATURE if you want higher-rate NOMIS access

You only need the OS API key for the default live setup. The ONS live endpoints used by MCP-Geo do not require a separate ONS API key.

2) Run the server in a folder

git clone https://github.com/chris-page-gov/mcp-geo.git
cd mcp-geo
cp .env.example .env

Path portability note:

  • Any absolute path shown later in this README is an example, not a required location.

  • Replace maintainer-specific examples such as /Users/... or /Volumes/... with paths that exist on your machine.

  • The main path-bearing settings are ADDRESSBASE_PREMIUM_XREF_PATH, LANDIS_LOCAL_DATA_ROOT, LANDIS_PORTAL_ARCHIVE_DIR, LANDIS_FULL_RELEASE_ARCHIVE_DIR, BOUNDARY_RUNS_DIR, BOUNDARY_RUNS_SEARCH_DIRS, and, for GUI-launched wrappers on macOS, MCP_GEO_DOCKER_BIN.

  • Docker-backed local wrappers (scripts/claude-mcp-local, scripts/codex-mcp-local, scripts/mcp-docker-local) now hydrate those path-bearing settings from the repo .env and mount the configured host paths into the container automatically.

  • Generated reports, research artifacts, and knowledge-base outputs in this repo may embed the maintainer's local paths; they are evidence artifacts, not portable setup inputs.

Open .env and paste the required key:

OS_API_KEY=your-key-here
OS_API_AUTH_MODE=query

Do not add quote marks around .env values. Set either OS_API_KEY or OS_API_KEY_FILE, not both. For a secret-file setup and first-run OS Data Hub account details, use docs/os_data_hub_public_account_setup.md.

Optional:

NOMIS_UID=your-nomis-uid
NOMIS_SIGNATURE=your-nomis-signature

Now build the MCP server image:

docker build -t mcp-geo-server .

The STDIO server is normally started by your MCP client. A manual docker run -i --env-file .env mcp-geo-server waits for JSON-RPC on stdin and may print nothing until a request arrives.

Or skip the build and replace mcp-geo-server in the smoke test below with the pre-built image:

ghcr.io/chris-page-gov/mcp-geo:latest

3) Verify it works

Send a JSON-RPC request that includes an id:

printf '%s\n' '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' \
  | docker run --rm -i --env-file .env mcp-geo-server

If JSON tool definitions appear, the server is working. Requests without an id are JSON-RPC notifications, so the STDIO adapter correctly sends no response.


4) Connect your AI assistant

Example: Claude Desktop configuration

{
  "mcpServers": {
    "geo": {
      "command": "docker",
      "args": ["run", "-i", "--env-file", "/absolute/path/to/mcp-geo/.env", "mcp-geo-server"]
    }
  }
}

Replace /absolute/path/to/mcp-geo/.env with the actual path to your .env file. See .env.example for available settings; at minimum you need OS_API_KEY.

Or use the pre-built image in the same Claude Desktop config:

{
  "mcpServers": {
    "geo": {
      "command": "docker",
      "args": ["run", "-i", "--env-file", "/absolute/path/to/mcp-geo/.env", "ghcr.io/chris-page-gov/mcp-geo:latest"]
    }
  }
}

Restart Claude Desktop.


5) Ask a real question

Try:

“Which administrative areas contain postcode SW1A 1AA?” “Describe the geography hierarchy around this coordinate 52.4862, -1.8904” “Is this location inside an AONB?”

If the assistant answers using real UK geography — everything is working.


What you just did

You connected an AI assistant to live UK spatial data via the Model Context Protocol.

The server runs locally on your machine and calls:

  • Ordnance Survey APIs

  • ONS statistical geography services

  • NOMIS datasets

No data is stored or redistributed.


MCP Specification

See Latest stable specification target. The MCP 2026-07-28 release candidate is tracked, but not the default runtime protocol. Tracking and review cadence live in docs/spec_tracking.md; the current RC alignment ledger is Plans/PLAN-MCP-2026-07-28-RC-alignment.md. OpenAI's Documentation MCP guide is at https://developers.openai.com/resources/docs-mcp, with the shared server available at https://developers.openai.com/mcp (preview; tracked in docs/spec_tracking.md).

Protocol negotiation behavior:

  • Preferred MCP core protocol revision: 2025-11-25

  • Supported MCP core protocol versions: 2025-11-25, 2025-06-18, 2025-03-26, 2024-11-05

  • Opt-in release-candidate protocol: 2026-07-28 when MCP_2026_RC_ENABLED=1 or MCP_PROTOCOL_2026_07_28_ENABLED=1

  • Streamable HTTP enforces MCP-Protocol-Version when provided and returns negotiated mcp-protocol-version on responses

  • In RC mode, /mcp supports server/discover, stateless requests without Mcp-Session-Id, per-request _meta, strict Mcp-Method / Mcp-Name validation, cache metadata on list/read results, MRTR-style input-required responses for supported elicitation flows, and JSON Schema 2020-12 guardrails

  • MCP-Apps extension tracked at 2026-01-26 (io.modelcontextprotocol/ui)

Key Features

  • MCP endpoints: /mcp (streamable HTTP JSON-RPC), /tools/list, /tools/call, /tools/describe, /tools/search, /resources/list, /resources/describe, /resources/read

  • Uniform error envelope and pagination (nextPageToken)

  • Dynamic tool registration with schema introspection

  • Tool annotations + defer-loading metadata for tool search integrations

  • Agent skills resource (skills://mcp-geo/getting-started)

  • MCP-Apps UI resources (ui://mcp-geo/...) with helper os_apps.* tools

  • pgRouting-backed route planning surface (os_route.get, os_route.descriptor)

  • Svelte playground UI for MCP tool calls, prompt capture, and auditing

  • Routing tool os_mcp.route_query for intent classification and workflow guidance

  • Structured logging & correlation IDs

  • OS API client with retries and explicit upstream error codes

  • High coverage test suite exercising success + failure paths

  • Evaluation harness with question suite and scoring rubric

Developer setup

git clone <repo-url>
cd mcp-geo
pip install -e .[test]
uvicorn server.main:app --reload

Then visit:

  • GET /health

  • GET /tools/list

  • GET /tools/describe

  • POST /tools/call with { "tool": "os_places.by_postcode", "postcode": "SW1A1AA" }

  • POST /mcp with {"jsonrpc":"2.0","id":"1","method":"tools/list","params":{}}

Set OS_API_KEY in the environment (or .env) for Ordnance Survey API-key calls. OS_API_AUTH_MODE=query is the default and sends the key as the documented key query parameter. OS_API_AUTH_MODE=header sends the same project key in the documented key header. OS_API_AUTH_MODE=bearer sends OS_API_ACCESS_TOKEN as an OAuth2 bearer token; MCP-Geo does not mint OS OAuth tokens itself, so the caller must refresh that token out of band. Missing or invalid credentials return NO_API_KEY, OS_API_KEY_INVALID, or OS_API_KEY_EXPIRED.

If MCP HTTP auth is enabled, only GET /health remains public. The raw HTTP tool, resource, metrics, and playground routes all require the same bearer auth policy as POST /mcp.

Canonical Map Delivery Baseline

Use this order for reliable cross-host map delivery:

  1. os_maps.render (static contract baseline; works without widgets)

  2. overlay_bundle layers for map annotations and features

  3. os_apps.render_* widgets only when the host advertises MCP-Apps UI support

  4. Explicit fallback skeletons (map_card, overlay_bundle, export_handoff)

References:

  • docs/spec_package/06_api_contracts.md

  • docs/spec_package/06a_map_delivery_fallback_contracts.md

  • docs/map_delivery_support_matrix.md

  • docs/map_embedding_best_practices.md

  • docs/simple_map_lab.md (minimal auth + PMTiles exploration runbook)

Getting Started (User Guide)

See docs/getting_started.md for a quick way to discover available data, run MCP Inspector or the playground UI, and explore tools/resources.

Full Specification Package

For a complete design specification (aims, personas, architecture, scenarios, diagrams, backlog), see docs/spec_package/README.md.

UK Public Sector AI Community Documentation Set

For the full repository journey narrative (novice-readable chapters, timeline, evaluation, troubleshooting evidence index, and extension planning), see:

  • docs/public_sector_ai_community/README.md

For publication output (LaTeX / Prism-ready with ToC and bibliography), see:

  • docs/public_sector_ai_community/prism/main.tex

Codex Context (Mac App)

  • Use CONTEXT.md as the durable project context for Codex across environments.

  • If you use the Codex Mac app, open this repo as a project and read CONTEXT.md at session start.

  • The repo MCP configs include openaiDeveloperDocs (https://developers.openai.com/mcp) so OpenAI/Codex/API/App SDK docs can be read through MCP instead of the legacy docs/vendor/openai/ copies.

  • Codex app documentation: https://developers.openai.com/codex/app/

  • Codex app features: https://developers.openai.com/codex/app/features

Docker (STDIO / Claude Desktop)

Build the image:

docker build -t mcp-geo-server .

Or pull the pre-built multi-arch image:

docker pull ghcr.io/chris-page-gov/mcp-geo:latest

Available tags:

  • latest for the default branch image

  • <sha> for a specific commit image

  • <version> for release tags such as 0.8.0

The published image targets linux/amd64 and linux/arm64. For the Docker MCP catalog submission draft and validation checklist, see docs/docker_mcp_catalog_submission.md.

Claude Desktop config example (STDIO transport):

{
  "mcpServers": {
    "mcp-geo": {
      "command": "/absolute/path/to/mcp-geo/scripts/claude-mcp-local",
      "env": {
        "OS_API_KEY": "${env:OS_API_KEY}",
        "OS_API_KEY_FILE": "${env:OS_API_KEY_FILE}",
        "MCP_STDIO_UI_SUPPORTED": "1",
        "MCP_STDIO_FRAMING": "line",
        "MCP_STDIO_ELICITATION_ENABLED": "1"
      }
    }
  }
}

The wrapper script builds and starts the repo's PostGIS+pgRouting sidecar image locally (Docker), bootstraps the boundary-cache and route-graph schemas idempotently, builds the app image if needed, and runs STDIO with the cache/routing DSNs pointed at that sidecar. Set either OS_API_KEY or OS_API_KEY_FILE in the host environment (if both are set, OS_API_KEY wins). Use MCP_GEO_DOCKER_BUILD=always|missing|never to control rebuild behavior. By default it now stores PostGIS data in a Docker named volume (mcp-geo-postgis-claude) and uses the dedicated sidecar container/network names mcp-geo-postgis-claude / mcp-geo-claude, so raw database files are not written into the repo and Claude no longer shares a fallback volume with other host-side wrappers. Set MCP_GEO_POSTGIS_STORAGE_MODE=bind only if you explicitly want a host path mount (MCP_GEO_POSTGIS_DATA_DIR). Set MCP_GEO_POSTGIS_VOLUME differently per worktree if you want isolated local PostGIS state for each branch workspace. Override MCP_GEO_POSTGIS_IMAGE only if you need a different pgRouting-capable tag. The repo-local image currently builds on postgis/postgis:16-3.4, which is upstream-amd64-only for this tag, so Apple Silicon still runs the sidecar as linux/amd64 under Docker emulation. The generic scripts/mcp-docker-local fallback now uses its own default sidecar identity (mcp-geo-postgis-sidecar on network mcp-geo-sidecar), and the devcontainer defaults to a separate named volume mcp-geo-postgis-devcontainer, so the normal host wrappers no longer collide with the devcontainer cache by default. If a sidecar fails to become ready, the wrapper now inspects the recent Postgres logs and calls out checkpoint-corrupted volumes explicitly instead of only timing out. Wrapper-managed PostGIS sidecars no longer publish 5432 to the host by default; set MCP_GEO_POSTGIS_PUBLISH_PORT only when you explicitly need host access to that sidecar database. Docker-backed host wrappers now default to isolated PostGIS sidecars per client. That is the anti-corruption default and should remain the normal operator assumption. For comparison runs, use ./scripts/check_shared_benchmark_cache.sh before launching the clients:

  • default isolated mode verifies Claude, Codex, and Gemini are each using their dedicated sidecar with matching mounted data roots and matching cache counts

  • opt-in shared mode is available only when you explicitly set MCP_GEO_POSTGIS_REUSE_DEVCONTAINER=1 and MCP_GEO_BENCHMARK_CACHE_MODE=shared, which makes every wrapper reuse the same devcontainer PostGIS container

If Docker isn't on the GUI PATH (common on macOS), set MCP_GEO_DOCKER_BIN in Claude Desktop to the absolute Docker path (for example /opt/homebrew/bin/docker).

Before demos, run the readiness check:

./scripts/prepare-for-demo

It verifies that the checkout matches origin/main, the local mcp-geo-server Docker image was built after that ref, stale app containers are not still running, the Claude/Codex/Gemini wrappers resolve as expected, and .vscode/mcp.json is present. If the image is stale, either rebuild it directly or rerun the check with --rebuild:

./scripts/prepare-for-demo --rebuild

Optional HTTP transport:

./scripts/mcp-http-demo-local

The HTTP demo launcher uses the same Docker wrapper hydration as the STDIO client wrappers: it reads OS_API_KEY / OS_API_KEY_FILE, mounts ONS/OS cache directories when present, enables the MCP 2026 release-candidate flag by default, and starts http://127.0.0.1:8000/mcp for HTTP-capable clients such as Codex, VS Code, Inspector, and Claude Code HTTP connections. If you are running from a clean worktree but want to reuse an existing checkout's .env and cache paths, set MCP_GEO_ENV_FILE=/absolute/path/to/mcp-geo/.env before launching.

Tip: Replace mcp-geo-server with ghcr.io/chris-page-gov/mcp-geo:latest in any Docker command to use the pre-built image instead of a local build.

Tutorial

See docs/tutorial.md for an evaluation-style walkthrough covering tool discovery, admin lookup, OS tools, ONS tools, resources/ETags, and STDIO.

Evaluation

See docs/evaluation.md for the question suite, rubric, and harness usage.

Research (ONS Dataset Selection)

See research/ons_dataset_selection/report.md for the ONS dataset selection research pack, including the taxonomy options, DataPack schema, sample DataPacks, and linking rules used to improve AI dataset selection and explainability.

Research (Map Delivery Interoperability)

See research/map_delivery_research_2026-02/README.md for the map delivery research pack covering personas, map delivery option analysis, containerized Playwright trials, screenshots/log evidence, and final recommendations for cross-client map reliability.

For validated host/browser behavior by capability mode, see docs/map_delivery_support_matrix.md. For notebook-to-resource scenario pack workflow, see docs/map_scenario_packs.md. For mixed-host embedding and constrained-style patterns, see docs/map_embedding_best_practices.md.

Client Tracing

See docs/client_trace_strategy.md for MCP traffic and MCP-Apps UI interaction capture using the stdio and HTTP trace proxies.

Tool Catalog (Epics B–D)

Tools are discoverable via /tools/list and rich metadata via /tools/describe. Discovery responses use sanitized tool names (for example os_places_by_postcode) for client compatibility; map back to canonical dotted names via annotations.originalName. Tool calls accept both sanitized and dotted names. Use toolset, includeToolsets, and excludeToolsets filters to focus discovery responses by capability groups (for example ons_selection, maps_tiles, apps_ui). For clients that always request tools/list with empty params, set MCP_TOOLS_DEFAULT_TOOLSET=starter (or MCP_TOOLS_DEFAULT_INCLUDE_TOOLSETS=<csv>) to keep initialization payloads small. For the current local development profile, the checked-in examples use MCP_TOOLS_DEFAULT_INCLUDE_TOOLSETS=ons_geo_lookup,property_tax,features_layers,landis_soils alongside starter so constrained hosts still see the active ONS geo, AddressBase/council-tax, map export, and LandIS surfaces. council_tax.band_lookup and council_tax.query are always loaded by default so MCP clients do not need a separate property-tax discovery step before using the council-tax surfaces.

Tool

Purpose

os_places.search

Free text address search

os_places.by_postcode

UPRNs + addresses for a postcode

os_places.by_uprn

Single address lookup

os_places.nearest

Nearest addresses to a coordinate

os_places.within

Addresses within bbox

os_names.find

OS Names gazetteer search for named places and features

os_names.nearest

Nearest named features

os_features.query

NGD features by bbox & collection

os_linked_ids.get

Relationship lookup between UPRN/USRN/TOID

os_maps.render

Static map render metadata (proxy URL)

os_vector_tiles.descriptor

Vector tiles style/source descriptor

os_offline.descriptor

Offline PMTiles/MBTiles pack catalog + retrieval contracts

os_offline.get

Offline map handoff payloads (map_card, overlay_bundle, export_handoff)

admin_lookup.containing_areas

Administrative area containment for a point

admin_lookup.reverse_hierarchy

Ancestor chain for an administrative area

admin_lookup.area_geometry

Bounding box geometry for an administrative or statistical area

admin_lookup.find_by_name

Boundary/admin area name search, including parish/PARNCP areas

council_tax.band_lookup

Experimental England/Wales Council Tax band lookup

council_tax.query

AddressBase Premium UPRN check for Council Tax and non-domestic rates

landis_catalog.list_products

LandIS callable product registry, exact thematic IDs, and access tiers

landis_metadata.get

LandIS product metadata, provenance, and linked resources

landis_soilscapes.point

LandIS Soilscapes class lookup for a WGS84 point

landis_soilscapes.area_summary

LandIS Soilscapes area composition summary

landis_derive.pipe_risk

LandIS-derived corrosion and shrink-swell pipe risk screening

ons_data.query

Query live ONS observations (dataset/edition/version or term)

ons_data.dimensions

List ONS observation dimensions for a live dataset

ons_data.get_observation

Retrieve a single live observation

ons_data.create_filter

Create a live ONS filter

ons_data.get_filter_output

Retrieve filter output in JSON/CSV/XLSX

ons_select.search

Rank ONS datasets with explainable scoring

ons_search.query

Search live ONS datasets (beta API)

ons_codes.list

List live dimension IDs

ons_codes.options

List live dimension options

nomis.datasets

List NOMIS datasets or dataset definitions

nomis.concepts

List NOMIS concepts

nomis.codelists

List NOMIS code lists

nomis.query

Query NOMIS datasets (JSON-stat/SDMX)

os_mcp.descriptor

Server capabilities and tool search configuration

os_mcp.route_query

Intent classification and tool/workflow recommendation

os_route.descriptor

Route solver capabilities, supported profiles, and graph readiness

os_route.get

Resolve stops and compute a graph-backed route

os_apps.render_geography_selector

Open the MCP-Apps geography selector widget

os_apps.render_statistics_dashboard

Open the MCP-Apps statistics dashboard widget

os_apps.render_feature_inspector

Open the MCP-Apps feature inspector widget

os_apps.render_route_planner

Open the MCP-Apps route planner widget backed by os_route.get

os_apps.render_ui_probe

Probe MCP-Apps UI rendering support

Use OS Names for gazetteer-style named-place and named-feature lookup, such as settlements, hamlets, villages, hills, woods, or other named map features. Use admin_lookup.* when you need an official boundary, hierarchy, containment, or geometry for a statistical/admin area. PARISH is the public normalized level for civil parishes, Welsh communities, and non-civil-parished areas; source fields remain PARNCP25CD, PARNCP25NM, and PARNCP25NW where present.

ons_geo.by_postcode, ons_geo.by_uprn, and ons_geo.area_summary expose normalized OA, LSOA, MSOA, PARISH, ward, district, region, and country fields when the local ONS cache has those source columns. House of Commons Library 2021 MSOA names are carried only as displayName labels with provenance; they do not replace the official ONS/RGC currentName.

Resources, Filtering & Provenance

The resources API exposes skills, UI widgets, and data resources (boundary manifest, cache status, and local ONS code cache entries).

  • GET /resources/list returns skill, UI, and data resource descriptors (with provenance metadata).

  • GET /resources/read?uri=skills://mcp-geo/getting-started returns skills guidance.

  • GET /resources/read?uri=ui://mcp-geo/geography-selector returns MCP-Apps UI HTML.

  • GET /resources/read?uri=resource://mcp-geo/landis-products returns the checked-in LandIS MVP registry.

LandIS Local Archive And Phase 2 Surface

LandIS now has two layers in this repo:

  • a validated MVP screening surface

  • an additive phase-2 local-archive surface for NATMAP, NSI, and archive discovery

The checked-in registry and prompt resources work offline. The phase-2 archive resources also work offline from the local mirror. Spatial queries still require a normalized PostGIS warehouse, but the source of truth for follow-on LandIS ingestion is now the local archive under ~/Data rather than a live portal session.

Use:

  • landis_catalog.list_products to discover the supported callable products, including the exact NATMAP thematic productId values accepted by landis_natmap.thematic_area_summary, plus linked resources and tool bindings.

  • landis_metadata.get to retrieve provenance and limitations for a specific LandIS product.

  • landis_soilscapes.point and landis_soilscapes.area_summary for generalized Soilscapes lookups.

  • landis_derive.pipe_risk for caveated corrosion and shrink-swell screening.

  • landis_archive.list_items and landis_archive.get_item to inspect the locally mirrored LandIS archive and its surfacing classification, including supplementary full-release items such as HOST, wetness, Series Hydrology, Series Leacs, and matched data.gov.uk package metadata.

  • landis_natmap.point, landis_natmap.area_summary, and landis_natmap.thematic_area_summary for local-archive-backed NATMAP map-unit and thematic summaries once loaded into PostGIS.

  • landis_nsi.nearest_sites, landis_nsi.within_area, and landis_nsi.profile_summary for explicit evidence-first NSI lookups once loaded into PostGIS.

Additional LandIS resources:

  • resource://mcp-geo/landis-portal-inventory

  • resource://mcp-geo/landis-archive-triage

  • resource://mcp-geo/landis-full-release-manifest

Reference documentation for the LandIS strategy and dataset surface is also now checked in as an Obsidian vault under Obsidian/LandIS Knowledge Base/, including the strategy PDF, dataset notes, use-case summaries, reference pages, and the MCP architecture roadmap in a form that can be browsed directly in Obsidian or as Markdown in the repo.

The repo now also carries a generated, repo-wide Obsidian knowledge base under Obsidian/MCP Geo Knowledge Base/. Unlike the LandIS example vault, this surface is built automatically from tracked repo content, excludes Obsidian/** from source scanning to avoid recursion, records commit-pinned GitHub links and source hashes in note frontmatter, and supports an ignored 98 Local Overlay/ subtree for machine-local trace/session evidence.

Refresh the canonical vault with:

python3 scripts/build_obsidian_kb.py \
  --mode canon \
  --git-ref WORKTREE \
  --output-root "Obsidian/MCP Geo Knowledge Base" \
  --manifest-out data/knowledge_base/obsidian_kb_manifest.json

Validate it with:

python3 scripts/validate_obsidian_kb.py \
  --manifest data/knowledge_base/obsidian_kb_manifest.json \
  --fail-on drift coverage recursion orphan

Enable the live warehouse with LANDIS_ENABLED=true, LANDIS_LIVE_ENABLED=true, and LANDIS_WAREHOUSE_DSN=.... Load normalized tables with python scripts/landis_ingest.py --dsn ... --soilscapes <file> --pipe-risk <file>. To inventory the authenticated LandIS portal itself from a local Atlas sign-in, run python scripts/landis_portal_inventory.py. The generated machine-readable catalog lands in research/landis-data-source/landis_portal_inventory_2026-04-04.json and the human-readable index lands in docs/reports/landis_portal_inventory_2026-04-04.md. To mirror the authenticated portal payloads to local storage, run python scripts/landis_portal_download.py --destination /absolute/path/to/Data/landis_portal_archive_2026-04-04. The downloader reuses the Atlas session, stores per-item metadata plus raw item payloads, and exports Feature Service layers/tables in chunked GeoJSON/JSON files under the destination root without storing the session token itself. To classify the local archive for runtime surfacing, run python scripts/landis_archive_triage.py. To ingest the local NATMAP and NSI phase-2 slice from ~/Data into PostGIS, run python scripts/landis_phase2_ingest.py --dsn .... The Docker wrapper scripts/mcp-docker-local now mounts the configured LandIS data root into the app container at /landis-data and sets LANDIS_LOCAL_DATA_ROOT there automatically. If no explicit root is configured it still falls back to ~/Data. It also hydrates and mounts any configured LANDIS_PORTAL_ARCHIVE_DIR, LANDIS_FULL_RELEASE_ARCHIVE_DIR, ADDRESSBASE_PREMIUM_XREF_PATH, BOUNDARY_RUNS_DIR, and BOUNDARY_RUNS_SEARCH_DIRS paths from the repo .env, so the normal mcp-geo + PostGIS container workflow can use repo-local data and external archives directly without copying raw mirrors into the image or database volume. On a fresh sidecar, the wrapper still auto-bootstraps the LandIS warehouse tables from the mounted data before it starts the stdio server: it runs scripts/landis_phase2_ingest.py for the portal-archive NATMAP/NSI slice and scripts/landis_ingest.py for the Warwickshire Soilscapes and pipe-risk validation layers. Expect the first start to take materially longer than a warm restart because this load is large. The verified phase-2 warehouse load currently covers NationalSoilMap, eight NATMAP thematic products, NSIsite, and six mirrored NSI observation datasets from the local archive, plus the existing Soilscapes and pipe-risk validation layers.

For a clean setup path aimed at a full spatial LandIS warehouse, use docs/landis_spatial_warehouse_setup.md. The recommended topology is still one MCP-Geo server with a PostGIS LandIS warehouse behind it; a separate LandIS MCP server is only a later governance, licensing, or performance-isolation decision.

  • GET /resources/read?uri=resource://mcp-geo/boundary-manifest returns the boundary manifest.

Skills and MCP-Apps Resources

In addition to data resources, MCP Geo exposes:

  • skills://mcp-geo/getting-started (Agent Skills guidance)

  • ui://mcp-geo/geography-selector

  • ui://mcp-geo/statistics-dashboard

  • ui://mcp-geo/feature-inspector

  • ui://mcp-geo/route-planner

Use GET /resources/read?uri=... to fetch these resources. When a host can call tools but cannot invoke protocol-level resources/read, use os_resources.get as the portable fallback bridge. MCP-Apps widgets are HTML documents with text/html;profile=mcp-app MIME types.

Route Planning

Route planning now has a deterministic tool path as well as a widget path.

  • Call os_mcp.route_query to classify free-text prompts and extract stop hints.

  • Call os_route.descriptor to check whether the active PostGIS/pgRouting graph is ready.

  • Call os_route.get to resolve stops and return distance, duration, geometry, legs, steps, mode changes, warnings, and graph provenance.

  • Call os_apps.render_route_planner when the host can open MCP-Apps UI; the widget mirrors the os_route.get contract and delegates calculation to that tool.

The intended backend is an OS Multi-modal Routing Network build loaded into PostGIS, with pgRouting used for shortest-path execution and route warnings enriched from restriction tables when available.

MCP-Apps support varies by client. If the client does not advertise UI support, the stdio adapter injects a fallback static map payload for os_apps.render_geography_selector (computed via os_maps.render). Set MCP_STDIO_UI_SUPPORTED=1 to force UI mode, or MCP_STDIO_FALLBACK_BBOX_DEG to control the fallback map span. Set MCP_APPS_CONTENT_MODE=embedded to embed UI HTML as a resource content block, or MCP_APPS_CONTENT_MODE=resource_link to emit a resource_link content block. Use MCP_APPS_CONTENT_MODE=text to suppress UI content blocks. Set MCP_STDIO_ELICITATION_ENABLED=0 to disable form elicitation in STDIO (os_mcp.stats_routing, ons_select.search). For Streamable HTTP (/mcp), set MCP_HTTP_ELICITATION_ENABLED=0.

Conditional Requests (ETag)

Clients should cache UI/skills responses and revalidate using If-None-Match. If unchanged, the server returns 304 Not Modified with the same ETag header.

Dataset Notes

Compression (GZip)

GZip compression is enabled (minimum payload size 512 bytes). Send:

Accept-Encoding: gzip

to receive a compressed response (check Content-Encoding: gzip).

Rate Limiting

Basic per-minute in-memory rate limiting is enabled by default:

  • Environment variable: RATE_LIMIT_PER_MIN (default 207 per IP per top-level path segment)

  • Bypass (tests/dev): RATE_LIMIT_BYPASS=false by default; set true only for explicit local/dev bypass.

  • Path exemptions: RATE_LIMIT_EXEMPT_PATH_PREFIXES (defaults to /maps/vector/vts/tile,/maps/raster/osm,/maps/static/osm) to prevent normal map tile fan-out from triggering 429 responses. Responses over the limit return:

{ "isError": true, "code": "RATE_LIMITED", "message": "Rate limit exceeded" }

Note: In-memory approach is not multi-process safe; replace with Redis or a shared store for production.

Rate-Limit Calibration Helper

You can run an active probe to estimate a suitable RATE_LIMIT_PER_MIN:

python3 scripts/rate_limit_assessor.py \
  --base-url http://127.0.0.1:8000 \
  --path /tools/list \
  --start-rpm 60 \
  --step-rpm 30 \
  --max-rpm 300 \
  --duration-sec 20 \
  --target-429-ratio 0.01 \
  --headroom-percent 15 \
  --output logs/rate-limit-assessment.json

Notes:

  • Set RATE_LIMIT_BYPASS=false before probing, otherwise no limiter behavior will be observed.

  • The recommendation is per client IP and top-level path segment, matching middleware behavior.

  • Requests under RATE_LIMIT_EXEMPT_PATH_PREFIXES are excluded from this probe scope.

Metrics

Prometheus-style metrics exposed at GET /metrics (if METRICS_ENABLED=true). When MCP HTTP auth is enabled, /metrics follows the same auth policy as /mcp, /tools/*, /resources/*, and /playground/*.

  • app_requests_total counter

  • app_rate_limited_total counter

  • app_request_latency_ms_bucket / _count histogram (client-observed wall time per request)

  • mcp_http_auth_failures_total counter by auth failure reason

  • mcp_http_session_quota_rejections_total counter

  • mcp_http_sessions_active gauge

  • mcp_tool_errors_total counter by tool and transport

Example scrape output snippet:

# HELP app_requests_total Total HTTP requests
# TYPE app_requests_total counter
app_requests_total 42
# HELP app_request_latency_ms Request latency histogram (ms)
# TYPE app_request_latency_ms histogram
app_request_latency_ms_bucket{le="50"} 40
app_request_latency_ms_bucket{le="100"} 41
app_request_latency_ms_bucket{le="+Inf"} 42
app_request_latency_ms_count 42

Admin lookup tools call the live ONS Open Geography services by default. Static boundary resources are not advertised in the resources API.

ONS Observations & Discovery (Epic D)

ONS data tools require live mode (ONS_LIVE_ENABLED=true). You can supply dataset, edition, and version directly, or provide a term and let ons_data.query auto-resolve the latest version. ons_codes.* supports an optional on-disk cache via ONS_DATASET_CACHE_ENABLED.

Tool ons_data.query supports:

  • geography (single code)

  • measure (single code)

  • timeRange — either single period (2024 Q2) or inclusive range (2024 Q1-2024 Q4)

  • Pagination: limit (1–500, default 100) and page (1-based)

ONS Client & Dataset Caching

tools/ons_common.py provides:

  • Retry + error mapping

  • In-memory TTL cache (short-lived request cache)

  • get_all_pages helper for full dataset paging

Full dataset cache snapshots are stored on disk when enabled via ONS_DATASET_CACHE_ENABLED=true and ONS_DATASET_CACHE_DIR.

Live ONS Mode & Codes

Enable live mode by setting ONS_LIVE_ENABLED=true. If you do not supply dataset metadata, ons_data.query will attempt to resolve the latest edition and version using term.

ons_data.query (live):

GET https://api.ons.gov.uk/dataset/{dataset}/edition/{edition}/version/{version}/observations?limit=...&page=...

ons_data.dimensions (live):

  1. Fetch version metadata:

GET https://api.ons.gov.uk/dataset/{dataset}/edition/{edition}/version/{version}
  1. For each dimension id returned, fetch its codes (paged, currently requesting up to 1000):

GET https://api.ons.gov.uk/dataset/{dataset}/edition/{edition}/version/{version}/dimensions/{dimensionId}/options?limit=1000&page=1

Provide an optional dimension field to retrieve only a single dimension's codes.

ons_search.query (live dataset search):

GET https://api.beta.ons.gov.uk/v1/datasets?search=<term>&limit=...&offset=...

You can override the base with ONS_DATASET_API_BASE or disable live search with ONS_SEARCH_LIVE_ENABLED=false.

NOMIS Labour & Census Statistics

Enable live mode with NOMIS_LIVE_ENABLED=true (default). Optional credentials may be provided via NOMIS_UID and NOMIS_SIGNATURE if you need higher limits.

Use:

  • nomis.datasets for dataset discovery

  • nomis.concepts / nomis.codelists for metadata

  • nomis.query for JSON-stat or SDMX JSON observations

Council Tax Band Lookup Pilot

council_tax.band_lookup is an experimental England/Wales-only pilot backed by the public GOV.UK Council Tax band service. It currently uses an HTML form flow rather than a published API, so treat it as a pilot integration with explicit failure handling rather than a guaranteed stable machine-to-machine contract.

Supported inputs include postcode, propertyName, street, town, billingAuthorityReference, and optional filters such as band and bandStatus. Set COUNCIL_TAX_BAND_LIVE_ENABLED=true to enable the live lookup surface.

AddressBase Premium UPRN Tax Status

council_tax.query checks a batch of UPRNs against the AddressBase Premium Application Cross Reference Type 23 table. By default it only counts current matches with a blank END_DATE, so historical cross references do not get reported as current liabilities.

Configure ADDRESSBASE_PREMIUM_XREF_PATH to either an extracted AddressBase Premium xref CSV/Parquet file or a directory containing one. CSV sources are stream-scanned; Parquet sources are queried directly with DuckDB so large local lookup workloads can stay memory-bounded without building a separate indexed database. The council_tax.query tool still classifies SOURCE=7666VC as Council Tax and SOURCE=7666VN as non-domestic rates, based on the current OS documentation.

For local runtime use, the recommended workflow is to keep the licensed source extract outside git and build a smaller serving Parquet, for example:

python -m scripts.addressbase_build_xref \
  --input /absolute/path/to/ABP/xref.parquet \
  --output /absolute/path/to/mcp-geo/data/addressbase_premium/2026-03-03/xref_voa_os.parquet

The builder keeps the xref columns used by MCP Geo, drops only SOURCE=7666OW and SOURCE=7666OP, writes a sorted xref_voa_os.parquet, and leaves the wider VOA/OS-linked cross references available for future UPRN/TOID-linked workflows. Optional runtime knobs:

  • ADDRESSBASE_PREMIUM_DUCKDB_THREADS

  • ADDRESSBASE_PREMIUM_DUCKDB_MEMORY_LIMIT

For local runtime use, the recommended workflow is to keep the licensed source extract outside git and build a smaller serving Parquet, for example:

python -m scripts.addressbase_build_xref \
  --input /absolute/path/to/ABP/xref.parquet \
  --output /absolute/path/to/mcp-geo/data/addressbase_premium/2026-03-03/xref_voa_os.parquet

The builder keeps the xref columns used by MCP Geo, drops SOURCE=7666OW and SOURCE=7666OP, writes a sorted xref_voa_os.parquet, and leaves the wider VOA/OS-linked cross references available for future UPRN/TOID workflows. Optional runtime knobs:

  • ADDRESSBASE_PREMIUM_DUCKDB_THREADS

  • ADDRESSBASE_PREMIUM_DUCKDB_MEMORY_LIMIT

The checked-in repo Docker image now installs the addressbase extra, so Parquet-backed council_tax.query runs fully server-side inside the container rather than depending on a host Python environment.

Error Model

All errors conform to:

{ "isError": true, "code": "<CODE>", "message": "..." }

Primary codes: INVALID_INPUT, UNKNOWN_TOOL, NO_API_KEY, OS_API_KEY_INVALID, OS_API_KEY_EXPIRED, LIVE_DISABLED, OS_API_ERROR, ONS_API_ERROR, NOMIS_API_ERROR, ADMIN_LOOKUP_API_ERROR, COUNCIL_TAX_API_ERROR, UPSTREAM_TLS_ERROR, UPSTREAM_CONNECT_ERROR, INTEGRATION_ERROR, RATE_LIMITED, UNKNOWN_FILTER, NO_OBSERVATION.

Project Structure

server/        FastAPI app & routers
tools/         Tool implementations (one module per domain)
resources/     Static datasets (future expansion)
playground/    Svelte + Vite playground UI
tests/         Pytest suite (≥90% coverage)
docs/          Backlog & design notes
.devcontainer/ Dev environment setup

Note: The Svelte playground is served by Vite (npm run dev). The legacy playground/app.py stub does not serve the UI.

Dynamic Tool Registration

server/mcp/tools.py explicitly imports each tools.* module at startup to guarantee registration in environments where implicit side-effect imports are skipped (e.g. selective packaging or lazy loaders). This ensures /tools/describe always reflects the full catalog without relying on import order.

Testing & Coverage

Run tests with:

./scripts/pytest-local -q

Coverage gate (configured) requires ≥90%. Add tests for both success and error branches (retry paths, validation failures, upstream errors). Avoid broad mocks that skip normalization logic.

Host-side wrappers:

  • ./scripts/pytest-local, ./scripts/ruff-local, and ./scripts/mypy-local run the current repo-supported phased CI slice by default.

  • ./scripts/ruff-local [paths...] and ./scripts/mypy-local [paths...] still prefer the running repo devcontainer app container.

  • If no devcontainer is running, they fall back to the repo .venv.

  • If the tool is still unavailable, they fall back to uv run.

  • Passing explicit paths overrides the default curated slice.

  • Override with MCP_GEO_LOCAL_TOOL_MODE=devcontainer|venv|uv|path.

Strict OWASP MCP validation:

./scripts/validate-owasp-mcp-local

This writes JSON/Markdown report artifacts plus a remediation backlog under output/owasp-mcp-validation/ and fails when any minimum_bar or required control is unmet.

MCP HTTP Hardening

Remote MCP HTTP deployments should enable authenticated access and bounded session state. When auth is enabled, only GET /health remains public; the raw HTTP routes under /tools/*, /resources/*, /playground/*, and /metrics share the same auth boundary as /mcp.

  • MCP_HTTP_AUTH_MODE=hs256_jwt enables bearer JWT enforcement.

  • MCP_HTTP_AUTH_MODE=static_bearer enables a fixed bearer token for /mcp, raw /tools/*, raw /resources/*, /metrics, and /playground/*.

  • MCP_HTTP_AUTH_TOKEN and MCP_HTTP_JWT_HS256_SECRET are included in the shared log/exception redaction path alongside the OS/NOMIS credentials.

  • MCP_HTTP_JWT_HS256_SECRET_FILE loads the signing secret from a mounted file.

  • MCP_HTTP_JWT_ISSUER, MCP_HTTP_JWT_AUDIENCE, and MCP_HTTP_JWT_REQUIRED_SCOPES constrain accepted tokens.

  • MCP_HTTP_SESSION_TTL and MCP_HTTP_SESSION_TOOL_CALL_LIMIT bound session lifetime and tool-call volume.

  • MCP_2026_RC_ENABLED=1 or MCP_PROTOCOL_2026_07_28_ENABLED=1 enables the feature-gated MCP 2026-07-28 release-candidate path for interop testing. Leave these unset for normal stable clients.

  • OS_API_KEY_FILE, OS_API_ACCESS_TOKEN_FILE, NOMIS_UID_FILE, and NOMIS_SIGNATURE_FILE support secret-file delivery without committing live secrets.

  • ops/deployment/docker-compose.prod.yml is the hardened reference deployment used by the OWASP MCP strict evidence set.

Contributing

  • Use Conventional Commits (e.g. feat(tools): add os_places.within pagination).

  • Every PR: update CHANGELOG.md, add/adjust tests, keep coverage ≥90%.

  • Include JSON schemas (input/output) when adding a tool.

  • Prefer incremental refactors; avoid unrelated changes in feature PRs.

Security

Report vulnerabilities through GitHub Private Vulnerability Reporting for this repository. See SECURITY.md for reporting instructions and scope.

Enriched Address Data

os_places.* currently return raw OS Places fields only. Enrichment via local code lists is not implemented yet.

Examples & Golden Tests

See docs/examples.md for sample payloads, conversation flows, and guidance on chaining tools. Golden scenario tests (test_golden_scenarios.py) ensure transformation stability with deterministic mocked upstream responses.

Resource Caching & Provenance

All /resources/read responses include:

  • etag (weak) for conditional requests

  • provenance.retrievedAt timestamp

  • Cache-Control header Clients should respect TTL and still perform ETag revalidation for freshness.

Troubleshooting

See docs/troubleshooting.md for a table of common error codes (INVALID_INPUT, UNKNOWN_TOOL, NO_API_KEY, OS_API_KEY_INVALID, etc.) and remediation steps.

Configuration

Copy .env.example → .env and set OS_API_KEY. Optional flags:

  • DEBUG_ERRORS (if present / truthy) enables traceback in error responses; otherwise stack traces are suppressed.

  • CIRCUIT_BREAKER_ENABLED, CIRCUIT_BREAKER_FAILURE_THRESHOLD, CIRCUIT_BREAKER_RESET_SECONDS to control upstream circuit breaker behavior.

SSL & Certificates

Container and dev setup now use the system CA bundle path /etc/ssl/certs/ca-certificates.crt so local corporate root CAs can be added without code changes.

  • Put local proxy/root CA .crt files in .devcontainer/certs/ before rebuilding the devcontainer or Docker image.

  • For proxied networks, set HTTP_PROXY, HTTPS_PROXY, and NO_PROXY via .devcontainer/.env (or host env exports).

  • In this Docker Compose-based devcontainer, container-wide env is sourced from .devcontainer/docker-compose.yml; keep machine-specific values in .devcontainer/.env or your host shell rather than devcontainer.json.

  • Proxy settings are only used at build/runtime injection points and are not persisted into the final runtime image metadata.

  • INSTALL_NGROK is opt-in for the devcontainer build so TLS-inspected networks do not fail on the optional tunnel binary fetch.

License

See LICENSE.

MCP STDIO Adapter (Local Dev)

The JSON-RPC 2.0 STDIO adapter lives in server/stdio_adapter.py (refactored from the prior scripts/os_mcp.py). Legacy entry points remain:

  • Console script: mcp-geo-stdio

  • Wrapper script: scripts/os-mcp (delegates to server/stdio_adapter.py)

This adapter is referenced by mcp.json (mcp-geo-stdio).

Framing

Each request/response:

Content-Length: <bytes>\r\n
\r\n
{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}

Methods

Method

Description

initialize

Returns server metadata & capabilities

tools/list

Lists tools (name, description, schemas)

tools/call

Invoke a tool (params.tool, optional params.args)

resources/list

Lists resource descriptors (skills + UI resources)

resources/describe

Returns resource metadata (name, description, license)

resources/read

Fetch resource content (ETag supported)

shutdown

Graceful shutdown (result null)

exit (notify)

Process terminates (no response)

Tool call result shape:

{
 "jsonrpc": "2.0",
 "id": 3,
 "result": { "status": 200, "ok": true, "data": { ...tool output... } }
}

Manual Test

python scripts/os-mcp & PID=$!
printf 'Content-Length: 60\r\n\r\n{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}' | nc -U /dev/fd/0 # or use a small Python helper
kill $PID

Simpler: write a tiny Python snippet to send framed messages (see tests/test_stdio_adapter.py).

VS Code

VS Code reads MCP server configuration from .vscode/mcp.json (workspace) or your user-level mcp.json. This repo includes .vscode/mcp.json with:

  • mcp-geo (STDIO, with MCP-Apps UI enabled)

  • mcp-geo-trace (STDIO + JSON-RPC trace log under logs/)

  • mcp-geo-http (HTTP transport at http://127.0.0.1:8000/mcp)

  • .vscode/mcp-geo.toolsets.jsonc (copy to your VS Code user prompts folder as mcp-geo.toolsets.jsonc to group tools in Configure Tools)

See docs/vscode.md for step-by-step setup, MCP-Apps UI validation, and tracing.

Notes

  • resources/read now emits a weak ETag (etag) and supports conditional retrieval via ifNoneMatch param. If matched, response shape: { "jsonrpc":"2.0", "id": <n>, "result": { "notModified": true, "etag": "W/\"...\"" } }.

  • Use the same pagination/filter parameters when revalidating or the variant key changes and a full payload is returned.

  • resources/describe returns the static metadata list (extend as resources grow).

  • Errors follow JSON-RPC error envelope with custom positive codes (1001-1003) for validation and -32603 for internal errors.

Helper Client Script

For quick one-shot invocations without crafting frames manually, use the helper script added in scripts/mcp_client.py (it spawns the adapter, performs initialize, your requested method, then shutdown/exit).

Examples:

# List tools
python scripts/mcp_client.py tools/list

# Describe available ONS dimensions (live mode)
ONS_LIVE_ENABLED=true python scripts/mcp_client.py tools/call ons_data.dimensions '{"params":{"dataset":"gdp","edition":"time-series","version":"1"}}'

# Query observations (live)
ONS_LIVE_ENABLED=true python scripts/mcp_client.py tools/call ons_data.query '{"params":{"dataset":"gdp","edition":"time-series","version":"1","geography":"K02000001","limit":2}}'

# Fetch resource with ETag then conditional request
R1=$(python scripts/mcp_client.py resources/read '{"uri":"skills://mcp-geo/getting-started"}' | jq -r '.response.result.etag')
python scripts/mcp_client.py resources/read '{"uri":"skills://mcp-geo/getting-started","ifNoneMatch":"'$R1'"}'

# Or using the convenience flag (no JSON escaping needed):
python scripts/mcp_client.py resources/read --if-none-match "$R1" '{"uri":"skills://mcp-geo/getting-started"}'

The JSON argument after the tool name is merged into the request params object. Include nested objects as required by each tool schema.

Correct Inline Heredoc Helper (Advanced)

If you prefer piping multiple framed requests to a persistently running adapter instance:

python scripts/os-mcp & APP_PID=$!
python - <<'PY'
import sys, json
def send(mid, method, params=None):
 msg = {"jsonrpc":"2.0","id":mid,"method":method,"params":params or {}}
 body = json.dumps(msg).encode()
 sys.stdout.buffer.write(b"Content-Length: "+str(len(body)).encode()+b"\r\n\r\n"+body)
 sys.stdout.flush()

# Emit two requests (initialize then list tools)
send(1, "initialize")
send(2, "tools/list")
PY | ./scripts/os-mcp
kill $APP_PID

Be careful to avoid duplicating or truncating function definitions when editing inline; each framed JSON-RPC message must be complete and preceded by a correct Content-Length header.

REPL Mode

Interactive session:

python scripts/mcp_client.py --repl
mcp> resources/describe
mcp> resources/read {"uri":"skills://mcp-geo/getting-started"}
mcp> resources/read {"uri":"skills://mcp-geo/getting-started","ifNoneMatch":"W/\"abc123deadbeef00\""}
mcp> exit

notModified responses are compacted by the client for readability.

Available Tools

103 tools
admin_lookup_area_geometryA
Read-onlyIdempotent

Return bbox and optional full boundary geometry for a given area id

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
toolNo
zoomNo
includeGeometryNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
bboxYes
liveNo
metaNo
nameNo
levelNo
geometryNo

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the safe-read nature is covered. The description adds that it returns a bbox and optionally full boundary geometry, which is useful, but it does not disclose coordinate reference system, units, or potential performance cost of requesting full geometry.

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?

A single, front-loaded sentence with no filler. Every word earns its place and the core return value is stated first.

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?

The output schema exists, so return-value details are not required in the description. However, with no parameter descriptions in the schema and an unexplained zoom parameter, an agent may not know what zoom controls or what area id format is expected. This is adequate for a simple lookup but leaves a couple of gaps.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It explains 'id' and hints at includeGeometry via 'optional full boundary geometry', but 'zoom' is completely unexplained and 'tool' is a constant. For a parameter-semantics standpoint, this leaves a meaningful gap in a low-coverage schema.

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

Purpose5/5

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

The description uses a specific verb ('Return') and a clear resource ('bbox and optional full boundary geometry for a given area id'). It is immediately distinguishable from sibling admin tools like admin_lookup_find_by_name or admin_lookup_containing_areas, which address different lookups.

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 phrase 'for a given area id' implies the use case: the agent should call this when it already has an area id and needs its bounding box or boundary. However, it gives no explicit guidance about when not to use it or which sibling to prefer, so usage context is only 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.

admin_lookup_containing_areasA
Read-onlyIdempotent

Return containing administrative areas for a point (lat/lon)

ParametersJSON Schema
NameRequiredDescriptionDefault
latYes
lonYes
toolNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
liveNo
metaNo
resultsYes

TDQS

A3.5/5.0
Behavior3/5

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

The annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds minimal behavioral context beyond that, mainly clarifying the input type; it does not describe return shape, coordinate system, or potential edge cases, but it does not contradict the annotations.

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

Conciseness5/5

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

The description is one short, front-loaded sentence with no filler or repetition. It states the action, resource, and input in a compact way.

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?

This is a simple two-parameter, read-only lookup with an output schema present, so the description is close to adequate. Still, it leaves out useful context such as what administrative levels are returned (e.g., country, region, district) and whether the coordinates use a particular datum, which could matter 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 0%, but the parameter names 'lat' and 'lon' are fairly self-explanatory, and the description reinforces them by calling the input 'a point (lat/lon)'. It does not provide range, format, or coordinate reference system details, but it does enough to map the parameters to their meaning.

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 gives a specific verb ('Return') and resource ('containing administrative areas') with a clear input ('a point (lat/lon)'). It is clear what the tool does, but it does not explicitly differentiate itself from sibling lookup tools like admin_lookup_find_by_name or admin_lookup_area_geometry.

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 phrase 'for a point (lat/lon)' implies the primary use case: when you have coordinates and need the administrative areas containing that point. However, it gives no explicit guidance on when not to use it or which sibling tools to choose instead.

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

admin_lookup_find_by_nameA
Read-onlyIdempotent

Search administrative areas by name; returns ids and bbox summaries. Use admin_lookup.area_geometry for full boundary geometry.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
toolNo
levelNoOptional single level (WARD/LSOA/etc).
limitNo
matchNo
levelsNo
limitPerLevelNo
includeGeometryNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
liveNo
metaNo
countNo
resultsYes

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnly and idempotent hints, so the description's job is lighter. It adds useful behavioral context by clarifying the response granularity ('ids and bbox summaries') and by signaling that full boundary geometry is not the expected return here. It does not discuss default matching behavior, but the annotations cover the safety profile.

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, front-loaded sentences with no filler. The first sentence states function and result, and the second provides routing to the relevant sibling. Every sentence earns its place.

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?

The output schema covers return values, and the annotations cover read-only/idempotent behavior, so the description does not need to repeat those. However, for an 8-parameter input schema, most parameters remain undocumented, and the relationship between includeGeometry and the geometry-returning sibling is unclear. It is adequate but not fully complete.

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

Parameters2/5

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

Schema description coverage is only 13%, so the description must compensate for undocumented parameters. It only clarifies the name/text aspect ('Search ... by name') and leaves match, levels, limitPerLevel, includeGeometry, and limit largely unexplained. The presence of includeGeometry also creates ambiguity against the instruction to use another tool for full boundary geometry.

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 concrete action ('Search administrative areas by name') and the result ('returns ids and bbox summaries'). It also distinguishes this tool from the geometry-returning sibling by explicitly routing full boundary geometry to admin_lookup.area_geometry, so an agent can tell the two apart.

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 description gives clear context for when to use this tool: when searching by name and wanting ids/bbox summaries rather than full geometry. It names an alternative for the adjacent case ('Use admin_lookup.area_geometry for full boundary geometry'), though it does not discuss other lookup variants such as search_cache or containing_areas.

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

admin_lookup_get_cache_statusC
Read-onlyIdempotent

Return boundary cache status (levels, datasets, counts).

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNo
refreshNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
totalNo
dsnSetNo
levelsNo
enabledYes
datasetsNo
geomCountNo
configuredNo
reloadHintNo

TDQS

C2.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds minor context by listing the output content (levels, datasets, counts), but it does not disclose the side effects or semantics of the 'refresh' parameter, which could have behavioral implications beyond the read-only guarantee.

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

Conciseness4/5

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

The description is a single direct sentence with no fluff, and the core purpose is front-loaded. It is concise, but it is also so terse that it omits useful semantic details, making it less than ideal for the full 5.

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

Completeness2/5

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

Although an output schema exists and annotations cover read-only behavior, the description does not provide enough context for correct invocation. The meaning of 'refresh' and when to use this tool versus cache-related siblings are missing, leaving a meaningful gap.

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

Parameters1/5

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

Schema description coverage is 0%, and the description does not explain either parameter. 'tool' is self-evident from the const, but 'refresh' is ambiguous and could mean clearing, reloading, or rechecking the cache. The description provides no added meaning over the bare schema.

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 ('Return') and specific resource ('boundary cache status'), including the data points returned (levels, datasets, counts). It does not explicitly distinguish itself from the sibling ons_geo_cache_status, but the boundary-specific wording is sufficient to differentiate it from other cache-related tools.

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?

There is no guidance on when to use this tool versus alternatives like admin_lookup_search_cache or ons_geo_cache_status. No context is provided about typical use cases, prerequisites, or 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.

admin_lookup_reverse_hierarchyB
Read-onlyIdempotent

Return ancestor chain for a given area id

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
toolNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
chainYes

TDQS

B3.3/5.0
Behavior3/5

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

The description aligns with the readOnly and idempotent annotations by indicating a non-mutating lookup. It adds little behavioral detail beyond the name – no mention of ordering, whether the chain includes the current area, or depth limits – but the annotations already cover the safety profile.

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 a single efficient sentence that gets to the point immediately. No filler or redundant wording.

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?

Given the simple signature and presence of an output schema, the description is minimally adequate. However, it does not explain the meaning of 'ancestor chain' or how it relates to similar lookup tools, so it misses context an agent might need to select it 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?

With 0% schema description coverage, the description must clarify parameters. It does clarify that `id` is an 'area id', which adds semantic meaning beyond the raw string type. However, it does not specify the format or source of the area id, leaving some ambiguity.

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 uses a specific verb ('Return') and resource ('ancestor chain'), clearly identifying the output. However, it does not distinguish this from the similarly named sibling admin_lookup_containing_areas, so an agent may not know which to choose without inspecting schemas.

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 offers no guidance on when to use this tool versus alternatives like admin_lookup_containing_areas or admin_lookup_find_by_name. There are no conditions, exclusions, or alternative references, leaving the agent to infer usage.

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

admin_lookup_search_cacheC
Read-onlyIdempotent

Search the boundary cache by id/name/level.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNo
levelNo
limitNo
queryNo
fallbackLiveNoFallback to live lookup if cache unavailable.
includeGeometryNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
liveNo
metaNo
countNo
resultsYes

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint and idempotentHint, so the description's job is lighter. It adds the 'boundary cache' context and the search fields, but doesn't mention output details or how fallbackLive affects behavior. No contradiction with annotations.

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

Conciseness4/5

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

One sentence, direct, and front-loads the core action. No fluff. Could add a bit more detail without harming conciseness, but it's appropriately short.

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

Completeness2/5

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

There is an output schema, so return format is covered, and annotations cover safety. However, the tool has 6 parameters with only 17% schema coverage, and the description doesn't explain how to use key parameters (query, level, limit). Sibling tools like admin_lookup_find_by_name suggest a specialized search, but the description doesn't position this tool for effective selection.

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

Parameters2/5

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

Schema description coverage is only 17% (only fallbackLive has a description). The description mentions id/name/level but doesn't map them to the 'query' parameter or clarify how 'level' works. With 6 parameters and minimal schema descriptions, the tool description needs to clarify how the search is performed, but it doesn't.

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

Purpose4/5

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

The description clearly states the action (search) and the resource (boundary cache), with the fields to search (id/name/level). This distinguishes it from sibling tools like admin_lookup_find_by_name, which likely search by name only. However, it doesn't explicitly contrast with similar lookup tools, so it's a 4 rather than 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 Guidelines2/5

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

No guidance on when to use this versus alternatives. Sibling tools like admin_lookup_find_by_name, admin_lookup_get_cache_status, and admin_lookup_containing_areas suggest different purposes, but the description gives no contextual cues or exclusions. Agents must infer usage from the name alone.

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

council_tax_band_lookupC
Read-onlyIdempotent

Experimental England/Wales Council Tax band lookup via the public GOV.UK service.

ParametersJSON Schema
NameRequiredDescriptionDefault
bandNoOptional A-I band filter.
pageNo
toolNo
townNo
streetNo
postcodeNo
courtCodeNo
bandStatusNo
propertyUseNo
propertyNameNo
billingAuthorityNo
billingAuthorityReferenceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
liveYes
pageNo
countYes
matchesYes
warningsNo
provenanceNo
jurisdictionYes

TDQS

C2.7/5.0
Behavior3/5

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

Annotations already convey readOnlyHint and idempotentHint, so the bar is lower. The description adds useful context that this wraps an external public GOV.UK service and is experimental, implying possible volatility, but it does not discuss errors, rate limits, or data freshness.

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?

One sentence with no filler; the experimental warning and jurisdiction are front-loaded. However, the brevity reflects under-description rather than efficient completeness.

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

Completeness2/5

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

For a 12-optional-parameter lookup tool, the description is too thin. It does not indicate which parameters are meaningful, how they relate, or when this tool is appropriate, so the agent must rely on an under-described schema and the output schema.

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

Parameters1/5

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

Schema description coverage is only 8%, and the description contributes no parameter guidance. It never explains postcode, street, town, propertyName, billingAuthorityReference, courtCode, or how these parameters should be combined, so an agent cannot construct a valid lookup from the description.

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 clear action ('lookup'), resource ('Council Tax band'), geography ('England/Wales'), and source ('public GOV.UK service'). It is more specific than the bare name, but it does not explicitly differentiate itself from sibling council_tax_query.

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 guidance on when to use this tool versus council_tax_query or the other lookup tools. It mentions the service is experimental and public, but gives no prerequisites, exclusions, or example use cases.

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

council_tax_queryA
Read-onlyIdempotent

Query AddressBase Premium Application Cross Reference records by UPRN to identify Council Tax and non-domestic rates flags.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNo
uprnsYesOne or more UPRNs to inspect in AddressBase Premium.
activeOnlyNoWhen true, only treat Type 23 cross references with a blank END_DATE as current. Defaults to true.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultsYes
summaryYes
provenanceYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, and idempotentHint=true, so the safety profile is covered. The description adds meaningful behavioral context: it specifies the data source (AddressBase Premium), the record type (Application Cross Reference), and the flag semantics (Council Tax and non-domestic rates). It also clarifies the activeOnly parameter's meaning via schema description, but the description itself doesn't add much beyond the schema. However, the description's mention of 'flags' and 'cross reference records' gives useful domain context beyond annotations.

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

Conciseness5/5

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

A single, information-dense sentence that front-loads the verb, resource, and purpose. No wasted words. It earns its place by adding domain context that the schema and annotations do not provide.

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 moderate complexity (3 params, 1 required, output schema present), the description is sufficient for an agent to understand what the tool does and when to call it. The output schema exists, so return values need not be described. The only gap is explicit usage guidance versus alternatives, but the domain context and parameter semantics are clear enough for correct invocation.

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 67%: the 'uprns' and 'activeOnly' parameters have descriptions, but the 'tool' const parameter is self-explanatory. The description adds meaning by explaining that UPRNs are used to query AddressBase Premium cross-reference records and that the output identifies Council Tax/non-domestic rates flags. This complements the schema's parameter descriptions, which already explain the activeOnly default and UPRN format.

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 ('Query'), a specific resource ('AddressBase Premium Application Cross Reference records'), a key parameter ('by UPRN'), and the purpose ('identify Council Tax and non-domestic rates flags'). This clearly distinguishes it from siblings like council_tax_band_lookup and os_places_by_uprn.

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: use when you need Council Tax/non-domestic rates flags for UPRNs. It does not explicitly state when not to use it or name alternatives (e.g., council_tax_band_lookup for band lookup, os_places_by_uprn for general address data). The sibling list provides context but the description itself gives no routing guidance.

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

landis_archive_get_itemA
Read-onlyIdempotent

Get detail for one locally mirrored LandIS archive item.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNo
archiveIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint and idempotentHint, so the safety profile is known. The description adds only the 'locally mirrored' data-source context; it does not describe error behavior, availability of the item, or other runtime traits, but this is not a contradiction.

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?

A single eight-word sentence that front-loads the action and object with no filler. It is appropriately concise for a simple single-argument read 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 one-argument read-only tool with a rich output schema and readOnly/idempotent annotations, the description is nearly complete. The main missing context is where archiveId comes from and when to select the list sibling, but the schema and annotations cover the rest.

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

Parameters2/5

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

Schema description coverage is 0%, so the description bears the burden of explaining archiveId, but it never mentions the parameter or its format and provenance. The phrase 'one ... item' only weakly implies that archiveId identifies the item, leaving the agent without guidance beyond the name.

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 ('Get detail') and a specific resource ('one locally mirrored LandIS archive item'). The singular 'one' differentiates it from sibling landis_archive_list_items and makes the tool's scope immediately clear.

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 does not state when to choose this tool over alternatives such as landis_archive_list_items, nor does it mention that an archiveId must first be obtained from a list/catalog call. There is no exclusion or alternative guidance, so an agent must infer usage from the name alone.

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

landis_archive_list_itemsB
Read-onlyIdempotent

List locally mirrored LandIS archive items and their triage classification.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNo
toolNo
limitNo
familyNo
offsetNo
surfacingClassNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the safe, read-only nature is covered. The description adds useful context by clarifying that items are locally mirrored and that triage classification is part of the result, but it does not disclose pagination behavior, filter semantics, or output size limits.

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

Conciseness4/5

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

The description is a single, front-loaded sentence with no filler words. It states the core action and the notable output attribute efficiently. However, the brevity borders on under-specification, which costs it the top score.

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

Completeness2/5

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

For a tool with six parameters, no schema descriptions, and no usage guidance, the description is too thin. It does not explain what distinguishes archive items, what triage classification means, how to narrow results, or how this relates to landis_archive_get_item. The output schema helps, but the agent still lacks enough context to call the tool confidently.

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

Parameters1/5

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

Schema description coverage is 0%, so the description carries the full burden of explaining six parameters: q, tool, limit, family, offset, and surfacingClass. The description only mentions listing archive items and triage classification; it does not explain what any parameter means, how filters interact, or how pagination works.

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'), a specific resource ('locally mirrored LandIS archive items'), and adds the distinguishing detail that triage classification is included. This differentiates it from related siblings like landis_archive_get_item (single item retrieval) and landis_catalog_list_products (catalog products, not archive items).

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 gives no explicit guidance about when to use this tool versus alternatives. 'Locally mirrored' and 'archive items' imply a scope, but there are no stated exclusions, prerequisites, or references to sibling tools such as landis_archive_get_item.

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

landis_catalog_list_productsC
Read-onlyIdempotent

List the LandIS MVP product registry with coverage, access tier, and resource hints.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNo
toolNo
limitNo
familyNo
offsetNo
pageTokenNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
totalYes
productsYes
registryYes
nextPageTokenNo

TDQS

C2.7/5.0
Behavior3/5

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

Annotations already mark the operation read-only and idempotent, so the description need not restate safety. It adds a small amount of context by naming the output facets (coverage, access tier, resource hints), but does not disclose pagination behavior, the meaning of 'MVP', or any operational caveats.

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?

A single front-loaded sentence with no filler. It is concise, but the brevity comes at the cost of parameter and usage detail.

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

Completeness2/5

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

The tool has six optional parameters and pagination fields, yet the description gives no clue how to filter, paginate, or constrain the list. An output schema exists, so return structure is covered, but the description is otherwise too thin for correct invocation beyond the simplest call.

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

Parameters1/5

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

All six parameters lack schema descriptions (0% coverage), and the description does not explain q, tool, limit, family, offset, or pageToken. The description provides no compensation for the schema gap.

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 uses a specific verb ('List') and a distinct resource ('LandIS MVP product registry'), and hints at the returned information (coverage, access tier, resource hints). It is clearly a catalog listing rather than a metadata or archive operation, though it does not explicitly contrast with sibling list tools such as landis_archive_list_items.

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, prerequisites, or exclusions are provided. The agent must infer from the name that this is the tool for LandIS products, with no guidance about when alternatives like landis_archive_list_items or landis_metadata_get would be more appropriate.

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

landis_derive_pipe_riskA
Read-onlyIdempotent

Screen corrosion and shrink-swell pipe risk for a bbox or GeoJSON Polygon/MultiPolygon.

ParametersJSON Schema
NameRequiredDescriptionDefault
bboxNo
toolNo
geometryNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
inputYes
scoresYes
caveatsYes
riskBandYes
provenanceYes
explanationYes
rawEvidenceYes
verificationChecklistYes

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description adds the input constraint (bbox or GeoJSON polygon) but does not describe output or other behavioral details beyond what the output schema provides. This is adequate given the annotations.

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

Conciseness5/5

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

A single, front-loaded sentence with no filler. Every word contributes to the purpose and input specification, making it highly efficient.

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?

The description is concise but lacks explicit guidance on whether both bbox and geometry can be supplied, or what happens if neither is provided. Since the schema marks both as optional, the 'or' phrasing could be ambiguous. The output schema exists, so return values are covered, but the input ambiguity is a gap.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It clarifies that the geometry parameter should be a GeoJSON Polygon or MultiPolygon, adding meaning beyond the generic 'object' type. However, it does not explain bbox coordinate order or units, leaving some ambiguity. Partial compensation.

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 clearly states the verb 'Screen' with a specific resource 'corrosion and shrink-swell pipe risk' and specifies the accepted input types (bbox or GeoJSON Polygon/MultiPolygon). It is distinct from all sibling tools, none of which mention pipe risk, so an agent can immediately identify its purpose.

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 description gives clear context: it screens pipe risk for a bbox or polygon, implying when it should be used. However, it does not explicitly state alternatives or when not to use it, but since no sibling covers the same function, the context is sufficient.

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

landis_metadata_getA
Read-onlyIdempotent

Retrieve LandIS product metadata, provenance notes, and linked resources.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNo
productIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
productYes
metadataYes
registryYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true and idempotentHint=true, so the description does not need to cover safety. It adds value by specifying the exact content returned (metadata, provenance notes, linked resources), which goes beyond the annotations. No contradictions with annotations.

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

Conciseness5/5

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

The description is a single sentence with no filler. It is front-loaded with the core action and resource, and every word contributes meaning. Perfectly concise for the tool's simplicity.

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?

The tool is simple (one meaningful parameter) and has an output schema, so the description does not need to explain return values. However, given zero schema coverage, the description should have described the productId parameter to make the tool self-explanatory. It is functionally adequate but leaves the parameter undocumented.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate by explaining the productId parameter. It does not mention the parameter at all, nor does it clarify that productId identifies the product whose metadata is retrieved. The description only references 'product metadata' without linking it to the 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?

The description clearly states a specific action (Retrieve) and resource (LandIS product metadata), and further specifies the content: metadata, provenance notes, and linked resources. It distinguishes this tool from siblings like landis_catalog_list_products (which lists products) and landis_archive_get_item (which retrieves archive items) by focusing on metadata for a specific product.

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 when metadata for a specific LandIS product is needed, but it does not explicitly contrast with alternative tools or state when not to use it. It lacks explicit routing guidance such as 'use this instead of landis_catalog_list_products when you have a product ID.'

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

landis_natmap_area_summaryB
Read-onlyIdempotent

Summarize NATMAP map units across a bbox or GeoJSON polygon.

ParametersJSON Schema
NameRequiredDescriptionDefault
bboxNo
toolNo
geometryNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior3/5

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

The annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds minimal behavioral context beyond saying it 'summarizes,' and does not disclose what the summary contains or how the operation behaves. This is acceptable but not rich, given the annotations.

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

Conciseness5/5

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

The description is a single sentence that is front-loaded and contains no filler. Every word contributes to identifying the tool's purpose and input scope.

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

Completeness2/5

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

Although an output schema and read-only annotations exist, the description leaves essential invocation details unstated: whether bbox and geometry are alternatives, whether at least one is required, and what format values must take. The required-parameter count is 0, so an agent could try calling with neither input and get no guidance from the description.

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

Parameters2/5

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

Schema description coverage is 0%, and the description only mentions 'bbox or GeoJSON polygon' without explaining the bbox coordinate order, geometry structure, or how the parameters relate. With no parameter-level detail in the schema, the description should compensate but does not meaningfully do so.

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 uses a specific verb and resource: 'Summarize NATMAP map units across a bbox or GeoJSON polygon.' This clearly identifies what the tool does. However, it does not explicitly differentiate it from similar siblings like landis_natmap_thematic_area_summary or landis_soilscapes_area_summary, so it is not a full 5.

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 implies that this tool is for area-based summaries via bbox or GeoJSON polygon, but it provides no explicit guidance on when to choose this tool over alternatives, no exclusions, and no note about whether bbox and geometry are mutually exclusive or one is required. An agent gets little help in deciding between this and related summary tools.

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

landis_natmap_pointB
Read-onlyIdempotent

Get the NATMAP map unit at a WGS84 lat/lon.

ParametersJSON Schema
NameRequiredDescriptionDefault
latYes
lonYes
toolNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

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

Annotations declare readOnlyHint and idempotentHint, covering the safety profile. The description adds no behavioral details beyond that, such as what happens for invalid coordinates, whether a map unit is always returned, or any rate limits. With annotations present, some credit is given, but the description offers zero additional context.

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

Conciseness5/5

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

The description is a single efficient sentence that front-loads the action and resource. Every word is necessary; there is no fluff or repetition.

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 point lookup with an output schema present, the description is minimally adequate. But it omits any mention of edge cases like points outside coverage, the meaning of 'map unit', or how to select this tool over sibling lookups. The output schema covers return structure, so that gap is mitigated, but overall completeness is barely sufficient.

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 0%, so the description must compensate. It does specify that lat and lon are in WGS84, which adds coordinate system meaning beyond the plain 'number' type in the schema. However, it doesn't provide ranges, decimal degree format, or other constraints, leaving gaps that the schema does not fill.

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

Purpose4/5

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

The description clearly states the verb 'Get' and the resource 'NATMAP map unit' plus the input context 'at a WGS84 lat/lon'. This distinguishes it from area-oriented siblings like landis_natmap_area_summary by implying a point query, though it does not explicitly name alternatives.

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 guidance is provided on when to use this tool versus alternatives such as landis_natmap_area_summary or landis_soilscapes_point. The description does not mention any conditions, exclusions, or intended use cases beyond the basic function.

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

landis_natmap_thematic_area_summaryB
Read-onlyIdempotent

Summarize one NATMAP thematic product across a bbox or GeoJSON polygon.

ParametersJSON Schema
NameRequiredDescriptionDefault
bboxNo
toolNo
geometryNo
productIdYesSupported NATMAP thematic product identifier. Use landis_catalog.list_products or /tools/describe for the callable IDs.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the agent knows the operation is safe and repeatable. The description's 'Summarize' aligns with read-only behavior but adds no further disclosure about side effects, permissions, or rate limits.

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 a single, front-loaded sentence that communicates the core operation and inputs with no wasted words. It is appropriately sized for a simple tool.

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

Completeness2/5

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

The description leaves ambiguity about whether bbox or geometry must be provided, since the schema only requires productId. It also does not mention that the two spatial inputs are alternatives or what happens if neither is supplied. With an output schema present, return values are covered, but the input semantics are incomplete 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 only 25%, so the description must compensate. It does add meaning by identifying bbox and geometry as spatial selectors ('across a bbox or GeoJSON polygon') and by naming geometry as a GeoJSON polygon, but it does not explain the relationship between bbox and geometry or their format beyond the schema.

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 uses a specific verb ('Summarize') and resource ('one NATMAP thematic product') and specifies the spatial scope ('across a bbox or GeoJSON polygon'). It clearly states what the tool does, though it does not explicitly differentiate from sibling tools like landis_natmap_area_summary.

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 guidance on when to use this tool versus alternatives such as landis_natmap_area_summary or landis_natmap_point. There is no mention of prerequisites or scenarios where this tool is preferred.

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

landis_nsi_nearest_sitesB
Read-onlyIdempotent

Find the nearest LandIS NSI evidence sites to a WGS84 point.

ParametersJSON Schema
NameRequiredDescriptionDefault
latYes
lonYes
toolNo
limitNo
maxDistanceKmNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description adds the WGS84 coordinate requirement, which is useful. However, it does not disclose behavior such as whether results are sorted by distance, whether the limit applies before or after distance filtering, or what happens when no sites are found. With annotations covering safety, a 3 is appropriate.

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?

One sentence, front-loaded with the verb and resource, and no filler. It is appropriately concise, though it could have used the available space to add parameter semantics without becoming verbose.

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?

The tool has an output schema, so return values are documented elsewhere. The description is adequate for a simple nearest-point lookup, but given 0% schema description coverage and five parameters, it leaves the agent without guidance on limit/maxDistanceKm semantics and result ordering. It is minimally viable but not complete.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate for the five parameters. It only clarifies that lat/lon are a WGS84 point; it does not explain 'limit' or 'maxDistanceKm' semantics beyond their schema names. The description adds minimal value over the bare parameter names, leaving the agent to guess units and behavior for maxDistanceKm and the meaning of limit.

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 ('Find'), a resource ('LandIS NSI evidence sites'), and a spatial criterion ('nearest to a WGS84 point'). It is clear enough to distinguish from most siblings, though it does not explicitly name a sibling alternative like landis_nsi_within_area or landis_nsi_profile_summary.

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: provide a WGS84 point and get nearest sites. It does not explicitly state when to prefer this over landis_nsi_within_area (area-based) or landis_nsi_profile_summary (profile lookup), nor does it mention exclusions or prerequisites. The spatial 'nearest' phrasing gives some context, but no explicit routing guidance.

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

landis_nsi_profile_summaryB
Read-onlyIdempotent

Get an evidence summary for one LandIS NSI site identifier.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNo
nsiIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint and idempotentHint, and the verb 'Get' is consistent with those, so there is no contradiction. The description adds no additional behavioral context such as rate limits, prerequisites, or return caveats, but the annotation coverage lowers the burden on the description.

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?

A single ten-word sentence with no filler. It front-loads the operation and resource before the qualifying identifier, making the purpose immediately scannable.

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

Completeness4/5

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

For a simple read-only, idempotent lookup with an output schema and one required parameter, the description gives enough to call it correctly. The main gaps are the absence of sibling routing and the opaque phrase 'evidence summary', but those are secondary to successful 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 has two parameters with no property descriptions, so the description carries some burden. It provides domain context for nsiId ('LandIS NSI site identifier') and implies a single integer ID, matching the schema minimum of 1; the const 'tool' parameter is not addressed, but its value is fixed and inferable from the schema.

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 uses the verb 'Get' with a clear resource ('evidence summary') and a precise selector ('one LandIS NSI site identifier'), so an agent knows this is an exact-ID lookup rather than a spatial or nearest-site search. It could be sharper by explaining what an 'evidence summary' contains, but it is not tautological or misleading.

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 guidance explains when to choose this tool over landis_nsi_nearest_sites or landis_nsi_within_area. The phrase 'one ... site identifier' implies the caller should already have an nsiId, but no alternatives, prerequisites, or exclusion conditions are stated.

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

landis_nsi_within_areaA
Read-onlyIdempotent

List LandIS NSI evidence sites within a bbox or GeoJSON polygon.

ParametersJSON Schema
NameRequiredDescriptionDefault
bboxNo
toolNo
limitNo
offsetNo
geometryNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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

The readOnlyHint and idempotentHint annotations already establish the safety profile, so the description only needs to add scope/behavior context. It does clarify that the tool filters by a bbox or GeoJSON polygon, but it does not disclose pagination behavior, whether bbox and geometry are mutually exclusive, or any coordinate system expectations.

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 a single front-loaded sentence with no filler or redundant restating of the tool name. Every word contributes to the core meaning.

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?

Given the output schema and read/idempotent annotations, the description covers the basic read operation. But with 0% schema coverage, five parameters, and no mention of whether bbox and geometry are alternatives, requiredness, or how offset works, the description leaves meaningful gaps that an agent must infer.

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

Parameters2/5

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

Schema description coverage is 0%, so the description carries the burden of explaining parameters. It adds minimal meaning for bbox and geometry ('within a bbox or GeoJSON polygon') but says nothing about limit, offset, the tool const, or the structure/CRS of the geometry 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 uses a specific verb ('List') with a specific resource ('LandIS NSI evidence sites') and a precise spatial scope ('within a bbox or GeoJSON polygon'). This clearly separates it from nearby siblings like landis_nsi_nearest_sites, which are point/proximity based.

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 phrase 'within a bbox or GeoJSON polygon', which tells the agent this is the area-based spatial query tool. However, there is no explicit when-to-use or when-not-to-use guidance, and no named alternatives such as landis_nsi_nearest_sites or landis_nsi_profile_summary.

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

landis_soilscapes_area_summaryA
Read-onlyIdempotent

Summarize LandIS Soilscapes coverage for a bbox or GeoJSON Polygon/MultiPolygon.

ParametersJSON Schema
NameRequiredDescriptionDefault
bboxNo
toolNo
geometryNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
inputYes
areaSqMYes
caveatsYes
classesYes
provenanceYes
dominantClassNo

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description adds that the tool accepts bbox or GeoJSON geometry, but does not disclose additional behavioral traits such as output structure, pagination, coordinate system expectations, or behavior when both bbox and geometry are provided. It provides marginal value beyond the annotations but not rich context.

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

Conciseness5/5

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

The description is a single, concise sentence that front-loads the main action and resource. It contains no fluff and is immediately understandable. Every word earns its place.

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 that an output schema exists, the description doesn't need to explain return values. It covers the primary input options and the purpose. The schema note clarifies the anyOf constraint (bbox or geometry), and the description's 'or' aligns with that. It doesn't mention potential limitations or edge cases, but for a straightforward summary tool with read-only annotations, it 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 description coverage is 0%, so the description is the only source of parameter meaning. It mentions 'bbox' and 'GeoJSON Polygon/MultiPolygon', which map to the bbox and geometry parameters, and implies they are alternatives via 'or'. However, it does not specify the exact bbox format (e.g., [minLon, minLat, maxLon, maxLat]) or coordinate system, leaving room for ambiguity. It partially compensates for the schema gap but not fully.

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 clearly states the verb 'Summarize' and the specific resource 'LandIS Soilscapes coverage', and specifies the accepted input geometries (bbox or GeoJSON Polygon/MultiPolygon). This is sufficiently specific to distinguish it from sibling tools like landis_natmap_area_summary, which targets a different dataset, and landis_soilscapes_point, which is point-based.

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 gives no explicit guidance on when to use this tool versus alternatives. While the name and resource mention Soilscapes, it doesn't state when an agent should choose this over other area-summary tools (e.g., landis_natmap_area_summary, ons_geo_area_summary) or mention exclusions or alternatives. The usage context is only implied by the resource name.

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

landis_soilscapes_pointA
Read-onlyIdempotent

Return the LandIS Soilscapes class and caveats for a WGS84 point.

ParametersJSON Schema
NameRequiredDescriptionDefault
latYes
lonYes
toolNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
caveatsYes
locationYes
soilscapeYes
provenanceYes

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description adds no behavioral detail beyond the return content; mentioning 'caveats' hints at the nature of the result but does not describe side effects, failures, or operational constraints. No contradiction with annotations.

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

Conciseness5/5

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

A single front-loaded sentence with no filler. Every element—resource, output, input format—earns its place, and the essential 'WGS84 point' qualification is included.

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 two-parameter point lookup with safe/idempotent annotations and an existing output schema, the description covers what the tool does and what input it expects. Minor gaps such as geographic coverage limitations or out-of-range coordinate handling are not stated, but they are not critical for invocation.

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 0%, so the description must compensate. It adds the essential coordinate reference system (WGS84) and clarifies that lat/lon represent a single point. The self-descriptive parameter names plus this CRS context provide enough meaning for correct invocation, though the description could additionally state value ranges.

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 ('Return'), a specific resource ('LandIS Soilscapes class and caveats'), and a specific input modality ('WGS84 point'). This clearly distinguishes it from the sibling landis_soilscapes_area_summary, which is the area-based counterpart.

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 input condition 'for a WGS84 point' makes the use case clear and implies a single-point lookup as opposed to area summaries. However, it does not explicitly name alternatives or state when not to use the tool, leaving the routing decision partially to the agent.

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

nomis_codelistsC
Read-onlyIdempotent

List NOMIS codelists or return a codelist definition.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNo
formatNo
codelistNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
liveYes
formatYes
codelistNo

TDQS

C2.8/5.0
Behavior2/5

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

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds no behavioral context beyond the core actions; it does not mention response behavior, codelist name requirements, or any other operational traits.

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 one short sentence with no filler. It front-loads the primary action and states the secondary action clearly, making it easy to scan.

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

Completeness2/5

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

Despite strong annotations and an output schema, the description is not complete enough for an agent to confidently choose between list and definition behavior or to understand the 'format' parameter. It is a minimal description for a tool with three parameters and zero schema-level parameter documentation.

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

Parameters2/5

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

Schema description coverage is 0%, yet the description does not explain the 'format' parameter or how 'codelist' selects a definition. It only hints that codelist relates to a definition, leaving parameter semantics largely to inference.

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 clear verb and resource: 'List NOMIS codelists' or 'return a codelist definition.' It identifies the domain sufficiently to distinguish it from sibling tools like nomis_datasets and nomis_concepts, though it does not explicitly name those alternatives.

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?

There is no guidance about when to use the list mode versus the definition mode, nor any mention of how this tool relates to sibling tools such as nomis_concepts or nomis_query. Usage context is only implied by the resource name.

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

nomis_conceptsC
Read-onlyIdempotent

List NOMIS concepts or return a concept definition.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNo
formatNo
conceptNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
liveYes
formatYes
conceptNo

TDQS

C2.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds a bit of behavioral context by indicating two modes—listing all concepts or returning one definition—but does not disclose any further behavior such as format effects, default behavior, or response characteristics.

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

Conciseness4/5

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

The description is a single, efficient sentence with no filler words. It is front-loaded and readable, though its brevity sacrifices semantic detail that could have been included without bloating the text.

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

Completeness2/5

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

Given there are three optional parameters and no parameter descriptions, the description is too thin for an agent to know how to request a specific concept or select an output format. The presence of an output schema helps with return values, but the invocation semantics are left unspecified.

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

Parameters1/5

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

Schema description coverage is 0%, and the description provides no parameter information whatsoever. It does not mention the 'concept' parameter, the 'format' enum, or how to trigger a list versus a definition, so the agent must rely entirely on bare schema fields with no explanatory help.

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: 'List NOMIS concepts or return a concept definition.' It is clear enough to identify the tool's domain, but the dual-mode 'or' leaves ambiguity about when each behavior applies, and it does not explicitly distinguish it from siblings like nomis_datasets, nomis_codelists, or nomis_query.

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 guidance is given about when to use this tool versus alternatives. The description implies two possible actions but gives no conditions, and it never mentions sibling tools or scenarios where another NOMIS tool would be more appropriate.

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

nomis_datasetsA
Read-onlyIdempotent

List NOMIS datasets (filtered and limited summary by default), or return a dataset definition.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoOptional case-insensitive dataset filter.
toolNo
limitNo
formatNo
datasetNoOptional dataset id
includeRawNoInclude the full upstream payload (required to fetch full dataset definitions when dataset is provided).

Output Schema

ParametersJSON Schema
NameRequiredDescription
rawNo
dataYes
liveYes
hintsNo
limitNo
queryNo
totalNo
formatYes
datasetNo
summaryNo
datasetsNo
overviewNo
returnedNo
truncatedNo
queryTemplateNo

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare the tool read-only and idempotent. The description adds a useful default behavior ('filtered and limited summary by default') but leaves the includeRaw requirement for full definitions to the schema, so an agent could slightly over-read 'return a dataset definition'.

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?

A single front-loaded sentence with the primary verb and resource first. There is no filler, and both operating modes are conveyed efficiently.

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?

The description is minimally viable for a read-only listing/definition tool with an output schema and detailed input schema. However, it lacks guidance on when to select it over sibling NOMIS tools and does not mention output format options, leaving some selection burden on the agent.

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?

With only 50% schema description coverage, the description adds some meaning by distinguishing list mode from definition mode and noting the default summary behavior. It does not explain format, limit, or the tool const, so it only partially compensates for schema gaps.

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 ('NOMIS datasets') and two clear operations: listing datasets or returning a dataset definition. It is clear enough to be separated from NOMIS codelists/concepts/query tools, though it does not explicitly name alternative siblings.

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: use this tool to list datasets or fetch a definition. There is no explicit when-to-use guidance versus nomis_query, nomis_codelists, or nomis_concepts, and no exclusions are stated.

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

nomis_queryC
Read-onlyIdempotent

Query NOMIS datasets (JSON-stat or SDMX JSON).

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNo
formatNo
paramsNo
datasetYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
liveYes
formatYes
datasetYes

TDQS

C2.6/5.0
Behavior2/5

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

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, covering safety and repeatability. However, the description adds no behavioral context beyond repeating the format enum from the schema. It does not disclose pagination, limits, error behavior, or what 'params' should contain.

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

Conciseness3/5

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

The description is a single, terse sentence with no filler, which is efficient. However, its brevity is under-specification rather than conciseness – it omits essential details given the tool's complexity (4 params, nested object). It is structured to be quick to read but not informative enough.

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

Completeness1/5

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

For a tool with a required dataset, a nested params object, and a format enum, the description is severely incomplete. It provides no instructions on building a valid query, what dataset identifiers look like, or how to structure the params object. Although an output schema exists, the input side is entirely unexplained.

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

Parameters1/5

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

Schema description coverage is 0% – no parameter descriptions exist in the schema. The description does not compensate: it only names the formats (already in schema) and fails to explain the 'dataset' parameter, the nested 'params' object, or the fixed 'tool' value. An agent has no idea what values to supply for these fields.

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 clearly states the verb 'Query' and the resource 'NOMIS datasets', explicitly mentioning the supported formats (JSON-stat or SDMX JSON). This distinguishes it from sibling tools like nomis_codelists, nomis_concepts, and nomis_datasets, which deal with dataset discovery rather than data retrieval.

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?

There is no guidance on when to use this tool versus alternatives such as ons_data_query or nomis_datasets. The description only implies it queries NOMIS data, but does not explain selection criteria, prerequisites, or exclude cases. Sibling tools are not mentioned.

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

ons_codes_listC
Read-onlyIdempotent

List available ONS dimensions for a live dataset version.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNo
datasetYes
editionYes
versionYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
liveYes
cachedNo
dimensionsYes

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the description does not need to restate safety. It adds the qualifier 'live' to 'dataset version,' which is useful context, but it does not describe what happens if the version is not live, what the output contains, or any other behavioral nuance. The description adds minimal value beyond the annotations.

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

Conciseness5/5

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

The description is a single concise sentence, front-loaded with the action verb. It contains no unnecessary words or filler, making it efficient and easy to parse.

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

Completeness2/5

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

While an output schema exists (so return format is covered), the description omits key context: the meaning of 'live,' the relationship between the parameters, and when to use this tool over similar siblings. For a tool with three required parameters and a crowded sibling space, the description leaves too much to inference.

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

Parameters1/5

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

Schema description coverage is 0%, so the description must compensate by explaining the parameters. It does not. It only hints at 'live dataset version' but does not define 'dataset,' 'edition,' or 'version.' With three required parameters and no parameter-level documentation, the description fails to help an agent understand what values to provide.

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 action ('List'), resource ('ONS dimensions'), and context ('for a live dataset version'). It clearly conveys what the tool does, but it does not explicitly differentiate from sibling tools like ons_data_dimensions or ons_codes_options, which may also deal with dimensions. Still, the purpose is unambiguous.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It does not mention exclusions, prerequisites, or conditions that would route an agent to this tool over siblings like ons_data_dimensions or ons_codes_options. There is no implied usage context beyond the literal action.

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

ons_codes_optionsC
Read-onlyIdempotent

List codes/options for a given ONS live dimension.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNo
datasetYes
editionYes
versionYes
dimensionYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
liveYes
cachedNo
optionsYes
dimensionYes

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the read-only nature is covered. The description adds 'List codes/options', which aligns with the annotations and clarifies the operation but does not disclose any additional behavioral aspects such as pagination, rate limits, or authentication. Since annotations carry the safety profile, the description adds minimal extra value, but there is no contradiction.

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

Conciseness4/5

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

The description is a single, front-loaded sentence that directly states the action and target. It contains no unnecessary words, making it efficient. However, it is arguably too terse to be fully useful, but conciseness itself is well-executed.

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

Completeness2/5

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

Given the tool has 5 parameters (4 required) with no enum constraints and no schema descriptions, the one-line description is insufficient for an agent to understand the relationships between dataset, edition, version, and dimension, or what 'live dimension' means. The output schema exists, so return format is covered, but the request construction remains ambiguous. The description does not provide examples or additional context needed for correct invocation.

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

Parameters2/5

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

Schema description coverage is 0%, meaning the schema provides no parameter explanations. The description only hints at 'dimension' as the key parameter, but dataset, edition, and version are left completely unexplained. It fails to compensate for the lack of schema documentation, leaving the agent uncertain about how to construct valid requests.

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

Purpose4/5

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

The description clearly states the verb 'List' and the resource 'codes/options for a given ONS live dimension', which distinguishes it from sibling tools like ons_codes_list (likely for a different scope) and ons_data_dimensions (which lists dimensions, not codes within a dimension). However, it doesn't explicitly name any alternative or contrast with them, 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 Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives like ons_codes_list or ons_data_dimensions. It simply states what it does, leaving the agent to infer its appropriate context. No exclusions or explicit comparisons are provided.

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

ons_data_create_filterC

Create a filter for live ONS observations. Returns filterId.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNo
datasetYes
editionYes
measureNo
versionYes
geographyNo
timeRangeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
paramsYes
filterIdYes

TDQS

C2.4/5.0
Behavior2/5

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

Annotations only provide openWorldHint: true, so the description carries most of the burden for behavioral disclosure. It adds that the operation targets 'live' observations and returns filterId, but it does not explain whether filters persist, expire, can be reused, or require any cleanup. No contradiction with annotations exists.

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

Conciseness3/5

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

The description is genuinely concise and front-loads the core action, but it is under-specified for a tool with 7 parameters and no schema descriptions. It earns its two sentences, yet a few more sentences about usage and parameter roles would not be wasted.

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

Completeness2/5

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

Given the 7-parameter schema with zero coverage and an openWorldHint annotation, the description is not complete enough for reliable invocation. Even though an output schema exists, the agent lacks essential workflow context, such as what dataset/edition/version identify and how filterId is meant to be consumed afterward.

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

Parameters1/5

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

Schema description coverage is 0%, and the description provides no parameter-level meaning beyond the raw property names. With 7 parameters and no descriptions in either the schema or the tool description, the agent cannot determine valid formats, relationships between parameters, or how optional parameters affect the filter.

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 clear verb and resource: 'Create a filter for live ONS observations' and states the key result: 'Returns filterId.' This distinguishes the tool from siblings like ons_data_get_observation or ons_data_query, though it does not explicitly call out any sibling alternatives.

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?

There is no guidance on when to use this tool versus alternatives such as ons_data_get_filter_output, ons_data_query, or ons_data_get_observation. The description implies a create-then-fetch workflow but never states it, leaving the agent to infer the proper sequencing.

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

ons_data_dimensionsB
Read-onlyIdempotent

List available ONS observation dimensions from the live API.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNo
datasetYes
editionYes
versionYes
dimensionNoReturn only this dimension's codes

Output Schema

ParametersJSON Schema
NameRequiredDescription
liveYes
dimensionsYes

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering the safety profile. The description adds only the 'live API' context, implying fresh or uncached results, but does not disclose other behavioral traits such as how the optional dimension parameter affects the response.

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 a single front-loaded sentence with no filler. Every word contributes to identifying the operation and resource.

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 read-only metadata tool, the annotations and existing output schema reduce the burden. However, the description still leaves gaps: it does not explain how to obtain valid dataset/edition/version values, nor how this tool fits into the broader ONS data workflow alongside sibling tools. This is adequate but not complete.

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

Parameters1/5

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

Schema description coverage is only 20%: only 'dimension' has a schema description. The tool description does not explain the required dataset, edition, and version parameters at all, nor how they scope the dimension list. With coverage this low, the description was expected to compensate and does not.

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

Purpose5/5

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

The description uses a specific verb ('List') and a precise resource ('ONS observation dimensions'), making the tool's job immediately clear. The name and wording distinguish it from sibling tools like ons_data_editions, ons_data_versions, and ons_data_get_observation without ambiguity.

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 gives no guidance on when to use this tool versus the many related ONS tools, such as ons_data_query, ons_data_get_observation, ons_data_editions, or ons_data_versions. Any usage context is only implied by the tool name, not stated.

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

ons_data_editionsB
Read-onlyIdempotent

List live editions for an ONS dataset.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNo
datasetYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
liveYes
countYes
datasetYes
editionsYes

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already convey read-only, open-world, and idempotent behavior. The description adds 'live' as a scoping constraint (only live editions are returned), which is a useful behavioral detail beyond annotations. However, it does not disclose other behaviors like error handling or data freshness, so a mid-range score is appropriate.

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 a single sentence with no fluff, front-loading the core action 'List live editions' before the scope. Every word earns its place, and the sentence is compact without being incomplete for its simple purpose.

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

Completeness2/5

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

Given the tool's simplicity and the presence of an output schema, the return shape is covered. However, the input parameter 'dataset' is left undefined, and 'live editions' could benefit from domain clarification. The description alone does not fully equip an agent to invoke the tool correctly without external knowledge.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It only hints that a dataset is required ('for an ONS dataset') without specifying the expected format (ID, slug, name) or any constraints. This is insufficient for an agent to construct a valid parameter value with confidence.

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'), resource ('live editions'), and scope ('for an ONS dataset'), distinguishing it from the sibling tool ons_data_versions which deals with versions. The action is unambiguous and clearly separated from other data-related tools.

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 guidance on when to use this tool versus alternatives like ons_data_versions or ons_data_query. It doesn't mention prerequisites, exclusions, or the specific situation where listing live editions is appropriate, leaving the agent to infer the usage.

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

ons_data_get_filter_outputA
Read-onlyIdempotent

Retrieve data for a previously created filter (formats: JSON, CSV, XLSX). Supports inline or resource delivery for larger outputs.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNo
formatNo
deliveryNo
filterIdYes
inlineMaxBytesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
rowsNo
bytesNo
formatYes
streamNo
columnsNo
dataHexNo
deliveryNo
filterIdYes
dataBase64No
contentTypeNo
resourceUriNo

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds formats and a vague 'inline or resource delivery for larger outputs' hint, but does not explain what resource delivery returns or how size thresholds behave.

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 sentences with no filler. The core retrieval purpose is front-loaded, followed by the most relevant format and delivery details.

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

Completeness4/5

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

With an output schema, read-only annotations, and a single required parameter, the description is largely sufficient. It leaves delivery semantics and how filterId is obtained implicit, but these are inferable from the schema and sibling tool names.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It mentions formats and inline/resource delivery, but filterId and inlineMaxBytes are left unexplainedchers, and there is no explicit mapping between the description and most parameters.

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 ('Retrieve') and a clear resource ('data for a previously created filter'), and it names the supported formats. This makes the tool's role distinct from sibling tools like ons_data_create_filter and ons_data_get_observation.

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 'previously created filter' clearly situates the tool in a workflow: use it after creating a filter with ons_data_create_filter. It also mentions a delivery choice for larger outputs. It does not explicitly name alternatives or exclusions, but the context is clear enough for an agent to select it.

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

ons_data_get_observationC
Read-onlyIdempotent

Fetch a single observation by geography, measure, time from the live ONS API.

ParametersJSON Schema
NameRequiredDescriptionDefault
timeYes
toolNo
datasetYes
editionYes
measureYes
versionYes
geographyYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
liveYes
observationYes

TDQS

C2.7/5.0
Behavior2/5

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

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering the safety profile. The description adds only 'live' and 'single observation,' with no detail about failure modes, exact-match semantics, rate limits, or response behavior; 'live' also overlaps with openWorldHint.

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 single sentence is front-loaded, specific, and free of filler, making it easy to scan. However, its brevity is achieved by dropping important routing and parameter context, so it is concise but not optimally sized for the tool's complexity.

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

Completeness2/5

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

The description is too sparse to fully support invocation: an agent cannot determine how to fill required dataset/edition/version parameters or know when to prefer this over siblings like ons_data_query. The presence of an output schema mitigates the return-value gap but does not compensate for the missing parameter and routing context.

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

Parameters2/5

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

With 7 parameters and 0% schema description coverage, the description must compensate for the schema's silence. It names geography, measure, and time, but says nothing about dataset, edition, version, or value formats, leaving three of six required parameters completely unexplained.

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 uses a specific verb ('Fetch'), identifies the resource ('a single observation'), and names the source API ('live ONS API'). The word 'single' helps differentiate it from broader ONS query tools like ons_data_query, though it omits the required dataset/edition/version dimensions.

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 explicit when-to-use or when-not-to-use guidance is provided, and no sibling alternatives are named. The 'single observation' phrasing only implies an exact-lookup use case, leaving the agent to infer how this differs from ons_data_query or ons_data_create_filter.

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

ons_data_queryA
Read-onlyIdempotent

Query live ONS observations (dataset/edition/version or search term).

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
termNoSearch term for auto-resolving dataset/edition/version
toolNo
limitNo
queryNoAlias for term
datasetNoONS dataset ID for live mode
editionNoONS dataset edition for live mode
filtersNoExplicit dimension-name filters passed through to ONS observations.
measureNo
versionNoONS dataset version for live mode
geographyNo
timeRangeNoFormat 'YYYY Qn-YYYY Qn' or single period 'YYYY Qn'

Output Schema

ParametersJSON Schema
NameRequiredDescription
pageYes
countYes
limitYes
filtersNo
resultsYes
timeRangeNo
dimensionsNo
timeValuesNo
nextPageTokenNo

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already establish readOnly, openWorld, and idempotent behavior, so the bar is lower. The description adds that queries hit 'live' ONS observations, which implies current data and aligns with openWorld, but it does not disclose pagination limits, output size, or what auto-resolution means beyond the schema's term description. No contradiction.

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?

One compact sentence front-loads the core action and then states the two invocation modes. Every word earns its place.

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 12-parameter tool with no required params, the description gives the central mode distinction but not enough to assemble a correct query (how filters/measure/timeRange interact, what the output schema returns, or whether search term replaces dataset/edition/version entirely). Output schema exists and annotations help, so it is not critically incomplete, but it leaves meaningful gaps.

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 58%, so the description carries some but not full responsibility. It adds the useful distinction between live mode (dataset/edition/version) and search-term mode, but leaves measure, geography, filters structure, and timeRange semantics to the schema, and several params are undocumented.

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?

Description names the verb 'Query' and resource 'live ONS observations', and identifies two entry modes: explicit dataset/edition/version or search term. It distinguishes from metadata siblings like ons_data_dimensions/editions/versions but does not contrast with the close sibling ons_data_get_observation.

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 phrase 'dataset/edition/version or search term' conveys a clear context for using the tool in one of two modes, but it never names alternative tools or states when not to use it. An agent must infer the boundary against ons_data_get_observation, ons_search_query, or ons_data_create_filter.

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

ons_data_versionsC
Read-onlyIdempotent

List live versions for an ONS dataset edition.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNo
datasetYes
editionYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
liveYes
countYes
datasetYes
editionYes
versionsYes

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering the basic safety profile. The description adds no behavioral context beyond 'list live versions' – it does not disclose what 'live' means (e.g., excluding archived or draft versions), pagination behavior, or any limits. With annotations present, the bar is lower, but the description still contributes little beyond the safety flags.

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 a single, concise sentence that front-loads the core action and resource. There is no filler or redundancy – every word earns its place. It is optimally sized for the low complexity of the tool.

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 list operation with an output schema present, the description is minimally adequate. It covers the purpose but omits any nuance about parameter semantics or what 'live versions' entails. Given the 0% schema coverage and lack of usage guidance, more context would be expected, though the output schema mitigates the need to describe return values.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must explain the parameters, but it does not. It only mentions 'dataset' and 'edition' by name without adding format, constraints, or examples. The parameter names are self-explanatory to some degree, but the description fails to compensate for the missing schema documentation.

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

Purpose4/5

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

The description clearly states the action (list) and the resource (live versions for an ONS dataset edition). It is specific enough to distinguish from sibling tools like ons_data_editions (which lists editions) and ons_data_dimensions. However, it does not elaborate on what 'versions' means or how it differs from other list-type tools beyond the resource name.

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 guidance on when to use this tool versus alternatives. It does not mention prerequisites (e.g., needing a dataset and edition), nor does it note when another tool like ons_data_editions or ons_data_dimensions would be more appropriate. Usage context is entirely implied by the tool name and parameters.

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

ons_geo_area_summaryC
Read-onlyIdempotent

Resolve a compact OA/LSOA/MSOA/parish/ward/profile summary from an area code, postcode, or UPRN using cached ONS geographies, compact inventory counts, and curated NOMIS follow-up datasets.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNo
toolNo
uprnNo
postcodeNo
targetLevelNo
derivationModeNoexact
includeInventoryNo
includePopulationNo
profileCategoriesNo
inventoryResponseModeNosummary
includeProfileDatasetsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
areaYes
inputYes
anchorYes
countsNo
guidanceYes
inventoryNo
populationNo
provenanceYes
profileDatasetsNo
workflowProfileUriYes

TDQS

C2.9/5.0
Behavior3/5

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

The annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description adds useful context about data provenance, mentioning cached ONS geographies, compact inventory counts, and curated NOMIS follow-up datasets. However, it does not disclose fallback behavior such as exact vs best_fit resolution, error cases, or why a lookup might fail, though the annotation coverage softens this gap.

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

Conciseness4/5

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

The description is a single sentence with no filler and front-loads the tool's purpose. It is efficient, though dense and jargon-heavy; a short structured list or a second clarifying sentence could have made the same content more legible without being wasteful.

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

Completeness2/5

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

Given the tool has 11 optional parameters, no required parameters, and zero schema-level parameter descriptions, the description is not complete enough for reliable invocation. It does not explain how inputs combine (e.g., postcode vs UPRN), which values targetLevel can take, what derivationMode exact vs best_fit means, or what happens when multiple identifiers are supplied. The presence of an output schema and annotations prevents a lower score, but significant operational context is missing.

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

Parameters2/5

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

Schema description coverage is 0% across 11 parameters, so the description must compensate. It does connect some parameters at a high level: 'area code, postcode, or UPRN' maps to id, postcode, and uprn, while 'inventory counts' and 'NOMIS follow-up datasets' roughly map to includeInventory/inventoryResponseMode and includeProfileDatasets/profileCategories. But targetLevel, derivationMode, inventoryResponseMode semantics, profileCategories formats, and the boolean flags are left unexplained, leaving too much to inference.

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 ('Resolve'), a concrete resource ('compact OA/LSOA/MSOA/parish/ward/profile summary'), and accepted lookup inputs ('area code, postcode, or UPRN'). It does not explicitly contrast itself with sibling tools like ons_geo_by_postcode or admin_lookup_area_geometry, but the 'compact inventory counts' and 'curated NOMIS follow-up datasets' give it a reasonably distinct identity.

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 is given. The description does not state when this tool should be preferred over alternatives such as ons_geo_by_postcode, ons_geo_by_uprn, or landis_natmap_area_summary, nor does it mention any exclusions or prerequisites. The intended context is only weakly implied by the phrase 'from an area code, postcode, or UPRN'.

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

ons_geo_by_postcodeB
Read-onlyIdempotent

Lookup all cached geographies for a postcode using derivation mode (exact via ONSPD, best_fit via NSPL).

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNo
postcodeYes
includeRawNo
derivationModeNoexact

Output Schema

ParametersJSON Schema
NameRequiredDescription
rawNo
queryYes
lookupYes
geographiesYes
geographyCountYes

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, covering the safety profile. The description adds genuine value by disclosing that results come from a cache (so may be stale rather than live) and that multiple geographies may be returned ('all cached geographies'). It does not disclose cache-miss behavior or staleness policy, but for a read-only tool with strong annotations, the added context is adequate though not rich.

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

Conciseness5/5

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

A single 17-word sentence that front-loads the verb and resource, then attaches the parameter context. Every word earns its place and there is zero filler or repetition of schema content.

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?

The output schema covers return structure, so the description doesn't need to explain results. For a read-only, idempotent lookup with an output schema, the core is covered. But an agent still lacks guidance on includeRaw's behavior, postcode formatting, and what happens when a postcode has no cached data — gaps that matter for correct first-time invocation. Adequate but with clear holes.

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

Parameters2/5

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

Schema description coverage is 0%, so the description carries the full burden of explaining parameters. It meaningfully explains derivationMode by mapping 'exact' to ONSPD and 'best_fit' to NSPL. However, includeRaw is never explained (what does 'raw' mean here?) and postcode format expectations (case, spacing) are absent. Partial compensation at best, with two of three functional parameters left to inference.

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 ('Lookup') and resource ('all cached geographies for a postcode'), which clearly states what the tool does. The 'cached' qualifier helps distinguish it from live-data siblings like os_places_by_postcode, and the by-postcode scope distinguishes it from ons_geo_by_uprn. However, it doesn't explicitly name a sibling to rule out, so differentiation is implicit rather than stated.

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 offers no guidance on when to choose this tool over alternatives. It explains the internal derivation modes (exact via ONSPD, best_fit via NSPL) but never addresses when to use ons_geo_by_postcode versus ons_geo_by_uprn, os_places_by_postcode, or ons_geo_area_summary. No exclusions or alternative-routing conditions are provided.

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

ons_geo_by_uprnB
Read-onlyIdempotent

Lookup all cached geographies for a UPRN using derivation mode (exact via ONSUD, best_fit via NSUL).

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNo
uprnYes
includeRawNo
derivationModeNoexact

Output Schema

ParametersJSON Schema
NameRequiredDescription
rawNo
queryYes
lookupYes
geographiesYes
geographyCountYes

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds that it returns 'all cached geographies' and explains derivation modes (ONSUD/NSUL), which is useful, but does not describe output structure, potential errors, or the meaning of 'cached' beyond that.

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?

A single sentence that front-loads the core action and includes the key mode distinction. No fluff or redundant phrasing; it is as concise as possible while conveying the primary purpose.

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?

Given there is an output schema and annotations cover safety, the description is adequate but not complete. It omits usage guidance and full parameter semantics, and does not explain the practical difference between exact and best_fit beyond the source names. For a simple lookup tool it is minimally sufficient but leaves questions.

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

Parameters2/5

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

The schema has 0% description coverage, so the description must explain parameters. It explains derivationMode with its two values but does not clarify uprn (format/length), includeRaw, or the tool constant. This partial compensation is insufficient for a 0% coverage schema.

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

Purpose4/5

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

The description clearly states the tool looks up all cached geographies for a UPRN and mentions the derivation mode. It distinguishes itself from siblings by focusing on UPRN and cached geographies, though it does not explicitly name alternatives like ons_geo_by_postcode.

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 guidance on when to use this tool versus alternatives. It does not mention when to prefer this over ons_geo_by_postcode or other geo lookups, nor when to choose exact vs best_fit beyond the brief parenthetical. The usage context is only implied by the tool name.

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

ons_geo_cache_statusA
Read-onlyIdempotent

Return cache/index status for ONS geography lookups (ONSPD/ONSUD/NSPL/NSUL).

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
dbPathYes
cacheDirYes
productsYes
availableYes
indexPathYes
productCountYes

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already carry readOnlyHint=true and idempotentHint=true, so no additional safety disclosure is needed. The description adds the scope of what status is returned (cache/index for ONS datasets) but does not elaborate on behavior such as whether the status check triggers cache building or how staleness is reported; with the safety profile covered, the description provides adequate but not rich behavioral context.

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

Conciseness5/5

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

A single, front-loaded sentence states exactly what the tool does, lists the relevant dataset codes, and contains no filler. Every word earns its place.

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?

This is a simple, parameter-free status tool with a provided output schema and safety annotations; the description covers its functional scope and dataset focus. It could optionally mention what 'status' means (e.g., last build date, loaded indicator), but the output schema likely fills that gap, and the tool is straightforward enough for correct invocation.

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?

The input schema has a single constant 'tool' parameter with no description, and zero required parameters, so effectively the tool takes no meaningful user input. Schema description coverage is 0%, but the description doesn't need to explain parameters because there is nothing to configure; the baseline for near-zero parameters is 4.

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 clearly states a specific verb ('Return'), a concrete resource ('cache/index status for ONS geography lookups'), and explicitly names the datasets (ONSPD/ONSUD/NSPL/NSUL). This differentiates it from the sibling admin_lookup_get_cache_status by naming the ONS domain and dataset codes.

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 description gives clear context about the tool's scope ('ONS geography lookups' with specific datasets), which implies when to use it over the admin-lookup sibling. However, it does not explicitly state 'use this for ONS cache status, use admin_lookup_get_cache_status for admin cache status' or provide exclusion conditions, so it falls short of a fully explicit routing.

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

ons_geo_release_auditA
Read-onlyIdempotent

Audit ONS UPRN release freshness by combining AddressBase epoch schedule, Geoportal notices, Geoportal dataset discovery, and current package resolution.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNo
timeoutNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
versionYes
datasetsYes
publisherNoticesYes
addressBaseScheduleYes

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description adds that the tool combines multiple sources and resolves current package state, which implies a read-only aggregation. It does not disclose output shape or potential latency from combining multiple sources, but with annotations covering safety, a 3 is appropriate.

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

Conciseness4/5

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

The description is a single sentence that front-loads the core purpose ('Audit ONS UPRN release freshness') and then lists the four sources. It is compact and information-dense, though the list of sources is somewhat long and could be trimmed or formatted for readability.

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?

The tool has an output schema (not shown in detail) and no required parameters, so the description need not explain return values. However, the description does not mention what the audit result looks like, whether it returns a report or a status, or how the 'current package resolution' is determined. For a diagnostic tool, a bit more context on the output would help, but the presence of an output schema lowers the burden.

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 0%, but the schema has only two parameters: 'tool' (a const) and 'timeout' (a number with default 30). The description does not need to explain 'tool' since it is fixed, and 'timeout' is self-explanatory. With zero required parameters and a trivial schema, the description carries little burden; the baseline 4 for minimal params 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 verb ('Audit') and resource ('ONS UPRN release freshness'), and lists the four data sources it combines. It is clear about what the tool does, though it does not explicitly distinguish itself from siblings like ons_geo_cache_status or os_downloads_list_products. The domain-specific jargon (UPRN, AddressBase epoch) is meaningful to the intended audience.

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 a diagnostic/audit use case but does not state when to use it versus alternatives such as ons_geo_cache_status or os_downloads_list_products. There is no explicit when/when-not guidance, but the audit framing gives enough context for an agent to infer it is for checking release freshness rather than querying geometry or downloading data.

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

ons_search_queryC
Read-onlyIdempotent

Search live ONS datasets by term.

ParametersJSON Schema
NameRequiredDescriptionDefault
termYes
toolNo
limitNo
offsetNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
liveNo
countYes
limitNo
totalNo
offsetNo
resultsYes

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, which covers the safety profile. The description's word 'live' adds a mild behavioral hint that results reflect current live datasets rather than cached data, but it does not disclose pagination behavior, result format, or search semantics. Since annotations carry the main burden and the description adds only modest context, a 3 is appropriate.

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 single sentence 'Search live ONS datasets by term' is front-loaded with the verb and resource, and contains no filler. It is appropriately concise for the tool's simplicity, though it is arguably too sparse to fully serve its purpose.

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

Completeness2/5

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

Despite having an output schema and safety annotations, the description leaves important operating details unstated: how term matching works, what limit/offset do, and when to prefer this tool over sibling ONS search tools. For a search tool with zero parameter coverage in the schema, one sentence is insufficient for an agent to call it correctly in all cases.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate by explaining parameters. It only mentions 'term' and never addresses 'limit' or 'offset' semantics (e.g., default pagination, maximum page size, ordering). The description adds minimal meaning beyond the raw schema, leaving the agent to guess how term matching and pagination behave.

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 ('Search'), a resource ('live ONS datasets'), and the key parameter ('by term'), so an agent can grasp the core function immediately. However, it does not differentiate this tool from sibling search tools like ons_data_query or ons_select_search, leaving some ambiguity about which search tool to pick based on name alone.

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?

There is no guidance on when to use this tool versus the many sibling alternatives (e.g., ons_data_query, ons_select_search, ons_codes_list). The description gives no context about when 'search live datasets by term' is the right choice, nor does it specify exclusions or prerequisites, so the agent must infer usage from the schema alone.

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

os_apps_log_eventC

Log MCP-Apps UI interaction events for tracing.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNo
sourceNo
contextNo
payloadNo
eventTypeYes
sessionIdNo
timestampNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusYes
eventIdYes
logPathNo
timestampYes

TDQS

C2.4/5.0
Behavior2/5

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

Annotations are empty, so the description carries full burden. It states that events are logged for tracing, implying a write operation, but discloses nothing about data persistence, retention, privacy, or whether this has side effects. For a telemetry tool, the lack of any behavioral caveat is a significant gap.

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?

A single sentence with no filler. It is concise and front-loaded with the core action. However, it is so sparse that it might be under-specified rather than efficiently concise, but as a structure it is clear and readable.

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

Completeness1/5

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

Given the tool has 7 parameters, nested objects, and an output schema, the description is grossly incomplete. It provides no information about return values, error conditions, or how to construct a valid event. An agent cannot correctly invoke this tool without external knowledge.

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

Parameters1/5

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

Schema coverage is 0% and the description adds no parameter meaning. It doesn't explain eventType, source, context, payload, sessionId, or timestamp. With 7 parameters including nested objects, the agent has no guidance on how to populate them, and the description fails to compensate for the schema's lack of descriptions.

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

Purpose4/5

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

The description clearly states a verb ('Log') and a resource ('MCP-Apps UI interaction events') with an explicit purpose ('for tracing'). It distinguishes itself from the rendering siblings (os_apps_render_*) by implying a telemetry role, though it doesn't name an alternative or contrast explicitly.

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 guidance on when to use this tool versus the many sibling tools. It does not mention when logging is appropriate, how it relates to rendering tools, or any prerequisites. The agent must infer that it's for tracing UI interactions, which is not explicitly stated as a usage condition.

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

os_apps_render_boundary_explorerC
Read-onlyIdempotent

Open the MCP-Apps boundary explorer widget.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNo
levelNo
focusNameNo
focusLevelNo
initialLatNo
initialLngNo
searchTermNo
contentModeNo
detailLevelNo
initialZoomNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
_metaNo
configNo
statusYes
contentNo
resourceUriNo
instructionsNo
uiResourceUrisYes
structuredContentNo

TDQS

C2.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is known. The description adds no extra behavioral context such as what 'open' entails or any side effects. It does not contradict the annotations, but it contributes nothing beyond them.

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

Conciseness2/5

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

The description is a single, very short sentence. While it is concise in length, it is severely under-specified—it provides almost no useful information for an agent. This is under-specification rather than good conciseness.

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

Completeness1/5

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

With 10 optional parameters, no parameter descriptions, and a widget whose purpose is unexplained, the description is grossly inadequate. An agent cannot know what the boundary explorer widget does, what inputs to provide, or what output to expect. The presence of an output schema does not compensate for the complete lack of explanatory content.

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

Parameters1/5

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

The input schema has 10 parameters with zero descriptions (schema_description_coverage=0%). The tool description provides no information about any of these parameters, leaving the agent completely in the dark about what 'level', 'focusName', 'initialLat', etc. mean. The description fails to compensate for the lack of schema documentation.

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 ('Open') and a specific resource ('MCP-Apps boundary explorer widget'). However, it does not differentiate from sibling render tools that likely follow the same pattern, and it gives no clue about what the widget actually does. This is clear but not distinguishing.

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?

There is no guidance on when to use this tool versus the many sibling render tools or other tools. The description only states the action without any context about appropriate use cases, alternatives, or exclusions.

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

os_apps_render_feature_inspectorC
Read-onlyIdempotent

Open the MCP-Apps feature inspector widget.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNo
featureIdNo
linkedIdsNo
contentModeNo
collectionIdNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
_metaNo
configNo
statusYes
contentNo
resourceUriNo
instructionsNo
uiResourceUrisYes
structuredContentNo

TDQS

C2.4/5.0
Behavior2/5

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

Annotations already declare readOnlyHint and idempotentHint, so the description does not contradict them. However, it adds no behavioral context beyond 'Open' – no indication of what the widget displays, how it interacts with the user, or what side effects (if any) it has. With annotations present, the description still fails to provide meaningful transparency.

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

Conciseness3/5

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

The description is a single sentence, which is efficient and front-loaded with the action. However, it is under-specified rather than concise – it does not include any of the detail an agent needs, so it fails to earn its place.

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

Completeness2/5

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

With 5 parameters, an output schema, and no schema descriptions, the tool is complex enough to require more context. The description offers no information about parameters, return values, or usage scenarios, making it incomplete for an agent to use effectively.

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

Parameters1/5

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

Schema description coverage is 0% and the description mentions none of the 5 parameters (tool, featureId, linkedIds, contentMode, collectionId). An agent receives no help understanding what these parameters do or why they are optional, making the tool nearly impossible to invoke correctly.

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

Purpose4/5

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

The description clearly states a specific action ('Open') and resource ('the MCP-Apps feature inspector widget'), which is distinguishable from sibling render tools by name. However, it does not explain what a 'feature inspector' does or how it differs from other os_apps_render_* widgets, leaving some ambiguity.

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 guidance is given on when to use this tool versus alternatives like os_apps_render_boundary_explorer or os_apps_render_ui_probe. The description provides no context for selection.

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

os_apps_render_geography_selectorC
Read-onlyIdempotent

Open the MCP-Apps geography selector widget.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNo
levelNo
focusNameNo
focusLevelNo
initialLatNo
initialLngNo
searchTermNo
contentModeNo
initialZoomNo
multiSelectNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
_metaNo
configNo
statusYes
contentNo
resourceUriNo
instructionsNo
uiResourceUrisYes
structuredContentNo

TDQS

C2.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description adds useful context that this is a UI widget rather than a data query tool, but it does not disclose further behavioral details such as whether the widget requires application context or how it behaves when no parameters are provided.

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

Conciseness4/5

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

The description is a single, front-loaded sentence with no filler. It is appropriately concise for a UI widget, although the brevity contributes to the lack of parameter and usage detail.

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

Completeness2/5

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

Given a 10-parameter schema with zero descriptions and no enum constraints, this minimal description is not sufficient for an agent to select parameters confidently. The output schema reduces the need to explain return values, but the parameter semantics and usage context remain too underspecified.

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

Parameters1/5

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

Schema description coverage is 0% and the description mentions no parameters. With 10 optional parameters including level, focusName, searchTerm, multiSelect, and initialZoom, the agent receives no semantic information to guide correct invocation.

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 action ('Open') and resource ('MCP-Apps geography selector widget'), making the tool's core purpose understandable. It also broadly distinguishes this widget from sibling render tools like the route planner or statistics dashboard, though it does not explain what the geography selector actually does.

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 guidance is provided about when to use this tool versus alternatives such as os_apps_render_boundary_explorer or os_apps_render_feature_inspector. The description neither names conditions for use nor mentions any exclusions or preferred alternatives.

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

os_apps_render_route_plannerC
Read-onlyIdempotent

Open the MCP-Apps route planner widget.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNo
viaNo
modeNo
toolNo
startNo
stopsNo
endLatNo
endLngNo
originNo
profileNo
deliveryNo
startLatNo
startLngNo
routeModeNo
constraintsNo
contentModeNo
destinationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
_metaNo
configNo
statusYes
contentNo
resourceUriNo
instructionsNo
uiResourceUrisYes
structuredContentNo

TDQS

C2/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, covering the safety profile. The description adds no additional behavioral context—no mention of side effects, return format, or limitations. It neither contradicts annotations nor enriches them beyond the basic 'open widget' action.

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

Conciseness2/5

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

The description is a single sentence, which is concise, but it is under-specified. It does not front-load any useful detail and lacks the substance needed for a tool with 17 parameters. Conciseness without content is not helpful.

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

Completeness1/5

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

With 17 parameters, no parameter descriptions, and no explanation of the widget's purpose or output, the description is far from complete. Even with annotations covering read-only/idempotent safety, an agent cannot determine correct invocation without additional context.

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

Parameters1/5

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

Schema description coverage is 0% for 17 parameters, and the description provides zero guidance on parameter meaning, format, or relationships. With no parameter documentation anywhere, the description fails entirely to compensate for the schema gap.

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

Purpose3/5

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

The description states a clear verb ('Open') and resource ('MCP-Apps route planner widget'), and the resource name distinguishes it from sibling render tools (boundary explorer, feature inspector, etc.). However, it does not elaborate on what the widget does or what 'route planner' entails, leaving the purpose only partially clear.

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?

There is no guidance on when to use this tool versus alternatives. No mention of prerequisites, typical use cases, or exclusions. An agent would have no way to decide between this and other os_apps_render_* tools based on the description.

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

os_apps_render_statistics_dashboardD
Read-onlyIdempotent

Open the MCP-Apps statistics dashboard widget.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNo
datasetNo
measureNo
areaCodesNo
contentModeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
_metaNo
configNo
statusYes
contentNo
resourceUriNo
instructionsNo
uiResourceUrisYes
structuredContentNo

TDQS

D1.3/5.0
Behavior1/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true. The description adds no behavioral context beyond a generic 'Open' action, offering no insight into what parameters affect output, what the dashboard displays, or any side effects. It neither contradicts nor supplements the annotations.

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

Conciseness2/5

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

The description is a single short sentence, technically concise, but it is under-specified rather than concise. It does not earn its place because it conveys almost no decision-relevant information, similar to the 'Process' calibration example.

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

Completeness1/5

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

With five undocumented optional parameters, no enums, no parameter descriptions, and a family of sibling render widgets, the description is critically incomplete. An agent cannot know what inputs to provide or what output to expect, despite the presence of an output schema.

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

Parameters1/5

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

Schema description coverage is 0%, so the five optional parameters (dataset, measure, areaCodes, contentMode) are completely undocumented. The description mentions none of them and provides zero meaning beyond the schema's bare property names. The description carries the full burden to explain these parameters and fails entirely.

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

Purpose2/5

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

The description 'Open the MCP-Apps statistics dashboard widget' is essentially a rephrasing of the tool name (render_statistics_dashboard). It uses a vague verb ('Open') and does not distinguish this widget tool from its sibling render tools like os_apps_render_boundary_explorer or os_apps_render_route_planner. It fails to state what the dashboard actually does or shows.

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

Usage Guidelines1/5

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

There is no guidance on when to use this tool versus alternatives. The description provides no context, usage scenarios, or exclusions, leaving an agent with no way to decide between this and the numerous other render and query tools.

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

os_apps_render_ui_probeC
Read-onlyIdempotent

Probe MCP-Apps UI rendering support.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNo
contentModeNo
resourceUriNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
_metaNo
configNo
statusYes
contentNo
resourceUriNo
instructionsNo
uiResourceUrisYes
structuredContentNo

TDQS

C2.3/5.0
Behavior3/5

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

Annotations declare readOnlyHint=true and idempotentHint=true, so the description does not need to restate safety. However, the description adds no behavioral context beyond the annotations: it does not explain what 'probe' returns, whether it renders a UI, or what side effects (if any) it has. With annotations covering the safety profile, a 3 is appropriate because the description adds minimal value but does not contradict the annotations.

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

Conciseness3/5

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

The description is extremely short (one sentence), which is concise, but it is under-specified rather than efficiently informative. It front-loads the verb 'Probe' but the sentence does not earn its place because it lacks actionable detail. It is not verbose, but it is not a model of concise clarity.

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

Completeness2/5

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

Given the tool has an output schema and three optional parameters, the description is incomplete. It does not explain the purpose of the parameters, what the output represents, or how this tool relates to the many sibling os_apps_render_* tools. The output schema may help, but the description alone leaves too much to inference for an agent to select and invoke this tool correctly.

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

Parameters2/5

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

Schema description coverage is 0%, and the description provides no parameter information. The schema shows three optional parameters (tool, contentMode, resourceUri) with no descriptions, enums, or defaults. The description does not compensate for this gap, leaving an agent to guess what contentMode and resourceUri mean in the context of 'probing UI rendering support.'

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

Purpose2/5

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

The description 'Probe MCP-Apps UI rendering support' is vague. It names a resource ('MCP-Apps UI rendering support') and a verb ('probe'), but does not specify what probing means, what the tool actually does, or what output it produces. It does not distinguish it from the many sibling os_apps_render_* tools, which all appear to render UI components.

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 guidance is given on when to use this tool versus the sibling render tools (e.g., os_apps_render_boundary_explorer, os_apps_render_feature_inspector). The description does not state any conditions, prerequisites, or alternatives. An agent cannot tell whether this is a health check, a capability discovery tool, or a rendering tool.

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

os_downloads_get_exportB
Read-onlyIdempotent

Retrieve a previously prepared OS downloads export by exportId.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNo
deliveryNo
exportIdYes
inlineMaxBytesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
stateYes
deliveryYes
exportIdYes
resourceUriNo

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the description needs less behavioral disclosure. It does add the precondition 'previously prepared' and the retrieval-by-ID nature, but it does not explain what happens if the exportId is missing, expired, or how delivery/inlineMaxBytes affect behavior. This is acceptable but not rich.

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

Conciseness5/5

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

The description is a single front-loaded sentence with no filler. Every word contributes to meaning, and it is immediately clear what the tool does.

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 get-by-ID operation with an output schema and safety annotations, the description is nearly sufficient. The main gap is the missing explicit workflow context that this should be called only after os_downloads_prepare_export, and the semantics of delivery and inlineMaxBytes, which are needed to invoke the tool with full confidence.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It only clarifies exportId as the retrieval key; delivery and inlineMaxBytes are left entirely unexplained despite having an enum and constraints. The parameter names and schema provide some hints, but the description adds minimal semantic value beyond them.

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 ('Retrieve'), a clear resource ('previously prepared OS downloads export'), and the lookup key ('exportId'). It does not explicitly name a sibling tool, but the phrase 'previously prepared' and the presence of os_downloads_prepare_export in the toolset make the distinction reasonably clear.

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 phrase 'previously prepared' implies that os_downloads_prepare_export must be invoked first, but this prerequisite is not stated explicitly. There is no guidance on when to choose this over alternatives or when not to use it, leaving the usage context to inference.

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

os_downloads_get_productB
Read-onlyIdempotent

Get OS Downloads product metadata by productId.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNo
productIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
productYes

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description adds only that it retrieves 'metadata', implying a non-destructive, lightweight operation, but it does not add context about authentication, rate limits, or any side effects. With annotations present, this is adequate but not enriched.

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

Conciseness4/5

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

The description is a single concise sentence with no filler. It is front-loaded with the core action. However, it could arguably include a bit more context without becoming verbose, but as written it is appropriately brief.

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?

The tool is simple (one required parameter, no nested objects) and an output schema exists, so return values need not be described. However, the description lacks usage guidance and does not mention prerequisites (e.g., the product must exist or how to discover product IDs). It is minimally sufficient but not complete.

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

Parameters2/5

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

Schema description coverage is 0%, so the schema provides no explanation for productId. The description merely repeats 'by productId' without clarifying what a productId is, where to obtain it, or its format. Since the description must compensate for the missing schema documentation but does so minimally, this scores low.

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 ('Get'), a specific resource ('OS Downloads product metadata'), and the identifier ('productId'). This clearly distinguishes it from sibling tools like os_downloads_list_products (which lists products) and os_downloads_get_export (which retrieves an export). The purpose is unambiguous.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives. Sibling tools include list_products and get_export, and the description does not explain how this tool fits into a workflow (e.g., 'use after os_downloads_list_products to get details for a specific product'). No exclusions or conditions are mentioned.

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

os_downloads_list_data_packagesB
Read-onlyIdempotent

List account-specific OS data packages (permission dependent).

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNo
deliveryNo
inlineMaxBytesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNo
deliveryYes
dataPackagesNo

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds 'account-specific' scope and 'permission dependent' (authentication requirement), which is useful beyond annotations. It does not mention output structure or pagination, but the output schema covers return values.

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

Conciseness4/5

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

The description is a single, front-loaded sentence with no wasted words. It conveys the core purpose and scope efficiently, though it omits essential parameter and usage details.

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

Completeness2/5

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

Given zero schema coverage, the description must explain parameters, but it does not. It also lacks usage routing compared to siblings. The output schema covers return values, but the missing parameter semantics and minimal usage context leave the agent under-informed for a tool with no required parameters.

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

Parameters1/5

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

Schema description coverage is 0%, and the description provides no explanation for the 'delivery' or 'inlineMaxBytes' parameters. The agent receives no guidance on what these control or how to set them, despite them being optional. The description completely fails to compensate for the schema gap.

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 clearly states the verb 'List' and the resource 'account-specific OS data packages', and notes 'permission dependent', which helps distinguish it from siblings like os_downloads_list_products (general product listing) and os_downloads_list_product_downloads. It is specific and actionable.

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 via 'account-specific' and 'permission dependent' but does not explicitly name alternatives or provide when-to-use/when-not-to-use guidance. An agent must infer that this tool is for listing packages tied to the current account rather than all products.

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

os_downloads_list_product_downloadsB
Read-onlyIdempotent

List download entries for a specific OS Downloads product.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNo
limitNo
offsetNo
deliveryNo
pageTokenNo
productIdYes
inlineMaxBytesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNo
totalNo
deliveryYes
downloadsNo
resourceUriNo
nextPageTokenNo

TDQS

B3.1/5.0
Behavior3/5

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

The annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering the safety and side-effect profile. The description adds no behavioral details such as return format, pagination behavior, or limits. It does not contradict the annotations; it simply restates the operation. Given the annotations cover the main safety aspects, a 3 is appropriate.

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 a single, clear sentence with no redundant words. It is front-loaded with the core action and resource. There is no fluff or unnecessary detail, which is appropriate for a tool with a straightforward purpose.

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

Completeness2/5

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

While an output schema exists, the description omits critical usage context such as how pagination works, what the delivery parameter means, or what constitutes a 'download entry'. For a tool with 7 parameters and 0% schema coverage, this is incomplete. The description does not prepare an agent to handle optional parameters correctly.

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

Parameters1/5

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

Schema description coverage is 0%, so the description must explain the parameters, but it only mentions the product scope. It provides no meaning for limit, offset, pageToken, delivery, or inlineMaxBytes beyond their schema types and constraints. The description fails to compensate for the lack of schema documentation, leaving an agent uncertain about how to use key parameters.

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 clearly states the action (list), the resource (download entries), and the scope (for a specific OS Downloads product). It distinguishes itself from siblings like os_downloads_list_products (lists products) and os_downloads_get_product (gets a product) by focusing on download entries for a given product.

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 explicit guidance on when to use this tool versus alternatives. It does not mention conditions like needing a product ID, pagination, or when to prefer a sibling tool such as os_downloads_list_products. The context is implied by the name but not explicitly stated.

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

os_downloads_list_productsB
Read-onlyIdempotent

List OS Downloads products with optional local query filtering.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNo
toolNo
limitNo
offsetNo
pageTokenNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
totalYes
productsYes
nextPageTokenNo

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already cover readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is established. The description adds 'optional local query filtering,' which is a behavioral detail beyond annotations, but it does not explain pagination behavior, the meaning of 'local,' or what constitutes a 'product.' Some value is added, but significant behaviors remain undisclosed.

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?

A single, front-loaded sentence with no filler. It efficiently conveys the core action, resource, and a key optional behavior, earning its place with every word.

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

Completeness2/5

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

For a list tool with five parameters, no schema descriptions, and pagination options, the description is too thin. It fails to explain how to page through results, the meaning of 'local filtering,' or the criteria that define a product. An agent could call it with no arguments, but cannot determine correct usage for filtered or paginated requests.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate by explaining parameters. It only vaguely hints at 'local query filtering,' likely mapping to q, without specifying syntax or usage. The pagination parameters (limit, offset, pageToken) are not mentioned at all, leaving the agent to infer their semantics from the raw schema.

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

Purpose5/5

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

The description states a specific verb ('List'), a resource ('OS Downloads products'), and the optional filtering behavior. The resource term 'products' distinguishes it from sibling list tools like os_downloads_list_data_packages and os_downloads_list_product_downloads, which operate on different entity types.

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 guidance is provided on when to use this tool versus alternatives such as os_downloads_get_product for single-item retrieval or os_downloads_list_data_packages for other entities. There are no exclusions, preconditions, or contextual hints about when this list is the appropriate choice.

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

os_downloads_prepare_exportC
Read-onlyIdempotent

Prepare an OS downloads export payload and return inline or resource delivery metadata.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNo
deliveryNo
productIdYes
inlineMaxBytesNo
filenameContainsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
stateYes
deliveryYes
exportIdYes
resourceUriNo

TDQS

C2.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds that it returns 'inline or resource delivery metadata', which hints at the output nature but doesn't explain side effects, prerequisites, or what 'prepare' entails (e.g., that it doesn't actually perform the export). It doesn't contradict annotations, but it adds limited behavioral context beyond them.

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

Conciseness3/5

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

The description is a single concise sentence and front-loads the verb 'prepare'. It is not bloated, but it's also too terse to convey meaningful guidance. The structure is acceptable, but the content is so sparse that the sentence doesn't earn its place.

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

Completeness2/5

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

Given the tool has 5 parameters (1 required), an output schema, and many siblings in the os_downloads_* family, the description is inadequate. It doesn't explain the workflow (e.g., prepare then get_export), the meaning of 'delivery metadata', or parameter semantics. The agent cannot reliably decide when or how to call this tool based on the description alone.

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

Parameters1/5

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

Schema description coverage is 0%, and the description provides no parameter information. It fails to explain productId, delivery, inlineMaxBytes, or filenameContains. With all parameters undocumented, the agent has no guidance on how to populate them, making correct invocation nearly impossible without external knowledge.

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 action ('prepare') and resource ('OS downloads export payload') and mentions the output (delivery metadata). It implies a setup role distinct from actually fetching an export, but it doesn't explicitly contrast with siblings like os_downloads_get_export. The verb 'prepare' and the mention of 'metadata' give a clear enough purpose, though a direct sibling reference would strengthen it.

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 gives no guidance on when to use this tool versus alternatives. It doesn't mention that it should precede os_downloads_get_export or that it returns metadata rather than the export itself. Without explicit 'use this when...' or 'instead of...' statements, the agent must infer usage from the name alone.

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

os_features_collectionsB
Read-onlyIdempotent

List OS NGD OGC API Features collections (and a latest-by-base mapping).

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoOptional substring filter.
toolNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNo
collectionsYes
latestByBaseIdYes

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds a small behavioral detail—the 'latest-by-base mapping'—but does not explain what that mapping means or any pagination/filtering behavior beyond what annotations imply.

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 a single front-loaded sentence with no filler. It states the core action first and adds the mapping nuance parenthetically without wasting words.

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 read-only listing tool with an output schema and safety annotations, the description is mostly adequate. However, the phrase 'latest-by-base mapping' is unexplained jargon, and there is no usage guidance relative to closely related feature/tile collection tools, leaving a moderate gap.

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

Parameters3/5

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

The only meaningful parameter, q, is already described in the schema as 'Optional substring filter.' The description adds no additional parameter context, but with just one real parameter and a self-describing const, the schema carries the necessary semantics. 50% schema coverage is partially compensated by the trivial nature of the parameters.

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 uses a specific verb ('List') and a precise resource ('OS NGD OGC API Features collections'), plus a distinct 'latest-by-base mapping' nuance. It is clearly distinct from query-oriented siblings like os_features_query, though it does not explicitly name alternatives.

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 guidance is given about when to use this tool versus sibling tools such as os_features_query, os_features_wfs_capabilities, or os_tiles_ota_collections. The agent must infer the appropriate context from the name and description alone.

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

os_features_queryA
Read-onlyIdempotent

Query OS NGD features by collection using bbox or polygon constraints, with optional filter/projection/sort/queryables support.

ParametersJSON Schema
NameRequiredDescriptionDefault
cqlNoPass-through CQL filter text.
bboxNoWGS84 bbox [minLon,minLat,maxLon,maxLat]
toolNo
limitNo
filterNoProperty filter object.
sortByNoSort fields (for example 'name,-height').
polygonNoPolygon ring coordinates or GeoJSON Polygon object.
deliveryNo
thinModeNoWhen true, project properties to a bounded field set by default.
pageTokenNoOffset for paging (use nextPageToken from the previous response).
collectionYesNGD collection id
filterTextNoAlias for cql text.
resultTypeNoUse 'hits' for count-only responses.
excludeFieldsNo
includeFieldsNo
allowLargeBboxNoWhen true, disables bbox-area clamping guardrail.
inlineMaxBytesNo
scanPageBudgetNoMax pages to scan for local-filter count-only paths.
includeGeometryNoWhen true, include GeoJSON geometry per feature (larger payloads).
includeQueryablesNoInclude collection queryables metadata.

Output Schema

ParametersJSON Schema
NameRequiredDescription
bboxNo
countYes
hintsNo
limitNo
offsetNo
polygonNo
deliveryYes
featuresNo
collectionNo
queryablesNo
resultTypeNo
resourceUriNo
hintMessagesNo
nextPageTokenNo
numberMatchedNo
numberReturnedYes

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is known. The description adds spatial-constraint context but no operational behavior beyond that: it doesn't mention paging, delivery modes, thin mode defaults, bbox guardrails, or payload-size implications. No contradiction with annotations.

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

Conciseness5/5

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

One compact sentence front-loads the core action, resource, and spatial constraint, then lists optional capabilities without repetition or filler. It earns its length.

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 20-parameter tool with an output schema, the description is workable but terse. It omits that a bbox or polygon is effectively required according to the schema compatibility note, and it doesn't orient the agent toward pagination, delivery, or resultType choices. The rich schema and annotations prevent this from being a serious failure, but the description alone is not fully sufficient.

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 about 70%, with many parameters already carrying descriptions and enums. The description's phrase 'filter/projection/sort/queryables support' groups several parameters, but it doesn't clarify the less-documented fields (e.g., excludeFields/includeFields, inlineMaxBytes) or the shape of the filter/polygon objects. The schema still carries most of the semantic weight.

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 names a specific action ('Query'), a precise resource ('OS NGD features'), and a scoping mechanism ('by collection' with 'bbox or polygon constraints'). This makes the tool's role obvious alongside sibling tools such as os_features_collections and the os_places/os_names lookup tools, without needing to open 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 description gives clear usage context: query feature data within a collection using spatial constraints, optionally with filters, projections, sorting, or queryables. It doesn't name an alternative or give explicit when-not-to-use guidance, but the context is unambiguous enough for a read-only feature query.

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

os_features_wfs_archive_capabilitiesB
Read-onlyIdempotent

Fetch WFS archive GetCapabilities (entitlement dependent).

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNo
versionNo
deliveryNo
inlineMaxBytesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
xmlNo
deliveryYes
resourceUriNo

TDQS

B3.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds meaningful context beyond annotations: the operation is 'entitlement dependent', alerting the agent to a prerequisite not visible in the schema or annotations.

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

Conciseness5/5

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

The description is one short sentence that front-loads the core action and resource, with no filler or redundant wording. Every word earns its place.

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?

The presence of an output schema and strong annotations helps, but the description leaves key context unaddressed: parameter meanings, when to use this versus the non-archive WFS capabilities tool, and what 'entitlement dependent' implies operationally. It is minimally viable but has clear gaps.

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

Parameters1/5

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

Schema description coverage is 0%, and the description provides no explanation for any of the four parameters. 'version', 'delivery', and 'inlineMaxBytes' are left completely undocumented; 'delivery' in particular is ambiguous despite its enum values. The description fails to compensate for the schema's lack of parameter descriptions.

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 ('Fetch') and a specific resource ('WFS archive GetCapabilities'), and the 'archive' qualifier distinguishes this from the sibling os_features_wfs_capabilities. It is immediately clear what operation this tool performs.

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 is provided beyond the resource name itself. The description does not mention alternatives, does not contrast with the non-archive WFS capabilities sibling, and only hints at an entitlement prerequisite without explaining why or when it matters.

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

os_features_wfs_capabilitiesC
Read-onlyIdempotent

Fetch WFS GetCapabilities for OS Features API.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNo
versionNo
deliveryNo
inlineMaxBytesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
xmlNo
deliveryYes
resourceUriNo

TDQS

C2.9/5.0
Behavior3/5

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

The annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds the context that this is a WFS GetCapabilities fetch, which is consistent with those annotations, but it discloses no additional behavioral details such as response format, potential size limits, or interaction with delivery/inlineMaxBytes. This is adequate but not enriching.

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

Conciseness4/5

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

The description is a single sentence with no filler; it is front-loaded with the action and resource. It is concise, though arguably too sparse to serve as the sole source of guidance for a tool with four parameters and a close sibling. Still, it earns its place and avoids 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?

The tool is relatively simple, has no required parameters, includes a safe read-only/idempotent annotation set, and has an output schema, so the description does not need to explain return values. However, it omits any explanation of optional parameter semantics and does not clarify how this differs from the archive capabilities sibling. It is minimally viable but not complete enough for confident non-default usage.

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

Parameters1/5

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

Schema description coverage is 0%, so the description should compensate for the four parameters, but it mentions none of them. The parameters version, delivery, and inlineMaxBytes have no explanatory text in the description; even the meaning of the delivery enum (inline/resource/auto) is left entirely to the agent. The description adds no semantic value beyond what the schema already 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 names a specific verb ('Fetch'), a specific protocol operation ('WFS GetCapabilities'), and a specific resource ('OS Features API'). This is clear and unambiguous at a high level. However, it does not explicitly distinguish itself from the sibling tool os_features_wfs_archive_capabilities, so it stops short of full sibling differentiation.

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?

There is no guidance on when to use this tool versus alternatives such as os_features_wfs_archive_capabilities, os_features_collections, or os_features_query. No conditions, prerequisites, or exclusions are stated, leaving the agent to infer usage entirely from the tool name and the single-line description.

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

os_landscape_findC
Read-onlyIdempotent

Find protected landscapes (AONB/National Landscape) by name for AOI-first environmental survey routing.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
toolNo
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
queryNo
resultsYes

TDQS

C2.8/5.0
Behavior2/5

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

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering the safety and idempotency profile. The description adds no behavioral details beyond the search-by-name aspect, such as result format, pagination behavior, or handling of no matches. It does not contradict annotations but contributes minimal behavioral transparency.

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 a single, front-loaded sentence with no redundancy. It conveys the core purpose and context efficiently, and every word serves a function. It is appropriately concise for a simple search tool.

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

Completeness2/5

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

The tool has an output schema (not shown) which may cover return structure, but the description still omits essential context such as how to use the limit parameter, what kind of matches to expect, and how results are ordered or filtered. For a find operation with multiple siblings, more guidance is needed to ensure correct invocation.

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

Parameters2/5

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

With 0% schema description coverage, the description must compensate by explaining parameters. It implies that 'text' is a name (from 'by name') but does not describe 'limit' or the meaning of the results. The description adds only marginal value over the bare schema, leaving most parameter semantics unspecified.

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

Purpose4/5

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

The description clearly states the action (find) and the resource (protected landscapes), specifying search by name. It also adds context ('AOI-first environmental survey routing') which helps identify its intended use. However, it does not explicitly differentiate from sibling tools like os_landscape_get or admin_lookup_find_by_name, so it doesn't fully distinguish itself.

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 mentions a use case ('AOI-first environmental survey routing') but provides no guidance on when to prefer this tool over alternatives, nor any exclusions or conditions. There is no mention of when not to use it or which sibling tools might be more appropriate.

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

os_landscape_getB
Read-onlyIdempotent

Retrieve a protected-landscape record and boundary geometry by id or name.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNo
nameNo
toolNo
includeGeometryNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
sourceNo
geometryNo
landscapeYes

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is well covered. The description adds useful context by specifying the resource type and that boundary geometry is part of the retrieval. It does not disclose behavior around missing records, invalid combinations of id/name, or the exact effect of includeGeometry, but the annotations lower the burden here.

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 a single front-loaded sentence with no filler or repetition. Every word contributes to the core purpose: the action, the resource type, the geometry component, and the lookup keys. It is appropriately sized for a simple retrieval tool.

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?

The tool is simple, has an output schema, and benefits from read-only and idempotent annotations. Still, the description leaves some ambiguity about required inputs and the actual effect of includeGeometry. The schema's own note about 'valid input should satisfy id or name' partially compensates, but the tool description alone does not fully answer an agent's key invocation questions.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate for the four parameters. It clarifies that id and name are lookup keys, which adds some semantic value beyond the bare property names. However, it does not explain the relationship between id and name (one-or-the-other, mutually exclusive?), nor what includeGeometry actually controls beyond its name and default 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 clearly states a specific verb ('Retrieve'), a specific resource ('protected-landscape record and boundary geometry'), and the two lookup keys ('by id or name'). It is concise and immediately understandable. However, it does not explicitly distinguish itself from the sibling 'os_landscape_find', relying on the naming convention rather than an explicit differentiation.

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?

'by id or name' implies this is a direct lookup tool rather than a search/find tool, which is useful context. However, the description does not explicitly state when to prefer this tool over os_landscape_find or other lookup siblings, nor does it provide any exclusions or prerequisite context. The 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.

os_linked_ids_feature_typesD
Read-onlyIdempotent

Resolve linked identifiers using /featureTypes/{featureType}/{id}.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNo
identifierYes
featureTypeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
liveNo
identifierYes
featureTypeYes
identifiersYes

TDQS

D1.8/5.0
Behavior2/5

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

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds no behavioral context beyond the implied read operation; it does not mention rate limits, return structure, or any side effects.

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

Conciseness2/5

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

The description is very short, which is concise, but it is under-specified. It provides no structure or hierarchy, and the single sentence fails to convey essential information. Conciseness without substance is not effective.

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

Completeness1/5

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

Given the tool has two required parameters, multiple sibling tools, and an output schema, the description is grossly incomplete. It does not explain what the tool returns, what featureType values are valid, or how to construct a proper request. An agent would struggle to call this correctly.

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

Parameters1/5

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

Schema description coverage is 0%, so the description must compensate, but it does not. It only references {featureType} and {id} in the endpoint, while the schema uses 'identifier' – a mismatch that could confuse agents. No explanation of allowed values, formats, or relationships between parameters.

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

Purpose2/5

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

The description states a verb ('Resolve') and a resource ('linked identifiers') and gives an endpoint pattern, but it does not explain what 'linked identifiers' means or how this tool differs from siblings like os_linked_ids_get or os_linked_ids_identifiers. It is essentially a restatement of the tool name with a URL template.

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 guidance is provided on when to use this tool versus its siblings. The endpoint pattern hints at a usage context, but there is no explicit mention of scenarios or exclusions. The agent is left to infer which os_linked_ids_* tool fits.

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

os_linked_ids_getC
Read-onlyIdempotent

Resolve linked identifiers (UPRN/USRN/TOID) using OS search/links API.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNo
identifierYes
identifierTypeNoOne of: uprn, usrn, toid (optional, inferred if omitted).

Output Schema

ParametersJSON Schema
NameRequiredDescription
identifierNo
assumedTypeNo
identifiersYes
identifierTypeNo

TDQS

C2.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering safety and repeatability. The description adds only the API source, with no behavior on not-found cases or result structure. It neither contradicts nor enriches the annotations meaningfully.

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

Conciseness3/5

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

The description is a single, focused sentence, which is concise. However, it is so brief that it omits crucial context, so it is under-specified rather than appropriately concise.

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

Completeness2/5

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

Despite having an output schema, the description does not explain what 'linked identifiers' means, how identifierType inference works, or any usage context. With many sibling tools and no guidance, an agent may misapply this tool.

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

Parameters2/5

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

Schema description coverage is only 33% (identifierType has a description, identifier does not). The description provides no parameter information, so it fails to compensate for the missing schema coverage on the required identifier parameter.

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 ('Resolve') and resource ('linked identifiers'), naming specific identifier types (UPRN/USRN/TOID). This distinguishes it from generic OS search tools, though it doesn't explicitly name sibling alternatives like os_linked_ids_identifiers.

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 guidance on when to use this tool versus alternatives. Given the large sibling set (e.g., os_places_by_uprn, ons_geo_by_uprn), an agent has no basis for choosing this over similar lookups.

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

os_linked_ids_identifiersD
Read-onlyIdempotent

Resolve linked identifiers using /identifiers/{id}.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNo
identifierYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
liveNo
identifierYes
identifiersYes

TDQS

D1.8/5.0
Behavior2/5

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

Annotations already provide readOnlyHint, openWorldHint, and idempotentHint, which cover the safety and idempotency profile. The description adds no behavioral context beyond stating the endpoint. It does not mention what happens if the identifier is not found, what the response structure contains, or any pagination or error behavior. With annotations present, the bar is lower, but the description adds almost nothing beyond the endpoint URI.

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

Conciseness2/5

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

The description is extremely short, which is good for conciseness, but it is under-specified. One sentence that repeats the tool name and endpoint provides minimal information. It is not structured to front-load useful context; it simply names the operation without explaining what the agent needs to know.

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

Completeness2/5

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

Given the output schema exists, the description need not explain return values, but it still fails to cover basic context: what a 'linked identifier' is, what the endpoint accepts, and how this relates to sibling tools like os_linked_ids_get. With over 90 sibling tools and a 0% schema description coverage, this is inadequate for an agent to select and use the tool correctly.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate, but it does not. The only required parameter 'identifier' is left completely unexplained – the description does not clarify what kind of identifier (e.g., OS Linked Identifiers ID, a UPRN, a TOID) is expected or its format. The 'tool' parameter is a const and self-explanatory, but the core parameter lacks any semantic explanation.

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

Purpose2/5

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

The description 'Resolve linked identifiers using /identifiers/{id}.' is essentially a rephrasing of the tool name 'os_linked_ids_identifiers' combined with the API endpoint. It does not state what 'linked identifiers' are, what resource they refer to, or how this differs from sibling tools like 'os_linked_ids_get' or 'os_linked_ids_feature_types'. It reads as a tautology of the name and the endpoint.

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

Usage Guidelines1/5

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

There is no guidance on when to use this tool versus the many sibling tools in the 'os_linked_ids_*' family or other lookup tools. The description provides no context, no prerequisites, and no examples of when an agent would choose this over alternatives.

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

os_linked_ids_product_version_infoC
Read-onlyIdempotent

Resolve product version info for a correlation method.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNo
correlationMethodYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
liveNo
correlationMethodYes
productVersionInfoYes

TDQS

C2.9/5.0
Behavior3/5

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

The annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering the safety profile. The description adds no further behavioral detail such as error behavior, response scope, or what 'resolve' implies beyond a lookup, but it does not contradict the annotations.

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

Conciseness4/5

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

The description is one short, front-loaded sentence with no filler. It earns its place, though it is terse to the point of omitting context that is critical elsewhere, such as defining what a correlation method is.

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

Completeness2/5

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

The tool has a simple shape with one required string plus annotations and an output schema, but the central input concept 'correlation method' remains undefined. There is also no link to sibling tools that likely provide correlation methods, leaving an agent unsure what values are valid.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate for missing parameter meaning. It only echoes the parameter name 'correlation method' without explaining accepted values, format, or how an agent should obtain one. The 'tool' const parameter is not addressed at all.

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 uses a specific verb, 'Resolve,' and identifies a clear resource, 'product version info,' with a condition, 'for a correlation method.' This differentiates it at a high level from sibling os_linked_ids_* tools, though the meaning of 'correlation method' is never clarified.

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 is provided. The description does not mention alternatives, exclusions, or prerequisites, and it does not connect to likely related siblings like os_linked_ids_identifiers or os_linked_ids_get. Usage is only implied: use it when you have a correlation method.

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

os_map_exportB

Export a map artifact. Legacy mode exports inventory snapshots from bbox; selection_uprn mode queues async selector-driven UPRN exports.

ParametersJSON Schema
NameRequiredDescriptionDefault
bboxNo
nameNo
toolNo
formatNo
layersNoRequested layers (uprns, buildings, road_links, path_links, postcode_unit_areas, postcode_unit_points, bus_lanes, cycle_lanes).
limitsNo
recipeNo
columnsNo
filtersNo
deliveryNo
exportTypeNoinventory_snapshot
collectionsNo
selectionSpecNo
derivationModeNo
includeGeometryNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
uriNo
pathNo
notesNo
statusNo
exportIdYes
resultUriNo
statusUriNo

TDQS

B3.1/5.0
Behavior3/5

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

With empty annotations, the description carries the full behavioral disclosure burden. It usefully reveals that selection_uprn mode queues asynchronous work and that bbox mode is 'legacy', but it does not mention permissions, side effects, resource creation, or how async results are retrieved. This is helpful but incomplete.

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 two crisp, front-loaded sentences with no wasted wording. The mode distinction is immediately visible, though the phrase 'Legacy mode' is somewhat cryptic without additional context.

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

Completeness2/5

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

For a 15-parameter tool with no required fields and two modes, the description is too sparse. It does not explain which parameter groups belong to which mode, what constraints apply, or how the async selection_uprn workflow completes, so an agent cannot reliably construct a valid request even with the output schema present.

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

Parameters2/5

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

Schema description coverage is only 7%, so the description must compensate for 15 mostly undocumented parameters. It adds meaning only to bbox and the selection_uprn selector concept, while leaving format, layers, filters, recipe, delivery, columns, limits, collections, derivationMode, includeGeometry, and selectionSpec effectively unexplained.

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 action (export) on a resource (map artifact) and differentiates two modes with distinct behaviors: legacy bbox-driven inventory snapshots and async selector-driven UPRN exports. It does not explicitly differentiate this tool from siblings like os_map_export_roads or os_map_get_export, which keeps it just below 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 provides enough context to choose between the two main internal modes: bbox for legacy inventory snapshots and selection_uprn for async UPRN exports. However, it never states when to prefer this tool over sibling tools such as os_map_export_roads or os_map_get_export, nor does it give any exclusions.

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

os_map_export_roadsA

Export complete road overlay artifacts server-side from road numbers and/or selectionSpec-derived AOIs, including all upstream pages and semantic parts.

ParametersJSON Schema
NameRequiredDescriptionDefault
bboxNoOptional fallback WGS84 bbox [minLon,minLat,maxLon,maxLat]. Prefer selectionSpec for postcode, UPRN, GSS-code, or polygon AOIs.
toolNo
roadsNo
collectionNoOptional default NGD collection id.
forceRefreshNo
outputFormatNogeojson_bundle
selectionSpecNoSelector-driven AOI definition. Supports postcode, uprn, gss_code, and polygon selectors plus uprnOverrides.
derivationModeNoexact
anchorBufferMetersNoOptional buffer applied around resolved building anchors before fetching RoadLinks.
postalDeliveryOnlyNo
simplifyToleranceMetersNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
aoiNo
bboxNo
partsNo
roadsNo
cachedNo
formatYes
completeYes
deliveryYes
exportIdYes
collectionNo
primaryUriNo
requestHashNo
resourceUriYes
featureCountsYes
sourcePagesFetchedNo

TDQS

A3.7/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 of behavioral disclosure. It does add meaningful context by stating the operation runs 'server-side' and that the export includes 'all upstream pages and semantic parts', which clarifies the scope of what is produced. Yet it omits important behavioral traits such as whether the operation is read-only, if there are side effects, or whether specific prerequisites or licenses are required.

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 a single sentence with the core purpose ('Export complete road overlay artifacts server-side') placed up front, followed by the input scope. It contains no filler or redundancy, making it easy to parse quickly.

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

Completeness2/5

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

Despite having an output schema, the description is insufficient for a tool with 11 parameters, nested objects, and enums. It does not explain the structure of the roads array, the meaning of the outputFormat variants, or the roles of derivationMode, postalDeliveryOnly, or simplifyToleranceMeters, leaving an agent without enough detail to construct a valid invocation confidently.

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

Parameters2/5

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

The description only loosely maps to two parameters ('road numbers' -> roads array, 'selectionSpec-derived AOIs' -> selectionSpec) and leaves nine other parameters untouched. With only 36% schema description coverage, the description fails to compensate for the large number of undocumented parameters such as outputFormat, forceRefresh, anchorBufferMeters, and simplifyToleranceMeters, so an agent has to infer their meaning.

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 clearly states a specific verb ('Export'), resource ('road overlay artifacts'), and execution context ('server-side'), and it distinguishes the tool from siblings like os_map_export by narrowing to road overlays. It also identifies the two main input modes ('road numbers and/or selectionSpec-derived AOIs'), leaving little ambiguity about the tool's role.

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 description provides clear usage context by specifying that the tool operates from road numbers or selectionSpec-derived AOIsas inputs newsletter, effectively defining when it should be applied. However, it does not explicitly name alternative tools or state when not to use it, which leaves some selection inference to the agent despite the clear input scoping.

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

os_map_get_exportB
Read-onlyIdempotent

Get async export status for a selector-driven os_map.export job.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNo
exportIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNo
statusYes
exportIdYes
warningsNo
resultUriNo
statusUriNo

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description adds the fact that the job is async, implying the agent may need to poll, which is valuable context. However, it doesn't disclose any other behavior (e.g., possible statuses, polling semantics) beyond what the annotations imply.

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

Conciseness4/5

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

The description is a single concise sentence with no filler. It front-loads the action and resource. It is appropriately sized for a simple status-check tool, though it could have added a note about the prerequisite without becoming verbose.

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?

There is an output schema, so return values need not be explained in the description. The description tells the agent it gets status for an export job and implicitly that an exportId is needed. However, it does not mention that the exportId must come from a prior os_map_export call, which is a prerequisite that would help an agent sequence the calls correctly. Still adequate for a simple polling tool.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate but does not. The only parameter, exportId, is not described in the description at all. While the parameter name is self-explanatory, the description provides no additional meaning (e.g., where to obtain it, format, or constraints), failing to add value beyond the schema.

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

Purpose4/5

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

The description clearly states the verb 'Get' and the resource 'async export status for a selector-driven os_map.export job'. It is specific enough to distinguish from os_downloads_get_export by mentioning os_map. But it doesn't explicitly differentiate from the similarly named os_map_export_roads, so it misses a point.

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 it is used after starting an os_map export job (as a status poll), but it does not explicitly state when to use it versus alternatives like os_downloads_get_export or when not to use it. No exclusions or conditions are given, leaving the usage context implicit.

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

os_map_inventoryA
Read-onlyIdempotent

Return a bounded inventory (UPRNs, buildings, road links, path links) for a bbox.

ParametersJSON Schema
NameRequiredDescriptionDefault
bboxYesWGS84 bbox [minLon,minLat,maxLon,maxLat]
toolNo
layersNoRequested layers (uprns, buildings, road_links, path_links, postcode_unit_areas, postcode_unit_points, bus_lanes, cycle_lanes).
limitsNoPer-layer max features (budgets).
pageTokensNoPer-layer paging tokens for NGD layers.
collectionsNoPer-layer NGD collection id overrides (NGD layers only).
responseModeNoUse summary or counts to avoid large raw payloads when only a compact layer summary is needed.full
includeGeometryNoPer-layer includeGeometry overrides (NGD layers only).

Output Schema

ParametersJSON Schema
NameRequiredDescription
bboxNo
hintsNo
layersYes
limitsNo
responseModeNo
requestedLayersNo

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description adds the bbox-bounded scope and example feature categories, but does not disclose behavior around pagination, per-layer limits, or default layer selection beyond what the schema implies.

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 a single front-loaded sentence with no filler. Every word contributes the core call intent: returning a bounded inventory for a bbox.

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 8 parameters including several advanced nested objects, the description is thin. However, the output schema exists, the required parameter is simple, and the schema documents optional parameters reasonably well, so the most common bbox-only invocation is sufficiently supported.

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 high (88%), so the schema carries most of the parameter meaning. The description lists a few layer names and emphasizes bbox, but adds little semantic detail beyond what the schema already provides for optional nested parameters like limits, pageTokens, and collections.

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 uses a specific verb ('Return') and identifies the resource scope: a bounded inventory of UPRNs, buildings, road links, and path links for a bbox. It is clear at a glance, though it does not explicitly distinguish itself from related sibling tools such as os_features_query or os_map_export.

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 phrase 'for a bbox' gives implied usage context: use this when you need an inventory of features within a bounding box. However, it provides no explicit guidance about when to prefer this tool over siblings, nor any exclusion conditions.

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

os_maps_raster_tileC
Read-onlyIdempotent

Fetch a raster ZXY tile with inline/resource delivery controls.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYes
yYes
zYes
toolNo
styleNo
formatNo
deliveryNo
inlineMaxBytesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
deliveryYes
dataBase64No
contentTypeYes
resourceUriNo

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds that delivery can be inline or resource, but does not explain what that means for response size, resource handling, or error behavior. No contradiction with annotations.

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

Conciseness4/5

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

A single sentence with the core action front-loaded and no filler. It is concise to the point of under-specification, but the structure itself is clean and easy to parse.

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

Completeness2/5

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

Despite the helpful annotations and presence of an output schema, the tool has 8 parameters with zero schema descriptions. The description omits what the delivery modes actually control, the meaning of style/format, and how this tool relates to sibling map/tile tools. That is a significant completeness gap for correct invocation.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must carry the burden of explaining the 8 parameters. It partially does by framing x/y/z as ZXY tile coordinates and delivery as inline/resource, but style, format, and inlineMaxBytes are left undefined. Agents would have to infer most parameter meaning from names alone.

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 operation ('Fetch ... tile') and a specific resource ('raster ZXY tile'), which clearly identifies this as tile retrieval rather than map rendering or vector tile delivery. It is clear and accurate, though it does not explicitly differentiate among closely related map/tile sibling tools.

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

Usage Guidelines2/5

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

No guidance is given for when to use this tool versus alternatives such as os_maps_render, os_vector_tiles_descriptor, or os_resources_get. The phrase 'inline/resource delivery controls' hints at a mode of operation, but no explicit when-to-use, prerequisites, or exclusions are provided.

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

os_maps_renderC
Read-onlyIdempotent

Return metadata for rendering a static map image (proxy URL) with overlay-ready geometry contracts and optional os_map.inventory hydration.

ParametersJSON Schema
NameRequiredDescriptionDefault
bboxYes
sizeNo
toolNo
overlaysNoOptional overlay inputs: points/lines/polygons arrays or FeatureCollections, and localLayers[] with {name,geojson,kind}.
inventoryNoOptional os_map.inventory options (layers, limits, includeGeometry, pageTokens).
includeInventoryNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintsNo
renderYes
inventoryNo
overlayLayersNo
overlayCollectionsNo

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds the notion of returning metadata and a proxy URL, and hints at overlay contracts and inventory hydration, which is some value beyond annotations but not a rich behavioral portrait. No contradiction exists.

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

Conciseness4/5

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

The description is a single, dense sentence that front-loads the core purpose (return metadata for static map rendering) followed by additional features. No wasted words, but the technical phrasing could be clearer; still, it is appropriately sized for the complexity.

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

Completeness2/5

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

Although an output schema exists (so return values don't need explanation), the input side is incomplete. The required bbox parameter has no format or ordering details in the schema or description, and size and includeInventory are unmentioned. For a 6-parameter tool with only 1 required param, this leaves an agent uncertain about critical call requirements.

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

Parameters2/5

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

Schema description coverage is only 33% (only overlays and inventory have brief descriptions). The description mentions 'overlay-ready geometry contracts' and 'os_map.inventory hydration', which adds meaning for those two params, but it does not address bbox, size, or includeInventory. With low coverage, the description fails to compensate for the undocumented parameters.

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

Purpose4/5

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

The description clearly states the tool returns metadata for rendering a static map image with a proxy URL, and mentions overlay-ready geometry contracts and optional inventory hydration. This is specific enough to distinguish it from raster tile and export tools, though it doesn't explicitly name any sibling differentiators.

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 guidance is provided on when to use this tool versus alternatives. It doesn't mention any context, exclusions, or competing tools like os_maps_raster_tile or os_map_export. The usage context is entirely implied by the description.

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

os_maps_wmts_capabilitiesA
Read-onlyIdempotent

Fetch WMTS GetCapabilities with inline/resource delivery controls.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNo
versionNo
deliveryNo
inlineMaxBytesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
xmlNo
deliveryYes
resourceUriNo

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering the safety profile. The description adds that delivery can be inline or resource, but it does not explain the implications of those modes or any other runtime behavior. This is modest added context beyond the annotations.

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

Conciseness5/5

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

The description is a single front-loaded sentence with no filler. Every word contributes to identifying the operation and its key delivery-related control.

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 capabilities-fetch tool with an output schema and rich annotations, the description is minimally adequate. However, it leaves the meaning of inline vs resource delivery and the role of version unspecified, which an agent would need to understand fully.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate for the four parameters. It partially covers 'delivery' and hints at inlineMaxBytes via 'inline/resource delivery controls', but 'version' is entirely unexplained and the enum semantics are not clarified.

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 names a specific verb ('Fetch'), a specific resource ('WMTS GetCapabilities'), and a distinguishing qualifier ('inline/resource delivery controls'). The 'WMTS' prefix clearly separates it from sibling capabilities tools like os_features_wfs_capabilities.

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 description makes the context clear: use this when retrieving WMTS GetCapabilities. It does not explicitly name alternatives or exclusions, but the resource type is unambiguous enough that an agent can select it correctly.

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

os_mcp_descriptorB
Read-onlyIdempotent

Describe server capabilities and tool search configuration.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNo
categoryNoOptional tool category to filter search config.
includeToolsNoInclude per-tool metadata in toolSearch section.

Output Schema

ParametersJSON Schema
NameRequiredDescription
serverYes
versionYes
skillsUriNo
transportNo
toolSearchYes
capabilitiesNo
protocolVersionYes
mcpAppsProtocolVersionNo
supportedProtocolVersionsNo

TDQS

B3.3/5.0
Behavior3/5

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

The description is consistent with the annotations (readOnlyHint=true, idempotentHint=true) and does not contradict them. It adds no extra behavioral context beyond the annotations, but for a read-only, idempotent introspection tool the annotations already cover the safety profile.

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 a single, front-loaded sentence with no filler or repetition. It is concise without being bloated, even though the brevity sacrifices some explanatory context.

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?

The output schema and annotations reduce the burden on the description, and this is a simple introspective tool. However, the meaning of 'tool search configuration' is left unexplained, and there is no guidance about when to invoke this tool relative to the many sibling descriptor tools.

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?

The schema already gives clear descriptions for category and includeTools, and the tool parameter is a const, so the parameter semantics are mostly carried by the schema. The description itself adds no parameter-level meaning, but with 67% schema coverage and simple optional parameters, that is acceptable.

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 uses a specific verb ('Describe') and names two concrete resources: server capabilities and tool search configuration, so it is not a tautology. However, it does not distinguish itself from sibling descriptor tools such as os_offline_descriptor or os_route_descriptor, and 'tool search configuration' is somewhat under-specified.

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?

There is no guidance on when to use this tool or when to prefer one of the other descriptor tools instead. The description does not state whether this should be called first for capability discovery or how it relates to the other os_mcp_* tools.

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

os_mcp_route_queryB
Read-onlyIdempotent

Classify a query and recommend the right tool/workflow.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNo
queryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
queryNo
intentYes
guidanceNo
confidenceYes
explanationNo
workflow_stepsYes
recommended_toolYes
alternative_toolsNo
workflow_profile_uriNo
recommended_parametersNo

TDQS

B3.4/5.0
Behavior3/5

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

Annotations declare readOnlyHint=true and idempotentHint=true, covering safety and idempotency. The description adds no extra behavioral context beyond the classification/recommendation action. It doesn't disclose the format of recommendations or any side effects; however, the output schema is present (though not shown), so some return details are handled externally. With annotations, the score is moderate; it doesn't contradict them, but doesn't add much beyond the basic action.

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 one short sentence, with no wasted words. It is front-loaded with the action and object. It is appropriately minimal for a routing tool, and the sentence structure is clear and efficient. No 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?

The tool is a simple router with a single required parameter and an output schema (not shown but present). The description covers the core purpose. However, given the vast sibling list, an agent might benefit from knowing what kind of output to expect (e.g., a tool name, a confidence score) or that it should be used as a first step. The output schema likely covers return details, so the description is adequate but not rich. Missing guidance on how the recommendation is structured.

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 0%, meaning the schema provides no descriptions for parameters. The description mentions 'query' in the purpose, implying the main parameter is the query to classify. This provides some semantic guidance beyond the raw schema, which only shows types. For a tool with only two parameters (tool and query), the description adds enough context to understand that 'query' is the input to be routed.

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's purpose: 'Classify a query and recommend the right tool/workflow.' This is a specific verb ('classify', 'recommend'), and it names the resource ('a query', 'right tool/workflow'). It is clear enough to distinguish it from sibling tools, though it doesn't explicitly name which siblings it competes with. However, the name 'os_mcp_route_query' already hints at routing, so the description confirms it.

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?

There is no guidance on when to use this tool versus alternatives. It doesn't mention that it should be used before deciding on another tool, nor does it state any exclusions. Given the huge sibling list, an agent might not know when to call this router versus directly calling a tool. The description implies usage by its purpose, but explicit conditions are missing.

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

os_mcp_select_toolsetsB
Read-onlyIdempotent

Select discovery toolsets and return tools/list filter guidance.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNo
queryNoOptional natural-language query used to infer toolsets.
toolsetNoSingle named toolset shortcut (for tools/list toolset param).
maxToolsNo
excludeToolsetsNoToolsets to exclude (array or comma-separated string).
includeToolsetsNoToolsets to include (array or comma-separated string).

Output Schema

ParametersJSON Schema
NameRequiredDescription
notesNo
queryNo
toolsetsYes
inferenceNo
matchedToolsYes
listToolsParamsNo
effectiveFiltersYes
matchedToolCountYes
inferredIncludeToolsetsNo

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, covering the safety/profile. The description adds only the outcome ('return tools/list filter guidance') without further behavioral context such as rate limits or auth needs. No contradiction with annotations, and with annotations present the bar is lower, so a 3 is appropriate.

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

Conciseness4/5

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

The description is a single concise sentence with the verb and resource front-loaded. There is no wasted text, though it sacrifices detail for brevity, which is acceptable but not maximally informative.

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

Completeness2/5

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

Despite having an output schema and read-only annotations, this is a 6-parameter meta-tool whose description does not explain the semantics of toolset selection, how query/toolset interact, or what 'filter guidance' means in practice. An agent would need to infer significant context from parameter names and schemas, so the description under-specifies the tool's behavior.

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 67% (4 of 6 parameters have descriptions). The tool description itself adds no parameter-level semantics beyond what the schema already provides. Given the high coverage, the schema does the heavy lifting and the baseline of 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 gives a specific verb ('Select') and resource ('discovery toolsets') and states the output ('return tools/list filter guidance'). It is clear and distinct from most sibling tools, which are data lookups or descriptors, though it does not explicitly contrast with meta/descriptor tools like os_mcp_descriptor.

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?

There is no guidance on when to use this tool versus alternatives, no prerequisites, and no exclusions. The description only states what the tool does, not the circumstances that call for it, leaving the agent to infer use cases from the name and parameters.

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

os_mcp_stats_routingB
Read-onlyIdempotent

Explain whether stats queries route to ONS or NOMIS.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNo
queryYes
comparisonLevelNo
providerPreferenceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
notesNo
queryNo
reasonsYes
providerYes
nextStepsNo
matchedLevelsNo
nomisPreferredYes
userSelectionsNo
matchedPatternsNo
recommendedToolYes
comparisonRecommendedNo

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, covering the safety profile. The description is consistent with these and adds a small amount of context by indicating the tool returns an explanation rather than data, but it does not disclose details like how routing is determined or what inputs influence it.

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?

A single focused sentence that front-loads the core purpose with no filler. Every word contributes to understanding what the tool does.

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

Completeness2/5

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

Even with annotations and an output schema present, the description leaves usage guidance and parameter semantics to be inferred. For a tool whose behavior is routing-specific and whose main parameter is a free-text query, this is too thin for confident selection and invocation.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate for the four parameters. It only weakly implies the 'query' parameter via 'stats queries' and says nothing about 'comparisonLevel' or 'providerPreference', even though those enums are central to routing behavior.

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 ('Explain') and a specific resource ('whether stats queries route to ONS or NOMIS'). This clearly distinguishes it from sibling tools that execute ONS/NOMIS queries rather than explain routing decisions.

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 is provided, and no alternative tools are named or contrasted. The agent must infer usage solely from the one-line purpose statement and the sibling list.

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

os_names_findD
Read-onlyIdempotent

Find place names

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
toolNo
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNo
limitNo
resultsYes
truncatedNo

TDQS

D1.9/5.0
Behavior2/5

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

Annotations already establish read-only, idempotent, and open-world behavior, but the description adds no behavioral detail about text matching, result ranking, limit handling, or pagination. It neither enriches nor contradicts the annotation profile.

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

Conciseness2/5

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

At only three words, the description is under-specified rather than concise. There is substantial room for meaningful scoping and usage guidance without sacrificing brevity.

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

Completeness2/5

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

Although the schema, annotations, and output schema provide some structure, the description omits the search semantics an agent needs to call the tool correctly, such as what 'text' should contain and what kind of place-name matches are returned. Three words are not sufficient for a three-parameter find operation.

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

Parameters1/5

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

Schema description coverage is 0%, and the description contains no parameter information. It does not explain the required 'text' input or the meaning and constraints of 'limit' and 'tool', leaving the agent to infer semantics from parameter names alone.

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

Purpose2/5

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

The description 'Find place names' is a near-verbatim restatement of the tool name os_names_find. It gives no detail about what the tool returns, how the search works, or how it differs from sibling tools like os_names_nearest or os_places_search.

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?

There is no guidance on when to use this tool versus alternatives such as os_names_nearest or os_places_search. The schema implies a text-based lookup, but the description provides no context, conditions, or exclusions.

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

os_names_nearestD
Read-onlyIdempotent

Nearest named features

ParametersJSON Schema
NameRequiredDescriptionDefault
latYes
lonYes
toolNo
coordSystemNoEPSG:4326

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultsYes

TDQS

D1.9/5.0
Behavior2/5

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

Annotations already indicate readOnlyHint, openWorldHint, and idempotentHint, but the description adds no behavioral context beyond that. It does not mention how coordinates are used, whether results are ranked by distance, or what kinds of named features are included. No contradiction with annotations exists.

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

Conciseness2/5

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

The description is short, but this is under-specification rather than conciseness. 'Nearest named features' contains no functional content and does not earn its place as an informative definition.

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

Completeness2/5

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

Given the tool's geospatial complexity, the description is far too minimal. It omits any explanation of the query location, coordinate system handling, or scope of named features, leaving the agent to infer essential context from the schema and sibling names.

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

Parameters1/5

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

Schema description coverage is 0%, so the description must compensate, but it does not. It fails to explain that lat and lon define the query location, that coordSystem controls the coordinate reference system, or that the tool parameter is a fixed constant. All four parameters remain semantically unexplained.

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

Purpose2/5

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

The description 'Nearest named features' is a noun phrase that nearly restates the tool name 'os_names_nearest' without a verb or action. It provides a vague sense of the resource but does not clearly state what the tool does, and it does not distinguish itself from siblings like os_places_nearest or os_poi_nearest.

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?

There is no guidance about when to use this tool versus alternatives such as os_names_find, os_places_nearest, or landis_nsi_nearest_sites. The description gives no context, exclusions, or alternative routing.

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

os_net_rinex_yearsA
Read-onlyIdempotent

List OS Net RINEX years.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
liveNo
rinexYes

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, and the verb 'List' is consistent with a safe, non-destructive operation. However, the description adds no further behavioral context—such as data scope, pagination, or what 'years' represents—so it provides little value beyond the structured annotations.

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

Conciseness5/5

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

The description is a single four-word sentence, 'List OS Net RINEX years.' It is appropriately sized, front-loaded, and contains no filler or redundant content.

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

Completeness4/5

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

For a simple, parameterless list operation with an output schema and read-only annotations, the one-line description is mostly sufficient. It could clarify that these are years with available RINEX data, but given the tool's simplicity and the presence of an output schema, this is a minor omission.

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?

The schema contains only a fixed const parameter 'tool' with no description and no required user arguments. Since the effective parameter surface is empty, the description does not need to explain parameter semantics, and the 0% schema description coverage is not a meaningful gap.

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 the verb 'List' with the specific resource 'OS Net RINEX years', clearly stating a read-only enumeration operation. No sibling tool name overlaps with this exact function, so the purpose is unambiguous and distinguishable from tools like os_net_station_get or os_net_station_log.

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 guidance on when to use this tool versus alternatives, such as os_net_station_get or os_net_station_log. It does not mention any context, prerequisites, or exclusions, leaving the agent to infer usage from the name alone.

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

os_net_station_getA
Read-onlyIdempotent

Get OS Net station metadata by stationId.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNo
stationIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
liveNo
stationYes
stationIdYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, which cover the safety and side-effect profile. The description adds the 'metadata' qualifier, which clarifies the nature of the resource beyond the tool name. This is sufficient given the annotation coverage, though it doesn't elaborate on response structure (covered by output schema).

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 a single sentence, front-loaded with the action and resource, and contains zero fluff. It efficiently conveys the core purpose without unnecessary detail.

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?

The tool is simple with one required parameter and an output schema, so the description covers the essential purpose and parameter. It doesn't mention how to obtain a stationId, but that's likely covered elsewhere. Given the low complexity and existing annotations and output schema, the description is adequate.

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?

With 0% schema description coverage, the description must compensate for parameter meaning. It mentions 'by stationId', which clarifies the role of the parameter as the identifier, but it doesn't explain what stationId is, its format, or where it comes from. This is minimal but adds some value over the schema, which only lists it as a string.

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 (Get), a clear resource (OS Net station metadata), and the lookup key (stationId). It distinguishes from siblings like os_net_station_log (logs) and os_net_rinex_years (RINEX data) by specifying metadata, so an agent can tell them apart.

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 description makes it clear that this tool is for retrieving metadata by a station identifier. It doesn't explicitly name alternatives or exclusions, but the context is clear and no competing tool is implied. The lack of explicit when-not-to-use guidance is a minor gap, keeping it below a 5.

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

os_net_station_logB
Read-onlyIdempotent

Get OS Net station log text with inline/resource delivery controls.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNo
deliveryNo
stationIdYes
inlineMaxBytesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
logNo
deliveryYes
stationIdYes
resourceUriNo

TDQS

B3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the agent knows the operation is safe and repeatable. The description adds a small amount of context by mentioning 'inline/resource delivery controls', hinting at the delivery mechanism, but it does not explain what these controls do or any side effects. Since annotations cover the core safety profile, a score of 3 is appropriate – the description adds minimal behavioral detail beyond annotations.

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

Conciseness5/5

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

The description is a single, front-loaded sentence that directly states the purpose without any fluff. It is concise and efficient, with no redundant words. Every word earns its place, making it a model of brevity.

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

Completeness2/5

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

Given the tool has 4 parameters, 1 required, and 0% schema description coverage, the description is far too sparse. It does not explain the delivery modes, the meaning of inlineMaxBytes, or what the log text contains. Although an output schema exists (which partially offsets the need to explain return values), the agent still lacks enough context to correctly invoke the tool with proper parameter values, especially for the optional delivery parameters.

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

Parameters2/5

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

Schema description coverage is 0%, meaning the description must explain the parameters, but it does not. It only mentions 'inline/resource delivery controls', which hints at the 'delivery' parameter, but provides no detail about 'stationId' (required) or 'inlineMaxBytes'. The description does not compensate for the lack of schema descriptions, leaving the agent to guess parameter meanings.

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 ('Get') and a clear resource ('OS Net station log text'), which is unambiguous. It also mentions 'inline/resource delivery controls', giving a hint about the delivery parameter. However, it does not explicitly differentiate from the sibling 'os_net_station_get', which likely retrieves station metadata rather than logs, so the distinction is implied rather than stated.

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 guidance on when to use this tool versus alternatives. It does not mention when to choose 'inline' vs 'resource' vs 'auto' delivery, nor does it refer to sibling tools like 'os_net_station_get' or other log-related tools. The usage context is entirely left to the agent to infer from the parameter names and enum values.

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

os_offline_descriptorC
Read-onlyIdempotent

Describe PMTiles/MBTiles offline map packs and retrieval contracts.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNo
packIdNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
packNo
packsNo
fallbackOrderNo
catalogVersionNo
retrievalContractsNo

TDQS

C2.7/5.0
Behavior3/5

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

Annotations (readOnlyHint, openWorldHint, idempotentHint) already cover the safety and idempotency profile. The description adds the specific domain (offline map packs) but does not disclose additional behavioral traits beyond what annotations state, such as what the retrieval contracts include or any limitations. This is acceptable given 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.

Conciseness4/5

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

The description is a single, concise sentence that directly states the purpose. It is front-loaded and free of filler. While it could be more informative, it earns its place with efficiency, though it borders on being too sparse.

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

Completeness2/5

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

Given the low schema coverage, the description should compensate by explaining the packId parameter and the context of retrieval contracts. It does neither. The output schema exists but is not visible; the description still fails to provide enough context for an agent to know how to invoke the tool correctly, especially since it does not clarify what 'retrieval contracts' means.

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

Parameters1/5

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

Schema description coverage is 0%, meaning the schema provides no parameter explanations. The description does not mention the packId parameter at all, nor does it explain how it relates to PMTiles/MBTiles packs. An agent would have no idea what packId refers to or what values to pass, making this a critical gap.

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

Purpose4/5

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

The description clearly states the tool's purpose: to describe PMTiles/MBTiles offline map packs and retrieval contracts. The verb 'describe' and the specific resource type make it distinct from many siblings, though it does not explicitly differentiate from other descriptor tools like os_vector_tiles_descriptor.

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 guidance is provided on when to use this tool versus alternatives. The description does not mention any preconditions, alternatives, or exclusions, leaving the agent to infer that it is for offline pack descriptions without context on when it is the right choice among many similar descriptor tools.

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

os_offline_getC
Read-onlyIdempotent

Return offline delivery handoff skeletons for a PMTiles/MBTiles pack.

ParametersJSON Schema
NameRequiredDescriptionDefault
bboxNo
toolNo
titleNo
packIdYes
includeOverlayTemplateNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
packYes
map_cardYes
fallbackOrderNo
export_handoffYes
overlay_bundleYes

TDQS

C2.9/5.0
Behavior3/5

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

The description aligns with the annotations (readOnlyHint=true, idempotentHint=true) by indicating a read-style 'Return' operation. It adds the concept of 'handoff skeletons', implying placeholders rather than full tile data, but it does not explain auth needs, output structure, or behavioral edge cases. With annotations already covering the safety profile, this is adequate but not rich.

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

Conciseness4/5

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

The description is a single tight sentence that front-loads the core verb and resource. It wastes no words, though it is arguably too sparse for a tool with five parameters.

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

Completeness2/5

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

Despite having an output schema and safety annotations, the description leaves major gaps: no parameter explanations, no usage context, and no relation to sibling tools. An agent would struggle to know how to populate bbox, title, or includeOverlayTemplate correctly.

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

Parameters2/5

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

Schema description coverage is 0%, so the description carries the burden for explaining parameters, but it only vaguely references a pack via 'for a PMTiles/MBTiles pack'. It does not clarify bbox, title, includeOverlayTemplate, or the required packId semantics beyond what the schema already states.

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 ('Return') and a specific resource ('offline delivery handoff skeletons') scoped to PMTiles/MBTiles packs. It is unambiguous about what the tool produces, though it does not explicitly differentiate itself from sibling tools like os_offline_descriptor.

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 guidance is given for when to use this tool versus alternatives, and no exclusions or prerequisites are mentioned. The description only states what it does, leaving the agent to infer the appropriate context.

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

os_peat_evidence_pathsB
Read-onlyIdempotent

Build AOI-scoped peat evidence and proxy query plans with explicit provenance, confidence, and caveats.

ParametersJSON Schema
NameRequiredDescriptionDefault
bboxNo
toolNo
limitNo
resultTypeNohits
landscapeIdNo
includeLayersNo
landscapeNameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
aoiYes
layersYes
caveatsYes
confidenceYes
layerCountYes
evidenceSummaryYes

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, lowering the bar. The description adds that results carry provenance, confidence, and caveats, which is useful output context, but it does not disclose behavior like aggregation limits, result size implications, or how 'plans' relate to actual evidence data. No contradiction with annotations.

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

Conciseness5/5

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

A single 16-word sentence that front-loads the verb, scope, resource, and the key output promises. Every phrase earns its place with no wasted words.

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?

The combination of annotations and an output schema covers safety and return shape, so the description need not restate those. However, with 7 optional parameters and no schema descriptions, the description leaves gaps: it does not explain the alternative AOI specification modes (bbox vs landscapeId vs landscapeName) or what includeLayers means, which an agent needs to call the tool correctly.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate for the 7 undocumented parameters. 'AOI-scoped' hints that bbox/landscapeId/landscapeName select the area, but no individual parameter meaning, valid combinations, or defaults are explained, leaving the agent to infer semantics from parameter names alone.

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 ('Build') and resource ('peat evidence and proxy query plans'), scopes it to an AOI, and lists the distinguishing output attributes (provenance, confidence, caveats). This clearly separates it from the sibling os_peat_layers, though what a 'query plan' concretely returns remains somewhat abstract.

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 only implied by the purpose statement — an agent can infer this is for AOI-scoped peat evidence planning — but there is no explicit when-to-use/when-not-to-use guidance, no named alternatives, and no comparison to os_peat_layers despite the large sibling list of query tools.

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

os_peat_layersB
Read-onlyIdempotent

List peat evidence layers and proxy layers with provenance and caveats.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoall
toolNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
scopeNo
layersYes
sourceNo
layerCountYes

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, and the description's 'List' wording is consistent with those traits. The phrase 'with provenance and caveats' adds a little context about the output content but does not meaningfully expand beyond what the annotations and output schema already imply.

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 a single concise sentence with no filler. The main verb and object are front-loaded, making the tool's purpose immediately understandable.

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

Completeness4/5

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

For a simple, read-only listing tool with an output schema and safety annotations, the description is mostly complete. It states the object, the two layer categories, and the general character of the results (provenance and caveats), though it could briefly explain the kind parameter or the distinction from os_peat_evidence_paths.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate for the undocumented 'kind' parameter, but it does not directly explain how 'all', 'direct', or 'proxy' map to the described output. The mention of 'peat evidence layers and proxy layers' loosely aligns with the enum values but is not explicit enough to resolve ambiguity.

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 uses a specific verb ('List') and resource ('peat evidence layers and proxy layers') and indicates the output includes provenance and caveats. It is clear on what the tool does, though it does not explicitly differentiate it from the closely named sibling os_peat_evidence_paths.

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 guidance is provided about when to use this tool vs alternatives or exclusions. A sibling tool named os_peat_evidence_paths exists, and the description gives no hint about how this listing tool relates to it or when one should be preferred over the other.

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

os_places_by_postcodeA
Read-onlyIdempotent

Lookup UPRNs and addresses for a UK postcode via OS Places API

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNo
postcodeYesUK postcode

Output Schema

ParametersJSON Schema
NameRequiredDescription
uprnsYes
provenanceNo

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already mark this tool as readOnly, idempotent, and openWorld, so the safety profile is well covered. The description adds the backend ('OS Places API') and result kind, but does not disclose behaviors such as multiple UPRNs per postcode or postcode normalization. It is consistent with the annotations but does not meaningfully expand on them.

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 a single front-loaded sentence stating the action, input, and output with no filler. It is appropriately sized for a simple lookup tool and every word contributes to understanding.

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 readOnly, idempotent, and openWorld annotations plus an output schema, the description does not need to document return values or side effects. It is complete enough for a one-parameter lookup tool, though it could improve by specifying that a full UK postcode is expected and by pointing to alternative os_places tools for non-postcode inputs.

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?

The schema describes the only meaningful parameter as 'UK postcode', and the description largely repeats that phrase without adding accepted formats, partial-postcode behavior, or spacing rules. The `tool` parameter is a const and needs no semantic explanation. Overall, the parameter meaning is adequate but no richer than the schema itself.

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 clear verb ('Lookup') with a specific resource and result: UPRNs and addresses for a UK postcode via the OS Places API. The postcode-scoped purpose distinguishes this from sibling tools like os_places_by_uprn, os_places_nearest, and os_places_radius. No ambiguity remains about what operation is performed.

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 the use case: when an agent has a UK postcode and needs UPRNs or addresses. However, it does not explicitly state when not to use it or name alternatives such as os_places_search or os_places_nearest. The context is clear but the guidance stops short of helping an agent choose among the many os_places_* siblings.

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

os_places_by_uprnB
Read-onlyIdempotent

Lookup a single address by UPRN

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNo
uprnYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering safety and side-effect expectations. The description adds no additional behavioral context (e.g., return format, possible null results). It doesn't contradict annotations, but also adds minimal value beyond them.

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

Conciseness4/5

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

The description is a single, front-loaded sentence with no filler. It's appropriately concise for a simple lookup tool, though it could arguably be slightly expanded without losing efficiency.

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 (one required parameter), presence of an output schema, and annotations covering safety, the description is fairly complete for its purpose. It lacks usage guidance and parameter elaboration, but the core function is clear. A longer description would be nice but not critical.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It only mentions 'by UPRN' without explaining what a UPRN is, its format, or any constraints. The agent gets no semantic help beyond the parameter name itself, which is insufficient given zero schema descriptions.

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 'Lookup a single address by UPRN' clearly states the verb, resource, and the key identifier. It differentiates from siblings like os_places_by_postcode and os_places_search by specifying the exact lookup mechanism, so an agent can select it unambiguously.

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 guidance on when to use this tool versus alternatives. It doesn't mention that it should be used when a UPRN is available, nor does it point to sibling tools for other lookup keys. An agent must infer usage from the tool name and context.

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

os_places_nearestB
Read-onlyIdempotent

Find nearest addresses to a point

ParametersJSON Schema
NameRequiredDescriptionDefault
latYes
lonYes
toolNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultsYes

TDQS

B3.1/5.0
Behavior2/5

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

The annotations already cover the read-only and idempotent safety profile. The description adds only the word 'nearest'; it does not disclose expected result count, sort order, coordinate reference system, or other response-shaping behavior, so it provides little beyond the structured hints.

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 a single seven-word sentence with no filler, and the core action is front-loaded. Every word carries meaning and it is immediately parseable.

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?

The tool is simple on the surface and an output schema plus read-only annotations reduce the burden. Still, the description omits coordinate-system details, result limits, and how this differs from radius/within siblings, leaving a moderate completeness gap.

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

Parameters2/5

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

Schema coverage is 0% and the description does not compensate. It references 'a point' as the conceptual location but never explains the expected lat/lon format, unit, coordinate system, or accepted ranges, which are material for a correct call.

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 action and resource: finding nearest addresses to a point. This distinguishes it from nearby sibling tools like os_poi_nearest and os_names_nearest, though it does not explicitly disambiguate from overlapping os_places_radius or os_places_within.

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 use case is implied: call this when you need nearest addresses around a lat/lon point. However, the description gives no explicit when-to-use guidance, no exclusions, and no pointers to spatial alternatives like os_places_radius or os_places_within.

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

os_places_polygonC
Read-onlyIdempotent

Addresses within a polygon

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNo
limitNo
polygonYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNo
resultsYes

TDQS

C2.4/5.0
Behavior2/5

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

Annotations already cover read-only, open-world, and idempotent behavior, but the description adds no additional context. It does not disclose the polygon format, any limitations, or how results are ordered, providing no value beyond the annotations.

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

Conciseness4/5

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

The description is extremely concise, with a single clear phrase. It is front-loaded with the core concept and contains no extraneous words. However, its brevity borders on under-specification, though that is a completeness issue rather than a conciseness one.

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

Completeness1/5

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

The description is far too sparse for a tool with a complex polygon parameter and no schema guidance. It does not explain the polygon format, the meaning of the limit parameter, or the output structure, leaving an agent without enough information to call the tool correctly. The presence of an output schema does not compensate for the missing input semantics.

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

Parameters1/5

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

With 0% schema description coverage, the description carries full responsibility for explaining parameters. It only mentions 'polygon' in passing but does not explain its required format (GeoJSON, WKT, etc.) or what the 'limit' parameter does. This is critically insufficient for an agent to construct a valid request.

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 resource (addresses) and operation (within a polygon), making the tool's purpose understandable. However, it does not differentiate it from sibling tools like os_places_within, which likely performs a similar function, so it loses a point for missing differentiation.

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 guidance is provided on when to use this tool versus alternatives. The description does not mention any conditions, alternatives, or scenarios where this tool is preferred, leaving the agent to infer usage from the name alone.

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

os_places_radiusC
Read-onlyIdempotent

Addresses within a radius of a WGS84 point

ParametersJSON Schema
NameRequiredDescriptionDefault
latYes
lonYes
toolNo
limitNo
radiusMetersYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNo
resultsYes

TDQS

C2.4/5.0
Behavior2/5

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

Annotations already provide readOnlyHint, openWorldHint, and idempotentHint, covering safety and side-effect expectations. The description adds no behavioral details beyond the spatial operation, such as result limits (though a limit parameter exists), handling of no results, or coordinate system specifics beyond the WGS84 mention. It does not contradict annotations but adds minimal behavioral insight.

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

Conciseness4/5

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

The description is a single, concise sentence with no wasted words. It is front-loaded with the core purpose. While it is under-specified, the conciseness itself is appropriate for the minimal information provided, though it sacrifices completeness.

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

Completeness1/5

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

For a tool with 5 parameters and an output schema, the description is drastically incomplete. It does not explain parameter semantics, expected output structure, or any usage context. The agent cannot reliably formulate a correct request without inspecting the schema or external documentation. Even with annotations, the description fails to provide essential operational context.

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

Parameters1/5

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

Schema description coverage is 0%, so the description must compensate for parameter meaning. It does not explain lat, lon, radiusMeters, limit, or their units and constraints. The only hint is 'WGS84 point', implying lat/lon coordinates, but no relationship between parameters and the operation is clarified. This is a significant gap for a 5-parameter tool.

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 core function: returning addresses within a radius of a WGS84 point. It identifies the resource (addresses) and the spatial operation (within a radius), which is clear, but it does not differentiate from sibling tools like os_places_nearest or os_places_within without additional context. It is not a tautology and conveys the essential purpose.

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 guidance is provided on when to use this tool versus alternatives such as os_places_nearest, os_places_within, or os_places_by_postcode. There is no mention of scenarios where radius-based search is preferred, nor any exclusions. The agent is left to infer usage from the name and description alone.

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

os_places_withinC
Read-onlyIdempotent

Addresses within a bounding box

ParametersJSON Schema
NameRequiredDescriptionDefault
bboxYes
toolNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultsYes
provenanceNo

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already provide readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds no additional behavioral context such as bbox size limits, coordinate order, result caps, or pagination behavior, and it neither contradicts nor meaningfully enriches the annotation profile.

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 only nine words, contains no filler, and front-loads the resource. It is efficient; the only structural weakness is that it is a noun phrase fragment rather than a complete sentence with an explicit verb.

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

Completeness2/5

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

For a geospatial tool, failing to document the bbox coordinate order or coordinate reference system is a real correctness risk. The output schema covers return-value shape and annotations cover safety, but an agent is still under-equipped to construct a valid bbox call or choose this over related place-query tools.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate for parameter meaning. It clarifies that 'bbox' refers to a bounding box, but it does not specify coordinate order, units/CRS, or how the four required numbers should be arranged, leaving the main parameter underdocumented.

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 identifies the resource ('Addresses') and the spatial scope ('within a bounding box'), so an agent can infer it returns addresses matching a bbox. It lacks an explicit verb and does not differentiate itself from siblings like os_places_radius or os_places_polygon, which prevents a top score.

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 phrase 'within a bounding box' implies the usage context: use this when you have a bbox and want addresses in it. However, it gives no explicit when-to-use/when-not-to-use guidance and does not mention alternatives among the several os_places_* sibling tools, so the routing decision is left to inference.

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

os_poi_nearestA
Read-onlyIdempotent

Find nearby OS Points of Interest for a latitude/longitude point.

ParametersJSON Schema
NameRequiredDescriptionDefault
latYes
lonYes
toolNo
limitNo
maxDistanceMetersNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
resultsYes
provenanceNo

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the read-only nature is covered. The description adds only the 'nearby' spatial behavior, matching the tool's name, but does not disclose ordering, default limit, or distance handling. This is acceptable but not rich.

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

Conciseness5/5

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

A single, front-loaded sentence with no filler. It immediately states the action, resource, and input without wasting tokens.

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?

The tool is simple and has both annotations and an output schema, so safety and return structure are partially covered. However, the description omits crucial selection context, such as how maxDistanceMeters relates to 'nearby', whether limit has a default, and how this tool differs from the several similar nearest/search siblings.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It implicitly covers lat and lon but says nothing about the meaning, units, defaults, or effects of limit and maxDistanceMeters. The optional parameters are left unexplained beyond their schema types and constraints.

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 names a specific verb ('Find'), a specific resource ('OS Points of Interest'), and the input mode ('for a latitude/longitude point'). This makes it clearly distinguishable from sibling tools like os_poi_search (text-based search) and os_poi_within (area-based search).

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 the use case: call this when you have a lat/lon coordinate and want nearby POIs. However, it gives no explicit guidance about when not to use it or which alternatives (e.g., os_poi_search, os_poi_within, os_places_nearest) would be more appropriate.

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

os_poi_withinA
Read-onlyIdempotent

Find OS Points of Interest within a WGS84 bounding box.

ParametersJSON Schema
NameRequiredDescriptionDefault
bboxYes[minLon,minLat,maxLon,maxLat]
toolNo
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
resultsYes
provenanceNo

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already cover the safety profile (readOnlyHint, openWorldHint, idempotentHint), so the description does not need to repeat these. It adds the WGS84 coordinate reference context, which is useful, but does not disclose output behavior, ordering, or edge cases. This is acceptable given the annotation coverage, but not a rich behavioral disclosure.

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 a single, front-loaded sentence with zero filler. It states the operation, resource, and key constraint efficiently. Every word earns its place.

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?

The tool is simple, has an output schema (so return values are covered), and annotations cover safety. However, the description does not mention the optional limit parameter or how this tool relates to spatial siblings like os_poi_nearest and os_poi_search. These are moderate gaps for an agent deciding between tools.

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

Parameters2/5

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

Schema description coverage is only 33%: only bbox has a description ('[minLon,minLat,maxLon,maxLat]'), while limit and tool are undocumented. The description itself adds no parameter-level meaning beyond the bbox hint, leaving the limit parameter's semantics entirely unspecified. With low schema coverage, the description should compensate but does not.

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

Purpose5/5

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

The description states a specific verb ('Find'), resource ('OS Points of Interest'), and spatial scope ('within a WGS84 bounding box'), clearly distinguishing it from sibling tools like os_poi_nearest and os_poi_search. An agent can understand the tool's function immediately 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?

The description implies the use case: a spatial query by bounding box. However, it provides no explicit guidance on when to choose this tool over alternatives such as os_poi_nearest or os_poi_search, nor does it state any exclusions or prerequisites. The context is clear but alternatives are not addressed.

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

os_qgis_export_geopackage_descriptorB
Read-onlyIdempotent

Build a QGIS GeoPackage import descriptor for a resource-backed export artifact.

ParametersJSON Schema
NameRequiredDescriptionDefault
crsNo
toolNo
deliveryNo
fileNameNo
layerNameNo
targetDirNo
inlineMaxBytesNo
sourceResourceUriYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
deliveryYes
descriptorNo
resourceUriNo

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds only the 'resource-backed' context about the artifact, which is mildly informative but does not disclose additional behavioral traits such as output shape or relationship to delivery modes. No contradiction with annotations.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no filler. It conveys the tool's core purpose in 13 words and does not duplicate schema or annotation information.

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

Completeness2/5

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

For a tool with 8 parameters, a 0% schema coverage, and a large sibling list, one sentence is under-specified. It omits guidance on the output descriptor's role, how delivery modes work, when to use this versus sibling descriptor tools, and what the read-only operation actually returns. The output schema exists, but the description alone does not provide enough operational context.

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

Parameters2/5

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

Schema description coverage is 0% and the description provides no parameter-level semantics. Property names like sourceResourceUri, layerName, crs, and delivery are self-descriptive, but the interaction between parameters (e.g., delivery vs inlineMaxBytes, resource vs inline output) is left entirely to inference. With low schema coverage, the description was expected to compensate and did not.

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 ('Build') and resource ('a QGIS GeoPackage import descriptor') and adds the qualifier 'for a resource-backed export artifact.' It is not a tautology and is more specific than sibling descriptor tools, though it does not explicitly name a sibling to distinguish itself from.

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 phrase 'for a resource-backed export artifact' implies a use condition: this descriptor is for artifacts exported as resources. However, it gives no when-not-to-use guidance, no prerequisites, and no explicit comparison to sibling tools such as os_qgis_vector_tile_profile or os_offline_descriptor.

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

os_qgis_vector_tile_profileB
Read-onlyIdempotent

Return a QGIS-ready OS vector tile profile (proxy or direct URL mode).

ParametersJSON Schema
NameRequiredDescriptionDefault
srsNo
toolNo
styleNo
deliveryNo
useProxyNo
inlineMaxBytesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
profileNo
deliveryYes
resourceUriNo

TDQS

B3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the agent knows the operation is safe and non-mutating. The description adds a small behavioral detail: the profile can be returned in proxy or direct URL mode. No mention of auth, rate limits, or data package requirements is made, but the annotations cover the key safety traits.

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?

One sentence with no filler; the core action and key mode distinction are front-loaded. The description is terse but each phrase carries useful information, and there is no redundant repetition of the tool name or schema.

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

Completeness2/5

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

The tool has six optional parameters and an output schema, but the description is too sparse to guide correct invocation. An agent cannot infer how to choose between srs 3857 and 27700, how delivery mode interacts with useProxy, or what a 'profile' contains. The output schema may document return shape, but the input side remains largely unexplained.

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

Parameters2/5

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

Schema description coverage is 0%, and the description does not explain srs, style, delivery, useProxy, or inlineMaxBytes. The phrase 'proxy or direct URL mode' loosely maps onto useProxy/delivery, but the other five parameters remain unexplained. The schema's enums provide some structure, yet the description fails to compensate for the coverage gap.

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?

Description uses a specific verb ('Return') and a named resource ('QGIS-ready OS vector tile profile'), with a parenthetical clarifying two delivery modes. It distinguishes from the sibling os_vector_tiles_descriptor by emphasizing QGIS readiness and proxy/direct URL output, though it does not explicitly name any alternative tool.

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 guidance is given on when to use this tool versus alternatives such as os_vector_tiles_descriptor or os_maps_raster_tile. It does not mention selection criteria, prerequisites, or conditions that would favor proxy vs direct URL mode. The single sentence leaves all usage decisions to the agent.

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

os_resources_getB
Read-onlyIdempotent

Read an MCP Geo resource by uri or name with transport-safe chunking.

ParametersJSON Schema
NameRequiredDescriptionDefault
uriNo
nameNo
maxBytesNo
pageTokenNoUTF-8 byte offset returned by a previous call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
uriYes
etagYes
textYes
completeYes
deliveryYes
mimeTypeYes
pageTokenNo
totalBytesYes
nextPageTokenNo

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already provide readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description adds the 'transport-safe chunking' behavior, which is useful context about how large resources are returned. However, it does not elaborate on pagination mechanics or any other side effects, so it only partially exceeds the annotation baseline.

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?

A single concise sentence states the core purpose up front and appends the chunking detail. No unnecessary words, perfectly sized for an agent to parse quickly.

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?

Given the tool has an output schema and safety annotations, the description covers the essential action (read) and the two lookup methods. However, it leaves pagination details (how to use pageToken) to the schema, and the description does not mention any prerequisites or error conditions. It is adequate but not exhaustive for an agent that may need to handle large resources.

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

Parameters4/5

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

With only 25% schema description coverage, the description compensates by clarifying that uri and name are alternative identifiers, and 'chunking' relates to maxBytes and pageToken. This adds meaning beyond the schema's sparse parameter definitions, though it does not explain maxBytes limits or the pageToken iteration pattern fully.

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

Purpose4/5

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

The description clearly states the verb 'Read' and the resource type 'MCP Geo resource', plus the two identification methods (uri or name). This is specific and distinguishes it from sibling tools that read other data (e.g., os_linked_ids_get). However, it does not explicitly differentiate from any particular sibling, 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 Guidelines2/5

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

The description implies the tool is for reading resources by uri or name, but gives no explicit guidance on when to use it versus alternatives, nor any exclusions. With many sibling tools, the absence of routing advice weakens this dimension.

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

os_route_descriptorA
Read-onlyIdempotent

Describe MCP Geo route-planning capabilities and graph readiness.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
graphYes
statusYes
maxStopsYes
constraintTypesYes
supportedProfilesYes

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, and the 'Describe' verb is consistent with a non-mutating probe. The description adds the useful domain concept of 'graph readiness' but does not explain what readiness means or how it affects subsequent routing calls.

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 a single front-loaded sentence with no filler. It conveys the tool's scope in nine words and could not be meaningfully shortened.

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 a zero-required-parameter schema, an output schema present, and annotations covering safety, the description is largely sufficient for a correct invocation. The main gap is the undefined 'graph readiness' term and its relationship to routing siblings, but this does not block calling the 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?

The only parameter is a fixed const tool name, so there are effectively no user-facing parameters and the description carries no semantic burden. Although schema description coverage is 0%, the property is self-documenting and no required parameters exist.

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 ('Describe') and a specific subject ('MCP Geo route-planning capabilities and graph readiness'), making the tool's role as an introspection/capability probe clear. It doesn't explicitly name sibling tools, but the route-planning scope distinguishes it from generic descriptors like os_mcp_descriptor.

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 guidance is given about when to call this tool versus related tools such as os_mcp_route_query, os_route_get, or os_mcp_descriptor. Any sequencing like 'check graph readiness before routing' is left entirely to inference.

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

os_route_getC
Read-onlyIdempotent

Resolve route stops and compute a pgRouting-backed route.

ParametersJSON Schema
NameRequiredDescriptionDefault
viaNo
toolNo
stopsYes
profileNo
deliveryNo
constraintsNo
inlineMaxBytesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
legsNo
graphNo
routeNo
stepsNo
profileYes
deliveryNo
warningsNo
modeChangesNo
resourceUriNo
restrictionsNo
resolvedStopsNo
distanceMetersNo
durationSecondsNo

TDQS

C2.8/5.0
Behavior3/5

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

Annotations include readOnlyHint=true, idempotentHint=true, and openWorldHint=true, which already indicate the tool has no side effects and may return variable results. The description adds minimal context beyond annotations: it mentions 'pgRouting-backed' implying a specific routing engine, but does not clarify behavior such as how stops are resolved (e.g., ambiguity handling), what constraints apply, or potential rate limits. Since annotations cover the safety profile, a 3 is appropriate as the description adds a little context but not deep behavioral details.

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

Conciseness3/5

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

The description is very short (one sentence), which is concise. It front-loads the core action and technology. However, it is under-specified for a tool with 7 parameters; the brevity comes at the cost of essential information. It omits key aspects like parameter overview, constraints, and output format. While concise, it does not earn its place fully because it fails to convey necessary usage details. A 3 reflects adequate efficiency but incomplete coverage.

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

Completeness2/5

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

The tool has a complex schema with nested objects, multiple optional parameters, enums, and an output schema is present (though not shown). The description does not explain return values, which might be covered by the output schema, so that is not a critical gap. However, it does not explain what 'pgRouting-backed' means for the agent, nor does it outline the routing contexts (e.g., profiles, constraints) that the agent can use. Given the complexity, the description is incomplete; the agent lacks guidance on how to configure routes effectively. Annotations and schema are dense but not self-explanatory.

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

Parameters2/5

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

Schema description coverage is 0%, meaning the schema does not provide descriptions for any parameters. The tool description does not describe any parameters either – it only mentions 'stops' implicitly. With 7 parameters and no descriptions, the description fails to compensate for the lack of schema descriptions. The enums for 'profile' and 'delivery' have no explanation, and the 'constraints' object is complex. This is a significant gap, as the agent has to guess parameter meanings.

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 ('Resolve route stops and compute') and a specific resource ('a pgRouting-backed route'). It clearly identifies the tool's function as routing, distinguishing it from most siblings (e.g., os_mcp_route_query, os_map_export). However, it lacks explicit mention of optional parameters like 'profile' or 'constraints', which are part of the purpose. It doesn't fully distinguish from the closely related 'os_mcp_route_query' sibling.

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 implies usage for computing routes, but provides no explicit guidance on when to use this tool versus alternatives. It does not exclude cases where other routing tools like 'os_mcp_route_query' might be more appropriate (e.g., different routing engine or simpler queries). No mention of required 'stops' array minimum of 2, or optional parameters like 'profile', 'constraints', or 'delivery' mode. The agent must infer conditions from the schema, which is not explicitly guided.

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

os_tiles_ota_collectionsB
Read-onlyIdempotent

List OS NGD OTA tile collections.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
liveNo
collectionsYes

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, and idempotentHint=true, so the safety profile is covered. The description adds no behavioral context beyond the obvious listing action—it doesn't mention pagination, filtering, or return format. With annotations covering the essential traits, a 3 is appropriate.

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?

A single, clear sentence with no wasted words. It states the action and resource immediately, which is ideal for a listing tool.

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?

The tool is simple (no required parameters, output schema exists), so the description is functionally sufficient. However, given the large sibling set of OS OTA tools, a brief note on what 'tile collections' are or how this differs from conformance/tilematrixsets would improve completeness. It doesn't fail to provide critical info for a straightforward list operation.

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?

The only parameter is a constant string ('tool'), so the schema fully defines it. The description adds no parameter details, but none are needed for a constant. Schema coverage is 0% because the description doesn't reference parameters, but the triviality of the parameter keeps this at 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?

The description uses a specific verb ('List') and a specific resource ('OS NGD OTA tile collections'). It clearly indicates the tool enumerates tile collections. While it doesn't explicitly differentiate from sibling tools like os_tiles_ota_conformance or os_tiles_ota_tilematrixsets, the resource name is distinct enough to infer the purpose.

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 gives no guidance on when to use this tool versus alternatives. Sibling tools like os_tiles_ota_conformance or os_tiles_ota_tilematrixsets exist, but the description doesn't explain which scenario calls for listing collections versus checking conformance or tilematrixsets.

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

os_tiles_ota_conformanceA
Read-onlyIdempotent

List OGC conformance classes supported by OS NGD OTA.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
liveNo
conformanceYes

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, and idempotentHint=true, so the safety profile is covered. The description adds that this lists supported conformance classes, which is a metadata query. It doesn't add behavioral details like whether the list is static or dynamic, or whether it requires network access, but the annotations carry most of the burden.

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?

One sentence, front-loaded with the verb and resource. Every word earns its place. No fluff or repetition of schema details.

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 no-parameter metadata listing tool with a readOnlyHint and an output schema present, the description is nearly complete. It tells the agent exactly what will be returned (OGC conformance classes) and the scope (OS NGD OTA). The only minor gap is not describing the output format, but the output schema likely covers that.

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?

The schema has only one parameter ('tool') which is a const, and schema description coverage is 0%. However, with zero meaningful parameters (the const is just a routing identifier), the description doesn't need to explain parameter semantics. The tool takes no user input, so the description's job is minimal here. Baseline 4 for 0-param tools 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 a specific verb ('List') and resource ('OGC conformance classes supported by OS NGD OTA'), which clearly identifies the tool's function. It doesn't explicitly differentiate from siblings, but the resource is specific enough that an agent can distinguish it from other OS tile tools like os_tiles_ota_collections and os_tiles_ota_tilematrixsets.

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: it lists conformance classes for OS NGD OTA, which is a metadata/discovery operation. It doesn't explicitly state when to use this tool versus alternatives, but the resource-specific naming and the fact that it's a list operation provide reasonable context. No exclusions or alternative tool mentions are given.

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

os_tiles_ota_tilematrixsetsA
Read-onlyIdempotent

List OS NGD OTA tile matrix sets.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
liveNo
tileMatrixSetsYes

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the 'List' description is consistent and needs to disclose little about side effects. It adds no further behavioral context such as result ordering, pagination, or authentication, but no contradiction exists.

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 a single sentence with no filler, and the operation word 'List' is front-loaded. Every word earns its place for a simple listing 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?

Given no required parameters, a rich output schema, and strong annotations, the description is sufficient for an agent to invoke the tool safely. The only missing context is how tile matrix sets relate to the sibling OTA tools, but this does not block a correct call.

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?

The input schema has no meaningful user parameters—only a fixed `tool` const with no required inputs—so there are no parameter semantics for the description to explain. The 0% schema description coverage is therefore not a real deficiency.

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 action (List) and a specific resource (OS NGD OTA tile matrix sets), so an agent can tell it is a read-only metadata listing operation. It does not explicitly contrast it with sibling tools such as os_tiles_ota_collections or os_tiles_ota_conformance, and the acronyms NGD/OTA are not expanded.

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 guidance is given about when to call this tool instead of related OTA tools, nor are alternatives named. There is no mention of a workflow such as 'list collections first, then tile matrix sets' or any exclusions.

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

os_vector_tiles_descriptorA
Read-onlyIdempotent

Return vector tiles style and tile template URLs

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
vectorTilesYes

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering the safety and side-effect profile. The description adds the specific output (style and tile template URLs), which is useful context, but it doesn't disclose any additional behavioral traits such as format details or potential limitations. Given the annotations carry the burden, a 3 is appropriate.

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 a single, direct sentence with no extraneous words. It front-loads the action and output, making it immediately scannable and appropriate for the tool's simplicity.

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 that the tool has no parameters and an output schema is present, the description covers the essential purpose adequately. It doesn't explain what 'style' or 'tile template URLs' entail, but the output schema likely specifies the structure, and the tool is a descriptor itself. The description is sufficient for an agent to know what it returns.

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?

The input schema contains only a constant 'tool' parameter with no real inputs. Since there are zero meaningful parameters, the baseline is 4. The description doesn't need to add parameter semantics, and it correctly doesn't attempt to.

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

Purpose4/5

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

The description clearly states the action ('Return') and the resource ('vector tiles style and tile template URLs'), giving a specific output. It does not explicitly differentiate from sibling tools like os_qgis_vector_tile_profile or os_maps_wmts_capabilities, but the mention of 'style and tile template URLs' narrows the purpose well.

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 offers no guidance on when to use this tool versus alternatives, no context, and no exclusions. An agent must infer usage from the name and sibling list without any direction, leaving it uncertain whether this is the right tool among many related OS mapping tools.

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. 103 tool updatesv0.8.2
    • First observedadmin_lookup_area_geometry
    • First observedadmin_lookup_containing_areas
    • First observedadmin_lookup_find_by_name
    • First observedadmin_lookup_get_cache_status
    • First observedadmin_lookup_reverse_hierarchy
    • First observedadmin_lookup_search_cache
    • First observedcouncil_tax_band_lookup
    • First observedcouncil_tax_query
    • First observedlandis_archive_get_item
    • First observedlandis_archive_list_items
    • First observedlandis_catalog_list_products
    • First observedlandis_derive_pipe_risk
    • First observedlandis_metadata_get
    • First observedlandis_natmap_area_summary
    • First observedlandis_natmap_point
    • First observedlandis_natmap_thematic_area_summary
    • First observedlandis_nsi_nearest_sites
    • First observedlandis_nsi_profile_summary
    • First observedlandis_nsi_within_area
    • First observedlandis_soilscapes_area_summary
    • First observedlandis_soilscapes_point
    • First observednomis_codelists
    • First observednomis_concepts
    • First observednomis_datasets
    • First observednomis_query
    • First observedons_codes_list
    • First observedons_codes_options
    • First observedons_data_create_filter
    • First observedons_data_dimensions
    • First observedons_data_editions
    • First observedons_data_get_filter_output
    • First observedons_data_get_observation
    • First observedons_data_query
    • First observedons_data_versions
    • First observedons_geo_area_summary
    • First observedons_geo_by_postcode
    • First observedons_geo_by_uprn
    • First observedons_geo_cache_status
    • First observedons_geo_release_audit
    • First observedons_search_query
    • First observedons_select_search
    • First observedos_apps_log_event
    • First observedos_apps_render_boundary_explorer
    • First observedos_apps_render_feature_inspector
    • First observedos_apps_render_geography_selector
    • First observedos_apps_render_route_planner
    • First observedos_apps_render_statistics_dashboard
    • First observedos_apps_render_ui_probe
    • First observedos_downloads_get_export
    • First observedos_downloads_get_product
    • First observedos_downloads_list_data_packages
    • First observedos_downloads_list_product_downloads
    • First observedos_downloads_list_products
    • First observedos_downloads_prepare_export
    • First observedos_features_collections
    • First observedos_features_query
    • First observedos_features_wfs_archive_capabilities
    • First observedos_features_wfs_capabilities
    • First observedos_landscape_find
    • First observedos_landscape_get
    • First observedos_linked_ids_feature_types
    • First observedos_linked_ids_get
    • First observedos_linked_ids_identifiers
    • First observedos_linked_ids_product_version_info
    • First observedos_map_export
    • First observedos_map_export_roads
    • First observedos_map_get_export
    • First observedos_map_inventory
    • First observedos_maps_raster_tile
    • First observedos_maps_render
    • First observedos_maps_wmts_capabilities
    • First observedos_mcp_descriptor
    • First observedos_mcp_route_query
    • First observedos_mcp_select_toolsets
    • First observedos_mcp_stats_routing
    • First observedos_names_find
    • First observedos_names_nearest
    • First observedos_net_rinex_years
    • First observedos_net_station_get
    • First observedos_net_station_log
    • First observedos_offline_descriptor
    • First observedos_offline_get
    • First observedos_peat_evidence_paths
    • First observedos_peat_layers
    • First observedos_places_by_postcode
    • First observedos_places_by_uprn
    • First observedos_places_nearest
    • First observedos_places_polygon
    • First observedos_places_radius
    • First observedos_places_search
    • First observedos_places_within
    • First observedos_poi_nearest
    • First observedos_poi_search
    • First observedos_poi_within
    • First observedos_qgis_export_geopackage_descriptor
    • First observedos_qgis_vector_tile_profile
    • First observedos_resources_get
    • First observedos_route_descriptor
    • First observedos_route_get
    • First observedos_tiles_ota_collections
    • First observedos_tiles_ota_conformance
    • First observedos_tiles_ota_tilematrixsets
    • First observedos_vector_tiles_descriptor

TDQS

C2.4/5.0

Scored across 103 tools

Disambiguation2/5

While the provider prefixes (os_, ons_, landis_) help, there is considerable overlap between tools like os_places_search vs os_poi_search vs os_names_find, and os_map_export vs os_map_export_roads. The distinction between os_features_query and os_map_inventory is also unclear, making it easy for an agent to select the wrong tool.

Naming Consistency3/5

Most tools follow a {provider}_{resource}_{action} pattern, and each data source has a reasonably consistent style (e.g., os_places_*, os_poi_*, os_downloads_*). However, there are notable exceptions like os_linked_ids_* and os_mcp_* that mix nouns and verbs, and some tools like os_net_station_log use a noun instead of an action, creating uneven conventions.

Tool Count1/5

With 103 tools, this is far beyond the 50+ threshold for an extreme mismatch. Even though the server covers many geo data sources, the sheer number makes it unwieldy and hard for an agent to navigate efficiently. The tool count is the primary driver of low coherence.

Completeness4/5

The server provides broad read-only coverage across administrative boundaries, soil data, census/statistics, OS maps, places, points of interest, routes, and tile services. Minor gaps exist (e.g., no cache refresh or write operations), but for a data-lookup-centric geo server, the coverage is strong and well-suited to its purpose.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    A comprehensive MCP server providing 30 tools for geocoding, routing, and OpenStreetMap data analysis. It enables AI assistants to search for locations, calculate travel routes, and perform quality assurance checks on map data.
    30
    78 npm
    5
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    An MCP server for discovering, downloading, querying, and analyzing datasets from Ontario's open data portals, allowing natural language questions and high-performance analytics via DuckDB.
    23
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    An MCP server that gives AI assistants access to UK Parliament data. Query MPs, Lords, bills, votes, committees, debates, and more through AI assistants like Claude Desktop and VS Code Copilot.
    4
    MIT