Skip to main content
Glama

🇨🇭 Part of the Swiss Public Data MCP Portfolio

📡 bakom-mcp

Version License: MIT Python 3.11+ MCP Auth CI

MCP server for BAKOM open data – broadband, mobile coverage, media and Swiss telecom statistics.

🇩🇪 Deutsche Version


Overview

bakom-mcp connects AI assistants like Claude to the Swiss Federal Office of Communications (BAKOM) open data infrastructure. It enables natural-language queries about broadband availability, 5G/4G coverage, mobile antenna locations, BAKOM datasets on radio and television, and telecommunications statistics — all without API keys.

All data is published as Open Government Data (OGD) on opendata.swiss / geo.admin.ch under CC BY 4.0 — see the Data Licence section below for attribution requirements.

Anchor demo query: "Which school buildings in district 7 do not yet have fibre optic connectivity?"

bakom_multi_standort_konnektivitaet delivers the comparison table automatically.

→ More use cases by audience →


Related MCP server: srgssr-mcp

Scope

What this server does

✓ Read-only queries against three public BAKOM/Confederation APIs:

  • api3.geo.admin.ch / wms.geo.admin.ch (broadband, mobile coverage, antennas)

  • ckan.opendata.swiss (telecom statistics, dataset metadata)

✓ Returns aggregated, anonymous data — no personal data, no household-level identification.

✓ Bound to Swiss WGS84 coordinates (lat 45.8–47.9, lon 5.9–10.6) via Pydantic input validation.

✓ Egress is locked to a code-layer allow-list of the six known data-source hosts.

What this server does not

✗ Send data anywhere (read-only, no write tools).

✗ Access the local filesystem (no path-traversal surface).

✗ Use authentication tokens (none required — all sources are public OGD).

✗ Cache or persist user inputs across calls.

✗ Execute shell commands or arbitrary code (no subprocess/os.system/eval).


Features

  • 📶 Broadband availability – Fixed-line coverage at 30/100/300/500/1000 Mbit/s (250×250m grid)

  • 🔌 Fibre status – FTTB/FTTH availability per location

  • 📍 Multi-location comparison – Connectivity check for up to 20 locations simultaneously

  • 📱 Mobile coverage – 5G/4G/3G outdoor coverage (100×100m grid)

  • 📡 Antenna search – Mobile and broadcast transmitters within a configurable radius

  • 📺 Radio & TV datasets – Full-text search across BAKOM's radio and television datasets on opendata.swiss

  • 🗞️ Media landscape – BAKOM media structure reports and datasets

  • 📊 Telecom statistics – Fixed-line, mobile, broadband market data via opendata.swiss

  • 🗂️ Broadband Atlas catalogue – All BAKOM dataset layers with direct API links

  • 🔓 No authentication required – All data is Open Government Data (OGD)


Prerequisites

  • Python 3.11+

  • uv or pip for installation

  • Internet connection (live APIs: geo.admin.ch, opendata.swiss)


Installation

# Recommended: uvx (no permanent installation required)
uvx bakom-mcp

# Or install with pip
pip install bakom-mcp

# Development install
git clone https://github.com/malkreide/bakom-mcp
cd bakom-mcp
pip install -e ".[dev]"

Quickstart

Claude Desktop

Add to claude_desktop_config.json:

{
  "mcpServers": {
    "bakom": {
      "command": "uvx",
      "args": ["bakom-mcp"]
    }
  }
}

Config file locations:

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

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

Cloud / HTTP Transport

python -m bakom_mcp.server --http
# Server running at http://localhost:8050/mcp

Configuration via environment variables (see .env.example):

Variable

Default

Purpose

BAKOM_MCP_HOST

127.0.0.1

Bind address. Set to 0.0.0.0 only on trusted networks (warning logged).

BAKOM_MCP_PORT

8050

TCP port.

BAKOM_MCP_CORS_ORIGINS

(empty)

Comma-separated allowed origins for browser clients. Empty = CORS disabled.

Docker

A hardened container image is provided. Suitable for cloud deployments behind a reverse proxy (Caddy, Traefik, nginx).

# Build & run via compose (recommended)
docker compose up --build

# Or via docker run
docker build -t bakom-mcp:latest .
docker run --rm \
  --read-only \
  --cap-drop=ALL \
  --security-opt=no-new-privileges \
  --tmpfs /tmp:rw,size=16M \
  -p 127.0.0.1:8050:8050 \
  bakom-mcp:latest

The image runs as non-root (UID 10001), uses a read-only filesystem, drops all Linux capabilities and refuses privilege escalation. Resource limits are configured in docker-compose.yml (256 MB memory, 0.5 CPU, 64 PIDs). The default port mapping binds to 127.0.0.1 only — for public exposure, terminate TLS and CORS at a reverse proxy.

Cursor / VS Code / LibreChat

{
  "bakom": {
    "command": "uvx",
    "args": ["bakom-mcp"],
    "transport": "stdio"
  }
}

💡 "stdio for the developer laptop, HTTP/SSE for the browser."


Available Tools (12)

Broadband & Connectivity

Tool

Description

bakom_broadband_coverage

Fixed-line coverage at a coordinate (30–1000 Mbit/s)

bakom_glasfaser_verfuegbarkeit

FTTB/FTTH fibre availability

bakom_multi_standort_konnektivitaet

Connectivity comparison for up to 20 locations

Mobile & Transmitters

Tool

Description

bakom_mobilfunk_abdeckung

5G/4G/3G outdoor coverage

bakom_sendeanlagen_suche

Mobile antennas within a configurable radius

bakom_frequenzdaten

Radio/TV transmitter sites near a location

Media & RTV

Tool

Description

bakom_rtv_suche

Search BAKOM radio/TV datasets on opendata.swiss

bakom_medienstruktur_info

Swiss media landscape datasets

bakom_aktuell

Recently updated BAKOM datasets on a topic (catalogue, not press releases)

bakom_medien_statistik

Market shares, reach and programme structure from the BAKOM cubes on LINDAS

Statistics & Catalogue

Tool

Description

bakom_telekomstatistik_uebersicht

Telecom statistics from opendata.swiss

bakom_breitbandatlas_datensaetze

Full catalogue of Broadband Atlas layers

bakom_check_api_status

🔍 Health check for all configured data sources


Example Prompts

What is the broadband situation at Schulhaus Leutschenbach (47.4148, 8.5654)?

Compare 5G and fibre coverage for these three school buildings: [coordinates]

Which radio stations are licensed in canton Zurich?

Show me the current BAKOM position on 5G frequency allocation.

List all Broadband Atlas datasets available via geo.admin.ch.

Safety & Limits

Aspect

Details

Access

Read-only (readOnlyHint: true) — the server cannot modify or delete any data

Personal data

No personal data — all sources are aggregated, public open data

Rate limits

Built-in per-query caps (max 50 antennas, max 20 locations, max 50 RTV results)

Timeout

20 seconds per API call

Authentication

No API keys required — all 3 APIs are publicly accessible

Licences

All data under CC0 / open licences (Open Government Data)

Terms of Service

Subject to ToS of the respective data sources: geo.admin.ch, opendata.swiss


Data Sources

Source

Data

Authentication

geo.admin.ch

Broadband Atlas, mobile coverage, antenna locations

None

opendata.swiss

BAKOM datasets, telecom statistics

None

lindas.admin.ch

BAKOM media statistics cubes (SPARQL)

None

All data is published under open licences (CC0 / OGD).

Architecture decision — media statistics

bakom_medien_statistik uses Architecture A (live API only), verified live on 2026-08-13:

  • The SPARQL endpoint is https://lindas.admin.ch/query; the /sparql path documented elsewhere returns 404.

  • The OFCOM cubes live in the named graph https://lindas.admin.ch/ofcom/cube. Without an explicit FROM, a query hits the default graph and sees 2010 cubes from every federal office instead of 540.

  • A bulk download exists for only 137 of 540 cubes, so a dump-first architecture would cover a quarter of the data.

  • An unknown graph answers HTTP 200 with zero rows — a silent empty, not an error. Requests carry retry with exponential backoff; egress-policy violations are not retried.

Scope, stated in the tool description because the README does not reach the model: the cubes cover the programmes that were surveyed, not the full inventory. LINDAS's own count cube reports 199+39+17 radio programmes for 2020, while the Programm dimension across all cubes exposes 128 labels — some of which are the same station spelled differently (Energy BE / Energy Bern), plus Durchschnitt, which is an aggregate rather than a station. This tool is a statistics source, not a broadcaster register; licensed broadcasters are listed in the RTV database, which offers no machine-readable interface.


Synergies with the MCP Portfolio

bakom-mcp can be combined with other servers in the portfolio for multi-dimensional queries:

zurich-opendata-mcp  →  school building addresses
         +
    bakom-mcp         →  fibre and 5G status
         =
"Digital equity" dashboard for all school districts

Further combinations:

  • srgssr-mcp + bakom-mcp → Media coverage and broadcast network

  • swiss-statistics-mcp + bakom-mcp → Telecom market development

  • fedlex-mcp + bakom-mcp → Regulatory context (RTVG, FMG)


Project Structure

bakom-mcp/
├── src/bakom_mcp/
│   ├── __init__.py          # Package
│   ├── server.py            # MCP server (12 tools, 2 resources)
│   └── py.typed             # PEP 561 type marker
├── tests/
│   └── test_integration.py  # Integration tests (live APIs)
├── assets/
│   └── demo.svg             # Demo flow diagram
├── .github/workflows/
│   ├── ci.yml               # CI: lint, syntax, import, tests
│   └── publish.yml          # PyPI publish on release
├── .gitignore
├── pyproject.toml           # Build config (hatchling)
├── CHANGELOG.md
├── CONTRIBUTING.md          # Contribution guide (English)
├── CONTRIBUTING.de.md       # Contribution guide (German)
├── SECURITY.md              # Security policy (English)
├── SECURITY.de.md           # Security policy (German)
├── LICENSE                  # MIT License
├── README.md                # This file (English)
└── README.de.md             # German version

MCP Protocol Version

This server speaks two protocol eras over the same endpoint. The client's first request on a connection decides which one applies; a later claim from the other era is refused.

Era

Revision

Who reaches it

initialize handshake

2024-11-052025-11-25

What today's clients speak. The server answers with the revision asked for, or with the 2025-11-25 ceiling when the request asks for something newer.

Per-request envelope

2026-07-28

A request carrying the 2026-07-28 _meta envelope opens a modern connection.

Both revisions are pinned in tests/test_protocol_version.py and asserted against the installed SDK, so a Dependabot bump of mcp cannot move either one silently. The handshake ceiling is measured against a live initialize through the assembled ASGI stack, not read off a constant name.

Note that the SDK's LATEST_PROTOCOL_VERSION is an alias for the modern era, not for the handshake era — pinning against it alone would leave the era that current clients actually negotiate free to drift.

Update policy. When the gate fails, do not edit the constant blindly: read the spec changelog between the two revisions, verify the server still behaves, then move the constant, this section, README.de.md and CHANGELOG.md together.


Testing

# Unit tests (no network required)
PYTHONPATH=src pytest tests/ -m "not live"

# Integration tests (live APIs, internet required)
PYTHONPATH=src pytest tests/ -m "live"

Changelog

See CHANGELOG.md


Contributing

Contributions are welcome! See CONTRIBUTING.md (🇩🇪 Deutsch) for guidelines on reporting bugs, suggesting features, and submitting pull requests.


Security

To report a vulnerability, see the Security Policy (🇩🇪 Deutsch). Please report security issues privately via GitHub Security Advisories rather than public issues.


Software Licence

MIT License — see LICENSE.

Data Licence

The BAKOM open data delivered through this server is published under CC BY 4.0. When using or redistributing tool outputs, attribute the source as:

Source: Federal Office of Communications (BAKOM) via opendata.swiss / geo.admin.ch · Licence: CC BY 4.0

Tool outputs already include this footer automatically. The Markdown response format ends with the attribution line; downstream applications that consume the JSON format should propagate the source/licence metadata to their end users.


Author

Hayal Oezkan · github.com/malkreide



Part of the Swiss Open Data MCP portfolio — public data deserves public interfaces.

Installation

Run via uv's uvx — no clone or manual install needed. Add to your MCP client config (mcpServers for Claude Desktop, Cursor and Windsurf; use a top-level servers key for VS Code in .vscode/mcp.json):

{
  "mcpServers": {
    "bakom-mcp": {
      "command": "uvx",
      "args": [
        "bakom-mcp"
      ]
    }
  }
}

Available Tools

12 tools
bakom_aktuellA
Read-only

Zuletzt aktualisierte BAKOM-Datensätze auf opendata.swiss zu einem Thema.

Sortiert nach metadata_modified absteigend — zeigt also, woran das BAKOM zuletzt gearbeitet hat, gemessen an seinen Datensätzen.

Keine Medienmitteilungen. Das BAKOM veröffentlicht News auf https://www.bakom.admin.ch/de; dieser Server fragt sie nicht ab, weil dafür keine maschinenlesbare Schnittstelle bekannt ist. Wer nach der aktuellen Nachrichtenlage gefragt wird, verweist dorthin, statt sie aus Datensatz-Titeln abzuleiten.

thema geht als Suchwort in die Volltextsuche des Katalogs. Der Katalog hat keine Themen-Facette; ein unbekanntes Thema liefert deshalb keine Ersatztreffer zu einem anderen Thema, sondern eine leere Liste mit Hinweis.

Weil nach Datum sortiert wird, stehen oben die neuesten Treffer, nicht die passendsten — ein Treffer kann das Suchwort nur am Rand berühren.

Args: params (TelekomStatInput): Thema und Ausgabeformat.

Returns: str: Datensätze mit Titel, Änderungsdatum und Link.

Schema: { "thema": str, "datensaetze": [{"titel": str, "aktualisiert": str, "url": str}], "total": int, "sortierung": str, "datenquelle": str, "hinweis": str | None }

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds substantial behavioral context: sorting by metadata_modified descending, no news fetching (with reason), full-text search limitations (no topic facet, unknown topics return empty list with hint), and the implication that results are date-ordered not relevance-ordered. This goes well beyond the annotation hints.

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

Conciseness5/5

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

The description is efficiently structured: a clear one-sentence purpose, followed by important caveats in bullet points. Every sentence adds value (e.g., sorting behavior, no news, search limitations, relevance warning). It is front-loaded with the main purpose and uses appropriate German terminology without 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 simplicity (1 parameter with nested sub-params) and the presence of annotations and an explicit output schema, the description covers the key behavioral aspects: data source, sorting, search behavior, empty results handling, and the exclusion of news. It does not explain the output schema structure in words (but the embedded Schema block suffices). Minor gap: no mention of the openWorldHint annotation's implications, but overall quite complete.

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

Parameters3/5

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

Schema description coverage is 0% for the top-level 'params' parameter, though nested fields have rich descriptions. The description adds meaningful context for 'thema' (explaining it's a full-text search without topic facet, and that unknown topics return empty results). It does not describe 'response_format' beyond what the schema already provides. Overall, the description partially compensates for the top-level coverage gap.

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

Purpose5/5

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

The description clearly states 'Zuletzt aktualisierte BAKOM-Datensätze auf opendata.swiss zu einem Thema', providing a specific verb (abfragen von aktualisierten Datensätzen) and resource (BAKOM-Datensätze auf opendata.swiss). It distinguishes itself from sibling tools like bakom_broadband_coverage or bakom_medien_statistik by focusing on recently updated datasets across any topic, not a specific domain.

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 explains when to use this tool (to see what BAKOM recently worked on) and explicitly states what not to expect: 'Keine Medienmitteilungen.' It warns about the sorting by date reducing relevance ('ein Treffer kann das Suchwort nur am Rand berühren') and advises where to find news instead. However, it does not directly compare with sibling tools or specify conditions that would make this tool preferable over others.

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

bakom_breitbandatlas_datensaetzeA
Read-onlyIdempotent

Alle verfügbaren BAKOM Breitbandatlas-Datensätze auf opendata.swiss auflisten.

Gibt eine vollständige Übersicht aller Datensätze des BAKOM-Breitbandatlas zurück – Festnetz, Mobilfunk, Glasfaser, verschiedene Geschwindigkeitsstufen. Nützlich für Datenauswahl vor dem Download oder der API-Abfrage.

Args: params (TelekomStatInput): Thema (z.B. 'breitband') + Format.

Returns: str: Katalog der Breitbandatlas-Datensätze mit Layer-IDs.

Schema: { "datensaetze": [ {"titel": str, "layer_id": str, "url": str, "kategorie": str} ] }

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds value by specifying that the response is a catalog with titel, layer_id, url, and kategorie fields, and that the tool returns a full overview of datasets covering fixed network, mobile, fiber, and speed levels.

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 well-structured with a clear one-line summary, a brief elaboration, a documented Args/Returns/Schema section, and all sentences add value without redundancy. Appropriate length for the tool's complexity.

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

Completeness5/5

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

Given the tool has a low parameter count (1), comprehensive parameter description, clear annotations, and an output schema, the description fully covers the tool's usage, behavior, and output structure—leaving no gaps for a typical agent.

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

Parameters4/5

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

Schema description coverage is 0%, but the description details the parameter (Thema and Format) and gives specific search examples for Thema such as 'medien', '5g', 'festnetz', etc., adding significant practical guidance beyond the schema's minimal description.

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 available BAKOM Breitbandatlas datasets from opendata.swiss. It explicitly mentions the resource (datasets), the action (list), and differentiates from siblings by focusing on the catalog overview rather than specific coverage or search.

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

Usage Guidelines4/5

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

The description explains the tool is useful for data selection before download or API query, providing clear context for use. However, it does not explicitly state when not to use this tool or name specific sibling alternatives.

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

bakom_broadband_coverageA
Read-onlyIdempotent

Breitbandversorgung (Festnetz) für einen Standort in der Schweiz abfragen.

Zeigt, ob ein Gebäude am angegebenen Standort mit einer bestimmten Downloadgeschwindigkeit versorgt wird. Nutzt den BAKOM Breitbandatlas via geo.admin.ch API (Rasterauflösung: 250×250 Meter).

Args: params (BroadbandCoverageInput): Eingabeparameter mit: - latitude (float): Breitengrad WGS84 (45.8–47.9) - longitude (float): Längengrad WGS84 (5.9–10.6) - min_speed_mbps (str): Mindestgeschwindigkeit ('30','100','300','500','1000') - response_format (str): 'markdown' oder 'json'

Returns: str: Breitbandverfügbarkeit mit Abdeckungsprozentsatz und verfügbaren Technologien (DSL, Kabel, Glasfaser).

Schema: { "standort": {"lat": float, "lon": float}, "geschwindigkeit_mbps": int, "abdeckung_prozent": float, "glasfaser_verfuegbar": bool, "technologien": list[str], "datenquelle": str }

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already provide readOnlyHint=true and idempotentHint=true. The description adds valuable behavioral context: uses geo.admin.ch API with 250×250m raster, returns coverage percentage and technologies, and includes the output schema. 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 concise and well-structured: purpose sentence, API source, parameter list, and return schema. Front-loaded with the core action. Slight redundancy in Args section but overall efficient.

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

Completeness4/5

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

Given the tool's moderate complexity (4 parameters, nested input) and presence of output schema, the description explains geographical bounds, speed options, technologies, and data source. Lacks error handling or example usage but is sufficiently complete for a straightforward query tool.

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 provides comprehensive descriptions for all parameters, including ranges and enum values. The description's Args section repeats this info, adding little extra beyond what the schema already offers. Baseline 3 is appropriate given high schema 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 queries fixed-network broadband coverage for a location in Switzerland, using specific verb 'abfragen' and resource 'Breitbandversorgung'. It distinguishes from siblings like mobilfunk_abdeckung (mobile) and glasfaser_verfuegbarkeit (glass fiber) by specifying 'Festnetz' and the BAKOM source.

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool vs alternatives. Sibling tools exist for mobile coverage and glass fiber, but the description does not mention exclusions or comparative context. Implied usage only from the tool name and subject.

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

bakom_frequenzdatenB
Read-onlyIdempotent

UKW-Radio- und TV-Sendeanlagen für einen Standort abfragen.

Zeigt Radio- und Fernsehsendeanlagen in der Nähe mit Frequenz- und Betreiberinformationen. Nutzt den BAKOM-Layer ch.bakom.radio-fernsehsender via geo.admin.ch.

Args: params (CoordinateInput): Standortkoordinaten WGS84 + Format.

Returns: str: Sendeanlagen mit Frequenz, Typ und Betreiber.

Schema: { "standort": {"lat": float, "lon": float}, "sender": [ { "typ": str, "frequenz": str | None, "betreiber": str | None, "programm": str | None } ], "total": int }

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare the tool as read-only, idempotent, and non-destructive. The description adds context about using the BAKOM layer via geo.admin.ch, which is useful for understanding data source, but does not disclose other behavioral traits like rate limits or data freshness. 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 well-structured, starting with a clear purpose, followed by data source, then clearly labeled Args and Returns sections, and an inline output schema. It is slightly verbose with some redundancy (e.g., 'Zeigt...' similar to first sentence), but overall efficient and front-loaded with key 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?

For a read-only query tool with good annotations and an output schema, the description provides sufficient context: what it returns (frequencies, type, operator), the input (coordinates + format), and data source. It does not cover edge cases or empty results, but with the output schema and annotations, the agent has enough to use the tool correctly.

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

Parameters3/5

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

The input schema provides detailed descriptions for latitude, longitude, and response_format, including examples and bounds. The description only mentions 'Standortkoordinaten WGS84 + Format' at a high level. Since schema_description_coverage is effectively high (the schema gives rich parameter info), the baseline is 3, and the description does not add significant value beyond that.

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 queries UKW radio and TV transmission sites for a specific location, using a specific verb ('abfragen') and resource ('Sendeanlagen'). It distinguishes itself by focusing on location-based frequency data, but does not explicitly differentiate from sibling tools like bakom_sendeanlagen_suche or bakom_rtv_suche.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. The description only states what the tool does without any when-to-use, when-not-to-use, or prerequisite information, leaving the agent to infer usage context from the tool name and siblings.

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

bakom_glasfaser_verfuegbarkeitA
Read-onlyIdempotent

Glasfaserverfügbarkeit (FTTB/FTTH) für einen Schweizer Standort prüfen.

Zeigt, ob Glasfaseranschluss bis zum Gebäude (FTTB) oder in die Wohnung/das Büro (FTTH) verfügbar ist. Nutzt BAKOM Breitbandatlas via geo.admin.ch (Rasterauflösung: 250×250 Meter).

Args: params (CoordinateInput): Standortkoordinaten WGS84 + Ausgabeformat.

Returns: str: Glasfaserverfügbarkeit mit Technologiedetails.

Schema: { "standort": {"lat": float, "lon": float}, "fttb_verfuegbar": bool | None, "ftth_verfuegbar": bool | None, "anbieter_anzahl": int | None, "datenquelle": str }

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true. The description adds valuable behavioral context (data source: BAKOM Breitbandatlas via geo.admin.ch with 250×250m resolution), enhancing transparency beyond annotations.

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

Conciseness5/5

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

The description is concise: two sentences plus a schema block. It is well-structured, front-loads the purpose, and every element adds value without redundancy.

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

Completeness4/5

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

For a simple query tool, the description covers key aspects: data source, resolution, output schema (provided in description), and technology details. It lacks explicit handling of missing data but the output schema indicates nullable fields, so it's adequate.

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

Parameters3/5

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

The input schema already provides descriptions for latitude, longitude, and response_format. The description restates 'Standortkoordinaten WGS84 + Ausgabeformat' without adding new meaning. Given that schema description coverage is reported as 0% (likely a metric limitation), but actual schema descriptions are present, a score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool checks Glasfaserverfügbarkeit (FTTB/FTTH) for a Swiss location, using specific technology terms and distinguishing it from siblings like bakom_mobilfunk_abdeckung or bakom_broadband_coverage.

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 specifies the tool's purpose and context (Swiss location, BAKOM data), providing clear usage guidance. It does not explicitly mention when not to use it or alternatives, but the context is sufficient.

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

bakom_medien_statistikA
Read-onlyIdempotent

Zahlen zum Schweizer Radio- und Fernsehmarkt aus den BAKOM-Cubes auf LINDAS.

Liefert Beobachtungen aus den Statistik-Cubes des BAKOM: Marktanteile, Reichweiten, Programm- und Themenstruktur, Ertragsstruktur — je nach Cube aufgeschluesselt nach Jahr, Programm, Sendergruppe, Sprachregion oder Konzessionierungsart.

thema ohne Wert listet alle verfuegbaren Auswertungen auf. Das ist der erste Aufruf, wenn unklar ist, welche Zahl es ueberhaupt gibt.

Drei Eigenheiten der Quelle, die das Ergebnis praegen:

  • Die Cubes decken die untersuchten Programme ab, nicht den Bestand. Ein Sender, der hier fehlt, existiert deswegen nicht weniger.

  • Durchschnitt ist ein Aggregat und kein Sender.

  • Derselbe Sender kann je nach Erhebung anders geschrieben sein ('Energy BE' und 'Energy Bern').

Args: params (MedienStatistikInput): Thema, Jahr, Limit, Format.

Returns: str: Beobachtungen mit Dimensionen und Messwert.

Schema: { "auswertung": str, "beobachtungen": [{"": str | float}], "total": int, "datenquelle": str, "provenance": "live_api", "hinweis": str | None }

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructiveHint, so the description doesn't need to restate these. The description adds valuable behavioral context about data source limitations (only examined programs, aggregate vs. sender, naming variations), which annotations don't cover. It doesn't discuss rate limits or detailed authorization, but for this stateless query tool the provided context is sufficient.

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 well-structured: a clear purpose statement, usage guidance, key behavioral quirks listed concisely, and a summary of input/output schema. Every sentence adds value, with no redundancy or filler. The format is front-loaded with the most critical information (what the tool does) followed by usage tips.

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

Completeness5/5

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

Given the tool's complexity (multiple cubes, dimensions, and data sources), the description is remarkably complete. It covers purpose, usage workflow, data caveats, parameter roles, and provides a full output schema. The sibling context and annotations further support correct selection and invocation. There are no obvious gaps in understanding what the tool does or how to use it.

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

Parameters5/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, and it does thoroughly. It explains that `thema` without value lists all available evaluations and describes the matching behavior (substring match on titles). It also mentions year and limit parameters with context, and the output schema is provided, so return value semantics are clear. The description adds meaning well beyond the bare 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 provides Swiss radio and TV market statistics from BAKOM cubes on LINDAS, listing specific data types like market shares, reach, and program structure. It distinguishes itself from siblings by its unique focus on media statistics, while sibling names (e.g., bakom_mobilfunk_abdeckung, bakom_sendeanlagen_suche) suggest they cover different domains.

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

Usage Guidelines5/5

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

The description explicitly advises starting without `thema` to list available evaluations when unsure, providing a clear workflow. It also notes three data quirks (covered vs. actual programs, 'Durchschnitt' as aggregate, naming inconsistencies), helping the agent avoid common misinterpretations and use the tool correctly.

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

bakom_medienstruktur_infoA
Read-onlyIdempotent

Informationen zur Schweizer Medienlandschaft aus BAKOM-Berichten.

Gibt strukturierte Informationen zu Mediensektoren (Radio, TV, Online, Print) basierend auf BAKOM-Medienstrukturberichten und opendata.swiss- Metadaten zurück. Ideal für Medienbildung und strategische Analysen.

Args: params (TelekomStatInput): Thema ('radio', 'tv', 'online', 'print', 'medien') + Ausgabeformat.

Returns: str: Strukturinformationen zur Schweizer Medienlandschaft.

Schema: { "thema": str, "datensaetze": [ {"titel": str, "beschreibung": str, "url": str, "aktualisiert": str} ], "weiterführende_links": list[str] }

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already convey readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety and idempotency are clear. The description adds that the tool returns structured data from reports and metadata but does not disclose further behavioral traits like response limits or authentication. The added value is minor, earning a 3.

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

Conciseness3/5

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

The description is structured with a docstring including Args, Returns, and a Schema example, but it is somewhat verbose. The schema example partly duplicates information already in the input schema and output description. It could be more concise to improve readability, giving a score of 3.

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 covers the tool's purpose, usage context, parameter guidance (though slightly off), and includes an output schema example. For a tool with one nested parameter, good annotations, and an output schema implied, the description is largely complete. Minor improvements could align parameter guidance more closely with the schema, earning a 4.

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's Args section lists specific thema values ('radio', 'tv', 'online', 'print', 'medien'), which adds some meaning beyond the top-level param lacking description. However, the actual nested schema is more detailed (default 'breitband', many valid search terms), and the description's list is oversimplified and slightly inconsistent. With 0% top-level schema coverage, the description partially compensates but with some inaccuracy, scoring 3.

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 returns structured information about the Swiss media landscape based on BAKOM reports and opendata.swiss metadata, specifically listing media sectors (Radio, TV, Online, Print). This verb+resource combination is specific and distinct from siblings like broadband or mobile coverage tools, earning a 5.

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

Usage Guidelines3/5

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

The description mentions the tool is 'ideal for media education and strategic analyses', which implies a usage context but does not specify when not to use it or compare with alternatives such as 'bakom_medien_statistik'. No exclusions or alternative tool references are provided, so the guidance is only implicitly stated, scoring 3.

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

bakom_mobilfunk_abdeckungA
Read-onlyIdempotent

Mobilfunkabdeckung (5G/4G/3G) für einen Schweizer Standort abfragen.

Zeigt, wie viele Anbieter den angegebenen Standort mit der gewählten Mobilfunkgeneration versorgen (Aussenbereich/Outdoor). Rastergrösse: 100×100 Meter.

Args: params (MobileCoverageInput): Koordinaten WGS84, Generation, Format.

Returns: str: Mobilfunkabdeckung mit Anbieteranzahl.

Schema: { "standort": {"lat": float, "lon": float}, "generation": str, "anbieter_anzahl": int | None, "abgedeckt": bool, "datenquelle": str }

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations indicate readOnly, idempotent, openWorld. The description adds behavioral details: resolution (100x100m), outdoor-only coverage, and that it returns provider count. 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.

Conciseness4/5

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

The description is well-structured with sections and front-loaded purpose, but includes an inline schema that could be omitted for brevity. Still, every sentence adds value.

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

Completeness5/5

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

Given the output schema is present, the description adequately explains return values and coverage details. It covers all necessary context for a read-only query tool.

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 summarizes parameters as 'coordinates WGS84, generation, format' but adds little beyond the input schema, which already provides detailed descriptions for each field (latitude, longitude, generation, response_format). Schema coverage is high, so baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool's purpose: query mobile network coverage (5G/4G/3G) for a Swiss location and show how many providers cover it outdoors. It distinguishes itself from sibling tools like bakom_broadband_coverage or bakom_frequenzdaten.

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. The sibling tools are listed but there is no contrast or explicit conditions for selection.

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

bakom_multi_standort_konnektivitaetA
Read-onlyIdempotent

Breitband- und Mobilfunkversorgung für mehrere Standorte gleichzeitig vergleichen.

Ideal für Schulhausvergleiche, Standortentscheide oder Digitale-Chancengleichheit-Analysen im Schulamt-/Stadtverwaltungskontext. Pro Standort werden 5G-Abdeckung und Glasfaserstatus abgefragt.

Args: params (MultiLocationInput): Liste von Standorten (max. 20) mit 'name', 'latitude', 'longitude' + Ausgabeformat.

Returns: str: Vergleichstabelle mit Konnektivitätsstatus pro Standort.

Schema: { "standorte": [ { "name": str, "lat": float, "lon": float, "5g_abdeckung": bool | None, "glasfaser_fttb": bool | None, "fehler": str | None } ], "zusammenfassung": { "total": int, "mit_5g": int, "mit_glasfaser": int } }

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, so the tool's safety profile is clear. The description adds behavioral context: it queries 5G and glass fiber status per location, returns a comparison table, and limits to 20 locations. This goes beyond the annotations. However, it does not mention error handling or data freshness, which would improve 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 well-structured: a clear first sentence for purpose, then use cases, followed by structured 'Args' and 'Returns' sections with an output schema. Every sentence adds value without redundancy. It is appropriately sized for the tool's complexity.

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 complexity of comparing multiple locations and the presence of an output schema in the description, the tool is fairly complete. It covers what it does, how many locations, what data it returns, and use cases. It could mention error handling or data freshness, but overall it provides sufficient context for an agent to invoke it correctly.

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

Parameters4/5

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

The input schema has only one parameter with 0% description coverage per the given context, so the description carries the burden. It explains the substructure of 'locations' (name, latitude, longitude) and mentions the optional response_format. This adds meaning beyond the schema's minimal descriptions. However, the schema's location items have 'additionalProperties: true', and the description's fields (lat, lon) align with the example in the schema description, adding clarity.

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 compares broadband and mobile coverage for multiple locations simultaneously ('Breitband- und Mobilfunkversorgung für mehrere Standorte gleichzeitig vergleichen'). This distinguishes it from sibling tools like bakom_mobilfunk_abdeckung (single location) and bakom_broadband_coverage (single location). The use cases further reinforce the multi-location comparison purpose.

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

Usage Guidelines4/5

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

The description provides explicit use cases (Schulhausvergleiche, Standortentscheide, Digitale-Chancengleichheit-Analysen) which guide when to use this multi-location tool. However, it does not explicitly state when not to use it or name alternative tools for single-location queries, which would strengthen guidance. The context from sibling tools implies single-location alternatives, but a clear reference would be better.

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

bakom_rtv_sucheA
Read-onlyIdempotent

BAKOM-Datensätze zu Radio und Fernsehen auf opendata.swiss durchsuchen.

Liefert Datensätze aus dem Katalog des BAKOM, nicht einzelne Sender. Wer Angaben zu einer konkreten konzessionierten Veranstalterin braucht, findet sie in der RTV-Datenbank des BAKOM (https://rtvdb.ofcomnet.ch/de); die ist eine Web-Oberfläche ohne maschinenlesbare Schnittstelle und wird von diesem Server nicht abgefragt.

media_type und kanton gehen als Suchwörter in die Volltextsuche ein und gewichten die Treffer — sie filtern nicht exakt. Der Katalog kennt für beides keine Facette.

Args: params (RTVSearchInput): Suchbegriff, Medientyp, Kanton, Limit, Format.

Returns: str: Liste von BAKOM-Datensätzen zu Radio und Fernsehen.

Schema: { "resultate": [ { "name": str, "typ": str, "beschreibung": str, "url": str } ], "total": int }

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, and non-destructive behavior. The description adds significant behavioral context: it clarifies that the search is full-text based, not faceted, that the catalog has no facets for media_type and kanton, and that it returns datasets from the catalog, not individual stations. It also mentions output format options. The 'Returns: str' line is slightly ambiguous but resolved by the output schema and format parameter.

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

Conciseness4/5

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

The description is reasonably concise (around 150 words) and well-structured. It starts with the purpose, then explains what it returns and what it does not, followed by parameter behavior notes, and ends with a structured Args/Returns/Schema section. Every sentence contributes value, though the 'Returns: str' section could be slightly clearer.

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

Completeness5/5

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

Given the tool's moderate complexity (one parameter object with multiple sub-parameters, output schema, annotations), the description is comprehensive. It covers the search scope, limitations (non-exact filtering, alternative source), output format, and provides an example output schema. The description, combined with annotations and input schema, gives the agent everything needed to use the tool correctly.

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

Parameters4/5

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

Schema description coverage is 0%, meaning the description must add meaning beyond the schema. The description compensates well by explaining that media_type and kanton are full-text search terms that weight results, not exact filters, and that the catalog has no faceted filtering for these. This adds crucial usage semantics not fully captured by the schema descriptions alone.

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: searching BAKOM datasets on opendata.swiss for radio and television. It explicitly distinguishes itself from sibling tools by noting it returns catalog datasets, not individual stations, and points to an alternative source for concessionaire details. This is specific and helps differentiate from other BAKOM tools.

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

Usage Guidelines4/5

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

The description provides clear usage context: it explains that the tool searches the BAKOM catalog, not individual stations, and that for specific concessionaire info one should use the RTV-Datenbank web interface. It also explains that media_type and kanton are not exact filters but full-text search terms. However, it does not explicitly compare with all sibling tools or list when to prefer this tool over others.

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

bakom_sendeanlagen_sucheA
Read-onlyIdempotent

Mobilfunkanlagen und Sendeanlagen in einem Umkreis suchen.

Findet Antennenstandorte (Mobilfunk und Rundfunk) in der Nähe eines Standorts. Nützlich für Schulhäuser (Strahlungsquellen), Medienplanung oder technische Infrastrukturanalysen.

Args: params (AntennaSearchInput): Koordinaten WGS84, Suchradius, Format.

Returns: str: Liste von Sendeanlagen im Umkreis mit Betreiber und Typ.

Schema: { "suchzentrum": {"lat": float, "lon": float}, "radius_m": int, "anlagen": [ { "id": str, "typ": str, "betreiber": str | None, "distanz_m": float | None, "koordinaten": {"east": float, "north": float} } ], "total": int }

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare the tool as read-only, idempotent, and non-destructive. The description adds behavioral context by stating it returns a list of installations with operator and type, and includes a return schema example. This supplements annotations without 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 concise and well-structured: a one-line purpose, use cases, args/returns/schema blocks. It front-loads the key verb and resource. However, the inclusion of a 'Schema' block in the description (though helpful) slightly lengthens it; still appropriately sized.

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 has a small parameter set and an output schema (which the description includes), the description covers what the tool does, when to use it, and what it returns. It lacks explicit details about coordinate system or response format options, but overall is sufficient for an agent to use 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 only briefly mentions parameters as 'Koordianten WGS84, Suchradius, Format' without detailing each. With schema description coverage reported as 0%, the description does little to compensate. The input schema itself has descriptions, but the description adds minimal value beyond that.

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 starts with a clear verb and resource: 'Mobilfunkanlagen und Sendeanlagen in einem Umkreis suchen.' It specifies the tool finds antenna sites (mobile and broadcast) within a radius. Use cases (schools, media planning, infrastructure analysis) differentiate it from sibling tools like coverage or frequency tools.

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 provides example use cases (schools, media planning) which imply when to use, but it does not explicitly state when not to use or compare to alternatives like coverage tools. No exclusionary guidance is given, so the agent may not know to avoid this for coverage queries.

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

bakom_telekomstatistik_uebersichtB
Read-onlyIdempotent

Schweizer Telekommunikationsstatistiken aus BAKOM-Datensätzen abrufen.

Gibt Übersichten zu Telekommunikationsstatistiken (Festnetz, Mobilfunk, Breitband, Marktanteile) via opendata.swiss CKAN API zurück. Nützlich für Marktanalysen, politische Berichte und KI-Fachgruppe-Demos.

Args: params (TelekomStatInput): Thema ('breitband', 'mobilfunk', 'festnetz', 'marktanteile', 'haushaltszugang') + Format.

Returns: str: Verfügbare Statistikdatensätze mit Downloadlinks.

Schema: { "thema": str, "datensaetze": [ { "titel": str, "beschreibung": str, "url": str, "ressourcen": list[dict] } ] }

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, so the description's burden is lower. The description adds that the tool queries the opendata.swiss CKAN API and returns overviews with download links, which is useful context. However, it does not significantly expand on behavioral traits beyond the annotations, so a 3 is appropriate.

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

Conciseness4/5

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

The description is well-structured with an Args/Returns/Schema section, and the purpose is front-loaded. It is not overly long, and each section adds information. The inclusion of a sample output schema is helpful. Minor redundancy: the 'Schema' section repeats some structure already in the input schema, but it is still clear.

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 covers the return value (a string with download links) and provides a sample JSON schema of the data structure. However, there is a slight inconsistency: it says 'Returns: str' but then shows a JSON object schema. This could confuse an agent. Given the complexity and the presence of annotations and output schema, the description is mostly complete but has this minor flaw.

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

Parameters2/5

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

Schema description coverage is 0%, meaning the tool description must compensate for parameter understanding. The description lists example thema values ('breitband', 'mobilfunk', etc.) and mentions format, but the input schema itself has a very detailed description of the 'thema' parameter (about search behavior and effective keywords). The tool description's parameter section is a simplified summary that lacks the nuanced search behavior, and it does not explain the 'response_format' enum. Thus it adds limited value beyond the schema.

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

Purpose4/5

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

The description clearly states the tool retrieves overviews of Swiss telecommunications statistics from BAKOM datasets, with specific domains (Festnetz, Mobilfunk, etc.). It uses a specific verb ('abrufen') and resource. However, it does not explicitly differentiate from sibling tools like bakom_broadband_coverage or bakom_breitbandatlas_datensaetze, which might also provide statistics, so it's not a 5.

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

Usage Guidelines3/5

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

The description mentions use cases ('Marktanalysen, politische Berichte, KI-Fachgruppe-Demos'), giving context for when to use the tool. But it provides no explicit guidance on when not to use it or which sibling tool to choose instead, so the guidance is implied rather than explicit.

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

Tool Schema Changelog

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

  1. 6 tool updatesv3.0.0
    • Changedbakom_aktuell1 field changed
      • changedInput schema / $defs / TelekomStatInput / properties / thema / description
        Previous value: -"Statistikthema: 'breitband', 'mobilfunk', 'festnetz', 'marktanteile', 'haushaltszugang'"New value: +"Suchwort fuer die Volltextsuche im BAKOM-Datensatzkatalog. Der Katalog kennt keine Themen-Facette und zerlegt keine Komposita: 'mobilfunk' findet nichts, 'mobilfunkanlagen' und '5g' schon. Ergiebig sind (Treffer am 2026-08-15): 'medien' 61, '5g' 38, 'festnetz' 36, 'radio' 31, 'fernsehen' 26, 'marktanteile' 3, 'breitband' 1."
    • Changedbakom_breitbandatlas_datensaetze1 field changed
      • changedInput schema / $defs / TelekomStatInput / properties / thema / description
        Previous value: -"Statistikthema: 'breitband', 'mobilfunk', 'festnetz', 'marktanteile', 'haushaltszugang'"New value: +"Suchwort fuer die Volltextsuche im BAKOM-Datensatzkatalog. Der Katalog kennt keine Themen-Facette und zerlegt keine Komposita: 'mobilfunk' findet nichts, 'mobilfunkanlagen' und '5g' schon. Ergiebig sind (Treffer am 2026-08-15): 'medien' 61, '5g' 38, 'festnetz' 36, 'radio' 31, 'fernsehen' 26, 'marktanteile' 3, 'breitband' 1."
    • Addedbakom_medien_statistik
    • Changedbakom_medienstruktur_info1 field changed
      • changedInput schema / $defs / TelekomStatInput / properties / thema / description
        Previous value: -"Statistikthema: 'breitband', 'mobilfunk', 'festnetz', 'marktanteile', 'haushaltszugang'"New value: +"Suchwort fuer die Volltextsuche im BAKOM-Datensatzkatalog. Der Katalog kennt keine Themen-Facette und zerlegt keine Komposita: 'mobilfunk' findet nichts, 'mobilfunkanlagen' und '5g' schon. Ergiebig sind (Treffer am 2026-08-15): 'medien' 61, '5g' 38, 'festnetz' 36, 'radio' 31, 'fernsehen' 26, 'marktanteile' 3, 'breitband' 1."
    • Changedbakom_rtv_suche2 fields changed
      • changedInput schema / $defs / RTVSearchInput / properties / kanton / description
        Previous value: -"Kantonskürzel (z.B. 'ZH', 'BE', 'GE')"New value: +"Kantonskürzel (z.B. 'ZH', 'BE', 'GE'). Geht als Suchwort in die Volltextsuche ein und gewichtet die Treffer — kein exakter Filter."
      • changedInput schema / $defs / RTVSearchInput / properties / media_type / description
        Previous value: -"Medientyp: 'radio', 'tv' oder 'alle'"New value: +"Medientyp: 'radio', 'tv' oder 'alle'. Geht als Suchwort in die Volltextsuche ein und gewichtet die Treffer — kein exakter Filter."
    • Changedbakom_telekomstatistik_uebersicht1 field changed
      • changedInput schema / $defs / TelekomStatInput / properties / thema / description
        Previous value: -"Statistikthema: 'breitband', 'mobilfunk', 'festnetz', 'marktanteile', 'haushaltszugang'"New value: +"Suchwort fuer die Volltextsuche im BAKOM-Datensatzkatalog. Der Katalog kennt keine Themen-Facette und zerlegt keine Komposita: 'mobilfunk' findet nichts, 'mobilfunkanlagen' und '5g' schon. Ergiebig sind (Treffer am 2026-08-15): 'medien' 61, '5g' 38, 'festnetz' 36, 'radio' 31, 'fernsehen' 26, 'marktanteile' 3, 'breitband' 1."
  2. 11 tool updatesv2.0.3
    • First observedbakom_aktuell
    • First observedbakom_breitbandatlas_datensaetze
    • First observedbakom_broadband_coverage
    • First observedbakom_frequenzdaten
    • First observedbakom_glasfaser_verfuegbarkeit
    • First observedbakom_medienstruktur_info
    • First observedbakom_mobilfunk_abdeckung
    • First observedbakom_multi_standort_konnektivitaet
    • First observedbakom_rtv_suche
    • First observedbakom_sendeanlagen_suche
    • First observedbakom_telekomstatistik_uebersicht

TDQS

A3.9/5.0

Scored across 12 tools

Disambiguation4/5

Most tools have clearly distinct purposes (coverage vs. antennas vs. media stats vs. dataset discovery). A slight overlap exists between 'bakom_aktuell' and 'bakom_telekomstatistik_uebersicht'—both search opendata.swiss for BAKOM datasets—but parameter differences and detailed descriptions reduce confusion.

Naming Consistency4/5

All tools follow a 'bakom_' prefix with snake_case noun phrases. However, language is mixed: 'bakom_broadband_coverage' (English) vs. 'bakom_mobilfunk_abdeckung' (German), and 'bakom_multi_standort_konnektivitaet' mixes both. Overall pattern is consistent, so minor deduction.

Tool Count5/5

12 tools cover a diverse but focused domain (telecom coverage, antennas, media stats, dataset catalogs). Each tool has a clear niche and no tool feels extraneous. The count is well-scoped for the server's stated purpose.

Completeness4/5

Core workflows are covered: fixed/mobile coverage, fiber, antenna search, media statistics, and dataset discovery. Minor gaps exist (e.g., no per-operator mobile details, no spectrum license query), but the descriptions explicitly limit scope, so agents can work around missing features.

Maintenance

ActivityActive
ResponsivenessResponsive

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