Skip to main content
Glama
WAINUTAI
by WAINUTAI

NL-GOV-MCP

Dutch public-sector data is scattered across many sources that do not natively work together. CBS does not know what Tweede Kamer publishes. BAG does not know what DUO knows. Rechtspraak is disconnected from Rijksbegroting.

NL-GOV-MCP connects what the Dutch government has not connected itself: one interface, many sources, one question, one answer — with provenance.

It is an open-source Model Context Protocol server that lets AI assistants search, combine, and return data from Dutch public-sector sources. Built by WAINUT, a one-stop AI shop in the Netherlands (AI Recruitment, AI Consulting & Implementation, AI & Data Training).

What can you do with this?

Ask in plain Dutch or English. The server routes to the right sources, retrieves data, and returns structured results with source traceability.

Examples:

  • "Hoeveel sociale huurwoningen zijn er gebouwd in Rotterdam sinds 2020?" → combines relevant housing/statistics sources

  • "Wat heeft de Tweede Kamer besloten over stikstof afgelopen maand?" → parliamentary search with temporal parsing

  • "Welke basisscholen zijn er in Tilburg?" → real per-school records from DUO (address, denomination, BRIN)

  • "Welke middelbare school scoort het best?" → DUO exam results per school location (pass rate, average marks)

  • "Wat besteedt provincie Overijssel aan?" → TenderNed procurement notices and awards

  • "Hoe stemde Tilburg bij de Tweede Kamerverkiezingen?" → Kiesraad results per party

  • "Toon alle rechtspraak over huurrecht dit jaar" → Rechtspraak search with date-aware mapping

  • "Wat is de luchtkwaliteit in Utrecht?" → live Luchtmeetnet measurements from that city’s own stations

  • "Geef me de rijksbegroting voor onderwijs" → Rijksbegroting search + chapter navigation

Related MCP server: Qdrant Neo4j Crawl4AI MCP Server

How is this different from data.overheid.nl?

data.overheid.nl is primarily a catalog that tells you where data lives.

NL-GOV-MCP actively retrieves and normalizes data across many sources, can combine cross-source results, and returns a consistent MCP response contract ready for assistants and automations.

Sources (44 connectors, 70 tools)

Source

What it covers

CBS

Statistics Netherlands (demographics, economy, housing, labour; v4/v3 + fallback)

Tweede Kamer

Parliamentary documents, search, voting records, member info; single-document retrieval can optionally resolve resource URLs and include capped text previews for text-like formats

Officiële Bekendmakingen

Official publications (SRU/XML search + lookup)

Rijksoverheid

National government news/document search via the Rijksoverheid.nl RSS platform (server-side keyword) + school holidays

Rijksbegroting

National budget data + chapter helper

DUO

Per-school records (po/vo/mbo/ho addresses), per-location exam results, education dataset catalogue + RIO adapter

data.overheid.nl

National open data catalog (CKAN)

Overheid API register

API directory (requires OVERHEID_API_KEY)

KNMI

Weather datasets/files, warnings, earthquakes (requires KNMI_API_KEY)

PDOK / BAG

Geospatial search, BAG address registry, and authoritative per-address detail (oppervlakte, bouwjaar, gebruiksdoelen) via Kadaster Individuele Bevragingen REST API

Rechtspraak

Court rulings via official uitspraken.rechtspraak.nl search backend

RDW

Vehicle open data

Luchtmeetnet

Live air quality measurements per city/station (NO2, PM10, PM2.5, O3)

Rijkswaterstaat

Water data catalog + real-time measurements

NDW

Traffic discovery/metadata

ORI

Open Raadsinformatie discovery

NGR

National Geo Register (CSW metadata)

Ruimtelijkeplannen.nl (Wro/Bro)

Vigerende, ontwerp en vervallen ruimtelijke plannen via PDOK WMS, met status- en gemeentefilter

RIVM

Public-health discovery

Kadaster BAG (Linked Data)

SPARQL access to building/address linked data

RCE (Linked Data)

SPARQL access to cultural heritage linked data

Eurostat

EU statistics search + preview

data.europa.eu

EU open data catalog

DSO Omgevingsdocumenten

Discovery van omgevingsplannen, omgevingsvisies, programma's en omgevingsverordeningen onder de Omgevingswet (read-only metadata, vereist DSO_API_KEY)

data.politie.nl

Registered crime & nuisance figures per municipality/district/neighbourhood (CBS dataderden OData)

CBS Iv3

Municipal & provincial finances — budgets, annual accounts, task fields (dataderden OData)

PDOK Bestuurlijke Gebieden

Official municipality/province boundaries and codes (OGC API Features)

PDOK Kadastrale Kaart (BRK)

Cadastral parcels, boundaries and designations (OGC API Features)

wetten.overheid.nl (BWB)

Consolidated texts of all national laws, decrees and regulations (KOOP SRU)

CVDR

Local & regional regulations of municipalities, provinces and water authorities (KOOP SRU)

NED

National Energy Dashboard — generation/consumption per source + forecasts (requires NED_API_KEY)

EP-Online

Building energy labels per address / BAG id (RVO, requires EP_ONLINE_API_KEY)

BRO

Basisregistratie Ondergrond — groundwater, CPT soundings, borings (keyless REST)

NS Reisinformatie

Train travel advice, departures/arrivals and disruptions (requires NS_API_KEY)

OVapi / NDOV

Realtime public-transport departures per stop + GTFS

BRON verkeersongevallen

Registered road-traffic accidents with location & severity (Rijkswaterstaat WFS)

DNB Statistics

Interest rates, mortgages, pensions, insurers, balance of payments (requires DNB_API_KEY)

NZa Zorgbeeld

Current waiting times for medical-specialist care per institution

Register Overheidsorganisaties

All Dutch government organisations + TOOI identifiers (KOOP)

TenderNed

Public procurement — tender notices, awards, market consultations; detail with CPV/NUTS codes and PDF text

Tuchtrecht

Disciplinary rulings for regulated professions (healthcare, bar, notaries, accountants, vets) — not on Rechtspraak.nl

Samenwerkende Catalogi

National index of products/services offered by municipalities, provinces and water authorities (KOOP SRU)

BRP Gewaspercelen (RVO)

Agricultural parcels with crop, category, area and polygon (PDOK WFS)

Kiesraad Verkiezingsuitslagen

Election results per party, nationally and per province/municipality, incl. turnout

Key features

Consistent response contract

Every tool returns the same shape:

  • summary

  • records[]

  • provenance

  • optional access_note

  • optional failures[]

  • optional pagination (offset, limit, total, has_more)

  • optional verbose (request timings, connector health snapshots)

PDF text extraction

Most Dutch government "data" is text inside a PDF. Tools that reach a PDF resource extract its text layer instead of handing back a link only:

  • tweede_kamer_document_get with include_text: true returns the text of a Kamerstuk PDF (text_preview_source: "pdf_text_layer", plus page count)

  • tenderned_aanbesteding_get with include_text: true returns the text of the official tender notice PDF

Extraction is capped (max_chars, default 12 000) and fails typed rather than hard: a scan without OCR reports no_text_layer, an encrypted file encrypted, an HTML error page not_a_pdf.

Shared geo primitive

Bbox-driven sources (BRON verkeersongevallen, ruimtelijke plannen, BRP gewaspercelen) accept a gemeente name and resolve it to an RD (EPSG:28992) bbox through one shared implementation (src/utils/geo.ts), with a single extent validation and a consistent access_note when a name cannot be resolved.

Built-in resilience (zero-config)

No setup required — the following run automatically in-process:

  • Per-connector circuit breaker (auto-disables after repeated failures, probes for recovery). A source whose primary endpoint is expected to fail over gives its fallback its own connector name, so a degraded primary cannot lock out the path that still works (see Luchtmeetnet).

  • Per-connector concurrency limiter (default 3 in-flight, overflow queued with timeout)

  • In-process HTTP response cache with hardcoded TTL per source category

  • Per-connector health counters (exposed via /health/sources on SSE transport)

Graceful error handling

Typed errors:

  • timeout

  • http_error

  • rate_limited

  • malformed_response

  • not_configured

  • circuit_open

  • unexpected

This lets assistants respond meaningfully instead of failing hard.

Structured output & debug modes

  • outputFormat: json (default), csv, geojson, markdown_table

  • offset / limit: pagination with metadata

  • dryRun: shows planned API calls without executing them

  • verbose: adds request timings, fallback steps, and connector health snapshots

Available on nl_gov_ask and major individual tools: cbs_tables_search, cbs_observations, data_overheid_datasets_search, duo_datasets_search, tweede_kamer_documents, tweede_kamer_search, officiele_bekendmakingen_search, rijksoverheid_search, rijksbegroting_search, overheid_api_register_search.

CBS trend enrichment

  • cbs_observations injects lightweight trend fields when the result shape clearly supports it:

    • previous_period

    • previous_value

    • delta

    • delta_pct

  • This only activates when there is a single clear period dimension and one numeric measure, so it stays inert on ambiguous wide tables.

Smart routing + temporal parsing

  • nl_gov_ask routes by intent, and can run multi-source queries in parallel.

  • Natural date expressions in NL/EN are currently parsed in nl_gov_ask and mapped to source filters (vorige week, sinds 2020, between 2018 and 2022, etc.).

  • Temporal parsing is resolved server-side with a real reference timestamp, cross-platform via Node runtime APIs (Windows/macOS/Linux).

  • Default timezone: Europe/Amsterdam.

  • Override options for nl_gov_ask:

    • tool input: timezone

    • tool input: reference_now

    • environment: NL_GOV_TIMEZONE

    • config: config/default.jsontemporal.defaultTimeZone

Cross-reference linking

Post-processing adds related_links[] when records share key identifiers (e.g. ECLI, BWBR, municipality codes), and can enrich legal references with direct links to wetten.overheid.nl.

Quick start

Requires Node.js >= 22.

npm ci
npm run build
npm run dev                    # start stdio server (for Claude Desktop / Claude Code)
npm run dev:sse                # SSE/HTTP server on port 3333
npm run dev:streamable-http    # Streamable HTTP server on port 3333 (MCP spec 2025-03-26)

To verify your setup:

npm run check        # type-check without emitting
npm test             # unit tests
npm run test:questions  # integration test suite (offline fixtures)
npm run test:live    # integration test suite (live API calls)

Configuration

Transport modes

Three transport modes are supported. All expose the same 70 tools.

stdio (Claude Desktop, Claude Code)

npm run dev     # development
npm run start   # production

SSE/HTTP (Open WebUI, legacy MCP clients)

npm run dev:sse    # development
npm run start:sse  # production

Endpoint

Description

GET /mcp

SSE stream

POST /messages?sessionId=...

Message endpoint

GET /health

Server health check

GET /health/sources

Per-connector runtime health snapshot

Streamable HTTP (MCP spec 2025-03-26)

npm run dev:streamable-http    # development
npm run start:streamable-http  # production

Endpoint

Description

POST /mcp

Initialize session + send messages

GET /mcp

Open SSE stream for server-initiated messages

DELETE /mcp

Terminate session

GET /health

Server health check

GET /health/sources

Per-connector runtime health snapshot

Session management uses the mcp-session-id header.

Selecting transport via environment

Instead of CLI flags, you can set MCP_TRANSPORT:

MCP_TRANSPORT=sse node dist/src/index.js
MCP_TRANSPORT=streamable-http node dist/src/index.js

Docker

docker build -f docker/Dockerfile -t nl-gov-mcp .
docker run --rm -p 3333:3333 \
  -e KNMI_API_KEY=your-key \
  -e OVERHEID_API_KEY=your-key \
  -e BAG_API_KEY=your-key \
  -e DSO_API_KEY=your-key \
  nl-gov-mcp

Claude Desktop integration

Build the project, then add an entry to your Claude Desktop config.

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "nl-gov-mcp": {
      "command": "node",
      "args": ["/absolute/path/to/NL-GOV-MCP/dist/src/index.js"],
      "env": {
        "OVERHEID_API_KEY": "...",
        "KNMI_API_KEY": "...",
        "BAG_API_KEY": "...",
        "DSO_API_KEY": "...",
        "NL_GOV_TIMEZONE": "Europe/Amsterdam"
      }
    }
  }
}

Restart Claude Desktop after saving.

Environment variables

Variable

Default

Description

NL_GOV_HTTP_PORT

3333

HTTP port for SSE transport

NL_GOV_TIMEZONE

Europe/Amsterdam

Default timezone used by nl_gov_ask for natural date parsing

KNMI_API_KEY

Required for KNMI weather tools (get a free token)

OVERHEID_API_KEY

Required for API register tool (request a key)

BAG_API_KEY

Required for authoritative per-address detail via bag_address_detail (Kadaster Individuele Bevragingen REST). Without it the tool returns Locatieserver-only (data_kwaliteit: "lookup_only"). (request access)

DSO_API_KEY

Required for dso_omgevingsdocumenten_search (DSO Omgevingsdocumenten Presenteren API v8). Without it the tool returns not_configured. (request access)

NED_API_KEY

Required for ned_energie_search (Nationaal Energie Dashboard). Without it the tool returns not_configured. (request a free key)

EP_ONLINE_API_KEY

Required for ep_online_energielabel (RVO EP-Online energielabels). Without it the tool returns not_configured. (request access)

NS_API_KEY

Required for ns_reisinformatie (NS Reisinformatie API). Subscribe to the "Ns-App" product (free external tier ~300 req/5 min) — NOT the deprecated "Public-Travel-Information" product. Without it the tool returns not_configured. (get a free key)

DNB_API_KEY

Required for dnb_statistics_search (DNB Statistics API, gateway api.dnb.nl). Subscribe to the free "Public" product on the portal and generate the key (self-service). Without it the tool returns not_configured. (get a free key)

MCP_TRANSPORT

stdio

Transport mode: stdio, sse, or streamable-http (alternative to CLI flags)

LOG_LEVEL

info

Pino log level (debug, info, warn, error, silent)

Running behind a proxy

Node's built-in fetch — which every connector uses — ignores HTTP_PROXY / HTTPS_PROXY. On a network that only allows outbound traffic through a proxy, requests therefore go out directly and individual sources start failing with confusing statuses (403, 406, timeouts) while curl to the same URL from the same machine succeeds, because curl does honour those variables.

Start the server with Node's proxy support enabled:

NODE_USE_ENV_PROXY=1 HTTPS_PROXY=http://proxy.internal:3128 npm run start

Node ≥ 22 prints an "experimental" warning for this flag; it works. Symptom to recognise: some sources work and others do not, with no pattern in the code — that is an egress problem, not a connector problem.

Source-specific details

Tweede Kamer document retrieval

  • tweede_kamer_documents stays lean and returns search/discovery metadata.

  • tweede_kamer_document_get can optionally:

    • resolve the underlying resource URL / file metadata

    • include a capped text preview for text-like resources

    • extract the text layer of PDF resources (include_text: true), reported as text_preview_source: "pdf_text_layer" with resource_pages

  • nl_gov_ask may automatically deepen the top Tweede Kamer match when the user explicitly asks for content/summary rather than only discovery.

Rechtspraak details

rechtspraak_search_ecli mirrors the official frontend search backend (/api/zoek) instead of the legacy open-data feed.

Uses structured parameters instead of natural-language parsing:

  • sort: relevance (default), date_newest (publication date desc), ruling_newest (ruling date desc)

  • date_filter: week, month, year, last_year (maps to Rechtspraak facet filters)

The LLM interprets user intent and maps it to these parameters. A lightweight server-side query rewriter strips residual question framing as a safety net.

Responses include facet-driven context in access_note when filters are applied.

Tuchtrecht is a separate source. Disciplinary rulings against doctors, lawyers, notaries, accountants, vets and bailiffs are published on tuchtrecht.overheid.nl, not on Rechtspraak.nl. Use tuchtrecht_search for those; nl_gov_ask routes disciplinary questions there before it considers Rechtspraak.

TenderNed details

tenderned_aanbestedingen_search sends only parameters that are verified to filter server-side (search, typeOpdracht, procedure, publicatieDatumVanaf, publicatieDatumTot, page, size). The upstream silently ignores unknown parameters, so an unsupported filter would look applied while returning everything — hence the deliberately small parameter surface. Page size is capped at 100 by the API; use page for more.

DUO per-school data

duo_schools and duo_exam_results query the CKAN datastore (the rows), not the dataset catalogue:

  • duo_schools returns individual schools/institutions per sector (po, vo, mbo, ho) with address, BRIN/instellingscode, denomination and website. municipality, place and postcode filter exactly (case-insensitive input); name is a free-text search.

  • duo_exam_results returns pass rates and average exam marks per school location, filterable by year, municipality and education type, with sortByScore for "which school scores best". Coverage: school years 2013–2017 — the last per-location exam dataset DUO publishes machine-readably; a year outside that range returns 0 records with an explanation in access_note rather than a validation error.

Elections (Kiesraad)

verkiezingsuitslagen_search accepts an election code (TK20251029), an election kind (TK, gemeenteraad, Europees Parlement) or nothing at all (most recent election). gebied drills down to a province or municipality; unknown areas fall back to the national result with an explanatory access_note. Use list_elections: true for the available elections.

Documentation

See:

  • docs/ARCHITECTURE.md — technical internals, layer diagram, request lifecycle, resilience stack

  • docs/SOURCES.md — endpoint details per connector

  • docs/TOOLS.md — full tool catalog with behavior notes

  • docs/BACKLOG-SOURCES.md — planned integrations

Contributing

PRs are welcome — bug fixes, new source connectors, or improvements to existing ones.

See CONTRIBUTING.md for setup, workflow, and a step-by-step guide for adding a new source connector.

License

This project is licensed under the Apache License 2.0. See NOTICE for required attribution.

WAINUT and NL-GOV-MCP are trademarks of WAINUT B.V. The Apache License 2.0 does not grant permission to use these names, trademarks, or branding to imply endorsement of derivative works. Forks and derivative works must retain the NOTICE file as required by the license.


About WAINUT — WAINUT is your one-stop AI shop in the Netherlands. We help organizations adopt AI and build an AI-enabled workforce — from recruiting the right talent, to implementing the right tools, to training teams that actually use them.

Exploring AI for your organization? → wainut.ai — Unleash Your Potential.

Available Tools

64 tools
bag_address_detailA
Read-only

Resolve an address (PDOK Locatieserver id or free-text) and fetch authoritative BAG building/unit detail from the Kadaster Individuele Bevragingen REST API: oppervlakte_m2, bouwjaar, gebruiksdoelen, verblijfsobject-status, pand-status. Requires BAG_API_KEY for full detail; falls back to Locatieserver-only when missing. Use this instead of bag_linked_data_select when the linked-data SPARQL endpoint is down or when you already have an address id.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoFree-text address (e.g. 'Kelvinring 23a Alblasserdam'). Either `query` or `pdok_id` must be provided.
pdok_idNoPDOK Locatieserver id (e.g. 'adr-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx') as returned by bag_lookup_address. Preferred over `query` when known.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations provide readOnlyHint and openWorldHint; description adds authentication requirement (BAG_API_KEY) and fallback behavior (Locatieserver-only when missing), plus lists the specific data fields returned. 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?

Two sentences, no wasted words. First sentence states purpose with key details; second provides usage guidance. Front-loaded and efficient.

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

Completeness5/5

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

Given 2 parameters, 100% schema coverage, no output schema (but return fields listed), and annotations present, the description fully covers purpose, usage, fallback, and alternative. No gaps.

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

Parameters4/5

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

Schema already describes both parameters with 100% coverage. Description adds value by clarifying that either query or pdok_id must be provided and that pdok_id is preferred when known.

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 tool resolves an address and fetches authoritative BAG details, listing specific fields. It also distinguishes from sibling bag_linked_data_select by specifying when to use this tool instead.

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

Usage Guidelines4/5

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

Explicitly states when to use this tool (when linked-data SPARQL endpoint is down or when address id is known) and mentions fallback behavior. Does not explicitly state when not to use, but provides clear context.

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

bag_linked_data_selectA
Read-only

Execute a read-only SPARQL SELECT query on Kadaster BAG linked data (buildings and addresses). Only SELECT queries are allowed; LIMIT is capped.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint and openWorldHint. The description adds that the tool is read-only and enforces SELECT-only queries with a LIMIT cap, which aligns with and extends the annotations. No contradictions; the added detail on query restrictions is valuable.

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 conveys all key information without extraneous words. It is front-loaded with the main action and constraints, 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?

Given the tool has two parameters and no output schema, the description covers the essential purpose and constraints. However, it omits details on return format, error handling, and query construction conventions (e.g., required prefixes). For a SPARQL query tool, this information is important for proper usage, leaving the description somewhat incomplete.

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 0% as no parameter descriptions are provided in the schema. The description adds meaning by stating the 'query' parameter is a SPARQL SELECT query and the 'limit' parameter is capped. However, it does not explain the required query format (e.g., prefixes, endpoint specifics), so it provides moderate value beyond 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 clearly states it executes a read-only SPARQL SELECT query on Kadaster BAG linked data (buildings and addresses), and specifies that only SELECT queries are allowed with a capped LIMIT. This uniquely identifies the tool's function and distinguishes it from sibling tools like bag_address_detail or rce_linked_data_select.

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 explicitly states that only SELECT queries are allowed and LIMIT is capped, providing clear constraints. However, it does not explicitly compare to sibling tools or advise when to use this over alternatives like bag_lookup_address. The context is clear but lacks explicit exclusions.

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

bag_lookup_addressA
Read-only

Lookup BAG (Basisregistratie Adressen en Gebouwen) address details via PDOK Locatieserver. Search by free text, postcode, or house number.

ParametersJSON Schema
NameRequiredDescriptionDefault
rowsNo
queryNo
postcodeNo
huisnummerNo

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 openWorldHint=true, which cover safety and data volatility. The description adds that it uses PDOK Locatieserver, providing source transparency, but does not elaborate on other behavioral traits like pagination, result limits, or rate limits. Minor added value over 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?

Extremely concise: two sentences with no wasted words. First sentence states purpose and data source; second lists search types. Front-loaded with key information.

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?

Moderate completeness: given 4 parameters, no output schema, and annotations that cover readOnly/openWorld, the description provides core purpose but lacks details on default rows (10), minimum/maximum, required parameters (none), and return format. Without output schema, some indication of result structure would help. Annotations partially compensate.

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 4 parameters with 0% description coverage. The description mentions 'free text, postcode, or house number', which maps to query, postcode, and huisnummer parameters, adding meaning beyond bare schema. However, it omits the rows parameter (page size) and does not explain parameter constraints, so compensation is partial.

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?

Description clearly states the tool looks up BAG address details via PDOK Locatieserver, and lists specific search methods (free text, postcode, house number). This distinguishes it from sibling tools like bag_address_detail (specific ID lookup) and bag_linked_data_select (linked data).

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 exclusions, prerequisites, or comparison with bag_address_detail or other search tools. The description only states what it does, not when it's appropriate.

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

cbs_observationsB
Read-only

Fetch observations (data rows) from a CBS statistical table. Supports column selection and dimension filtering.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNo
limitNo
dryRunNo
offsetNo
selectNo
filtersNo
tableIdYes
verboseNo
outputFormatNojson

TDQS

B3.2/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so read-only behavior is covered. Description adds no additional behavioral context (e.g., pagination, rate limits, data volume warnings). Minimal added value 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.

Conciseness4/5

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

Extremely concise: one sentence and a phrase. No redundant words. However, brevity compromises informativeness; a bit more structure would be beneficial.

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?

Complex tool with 9 parameters, no output schema, and nested objects. Description omits crucial context: how to obtain tableId, pagination behavior, output format defaults, and limitations. Lacks completeness for effective agent 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 coverage is 0%, so description must compensate. Only mentions 'column selection' and 'dimension filtering' (implying select and filters parameters). Fails to explain other 7 parameters (top, limit, offset, dryRun, verbose, outputFormat, tableId). Insufficient for 9-parameter tool.

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?

Clearly states verb 'Fetch' and resource 'observations (data rows) from a CBS statistical table'. Distinct from siblings like cbs_table_info (metadata) and cbs_tables_search (table discovery). Specific verb+resource with implied scope.

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?

Implies use when needing data rows from CBS tables, but no explicit guidance on when to use alternatives or when not to use. Context is clear but lacks exclusion criteria.

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

cbs_table_infoA
Read-only

Get metadata and column definitions for a specific CBS statistical table by table ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
tableIdYes

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already indicate readOnlyHint=true and openWorldHint=true, covering safety and variability. The description adds no additional behavioral details (e.g., error handling, authentication needs, response size). With annotations, a score of 3 is appropriate as the description does not contradict or significantly enhance 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 unnecessary words. Every part earns its place, providing essential information 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 tool is simple with one parameter and no output schema. The description covers the basic purpose but lacks detail on what exactly 'metadata and column definitions' includes (e.g., output format, typical fields). It is minimally complete but could be more informative.

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. The description mentions 'by table ID' but does not explain what constitutes a valid table ID (format, examples). This adds minimal meaning beyond the schema's type '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 clearly states the tool retrieves metadata and column definitions for a specific CBS statistical table by table ID. The verb 'Get' and resource description are specific and distinct from sibling tools like cbs_tables_search (which lists tables) and cbs_observations (which retrieves observations).

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 a table ID is known, but does not explicitly state when to use this tool versus alternatives (e.g., when to use cbs_tables_search first to find the ID). No exclusions or prerequisites are provided.

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

data_overheid_dataset_getA
Read-only

Get full details for a specific dataset from data.overheid.nl by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already provide readOnlyHint and openWorldHint. The description adds no further behavioral context such as rate limits, response format, or dependencies. With annotations covering safety, this is adequate but not enhanced.

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 concise sentence with no unnecessary words. It efficiently communicates the core action 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?

The tool has one parameter and no output schema. The description is minimal but adequate for a simple retrieval. However, 'full details' is vague, and the lack of output schema leaves the agent uninformed about the structure of the result.

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% for the only parameter 'id'. The description says 'by ID' but does not specify format, source, or example. For a simple string parameter, minimal guidance is acceptable, but zero coverage leaves the agent without clarity on what constitutes a valid ID.

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 ('Get full details'), the resource ('a specific dataset'), and the source ('data.overheid.nl'), with a specific method ('by ID'). This distinguishes it from sibling tools like data_overheid_datasets_search which returns lists.

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 implies usage after obtaining an ID, but does not explicitly state when to use versus alternatives. For a simple retrieval tool, the context is clear enough, but lacks explicit when-not guidance.

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

data_overheid_organizationsA
Read-only

List all publishing organizations on data.overheid.nl.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint and openWorldHint, indicating safe read-only operation and possible partial results. The description adds no further behavioral details, which is acceptable 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 wasted words. 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.

Completeness4/5

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

The description is minimal but sufficient for a zero-parameter listing tool. It does not describe the return format, but with openWorldHint and no output schema, this is acceptable.

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

Parameters4/5

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

There are no parameters, so schema coverage is 100%. The description correctly avoids extraneous detail. Baseline for 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 the tool lists 'all publishing organizations' on a specific domain, using a specific verb and resource. It distinguishes from sibling tools like data_overheid_datasets_search and data_overheid_themes.

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 implies the tool is for getting a list of all organizations. No explicit when-not or alternative guidance, but the zero-parameter nature makes it self-explanatory as a basic listing tool.

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

data_overheid_themesA
Read-only

List all dataset themes/categories on data.overheid.nl.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint and openWorldHint. The description adds the claim of returning 'all' themes, which is a behavioral trait. However, no information about pagination, ordering, or exhaustiveness is provided. The description adds some value beyond annotations but is limited.

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 directly states the tool's purpose. No unnecessary words or information.

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 simplicity (no parameters, read-only, open world), the description is mostly complete. It covers the core purpose. However, since there is no output schema, the description could have provided a hint about the return format (e.g., list of strings or objects). Still, it is adequate for typical use.

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

Parameters4/5

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

There are zero parameters, so the description does not need to add parameter information. The baseline for 0 parameters is 4, and the schema coverage is 100% (empty schema). The description adds no parameter semantics, but none are needed.

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 clear resource ('all dataset themes/categories'). It uniquely identifies this tool's function among siblings (e.g., data_overheid_datasets_search, data_overheid_organizations), which are focused on searching datasets or retrieving organizations.

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 as a simple lookup for themes/categories, but it does not explicitly state when to use this tool versus alternatives (e.g., before searching datasets with a theme filter). No exclusions or prerequisites are mentioned.

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

duo_exam_resultsB
Read-only

Search DUO exam result data by year, school name, or municipality.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNo
yearNo
schoolNo
municipalityNo

TDQS

B3.2/5.0
Behavior2/5

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

Annotations already provide readOnlyHint and openWorldHint. The description adds no behavioral context beyond 'Search', which is consistent but offers no new information. 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 concise sentence with no wasted words. However, it could include more information (e.g., about 'top') without becoming verbose.

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 4 parameters (one undocumented), no output schema, and no explanation of return values or pagination. The description is too minimal to fully prepare an agent 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 coverage is 0%, so the description must explain parameters. It mentions year, school, and municipality but omits the 'top' parameter (number of results). This leaves important functionality undocumented.

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 tool searches 'DUO exam result data' and specifies three filter dimensions (year, school, municipality). This distinguishes it from sibling DUO tools like duo_schools (school info) or duo_datasets_search (generic datasets).

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 for querying exam results but provides no explicit guidance on when to use this tool versus alternatives (e.g., duo_schools for school data). No when-not or context clues are given.

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

duo_schoolsB
Read-only

Search DUO school data by name, municipality, or school type.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNo
nameNo
typeNo
municipalityNo

TDQS

B3.4/5.0
Behavior2/5

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

The description adds 'Search' which aligns with the readOnlyHint annotation, but beyond that it does not disclose any additional behavioral traits (e.g., pagination, result format, rate limits). The annotation already covers read-only and open-world intent, so the description contributes minimal additional 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?

A single sentence with no filler. Every word is informative, and the purpose is front-loaded. Ideal conciseness.

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 no output schema and four parameters (none required), the description lacks detail on return format, data variability, or field meanings (e.g., school type values). A search tool without output schema needs more context for effective use.

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 adds meaning for three of four parameters (name, municipality, type) but omits 'top'. This partially compensates for the schema gap, but incomplete parameter coverage limits the score.

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 tool searches DUO school data by three specific fields: name, municipality, or school type. It effectively distinguishes it from sibling tools, none of which target school data.

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 use for school data searches but does not specify when to prefer this tool over alternatives, nor does it provide any exclusion criteria or use-case constraints.

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

ep_online_energielabelA
Read-only

Look up the registered energy label (energielabel) for a Dutch address from EP-Online (RVO national register). Returns energy class, registration/validity dates, building type, BAG ids, and energy indicators. Query by postcode+huisnummer or by BAG verblijfsobject id. Requires EP_ONLINE_API_KEY.

ParametersJSON Schema
NameRequiredDescriptionDefault
rowsNo
bagIdNoBAG verblijfsobject-id. Gebruikt het AdresseerbaarObject-endpoint i.p.v. adreszoekopdracht.
postcodeNoPostcode zoals '3511LX' (spaties worden verwijderd). Vereist samen met huisnummer, tenzij bagId is opgegeven.
huisletterNoOptionele huisletter, bijv. 'A'.
huisnummerNoHuisnummer. Vereist samen met postcode, tenzij bagId is opgegeven.
detailaanduidingNoOptionele detailaanduiding.
huisnummertoevoegingNoOptionele huisnummertoevoeging.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations indicate readOnlyHint=true and openWorldHint=true, which the description aligns with by stating it is a lookup operation. The description adds useful behavioral context: it lists the specific data returned (energy class, dates, building type, BAG ids, energy indicators) and mentions the API key requirement. 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 extremely concise, consisting of two sentences that are front-loaded with the tool's purpose and return values. Every sentence provides essential information without redundancy or fluff.

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 complexity (7 parameters, no output schema), the description covers the key aspects: purpose, return data, query methods, and API key requirement. It does not detail all possible response fields, but the listed categories are sufficient for an agent to understand what to expect. The lack of an output schema is somewhat mitigated by the clear description.

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 input schema has 86% description coverage, which is high. The description gives an overview of query methods but does not add significant detail beyond the schema's parameter descriptions. For example, it notes that postcode requires huisnummer unless bagId is given, which is already present in the schema. Therefore, the description adds marginal value over the schema.

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

Purpose5/5

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

The description clearly states the tool's purpose: looking up registered energy labels for Dutch addresses from EP-Online. It specifies what is returned (energy class, dates, building type, BAG ids, energy indicators) and the two query methods (postcode+huisnummer or BAG id). This distinguishes it from sibling tools that focus on other Dutch address or government data.

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 guidance on when to use the tool (to retrieve energy label information) and how to query (by postcode+huisnummer or BAG id). It also notes the required API key. However, it does not explicitly state when not to use it or suggest alternatives among the many sibling tools, though the specificity of the tool makes this less critical.

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

eurostat_dataset_previewA
Read-only

Fetch preview observations from a Eurostat dataset by dataset code. Optionally filter by dimension values.

ParametersJSON Schema
NameRequiredDescriptionDefault
rowsNo
datasetYes
filtersNo

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 openWorldHint=true, so the description need not restate these. The description adds that it fetches a 'preview', suggesting a limited sample, but does not elaborate on the behavior (e.g., that it returns a subset, or how the preview is generated). The 'rows' parameter with max 200 is in the schema but not mentioned in 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?

The description is a single sentence that conveys the core functionality and optional filtering. Every word is necessary, and there is no redundancy or fluff. It is appropriately concise for a straightforward 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 is too brief for a tool that returns data with no output schema. It does not describe the return format, what constitutes a 'preview', or how the results are structured. Given the complexity of nested 'filters' and the lack of output schema, more information is needed for an agent to use it effectively.

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. It explains 'dataset' (dataset code) and 'filters' (dimension values) but omits the 'rows' parameter entirely. Thus, it adds partial but incomplete semantic value beyond the schema.

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

Purpose5/5

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

The description clearly states the action ('Fetch preview observations'), the resource (Eurostat dataset), and the identifier (dataset code). It also distinguishes the tool from its sibling 'eurostat_datasets_search' which is for searching datasets, not fetching previews. The optional filtering by dimension values is explicitly mentioned.

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 a dataset code is known and a preview is needed, but it does not provide explicit guidance on when to use this tool versus alternatives, nor does it mention prerequisites (e.g., having a dataset code from a search). No exclusions or when-not-to-use context is given.

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

knmi_datasetsA
Read-only

List all available KNMI weather datasets. Requires KNMI_API_KEY.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

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

Annotations declare readOnlyHint and openWorldHint; the description adds the requirement for an API key but does not explain the return format, pagination, or how the list connects to other tools.

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 extraneous information, front-loading the action 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?

While the tool is simple, the lack of output schema and any description of the return format leaves ambiguity about what information the agent will receive to use subsequent tools.

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

Parameters4/5

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

With zero parameters and 100% schema coverage (empty schema), the description adds no parameter detail, which is acceptable per the baseline for 0 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 verb 'List' and the resource 'available KNMI weather datasets', distinguishing it from sibling tools like knmi_latest_observations and knmi_warnings.

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 that this tool is a starting point to discover datasets, but does not explicitly state when to use it versus alternatives like knmi_search_datasets or how it relates to other KNMI tools.

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

knmi_earthquakesB
Read-only

Get recent earthquake data from KNMI. Requires KNMI_API_KEY.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNo

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 openWorldHint=true. The description adds the API key requirement, which is useful for behavioral understanding, but does not disclose other traits like 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, front-loaded with purpose. Efficient but lacks parameter details; still earns a 4 for conciseness without excessive 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?

For a tool with one parameter and no output schema, the description should include parameter semantics and usage context. It fails to do so, leaving the agent underinformed.

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 single parameter 'top' has no description in either the input schema (0% coverage) or the tool description. Its meaning and purpose are entirely unclear, forcing the agent to guess.

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 tool gets recent earthquake data from KNMI, with a specific verb ('get') and resource ('recent earthquake data'). It is distinct from sibling tools like 'knmi_latest_observations' which focus on weather data.

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 vs alternatives. Only mentions a prerequisite (requires API key) but does not specify context or alternatives.

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

knmi_latest_filesB
Read-only

Get latest data files from a specific KNMI dataset. Requires KNMI_API_KEY.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNo
datasetNameYes
datasetVersionNoDataset version. When omitted, it is auto-resolved from the KNMI dataset catalog (e.g. Actuele10mindataKNMIstations -> version 2); falls back to '1' for unknown datasets.

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 openWorldHint: true, establishing the tool as a safe read operation. The description adds the requirement for an API key, which is behavioral context beyond the annotations. However, no other behavioral traits (rate limits, data freshness, error handling) are disclosed.

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 short sentences, each serving a purpose: stating the function and noting the API key requirement. It is concise with no redundant information, though it could be slightly more informative without losing 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?

The tool has no output schema, so the description should hint at return structure or format, but it does not. With 3 parameters and only one required, the description omits context about how the datasetName relates to KNMI datasets or what 'latest' implies. This leaves the agent with incomplete information for effective 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 coverage is only 33% (only datasetVersion has a description). The description does not explain the 'top' or 'datasetName' parameters, nor their meaning or usage. With low schema coverage, the description should provide additional parameter context but fails to do so.

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 'Get latest data files from a specific KNMI dataset', which specifies verb and resource. It distinguishes from sibling tools like knmi_latest_observations and knmi_search_datasets by focusing on 'data files' rather than observations or dataset metadata.

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 only mentions 'Requires KNMI_API_KEY' as a prerequisite but provides no guidance on when to use this tool versus alternatives. There is no indication of when to use knmi_latest_files over knmi_datasets or knmi_latest_observations.

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

knmi_latest_observationsB
Read-only

Get the latest KNMI weather observation files. Requires KNMI_API_KEY.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNo

TDQS

B3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint and openWorldHint. Description adds the API key requirement, which is useful authentication context. No other behavioral traits (rate limits, output format) are mentioned, but basic safety is covered by 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?

Two short sentences, no wasted words. First sentence states purpose, second adds a necessary prerequisite. Front-loaded and efficient.

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?

Tool is simple but lacks output schema. Description doesn't explain what the observation files contain, their format, or how to handle the response. For a tool with many siblings and no output schema, more context is needed for correct use.

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% with no parameter descriptions. Description does not explain the 'top' parameter's meaning (e.g., number of observations to return). It should compensate for the missing schema descriptions but fails to 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?

Description clearly states verb 'Get' and resource 'latest KNMI weather observation files', distinguishing from siblings like knmi_earthquakes or knmi_warnings. However, it doesn't explicitly differentiate from knmi_latest_files, which could also be for files. Sibling differentiation is vague.

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 vs alternatives like knmi_datasets or knmi_search_datasets. Lacks any when-to-use or when-not-to-use context.

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

knmi_search_datasetsB
Read-only

Search KNMI weather datasets by keyword. Requires KNMI_API_KEY.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo

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 openWorldHint=true, so safety is clear. Description adds the authentication requirement (API key), which is useful. No other behavioral details (rate limits, error handling) are mentioned.

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 wasted words. Front-loaded: first sentence states purpose, second adds prerequisite. Efficient and clear.

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 no output schema and many sibling tools, the description does not explain what the search returns (e.g., list of dataset IDs, metadata). Lacks context for integrating results with other tools like knmi_datasets or knmi_latest_files.

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?

Single parameter 'query' has 0% schema description coverage. Description says 'by keyword' which provides basic semantics but lacks format constraints, allowed values, or examples. The description partially compensates but is insufficient.

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?

Clear verb 'Search' and resource 'KNMI weather datasets'. Distinguishes from sibling tools like knmi_datasets (which likely lists all datasets) and knmi_earthquakes by specifying keyword-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 Guidelines2/5

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

States requirement for KNMI_API_KEY but provides no guidance on when to use this tool versus alternatives (e.g., knmi_datasets or knmi_latest_observations). No when-not-to-use or context for selection.

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

knmi_warningsC
Read-only

Get current KNMI weather warnings for the Netherlands. Requires KNMI_API_KEY.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNo

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true. The description adds only the API key requirement, which is a prerequisite, not behavioral context. No additional traits such as rate limits or error handling are disclosed.

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 concise (two sentences) and front-loaded with the key purpose. However, it omits parameter semantics, which would add valuable information without much bloat.

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 tool with one optional parameter and clear annotations, the description covers the basic purpose and a requirement. However, it lacks parameter explanation and usage guidance, leaving gaps for an AI agent.

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 defines a single parameter 'top' with default and bounds, but the description provides no explanation of its meaning or purpose. With 0% schema description coverage, the agent is left to guess that 'top' limits the number of warnings.

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 ('Get'), the resource ('current KNMI weather warnings'), and the scope ('for the Netherlands'). It is specific and distinguishes from sibling tools, such as knmi_earthquakes or knmi_latest_observations.

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 prerequisite ('Requires KNMI_API_KEY') but provides no context on when to use this tool versus alternatives like knmi_datasets or knmi_latest_observations. No guidance on 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.

luchtmeetnet_latestB
Read-only

Fetch latest air quality measurements from Luchtmeetnet. Optionally filter by component (e.g. NO2, PM10, PM2.5, O3).

ParametersJSON Schema
NameRequiredDescriptionDefault
rowsNo
componentNo

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already provide readOnlyHint and openWorldHint, so the safety profile is clear. The description adds minimal extra detail beyond the basic fetch operation, not contradicting 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?

Very concise two sentences, front-loaded with verb and resource. Every word serves a purpose with no unnecessary detail.

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?

Adequate for a simple fetch tool, but lacks output format description. With no output schema, the agent cannot infer the return structure, leaving a 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%, so description must compensate. It gives examples for component (e.g., NO2, PM10) but provides no explanation for rows parameter, leaving it under-documented.

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 fetches latest air quality measurements from Luchtmeetnet, with optional filtering by component. It is distinct from the diverse sibling tools, though 'latest' could be more specific.

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 or when not to use it. The description only mentions optional filtering, lacking explicit context for selection.

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

nl_gov_askB
Read-only

Smart router that interprets a natural-language question about Dutch government data and queries the most relevant source(s). Supports temporal expressions in Dutch and English (e.g. 'vorige week', 'since 2020'). Use this when the best source is unclear.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNo
limitNo
dryRunNo
offsetNo
verboseNo
questionYes
timezoneNo
outputFormatNojson
reference_nowNo

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already provide readOnlyHint and openWorldHint. Description adds context about language support and routing behavior but does not disclose rate limits, error handling, or details on source selection. It does not contradict 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?

Two concise sentences that front-load the purpose. No wasted words, but could be slightly more structured (e.g., list key features).

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 high parameter count and many sibling tools, the description is too sparse. It does not explain output format, how parameters affect routing, or handling edge cases. Lacks guidance for effective use.

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%. Description only mentions temporal expressions but does not explain the 9 parameters (top, limit, dryRun, etc.) which are left completely undocumented. This is a major gap for a tool with many 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 it is a smart router for natural-language questions about Dutch government data, and it queries the most relevant source(s). This differentiates it from sibling tools that target specific data sources.

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

Usage Guidelines4/5

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

Explicitly says 'Use this when the best source is unclear', providing clear guidance. Also mentions support for temporal expressions in Dutch and English, but does not give a comprehensive list of when not to use it or alternatives.

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

ns_reisinformatieB
Read-only

Query NS (Dutch Railways) Reisinformatie API for live train info. operation=disruptions (verstoringen/werkzaamheden, v3), departures (vertrektijden per station, v2), arrivals (aankomsttijden, v2), trips (reisadvies from/to station, v3). Realtime; requires NS_API_KEY.

ParametersJSON Schema
NameRequiredDescriptionDefault
rowsNo
stationNoStationcode (bijv. 'UT' Utrecht, 'ASD' Amsterdam CS, 'RTD' Rotterdam). Vereist voor departures/arrivals.
dateTimeNoOptioneel ISO-8601 tijdstip, bijv. '2026-07-03T08:00:00+02:00'. Default = nu.
isActiveNodisruptions: alleen actieve verstoringen tonen (default true).
operationNoWelke NS-operatie: verstoringen, vertrektijden, aankomsttijden of reisadvies.disruptions
toStationNoAankomststation (code) — vereist voor operation 'trips'.
fromStationNoVertrekstation (code) — vereist voor operation 'trips'.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true. The description adds that the tool requires an API key and is realtime. These are useful but still leave out potential behaviors such as rate limits, data freshness, or error handling. The description does not contradict 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 a single sentence that packs essential information: purpose, operations, API versions, realtime nature, and authentication requirement. It is front-loaded and concise, though adding bullet points might improve readability for the many operations.

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 4 operations and no output schema. The description only says 'live train info' without describing the return format or what data each operation provides. For a tool with multiple operations, this is insufficient guidance on what the output will contain. More details on response structure or examples would aid completeness.

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 86%, so many parameters are already documented. The description adds value by clarifying the operation enum with Dutch translations and version numbers (v2/v3), and implies parameter requirements for different operations (e.g., 'trips' needs fromStation and toStation). This goes beyond the raw 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 it queries the NS Reisinformatie API for live train info, listing specific operations (disruptions, departures, arrivals, trips) with API versions. It is specific about the resource and verb. However, it does not explicitly differentiate from the sibling tool 'ovapi_departures' which also provides public transport departures.

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 mentions that the tool requires an API key and provides realtime data, giving basic context. However, it does not elaborate on when to use each operation or contrast with alternatives like 'ovapi_departures'. No explicit when-to-use or when-not-to-use guidelines are provided.

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

officiele_bekendmakingen_record_getA
Read-only

Get a specific official publication (bekendmaking) by its identifier.

ParametersJSON Schema
NameRequiredDescriptionDefault
identifierYes

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 openWorldHint=true. The description is consistent but adds no additional behavioral context beyond confirming it's a read operation.

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?

Single sentence with no unnecessary words, front-loading the key action and resource.

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 get-by-identifier tool, the description covers the core purpose. It lacks details on error handling or output, but the open world hint and simplicity make it 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?

With 0% schema description coverage, the description only says 'by its identifier' which adds minimal context. The parameter name 'identifier' is self-descriptive, but no format or examples are provided.

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 (Get), resource (specific official publication), and method (by its identifier). It distinguishes itself from sibling 'officiele_bekendmakingen_search' which handles searching.

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 implies usage when you have a specific identifier, and search is for when you don't. However, it does not explicitly state when not to use or mention alternatives.

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

ovapi_departuresA
Read-only

Realtime public transport departures for a Dutch stop (halte). Requires a timingpointcode (haltecode). Returns line, destination, planned + expected departure time, delay minutes and live trip status. Tram/bus/metro/ferry.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNo
lineNoOptional filter on public line number, e.g. '2' or '6'.
limitNo
dryRunNo
offsetNo
verboseNo
outputFormatNojson
timingPointCodeYesHalte timingpointcode (REQUIRED). Example: '32002646'. Look it up via 9292 or the OVapi/GTFS index (https://gtfs.ovapi.nl/nl/). Do NOT pass a stop name.

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already set readOnlyHint=true (safe read) and openWorldHint=true (data may change). The description adds that it returns realtime departures and lists fields, but does not disclose any side effects, rate limits, or data freshness details. The behavioral traits are adequately covered by annotations with moderate added 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 two sentences, front-loaded with the purpose and input requirement, then output fields. Every sentence adds value without waste. It is concise and well-structured.

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 8 parameters (1 required) and no output schema, the description is incomplete. It only explains the required parameter (timingPointCode) and lists return fields but fails to document pagination (top, limit, offset), dryRun, verbose, or outputFormat. The output structure is not fully described, leaving gaps for an agent to invoke 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 low (25%), with only timingPointCode and line having descriptions. The description adds meaning for timingPointCode (required, example, lookup instructions) but ignores other parameters like top, limit, dryRun, offset, verbose, outputFormat. The schema provides defaults but no descriptions, so the description fails to compensate for the low coverage.

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

Purpose5/5

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

The description clearly states the tool provides realtime public transport departures for a Dutch stop, listing the required input (timingpointcode) and the output fields (line, destination, times, delay, status). It differentiates from siblings like ns_reisinformatie by covering tram/bus/metro/ferry and specifying the source (OVapi).

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 explicitly states the requirement for a timingpointcode, provides an example (32002646), and tells the user where to look it up (9292 or OVapi/GTFS index). It warns not to pass a stop name. However, it does not mention when to avoid this tool or alternatives for other transport modes.

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

rce_linked_data_selectA
Read-only

Execute a read-only SPARQL SELECT query on RCE cultural heritage linked data. Only SELECT queries are allowed; LIMIT is capped.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint. The description adds value by explicitly stating that only SELECT queries are permitted and that LIMIT is capped, which are behavioral constraints not fully covered by 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 extremely concise with two sentences that are front-loaded, containing no wasted words. Every sentence adds essential information.

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 complexity of a SPARQL query tool and the absence of an output schema, the description is adequate but lacks details about the return format (e.g., SPARQL JSON results). This gap may hinder an agent from correctly parsing the response.

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%, so the description must compensate. It only vaguely mentions 'SPARQL SELECT query' and 'LIMIT is capped', leaving the 'query' parameter unexplained in terms of format, syntax, or expected values. This is insufficient for an agent to correctly formulate a query.

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 tool executes a read-only SPARQL SELECT query on RCE cultural heritage linked data, specifying allowed query type and constraint (LIMIT capped). This distinguishes it from the sibling 'bag_linked_data_select' tool, which targets a different dataset.

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 for querying RCE linked data and notes that only SELECT queries are allowed, but it does not explicitly provide when-to-use or when-not-to-use guidance compared to alternatives like bag_linked_data_select or other search tools.

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

rechtspraak_search_ecliA
Read-only

Search Dutch case law (Rechtspraak) for ECLI references. IMPORTANT: Pass only topic keywords in 'query', not full sentences. Use 'sort' and 'date_filter' parameters to control recency and time period — do NOT encode these in the query string.

ParametersJSON Schema
NameRequiredDescriptionDefault
rowsNo
sortNoUse 'date_newest' when user asks for recent/latest/newest results (sorted by publication date). Use 'ruling_newest' to sort by ruling date. Use 'relevance' for general searches.relevance
queryYes1-3 core legal topic keywords ONLY. Extract the subject from the user's question. Examples: 'waterschade', 'huurrecht ontbinding', 'arbeidsrecht ontslag'. NEVER include question words, verbs, articles, or full sentences. This API is extremely sensitive to extra words.
date_filterNoOptional publication date filter. Use 'week' for past 7 days, 'month' for past month, 'year' for this year, 'last_year' for previous year. Only set when user explicitly mentions a time period.

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already indicate readOnlyHint and openWorldHint. Description adds behavioral context about query sensitivity and parameter usage, but does not significantly expand beyond what annotations provide.

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?

Extremely concise with two clear sentences. No redundant information; every sentence adds value.

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 search tool with well-described schema and no output schema, the description provides key usage context. It covers how to use parameters effectively, fulfilling completeness for this complexity level.

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?

Adds meaning beyond schema by emphasizing keyword-only queries and instructing not to embed sort/date_filter in query. Schema covers 75%, description reinforces and adds critical usage 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 clearly states the tool searches Dutch case law for ECLI references, using specific verbs and resource. It distinguishes from sibling search tools by focusing on ECLI.

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?

Explicit instructions on how to use the 'query' parameter (keywords only) and to avoid encoding sort/date_filter in query. Lacks explicit differentiation from sibling tools but provides clear usage context.

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

rijksbegroting_chapterA
Read-only

Get a specific chapter from the Dutch national budget (Rijksbegroting) by year and chapter code.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYes
chapterYes

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already indicate read-only and open-world behavior. The description adds no further behavioral context beyond what annotations provide.

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?

Single sentence clearly conveying purpose and required inputs. 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?

For a simple two-parameter retrieval tool, the description covers the basics. However, it omits details like expected chapter code format and output structure, which would help completeness.

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 description must elaborate on parameters. It only mentions 'year and chapter code' without specifying format, constraints, or examples.

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?

Clearly states the tool retrieves a specific chapter by year and chapter code, and distinguishes itself from the sibling 'rijksbegroting_search' which is presumably for searching.

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?

No explicit guidance on when to use this tool versus alternatives like 'rijksbegroting_search'. Usage is implied but not clarified.

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

rijksoverheid_schoolholidaysA
Read-only

Get Dutch school holiday dates. Optionally filter by year and region (noord, midden, zuid).

ParametersJSON Schema
NameRequiredDescriptionDefault
yearNo
regionNo

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already indicate readOnlyHint=true and openWorldHint=true. The description adds that it returns school holiday dates but does not elaborate on response format or limits. The annotation coverage reduces the burden, 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, front-loaded sentence that states the action and optional parameters with zero wasted words. It earns its place efficiently.

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 tool with two optional parameters and no output schema, the description covers the essential purpose and parameters. It could mention the expected output format, but given the openWorldHint, the minimalism is acceptable.

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 meaning for the region parameter with examples (noord, midden, zuid) and states that year and region are optional. However, it could provide more detail about valid region values or year range beyond the schema's min/max.

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 tool retrieves Dutch school holiday dates, with optional filtering by year and region. This specific verb and resource distinguish it from sibling tools that search other Dutch government datasets.

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 explicitly mentions optional filters for year and region, with region values listed as examples. While it does not provide when-not-to-use guidance, the context is clear enough for an AI agent to decide.

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

rijkswaterstaat_waterdata_measurementsA
Read-only

Get latest real-time water measurements (water levels, waves, flow, temperature) from Rijkswaterstaat stations. Returns actual measured values with timestamps.

ParametersJSON Schema
NameRequiredDescriptionDefault
rowsNo
queryYesWater measurement query with optional location. Examples: 'waterstand Maas', 'golfhoogte Noordzee', 'debiet Rijn', 'waterstand Lobith', 'temperatuur IJsselmeer'. Combine a measurement type with an optional location name.

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already mark the tool as read-only (readOnlyHint=true) and openWorldHint=true, so the description adds value by specifying it returns actual measured values with timestamps, indicating real-time freshness. 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 two sentences, front-loaded with key information, and no unnecessary words. Every sentence adds value.

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 no output schema, the description only vaguely states 'Returns actual measured values with timestamps.' It does not describe the return structure (e.g., station, unit, fields), which is insufficient for an agent to parse the response correctly.

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

Parameters3/5

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

The query parameter has a detailed description with examples, but the rows parameter (integer with defaults) is not mentioned in the description. Schema coverage is 50%, so the description partially compensates but leaves rows 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 clearly states the tool retrieves real-time water measurements (water levels, waves, flow, temperature) from Rijkswaterstaat stations, specifying the verb 'Get' and the resource. It differentiates from sibling tools like 'rijkswaterstaat_waterdata_search' by emphasizing real-time measured values with timestamps, but does not explicitly contrast them.

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 for retrieving latest real-time measurements but does not explicitly state when to use this tool versus alternatives. No when-not or alternative tool guidance is provided.

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

tweede_kamer_document_getA
Read-only

Get full details of a specific Tweede Kamer document by ID. Can optionally resolve resource URLs and include text previews.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
max_charsNo
include_textNo
resolve_resourceNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, indicating a safe read operation. The description adds behavioral context about optional resolution of resource URLs and inclusion of text previews, which is valuable 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 consists of two clear, front-loaded sentences with no unnecessary words. Every sentence adds value, making it concise and well-structured.

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?

With 4 parameters and no output schema, the description is somewhat incomplete. It mentions optional features but does not describe the return format, error conditions, or what 'full details' entails. Annotations help but leave 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 0%, so description must compensate. It explains 'resolve resource URLs' and 'include text previews' (for two parameters), and 'by ID' for the required parameter. However, 'max_chars' is not mentioned, leaving a gap. Overall, it adds meaning for most but not all 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 uses the specific verb 'Get' and identifies the resource as 'full details of a specific Tweede Kamer document by ID'. This clearly distinguishes it from sibling tools like 'tweede_kamer_documents' (listing) or 'tweede_kamer_search' (searching).

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 a user has a specific document ID, but it does not explicitly state when not to use it or provide alternatives. For example, it could mention using 'tweede_kamer_search' when the ID is unknown.

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

tweede_kamer_documentsA
Read-only

Search Dutch Parliament (Tweede Kamer) documents. Use policy topic keywords. Optionally filter by document type and date range.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNo
typeNo
limitNo
queryYesPolicy topic keywords. Examples: 'stikstof', 'woningbouw', 'defensie budget', 'klimaat'. Do NOT pass full questions.
dryRunNo
offsetNo
date_toNo
verboseNo
date_fromNo
outputFormatNojson

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already indicate read-only and open-world behavior. The description adds that it searches documents and filters, but does not disclose pagination, ordering, or other traits beyond what annotations provide.

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 two concise sentences, front-loaded with the main action, and every sentence adds value without fluff.

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 covers the basic search action but lacks details on pagination, output format, and differentiation from similarly named siblings. Given 10 parameters and no output schema, it is not fully complete for complex usage.

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 description adds meaning to the 'query' parameter (policy keywords) and mentions filters for type and date range, but does not explain the other 7 parameters (top, limit, offset, outputFormat, verbose, dryRun, etc.), especially with schema coverage at only 10%.

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

Purpose4/5

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

The description clearly states it searches Dutch Parliament documents with policy keywords and optional filters. However, it does not differentiate from the sibling 'tweede_kamer_search', which appears to have the same name.

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 suggests using policy topic keywords and optionally filtering, but gives no guidance on when to use this tool versus alternatives like 'tweede_kamer_search' or 'tweede_kamer_document_get'.

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

tweede_kamer_membersB
Read-only

List current or former Tweede Kamer members. Optionally filter by parliamentary group (fractie).

ParametersJSON Schema
NameRequiredDescriptionDefault
topNo
activeNo
fractieNo

TDQS

B3.2/5.0
Behavior2/5

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

Annotations already indicate readOnlyHint=true and openWorldHint=true. The description adds no behavioral details beyond the basic listing action, such as limitations like the top parameter default or that active defaults to true.

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 is front-loaded with the main action, but it could be slightly more informative without becoming verbose.

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 three parameters and no output schema, the description is incomplete. It omits default behavior for 'active' and the limit imposed by 'top', which are essential for an agent to 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?

The description explains only the 'fractie' parameter as a filter for parliamentary group, but does not mention the 'top' or 'active' parameters despite their importance. Schema coverage is 0%.

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') and the resource ('current or former Tweede Kamer members'), and distinguishes it from sibling tools like documents or votes.

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 for listing members and mentions optional filtering by fractie, but does not provide explicit when-to-use or when-not-to-use guidance relative to other tools.

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

tweede_kamer_votesA
Read-only

Retrieve voting records from the Tweede Kamer. Filter by case ID (zaak_id) or date.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNo
dateNo
zaak_idNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint, so description need not repeat. It adds value by specifying filter parameters. No contradictions.

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, highly concise and front-loaded with the core action. No wasted words.

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

Completeness4/5

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

For a simple read-only tool with 3 parameters and no output schema, the description provides essential information. Could mention the 'top' parameter for completeness.

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?

Description explains 'zaak_id' as case ID and 'date' as filter, but omits the 'top' parameter. With 0% schema coverage, this is a 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?

Description clearly states 'Retrieve voting records' which is a specific verb and resource, distinguishing it from sibling tools like 'tweede_kamer_documents' or 'tweede_kamer_members'.

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?

Description indicates filtering by case ID or date, providing clear context for use. However, it does not explicitly state when not to use or mention alternatives.

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. Dates show when Glama detected each change.

  1. 64 tool updatesv0.1.0
    • First observedbag_address_detail
    • First observedbag_linked_data_select
    • First observedbag_lookup_address
    • First observedbestuurlijke_gebieden_search
    • First observedbrk_kadastrale_kaart_search
    • First observedbro_ondergrond_search
    • First observedbron_ongevallen_search
    • First observedcbs_iv3_search
    • First observedcbs_observations
    • First observedcbs_table_info
    • First observedcbs_tables_search
    • First observedcvdr_search
    • First observeddata_europa_datasets_search
    • First observeddata_overheid_dataset_get
    • First observeddata_overheid_datasets_search
    • First observeddata_overheid_organizations
    • First observeddata_overheid_themes
    • First observeddata_politie_search
    • First observeddnb_statistics_search
    • First observeddso_omgevingsdocumenten_search
    • First observedduo_datasets_search
    • First observedduo_exam_results
    • First observedduo_rio_search
    • First observedduo_schools
    • First observedep_online_energielabel
    • First observedeurostat_dataset_preview
    • First observedeurostat_datasets_search
    • First observedknmi_datasets
    • First observedknmi_earthquakes
    • First observedknmi_latest_files
    • First observedknmi_latest_observations
    • First observedknmi_search_datasets
    • First observedknmi_warnings
    • First observedluchtmeetnet_latest
    • First observedndw_search
    • First observedned_energie_search
    • First observedngr_discovery_search
    • First observednl_gov_ask
    • First observedns_reisinformatie
    • First observednza_zorgbeeld_search
    • First observedofficiele_bekendmakingen_record_get
    • First observedofficiele_bekendmakingen_search
    • First observedori_search
    • First observedovapi_departures
    • First observedoverheid_api_register_search
    • First observedoverheidsorganisaties_search
    • First observedpdok_search
    • First observedrce_linked_data_select
    • First observedrdw_open_data_search
    • First observedrechtspraak_search_ecli
    • First observedrijksbegroting_chapter
    • First observedrijksbegroting_search
    • First observedrijksoverheid_schoolholidays
    • First observedrijksoverheid_search
    • First observedrijkswaterstaat_waterdata_measurements
    • First observedrijkswaterstaat_waterdata_search
    • First observedrivm_discovery_search
    • First observedruimtelijke_plannen_search
    • First observedtweede_kamer_document_get
    • First observedtweede_kamer_documents
    • First observedtweede_kamer_members
    • First observedtweede_kamer_search
    • First observedtweede_kamer_votes
    • First observedwetten_bwb_search

TDQS

A3.6/5.0
Disambiguation4/5

Most tools are clearly distinguished by their source prefix and action verb, e.g., bag_address_detail vs. bag_linked_data_select. However, some overlap exists between generic search tools (e.g., cbs_tables_search, cbs_observations) and the smart router nl_gov_ask, which could cause confusion for an agent.

Naming Consistency5/5

All tools follow a consistent pattern: source prefix (e.g., bag_, cbs_, duo_) followed by a descriptive verb_noun. This makes it easy to predict tool names and understand their domain.

Tool Count3/5

With 64 tools, the server covers an extremely broad range of Dutch government data sources. While each tool serves a specific purpose, the sheer number may be cumbersome for an agent to navigate, suggesting a potential need for modularization.

Completeness4/5

The tool set covers major domains (addresses, statistics, cadastre, legislation, etc.) with read operations. However, some sources only offer discovery without full text retrieval (e.g., dso_omgevingsdocumenten_search, ruimtelijke_plannen_search), leaving gaps for detailed data access.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    An unofficial MCP server providing access to Dutch government open data from data.overheid.nl, CBS statistics, and KVK business registry. Enables natural language queries for discovering datasets, inspecting metadata, and querying data without API keys or authentication.
    14
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to query live schema, lineage, and query-context across data warehouses, dbt projects, orchestration systems, and BI tools via MCP tools.
    Apache 2.0
  • A
    license
    A
    quality
    F
    maintenance
    Enables querying over 3,200 Dutch statutes (AVG, Wetboek van Strafrecht, Burgerlijk Wetboek, etc.) with verbatim, citation-grounded text from official sources, directly from MCP-compatible AI assistants.
    18
    88
    12
    Apache 2.0

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/WAINUTAI/NL-GOV-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server