Skip to main content
Glama

πŸ‡¨πŸ‡­ Part of the Swiss Public Data MCP Portfolio

πŸ“Ί srgssr-mcp

Version License: MIT Python 3.11+ MCP CI Data Source

MCP server connecting AI models to SRG SSR public APIs – weather, TV/radio metadata, program guide and Swiss votations/elections since 1900 (SRF, RTS, RSI, RTR, SWI).

πŸ‡©πŸ‡ͺ Deutsche Version


Overview

srgssr-mcp gives AI assistants like Claude direct access to the public APIs of SRG SSR – Switzerland's national public broadcaster. Weather forecasts, TV and radio metadata, electronic program guides, and historical democratic data (votations and elections since 1900) are all accessible through a single standardised MCP interface.

The server covers five thematic clusters: SRF Weather, Video, Audio, EPG and Polis (Swiss Democracy). Each cluster maps to a group of purpose-built tools that translate raw SRG SSR API data into clean JSON responses.

Anchor demo query: "What were the cantonal results of the popular vote on initiative X in Zurich?" – answered with historical real-time data from the Polis system, not a hallucination.


Related MCP server: parlament-mcp

Features

  • 🌦️ Weather – location search, current conditions, 24h hourly forecast, 7-day forecast (SRF Meteo)

  • πŸ“Ί Video – TV show listings, latest episodes, live TV channels across all business units

  • πŸŽ™οΈ Audio – radio show listings, audio episodes, live radio stations

  • πŸ“… EPG – daily program schedule for any TV or radio channel

  • πŸ—³οΈ Polis – popular votes and elections since 1900, national and cantonal results

  • 🏒 Multi-unit – SRF (DE), RTS (FR), RSI (IT), RTR (RM), SWI (multilingual)

  • πŸ” OAuth2 – automatic token management with Client Credentials flow

  • ☁️ Dual transport – stdio for Claude Desktop, Streamable HTTP/SSE for cloud deployment


Prerequisites

  • Python 3.11+

  • API keys from developer.srgssr.ch (free registration):

    1. Create an account and log in

    2. Under "My Apps", create a new application

    3. Add the product SRG SSR PUBLIC API V2

    4. Note your Consumer Key and Consumer Secret

⚠️ Terms of use: SRG SSR APIs are available for non-commercial use. For commercial use, contact api@srgssr.ch directly.


Installation

# Clone the repository
git clone https://github.com/malkreide/srgssr-mcp.git
cd srgssr-mcp

# Install
pip install -e .

Or with uvx (no permanent installation):

uvx srgssr-mcp

Or via pip:

pip install srgssr-mcp

Quickstart

# Set credentials
export SRGSSR_CONSUMER_KEY="your-consumer-key"
export SRGSSR_CONSUMER_SECRET="your-consumer-secret"

# Start the server (stdio mode for Claude Desktop)
srgssr-mcp

Try it immediately in Claude Desktop:

"What will the weather be like in Zurich tomorrow?" "What's on SRF 1 tonight?" "Which popular votes took place in the canton of Bern between 2010 and 2020?"


Configuration

Claude Desktop

Minimal (recommended):

{
  "mcpServers": {
    "srgssr": {
      "command": "uvx",
      "args": ["srgssr-mcp"],
      "env": {
        "SRGSSR_CONSUMER_KEY": "your-consumer-key",
        "SRGSSR_CONSUMER_SECRET": "your-consumer-secret"
      }
    }
  }
}

Config file locations:

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

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

After saving, restart Claude Desktop completely.

Other MCP Clients

Compatible with Cursor, Windsurf, VS Code + Continue, LibreChat, Cline, and self-hosted models via mcp-proxy. Set the same environment variables.

Cloud Deployment (SSE for browser access)

For use via claude.ai in the browser (e.g. on managed workstations without local software):

SRGSSR_CONSUMER_KEY=... \
SRGSSR_CONSUMER_SECRET=... \
SRGSSR_MCP_TRANSPORT=streamable-http \
SRGSSR_MCP_HOST=0.0.0.0 \
SRGSSR_MCP_PORT=8000 \
  python -m srgssr_mcp.server

Transport, host, port and mount path are all driven by environment variables (see srgssr_mcp.server.Settings). Valid values for SRGSSR_MCP_TRANSPORT are stdio (default), sse, and streamable-http.

πŸ’‘ "stdio for the developer laptop, SSE for the browser."


MCP Primitives

This server exposes all three orthogonal MCP primitives:

Primitive

Mental model

What's here

Tools (verbs)

Executable functions / parametrized queries

15 tools β€” search, list, fetch, aggregate

Resources (nouns)

Cache-friendly passive data behind URIs

EPG entries and immutable votation results

Prompts (recipes)

Reusable workflow templates

Voting analysis & daily briefing

Tools cover parametrized searches (year ranges, free-text, paginated listings) where every call may yield different results. Resources expose stable data points that are safe to cache: a published EPG for a given channel/date, or the final result of a closed Swiss votation. Prompts standardise recurring multi-step analyses so users don't have to phrase them from scratch.

Resources

URI template

Description

epg://{bu}/{channel_id}/{date}

Daily TV/radio program guide for SRF, RTS, RSI (e.g. epg://srf/srf-1/2026-04-30)

votation://{votation_id}

Detailed result of a closed Swiss popular vote (e.g. votation://v1)

EPG station ids β€” hyphenated, and not the same as the livestream ids:

Business unit

TV

Radio

SRF

srf-1, srf-2, srf-info

srf-1, srf-2, srf-2-kultur, srf-3, srf-4, srf-musikwelle, srf-virus

RTS

rts-1, rts-2, rts-info

LA1ERE, ESPACE2, COULEUR3, OPTION_MUSIQUE

RSI

la-1, la-2

rete-uno, rete-due, rete-tre

Prompts

Name

Arguments

Purpose

analyse_abstimmungsverhalten

votation_id, focus (stadt_land / sprachregionen / kantone)

Structured analysis of a Swiss popular vote

tagesbriefing_kanton

location, channel_id, business_unit, date

Daily briefing combining weather and EPG


Available Tools

Tool Naming Convention

This server uses snake_case for tool names, following Python ecosystem idioms. While MCP best practice favors camelCase for optimal LLM tokenization, snake_case remains acceptable and keeps tool names aligned with the underlying Python function identifiers.

All tools follow the pattern srgssr_<domain>_<action> with the namespace prefix srgssr_ and a semantically meaningful <domain>_<action> suffix (e.g. srgssr_weather_current, srgssr_polis_get_votations).

🌦️ SRF Weather (4 tools)

Tool

Description

Data Source

srgssr_weather_search_location

Search for a location by name or postal code to obtain a geolocationId

SRF Meteo

srgssr_weather_current

Current weather conditions for a Swiss location

SRF Meteo

srgssr_weather_forecast_24h

Hourly 24-hour forecast

SRF Meteo

srgssr_weather_forecast_7day

Daily 7-day forecast

SRF Meteo

πŸ“Ί Video (3 tools)

Tool

Description

Data Source

srgssr_video_get_shows

List TV shows for a business unit (character_filter a–z/# selects one initial; omit it to fan out over all 27)

SRG SSR IL

srgssr_video_get_episodes

Retrieve latest episodes of a show

SRG SSR IL

srgssr_video_get_livestreams

List live TV channels

SRG SSR IL

πŸŽ™οΈ Audio (3 tools)

Tool

Description

Data Source

srgssr_audio_get_shows

List radio shows for one radio channel (channel_id required β€” the v2 API has no per-unit listing)

SRG SSR IL

srgssr_audio_get_episodes

Retrieve audio episodes of a show

SRG SSR IL

srgssr_audio_get_livestreams

List live radio stations

SRG SSR IL

πŸ“… EPG – Electronic Program Guide (1 tool)

Tool

Description

Data Source

srgssr_epg_get_programs

Daily program schedule for a TV or radio channel

SRG SSR IL

πŸ—³οΈ Polis – Swiss Democracy (3 tools)

Tool

Description

Data Source

srgssr_polis_get_votations

Popular votes since 1900 (national or cantonal)

Polis API

srgssr_polis_get_votation_results

Detailed results of a specific vote

Polis API

srgssr_polis_get_elections

Election results since 1900

Polis API

Supported Business Units

Code

Unit

Language

srf

SRF (Schweizer Radio und Fernsehen)

German

rts

RTS (Radio TΓ©lΓ©vision Suisse)

French

rsi

RSI (Radiotelevisione svizzera)

Italian

rtr

RTR (Radiotelevisiun Svizra Rumantscha)

Romansh

swi

SWI swissinfo.ch

Multilingual

Example Use Cases

Query

Tool

"Weather in Zurich tomorrow?"

srgssr_weather_forecast_24h

"What's on SRF 1 tonight?"

srgssr_epg_get_programs

"Latest Tagesschau episodes?"

srgssr_video_get_episodes

"Popular votes in Canton Bern 2010–2020?"

srgssr_polis_get_votations

"Cantonal results of the mask initiative vote?"

srgssr_polis_get_votation_results

"All current RTS radio shows?"

srgssr_audio_get_livestreams β†’ srgssr_audio_get_shows

β†’ More use cases by audience β†’


Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Claude / LLMβ”‚
β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜
       β”‚ MCP (stdio)
β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ srgssr-mcp Server        β”‚
β”‚  β”œβ”€ Weather Tools (4)    β”‚
β”‚  β”œβ”€ EPG Tools (1)        β”‚
β”‚  β”œβ”€ Polis Tools (3)      β”‚
β”‚  β”œβ”€ Video Tools (3)      β”‚
β”‚  └─ Audio Tools (3)      β”‚
β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
       β”‚ HTTPS (OAuth2)
β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ SRG SSR Public APIs β”‚
β”‚  developer.srgssr.chβ”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Data Sources

Source

Data

Access

developer.srgssr.ch

SRG SSR PUBLIC API V2 (weather, A/V, EPG, Polis)

OAuth2 (free registration)

Attribution: SRG SSR APIs are subject to the SRG SSR Terms of Use.


Development Phase

This server is in Phase 1: Read-only Wrapper.

The server exposes only GET-style operations against public SRG SSR APIs. There are no write, mutate or delete capabilities by design β€” see Safety & Limits for the threat-model implications.

Phase 1 Completion Criteria

  • 14 read-only tools across five thematic clusters (Weather, Video, Audio, EPG, Polis)

  • OAuth2 Client Credentials authentication with token caching

  • Bilingual documentation (EN/DE)

  • Test suite (unit + live) β€” see OPS-001

  • Structured logging β€” see OBS-003 and CHANGELOG

  • Production-ready error handling (uniform retry/backoff, typed error envelopes)

Future Phases

  • Phase 2 (Write): Not planned. The SRG SSR Public APIs are read-only by contract; there is no upstream surface to write to.

  • Phase 3 (Multi-Agent): Evaluation deferred. Will be reconsidered once user feedback indicates concrete multi-agent workflows that this server should orchestrate (e.g. cross-server aggregation with swiss-statistics-mcp or swiss-transport-mcp).


MCP Protocol Version

mcp 2.x serves two protocol eras over the same server, and the client's first request on a connection decides which one applies:

Era

Revision

Who reaches it

initialize handshake

2024-11-05 … 2025-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.

PROTOCOL_VERSION in src/srgssr_mcp/_app.py names the modern era. It is validated at import time against the installed SDK's SUPPORTED_PROTOCOL_VERSIONS β€” but that list is backwards-compatible and still contains 2024-11-05, so the membership check catches a revision being dropped, never a drift. tests/test_protocol_version.py holds both eras against the SDK and is the check that catches drift. Bumps are tracked in CHANGELOG.md under the matching release.

Update Policy

  • SDK dependency updates land via Dependabot (.github/dependabot.yml, monthly cadence, grouped under the mcp-sdk label) and run the full test suite before merge.

  • Spec bumps are evaluated on a feature branch against the relevant MCP SDK release; the official MCP changelog is the source of truth for breaking changes.

  • A spec-version bump is always documented in CHANGELOG.md and, if it changes the externally observable wire contract, triggers a minor or major release per Semantic Versioning.


Project Structure

srgssr-mcp/
β”œβ”€β”€ src/srgssr_mcp/
β”‚   β”œβ”€β”€ __init__.py          # Package
β”‚   └── server.py            # MCPServer: 15 tools, OAuth2 client
β”œβ”€β”€ .github/
β”‚   └── workflows/
β”‚       └── ci.yml           # GitHub Actions CI (Python 3.11–3.13)
β”œβ”€β”€ pyproject.toml           # Build configuration (hatchling)
β”œβ”€β”€ CHANGELOG.md
β”œβ”€β”€ CONTRIBUTING.md          # English
β”œβ”€β”€ CONTRIBUTING.de.md       # German
β”œβ”€β”€ SECURITY.md              # Security policy (English)
β”œβ”€β”€ SECURITY.de.md           # Security policy (German)
β”œβ”€β”€ LICENSE                  # MIT
β”œβ”€β”€ README.md                # This file (English)
└── README.de.md             # German version

πŸ›‘οΈ Safety & Limits

Aspect

Details

Access

Read-only β€” the server only reads from SRG SSR APIs and cannot post, modify or delete any content

Personal data

No personal data β€” all endpoints serve public broadcast metadata, weather observations and historical votation/election results

Rate limits

Subject to the tier of your OAuth2 application on developer.srgssr.ch; the server adds sensible per-query caps (e.g. max 100 episodes, 50 shows per list call)

Timeout

30 seconds per upstream API call

Authentication

OAuth2 Client Credentials (free registration); secrets stay local, never logged

Licensing & use

SRG SSR APIs are for non-commercial use; commercial use requires written permission from api@srgssr.ch

Terms of Service

Subject to the SRG SSR Developer Terms of Use β€” users remain responsible for attribution and compliance


Known Limits

  • Rate Limits: SRG SSR APIs enforce rate limits β€” see developer.srgssr.ch for details on the tier of your OAuth2 application

  • Data Freshness: EPG data may be delayed by up to 6 hours

  • Historical Data: Polis data goes back to 1900 β€” older data is not available

  • Geo-Restriction: Some streaming APIs are only available within Switzerland

  • API keys required: SRG SSR APIs require free OAuth2 credentials from developer.srgssr.ch

  • Non-commercial use: SRG SSR API terms restrict commercial use without explicit permission from api@srgssr.ch

  • Weather coverage: SRF Meteo covers Switzerland only


Contributing

See CONTRIBUTING.md (English) Β· CONTRIBUTING.de.md (German)


Security

For the full security posture, vulnerability reporting process and accepted-risk register, see SECURITY.md (English) Β· SECURITY.de.md (German). The key egress control is summarised below.

Egress Allowlist

The server implements a code-layer egress allowlist (SEC-021, combined with SEC-004 SSRF defense) to prevent unintended external requests. Every outbound HTTP request is validated by _validate_url_safe() in src/srgssr_mcp/_http.py before it is issued.

Three controls per request:

  1. HTTPS-only β€” http://, file://, ftp:// and other non-HTTPS schemes are rejected.

  2. Host allowlist β€” the URL hostname must equal ALLOWED_HOSTS = {"api.srgssr.ch"} (exact match β€” subdomain tricks like api.srgssr.ch.attacker.example are blocked). One host covers everything: the OAuth2 token endpoint and every data endpoint.

  3. IP blocklist β€” every resolved IP for the hostname is checked against private, loopback, link-local (incl. 169.254.169.254 cloud-metadata), CGNAT, multicast and reserved ranges (IPv4 + IPv6). Any single match aborts the request β€” defense-in-depth against DNS rebinding.

Violations surface as ValueError and are mapped to a localized Konfigurationsfehler: … message by _handle_error, so internal network details never leak to the MCP client.

Adding a new SRG SSR domain:

  1. Update ALLOWED_HOSTS in src/srgssr_mcp/_http.py.

  2. Document the reason in the PR and CHANGELOG.md.

  3. Add a positive test case in tests/test_unit.py (mirror test_validate_url_safe_accepts_public_srgssr_host).

Network-Layer Egress (for future SSE/HTTP deployments): see docs/network-egress.md. For the current stdio transport, network-layer controls do not apply β€” the process runs in the MCP client's user context.


Logging

The server uses structured logging (OBS-003) via structlog with JSON output to stderr β€” keeping stdout clean for the stdio transport's JSON-RPC traffic.

Format:

  • JSON-encoded events, one per line

  • ISO 8601 UTC timestamp on every record

  • RFC 5424 severity levels: debug, info, notice, warning, error, critical, alert, emergency

  • Per-call bound context: tool, business_unit, channel_id, query, etc.

Example output:

{"event": "tool_invoked", "tool": "srgssr_weather_search_location", "query": "Bern", "level": "info", "logger": "mcp.srgssr.weather", "timestamp": "2026-04-30T14:23:45.123Z"}
{"event": "tool_succeeded", "tool": "srgssr_weather_search_location", "query": "Bern", "result_count": 3, "matched_variant": "Bern", "level": "info", "logger": "mcp.srgssr.weather", "timestamp": "2026-04-30T14:23:45.456Z"}

Log levels (RFC 5424):

Level

Used for

debug

OAuth token cache hits, internal state

info

Tool invocations, successful responses, server lifecycle

warning

Recoverable conditions (rate-limit approaching, unsupported business unit)

error

API failures, timeouts (recoverable)

critical

Credential issues, service degradation

Configuration:

The default level is info. Override via the SRGSSR_LOG_LEVEL environment variable (debug, info, warning, error, critical):

SRGSSR_LOG_LEVEL=debug srgssr-mcp

JSON output is aggregator-friendly β€” pipe stderr to Datadog, Splunk, Loki, etc., and filter by structured fields (tool, business_unit, level) without regex parsing.


Testing

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

# Integration tests (requires SRG SSR API keys)
PYTHONPATH=src pytest tests/ -m "live"

# Linting
ruff check src/

Changelog

See CHANGELOG.md


Data Sources & Licenses

All data exposed by this server is fetched live from a single upstream provider, SRG SSR Public API V2 (https://api.srgssr.ch). Every tool return is a typed Pydantic BaseModel that embeds source / license / provenance_url / fetched_at at the top level β€” so downstream consumers can record the data origin without round-tripping through this README. The SDK exposes the corresponding outputSchema in the tools/list manifest so MCP clients can plan follow-up calls precisely.

Cluster

Provider

License

Notes

Weather

SRF Meteo (api.srgssr.ch)

SRG SSR Terms of Use

Geo-restricted to Switzerland

Video / Audio / EPG

SRF Β· RTS Β· RSI Β· RTR Β· SWI

SRG SSR Terms of Use

Metadata only β€” stream URLs are not redistributed

Polis (Votations / Elections)

SRG SSR Polis

SRG SSR Terms of Use

Historical data since 1900

Use of the SRG SSR APIs

  • Non-commercial use: free, no application required.

  • Commercial use: written permission required via api@srgssr.ch.

This server's MIT license covers the source code only; it does not relicense the upstream data.


License

MIT License β€” see LICENSE

The SRG SSR APIs used in this project are subject to the SRG SSR Terms of Use.


Author

Hayal Oezkan Β· github.com/malkreide


Server

Description

zurich-opendata-mcp

City of Zurich open data (OSTLUFT air quality, weather, parking, geodata)

swiss-transport-mcp

Swiss public transport – OJP 2.0 journey planning, SIRI-SX disruptions

swiss-environment-mcp

BAFU environmental data – air quality, hydrology, natural hazards

swiss-statistics-mcp

BFS STAT-TAB – 682 statistical datasets

fedlex-mcp

Swiss federal law via Fedlex SPARQL

Synergy example: "What were the results of the 2020 popular votes in Canton Zurich – and how did turnout compare to the national average?" β†’ srgssr-mcp (Polis, cantonal results) + swiss-statistics-mcp (BFS, turnout data)

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": {
    "srgssr-mcp": {
      "command": "uvx",
      "args": [
        "srgssr-mcp"
      ]
    }
  }
}

Available Tools

15 tools
srgssr_audio_get_episodesA
Read-onlyIdempotent

Ruft die neuesten Episoden einer Radiosendung ab.

Auffinden konkreter RadiobeitrΓ€ge oder Podcast-Folgen.

Episoden in chronologisch absteigender Reihenfolge.

business_unit='srf', show_id='echo'

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already indicate readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds that episodes are in descending chronological order. No further behavioral traits (e.g., pagination, rate limits) 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 with one main sentence plus structured tags for use case, important notes, and an example. It is efficiently front-loaded with the core action, though slightly more detail in the example could improve clarity.

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

Completeness3/5

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

The output schema exists but is not shown; the description covers the core purpose and ordering. However, pagination behavior, error handling, and return format are not addressed, making it moderate for a tool with required parameters and pagination.

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 (only business_unit has a description in schema). The description provides a usage example but does not explain page_size or page parameters, which are left to the schema. More details on parameters would be beneficial.

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 the latest episodes of a radio show ('Ruft die neuesten Episoden einer Radiosendung ab') and provides a use case ('Auffinden konkreter RadiobeitrΓ€ge oder Podcast-Folgen'). It distinguishes from sibling tools like srgssr_audio_get_shows and srgssr_video_get_episodes.

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 includes a use case tag and notes chronological ordering, but does not explicitly state when to use this tool over alternatives (e.g., srgssr_audio_get_shows or srgssr_video_get_episodes). No 'when not to use' guidance is provided.

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

srgssr_audio_get_livestreamsA
Read-onlyIdempotent

Listet alle Live-Radiosender einer SRG SSR Unternehmenseinheit auf.

Aufbau von Radio-Senderverzeichnissen, Live-Stream-Auswahl, Voraussetzung fΓΌr srgssr_epg_get_programs (das eine channel_id benΓΆtigt). FΓΌr Live-TV stattdessen srgssr_video_get_livestreams verwenden, fΓΌr Sendungsverzeichnisse srgssr_audio_get_shows.

RTR und SWI haben weniger oder keine Live-KanΓ€le; eine andere Unternehmenseinheit liefert in der Regel mehr Resultate.

business_unit='srf'

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already indicate the tool is read-only, idempotent, and non-destructive. The description adds useful behavioral context: that some business units yield fewer or no live channels and that the tool is a prerequisite for srgssr_epg_get_programs.

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 clear sections (use_case, important_notes, example). It is concise but covers essential details without redundancy.

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 simplicity, the output schema, and the rich annotations, the description provides all necessary context: purpose, usage guidelines, edge cases, and an example.

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 single parameter is fully defined in the schema with an enum and description. The description adds a practical example and a tip for choosing a unit that returns more results, enhancing the schema's meaning.

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

Purpose5/5

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

The description states the specific action: listing all live radio stations for a given business unit. It distinguishes from sibling tools by mentioning the video equivalent and the shows catalog.

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 tells when to use this tool (for live radio streams), when not to use it (use video for live TV), and names alternatives (srgssr_video_get_livestreams, srgssr_audio_get_shows). It also notes that RTR and SWI may have fewer results.

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

srgssr_audio_get_showsA
Read-onlyIdempotent

Listet Radiosendungen eines SRG SSR Radiokanals auf.

Katalog-Browsing fΓΌr Radio- und Podcast-Formate.

Die API listet Radiosendungen nur pro Kanal β€” channel_id ist Pflicht und stammt aus srgssr_audio_get_livestreams. Innerhalb eines Kanals sind die Sendungen nach Anfangsbuchstabe gruppiert: ohne character_filter werden alle 27 Buchstaben abgefragt und zusammengefΓΌhrt, mit character_filter ist es eine einzige Abfrage. Audio-Kataloge enthalten hΓ€ufig auch reine Podcasts.

business_unit='srf', channel_id='69e8ac16-4327-4af4-b873-fd5cd6e895a7', character_filter='e'

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 readOnly, idempotent, and non-destructive behavior. The description adds meaningful behavioral context: channel_id is mandatory and sourced from a specific sister tool, shows are grouped by initial letter, without character_filter all 27 letters are queried and merged (vs a single query with filter), and audio catalogs often contain podcasts. This exceeds annotation coverage without contradicting it.

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

Conciseness5/5

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

Description is concise and well-structured with a main purpose, use_case, important_notes, and an example. Every section adds distinct value: purpose states the verb and resource, use_case gives context, important_notes capture non-obvious behavior, and example illustrates parameter usage. No fluff or 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?

Given the tool's moderate complexity (pagination, letter grouping, dependency on another tool), the description covers the most critical aspects: channel_id requirement, letter-filter behavior, and podcast presence. It does not explicitly detail how pagination interacts with the merged 27-letter query, but the output schema exists, so return values are already specified. Overall it is sufficient for safe invocation.

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

Parameters4/5

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

The schema already describes business_unit, channel_id, and character_filter. The description adds value by explaining the character_filter's impact on query count/merging and clarifying that channel_id comes from srgssr_audio_get_livestreams. Page/page_size are not explained, but that is a minor gap given the schema presence and the tool's simplicity.

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?

Purpose is clearly stated as 'Listet Radiosendungen eines SRG SSR Radiokanals auf' (lists radio shows of a SRG SSR radio channel). It distinguishes from siblings by specifying audio shows per channel, and adds details about letter grouping and podcast inclusion that differentiate it from video show and episode 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?

Provides a clear use case ('Katalog-Browsing fΓΌr Radio- und Podcast-Formate') and important notes about requiring channel_id from srgssr_audio_get_livestreams. It explains when to use the character_filter (single query) vs no filter (all 27 letters), but does not explicitly mention alternatives or exclusions, so it lacks a full 'when-not-to-use' statement.

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

srgssr_daily_briefingA
Read-onlyIdempotent

Aggregiertes Tagesbriefing: kombiniert die 24-Stunden-Wettervorhersage von SRF Meteo mit dem EPG-Tagesprogramm eines SRG SSR TV- oder Radiosenders. Beide Datenquellen werden parallel abgerufen (asyncio.gather), so dass ein einzelner Tool-Call genΓΌgt statt zweier sequentieller Roundtrips.

Β«Wetter + Programm fΓΌr heute AbendΒ»: Abendplanung, redaktionelle Tages-Briefings.

EPG nur fΓΌr SRF, RTS und RSI. Bei Ausfall einer der beiden Quellen wird die andere Sektion trotzdem geliefert (Graceful Degradation) β€” das Feld enthΓ€lt dann ein ToolErrorResponse.

business_unit='srf', channel_id='srf-1', date='2026-04-30', latitude=47.3769, longitude=8.5417

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
epgYes
dateYes
sourceNoUpstream provider identity.
licenseNoLicensing terms.
weatherYes
channel_idYes
fetched_atNoUTC timestamp when this response was assembled.
business_unitYes
provenance_urlNoCanonical developer portal for the upstream API.

TDQS

A4.9/5.0
Behavior5/5

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

Describes parallel fetching (asyncio.gather) and graceful degradation with ToolErrorResponse in the event one source fails, providing behavioral context beyond the readOnlyHint/idempotentHint annotations. This sets accurate expectations for error handling and performance.

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 compact and well-structured with use_case and important_notes sections, making it scannable. Every sentence adds value: purpose, rationale, limitations, and a concrete example.

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?

Covers purpose, use case, constraints (EPG only for specific units), failure behavior, and provides an example. Given that an output schema exists, the description adequately covers all essential behavioral and contextual aspects of the tool.

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

Parameters4/5

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

With 0% schema description coverage, the description compensates partially via a full example (business_unit='srf', channel_id='srf-1', etc.) and contextual notes about EPG availability for certain units. However, it does not explicitly explain each parameter's meaning, relying on inference from the example and tool purpose.

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 function: 'Aggregiertes Tagesbriefing: kombiniert die 24-Stunden-Wettervorhersage von SRF Meteo mit dem EPG-Tagesprogramm eines SRG SSR TV- oder Radiosenders.' It uses a specific verb (kombiniert) and names both integrated resources, distinguishing it from individual weather/EPG sibling tools.

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

Usage Guidelines5/5

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

Explicitly gives a use case ('Β«Wetter + Programm fΓΌr heute AbendΒ»: Abendplanung, redaktionelle Tages-Briefings') and explains that one call replaces two sequential roundtrips ('ein einzelner Tool-Call genΓΌgt statt zweier sequentieller Roundtrips'). It also notes an exclusion: EPG only for SRF, RTS, and RSI, guiding when not to use the tool.

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

srgssr_epg_get_programsA
Read-onlyIdempotent

Ruft den vollstΓ€ndigen Programmplan (Electronic Program Guide) eines SRG SSR TV- oder Radiosenders fΓΌr einen bestimmten Tag ab.

TV-/Radio-Programmvorschauen, redaktionelle Programm-Tipps.

VerfΓΌgbar nur fΓΌr SRF, RTS und RSI β€” nicht fΓΌr RTR oder SWI. Die channel_id ist eine Sender-Kennung der EPG-API und wird mit Bindestrich geschrieben ('srf-1', nicht 'srf1'); RTS-Radio verwendet Grossbuchstaben. Bekannte Sender: srf tv: srf-1, srf-2, srf-info srf radio: srf-1, srf-2, srf-2-kultur, srf-3, srf-4, srf-musikwelle, srf-virus rts tv: rts-1, rts-2, rts-info rts radio: LA1ERE, ESPACE2, COULEUR3, OPTION_MUSIQUE rsi tv: la-1, la-2 rsi radio: rete-uno, rete-due, rete-tre

business_unit='srf', broadcast_type='tv', channel_id='srf-1', date='2026-04-30'

business_unit='rsi', broadcast_type='radio', channel_id='rete-uno', date='2026-04-30'

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive. The description adds valuable behavioral context: the tool is only available for SRF/RTS/RSI (not RTR/SWI), channel_id must use hyphens (e.g., 'srf-1' not 'srf1'), and RTS radio channels use uppercase. This goes beyond annotations and helps avoid common errors.

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 clear tags: <use_case>, <important_notes>, and <example>. It front-loads the main purpose in the first sentence, then layers guidance. Each section is necessary and contributes to correct usage. The examples are particularly concise and helpful.

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

Completeness5/5

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

The description is comprehensive for the tool's complexity. It covers purpose, use cases, availability constraints, channel_id formatting, known channels, and examples. Since an output schema exists, return values don't need to be described. The description fully prepares an agent to invoke the tool correctly.

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?

The schema coverage is reported as 0%, so the description must compensate. It does: it explains the channel_id format, provides an extensive list of valid channel_id values per business unit and broadcast type, and gives concrete examples with business_unit, broadcast_type, channel_id, and date. This is far more useful than 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 verb 'abrufen' (retrieve) and the resource: the complete EPG program schedule for an SRG SSR TV or radio station for a specific day. It is specific and distinguishes from sibling tools like video/audio/weather/polis, which are clearly 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 Guidelines4/5

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

The description provides a clear use case (TV/radio program previews, editorial tips) and important notes about availability, channel_id format, and known stations. It doesn't explicitly mention alternatives or when-not-to-use, but the sibling tools are obviously different, making the usage context sufficiently clear.

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

srgssr_polis_get_electionsA
Read-onlyIdempotent

Ruft Schweizer Nationalrats-, StΓ€nderats- und kantonale Wahlen aus dem Polis-System ab. Liefert Datum, Wahlbezeichnung und Wahl-ID.

Historische Wahlanalysen, journalistische Recherchen.

Daten reichen zurΓΌck bis 1900. Filter nach Jahr und Kanton mΓΆglich.

year_from=2023

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 indicate readOnly, idempotent, open world. The description adds historical range and filter options, but does not disclose pagination behavior or other traits 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?

The description is concise and uses structured XML tags for use case, notes, and example. It is efficient but could be slightly more compact.

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 presence of an output schema and annotations, the description covers essential context: data range, filtering, and output fields. Pagination is implied by page_size but not explained.

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 descriptions are 0% covered. The description mentions filters for year and canton, and gives an example with year_from, but omits year_to, page_size, and page parameters, leaving gaps in understanding.

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 retrieves Swiss National Council, Council of States, and cantonal elections from the Polis system, specifying the output (date, name, ID). This is distinct from sibling tools like votations.

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 use cases (historical analysis, journalism) and notes (data since 1900, filter by year and canton), but does not explicitly guide when to use this over alternatives like srgssr_polis_get_votations or clearly state when not to use.

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

srgssr_polis_get_votation_resultsA
Read-onlyIdempotent

Ruft detaillierte Resultate einer einzelnen Schweizer Volksabstimmung ab (Ja/Nein-Anteile, Stimmbeteiligung, kantonale Ergebnisse, Annahme/Ablehnung).

Vertiefte politische Analysen, Visualisierung kantonaler Unterschiede.

Erfordert eine votation_id aus srgssr_polis_get_votations.

votation_id='v1'

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true. The description adds that results are detailed and includes acceptance/rejection info, but does not reveal rate limits, auth needs, or pagination. Barely adds behavioral 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?

The description is a single paragraph with clear XML tags for use case and important notes. Front-loaded with purpose. Slightly verbose but each section is justified.

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

Completeness4/5

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

Given that an output schema exists, the description does not need to detail return values. It covers prerequisites and use case. For a simple one-parameter read-only tool, this is largely sufficient.

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

Parameters3/5

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

Schema coverage is 0% (no description for parameters). The description mentions votation_id in the notes and provides an example ('votation_id='v1''), adding minimal meaning beyond the schema's pattern constraint. However, it does reinforce the parameter's role.

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 specific verbs ('Ruft ab') and clearly defines the resource ('detaillierte Resultate einer einzelnen Schweizer Volksabstimmung'). It lists output components (Ja/Nein-Anteile, Stimmbeteiligung, kantonale Ergebnisse), distinguishing it from sibling srgssr_polis_get_votations which lists votes.

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 use case tag explicitly states 'Vertiefte politische Analysen, Visualisierung kantonaler Unterschiede' and important_notes clarify prerequisite (requires votation_id from srgssr_polis_get_votations). No explicit when-not-to-use, but adequate for the tool's simplicity.

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

srgssr_polis_get_votationsA
Read-onlyIdempotent

Ruft Schweizer Volksabstimmungen und Referenden (national und kantonal) aus dem Polis-System ab. Liefert Datum, Titel und votation_id pro Eintrag.

Historische Analysen von Abstimmungsverhalten, journalistische Recherchen zu direkter Demokratie. Erster Schritt, um eine votation_id fΓΌr srgssr_polis_get_votation_results zu ermitteln. FΓΌr Wahlen (Nationalrat, StΓ€nderat) stattdessen srgssr_polis_get_elections.

Daten reichen zurΓΌck bis 1900. Der Kantonsfilter wird in eine locationid aufgelΓΆst, der Jahresfilter in die Abstimmungstage des Zeitraums β€” ein Jahresbereich kostet deshalb mehrere Abfragen und sollte eng gesetzt werden. Paginiert mit page_size 1–100.

year_from=2020, year_to=2024 | canton='ZH'

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

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

The annotations already declare readOnlyHint, idempotentHint, and destructiveHint false. The description adds meaningful behavioral details: data reaches back to 1900, canton filter resolves to locationid, year ranges map to multiple voting-day queries, and pagination uses page_size 1-100. 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 compact yet well-structured using use_case and important_notes sections. Every sentence adds value, and the example is a useful quick reference without unnecessary detail.

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

Completeness5/5

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

For a filtered list tool with an output schema, the description covers the purpose, use cases, filter semantics, pagination, performance caveats, and sibling exclusions. The AI agent has enough context to select and invoke this tool appropriately.

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 carries the burden. It explains the canton filter ('wird in eine locationid aufgelΓΆst'), year filter ('in die Abstimmungstage'), pagination behavior, and provides a concrete example (year_from=2020, year_to=2024 | canton='ZH'). The page parameter is only implied, but overall semantics are adequately conveyed.

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

Purpose5/5

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

The description states a specific action ('Ruft... ab') targeting Schweizer Volksabstimmungen und Referenden from the Polis system, and specifies what is returned (Datum, Titel, votation_id). It also differentiates from sibling tools like srgssr_polis_get_votation_results and srgssr_polis_get_elections.

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 use_case section explicitly identifies appropriate scenarios (historical analyses, journalistic research) and directs the agent to srgssr_polis_get_elections for elections. It also frames this tool as the first step for obtaining a votation_id, giving clear selection criteria.

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

srgssr_video_get_episodesA
Read-onlyIdempotent

Ruft die neuesten Episoden einer TV-Sendung ab (Episodentitel, Datum, Dauer und Video-ID fΓΌr den Mediaplayer Pillarbox).

Recherche zu konkreten Sendungsausgaben.

Episoden in chronologisch absteigender Reihenfolge. Paginiert mit page_size 1–50.

business_unit='srf', show_id='tagesschau'

GΓΌltige show_id liefert srgssr_video_get_shows.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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

Beyond annotations (readOnly, idempotent), the description adds behavioral details: episodes are in descending chronological order, pagination uses page_size 1–50, and returned data includes video IDs for the Pillarbox player. This enriches the annotation baseline 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.

Conciseness5/5

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

The description is well-structured with explicit tags (use_case, important_notes, example). Each section adds distinct value, and the first sentence gives the core purpose. No filler or redundancy.

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

Completeness5/5

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

For a read-only paginated list tool with an output schema, the description covers the essentials: purpose, key return fields, ordering, pagination limits, and a source for valid show_id. It feels complete for an AI agent to invoke 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?

With 0% schema description coverage, the description compensates by providing a concrete example (business_unit='srf', show_id='tagesschau') and a note on show_id provenance. It mentions pagination range but does not explicitly explain the 'page' parameter; still adequate for basic usage.

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

Purpose5/5

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

The description clearly states the tool retrieves the latest episodes of a TV show, listing specific fields (title, date, duration, video ID). This verb+resource combination is specific and distinguishes it from sibling tools like srgssr_video_get_shows and srgssr_audio_get_episodes.

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 includes a use case ('Recherche zu konkreten Sendungsausgaben') and an explicit note that valid show_id comes from srgssr_video_get_shows. This provides context for when to use the tool, though it does not explicitly contrast with audio alternatives.

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

srgssr_video_get_livestreamsA
Read-onlyIdempotent

Listet alle Live-TV-Sender einer SRG SSR Unternehmenseinheit auf.

Live-Stream-Auswahl, Voraussetzung fΓΌr srgssr_epg_get_programs (das eine channel_id benΓΆtigt).

RTR und SWI haben weniger oder keine Live-KanΓ€le.

business_unit='srf'

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds context (prerequisite for EPG, channel availability caveats) but does not disclose additional behavioral traits like rate limits, pagination, or authentication needs. With annotations covering safety, the description contributes moderate value.

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 (one line main statement plus three structured tags) with no fluff. The most critical information (purpose, use_case, important_notes, example) is front-loaded and clearly separated using XML-like tags. Every sentence earns its place.

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

Completeness5/5

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

Given the tool's simplicity (single parameter, output schema available, annotations thorough), the description covers all necessary aspects: purpose, usage context, caveats, and a concrete example. The use_case and important_notes provide actionable guidance beyond the schema and annotations, making it complete for an agent.

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

Parameters3/5

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

The input schema provides a description for the only parameter business_unit ('SRG SSR Unternehmenseinheit: 'srf', 'rts', 'rsi', 'rtr' oder 'swi''), so schema coverage is effectively 100%. The description does not add new semantics beyond the schema. According to rubric, baseline is 3 when schema coverage is high.

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 'listet' (lists) and the resource 'alle Live-TV-Sender einer SRG SSR Unternehmenseinheit' (all live TV channels of a business unit). It distinguishes from sibling tools like srgssr_audio_get_livestreams (audio) and other video tools (episodes, shows) by specifying video livestreams. The use_case tag reinforces that this tool is a prerequisite for EPG, adding context.

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 includes explicit use_case guidance: 'Live-Stream-Auswahl, Voraussetzung fΓΌr srgssr_epg_get_programs' indicates when to use the tool. Important_notes warns that RTR and SWI have few or no live channels, helping the agent avoid unnecessary calls. The sibling tool list shows audio livestreams are separate, providing comparison.

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

srgssr_video_get_showsA
Read-onlyIdempotent

Listet TV-Sendungen einer SRG SSR Unternehmenseinheit auf (SRF, RTS, RSI, RTR, SWI) mit Sendungstitel, ID und Beschreibung.

Katalog-Browsing fΓΌr TV-Sendungen, Programmanalysen.

Die API gruppiert Sendungen nach Anfangsbuchstabe. Ohne character_filter werden alle Buchstaben abgefragt und zusammengefΓΌhrt β€” das sind 27 Abfragen, also nur nutzen, wenn wirklich der ganze Katalog gebraucht wird. Mit character_filter ist es eine einzige Abfrage. page_size gilt pro Buchstabe. Episoden ΓΌber srgssr_video_get_episodes mit der show_id.

business_unit='srf', character_filter='t'

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

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

Beyond the read-only and idempotent annotations, the description discloses non-obvious behavior: the API groups shows by first letter, omitting character_filter triggers 27 queries, and page_size applies per letter. This performance and pagination context is highly valuable and not present in structured annotations.

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

Conciseness5/5

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

The description is well-structured with a concise main sentence, a use_case tag, important_notes tags, and an example. Every sentence adds meaningful information, and the crucial performance caveat is prominently placed. No filler or redundancy.

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

Completeness5/5

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

Given the output schema exists (no need to describe return values) and annotations cover safety, the description fully covers the operational context: catalog browsing, performance trade-offs, filtering behavior, pagination, and a pointer to the related episodes tool. This is complete for a listing tool.

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?

With schema description coverage reported as 0%, the description compensates thoroughly. It explains the character_filter parameter (letters or #, omission triggers all letters), clarifies page_size per-letter behavior, and gives a concrete example. Page is left to standard pagination defaults, but the critical parameters are richly explained.

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 TV shows of an SRG SSR business unit with title, ID, and description. It distinguishes from related tools by explicitly referencing episodes via srgssr_video_get_episodes and by the TV-specific scope versus audio/livestream siblings.

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

Usage Guidelines5/5

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

It provides explicit use cases (catalog browsing, program analysis) and clear guidance on when to omit character_filter (full catalog, 27 queries) versus using it (single query). It also directs users to srgssr_video_get_episodes for episodes, effectively saying when not to use this tool.

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

srgssr_weather_currentA
Read-onlyIdempotent

Liefert die aktuelle Wettersituation von SRF Meteo fΓΌr einen Schweizer Standort (Temperatur, Wettercode, Wind, Niederschlag, Luftfeuchtigkeit).

Echtzeit-Wetterabfragen fΓΌr Outdoor-AktivitΓ€ten, Verkehrsmeldungen, Energieprognosen oder kontextuelle Anreicherung von redaktionellen Inhalten.

Nur fΓΌr Schweizer Standorte (Latitude 45.8–47.9, Longitude 5.9–10.5). geolocation_id aus srgssr_weather_search_location empfohlen.

latitude=47.3769, longitude=8.5417 (ZΓΌrich)

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 and destructiveHint=false, so safety is clear. The description adds useful behavioral context: geographic bounds (Latitude 45.8–47.9, Longitude 5.9–10.5) and the fallback behavior when geolocation_id is omitted (resolved from latitude/longitude). This goes beyond the annotations without contradicting them.

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

Conciseness5/5

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

The description is compact, front-loaded with the core purpose, and structured with clear <use_case>, <important_notes>, and <example> tags. Every sentence contributes value, with no redundant filler.

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

Completeness4/5

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

The description covers the tool's purpose, use cases, geographic restrictions, and provides an example. It also notes the recommended source for geolocation_id. Since an output schema exists, return values are already structured. It lacks explicit mention of alternative forecast tools, but the completeness is adequate for a current-weather lookup.

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 reported as 0%, so the description must compensate. It provides an example (latitude=47.3769, longitude=8.5417) and recommends using geolocation_id from srgssr_weather_search_location, which adds context beyond the schema. However, it doesn't explain units or the meaning of each weather field, leaving the agent partially reliant on schema descriptions.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Liefert die aktuelle Wettersituation von SRF Meteo fΓΌr einen Schweizer Standort' with a specific verb 'liefert' and lists the data fields (Temperatur, Wettercode, Wind, Niederschlag, Luftfeuchtigkeit). It distinguishes itself from sibling weather tools by emphasizing 'aktuelle' (current), contrasting with forecast 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 a clear use case section (Echtzeit-Wetterabfragen fΓΌr Outdoor-AktivitΓ€ten etc.) and important notes specifying Swiss-only coordinates and recommending geolocation_id from srgssr_weather_search_location. It does not explicitly name alternatives or exclusions for forecast tools, but the current-vs-forecast distinction is implied.

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

srgssr_weather_forecast_24hA
Read-onlyIdempotent

Liefert die stΓΌndliche Wettervorhersage der nΓ€chsten 24 Stunden von SRF Meteo.

Tagesplanung, Veranstaltungsorganisation, kurzfristige Wetterwarnungen.

Nur fΓΌr Schweizer Standorte (Latitude 45.8–47.9, Longitude 5.9–10.5). Liefert maximal 24 stΓΌndliche Datenpunkte.

latitude=47.3769, longitude=8.5417

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 the tool read-only, idempotent, and non-destructive. The description adds useful behavioral context: the geographic bounds for Swiss locations and the limit of 24 hourly data points. This goes beyond the annotations and helps set expectations.

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

Conciseness5/5

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

The description is compact and well-structured using XML-like tags (use_case, important_notes, example). Each sentence or section serves a distinct purpose, and no filler or repetition exists.

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 combination of annotations, output schema, and description covers the tool's behavior well for a read-only weather forecast: it specifies the data source, time horizon, geographic limits, and provides an example. It lacks details on error handling for out-of-bounds coordinates or response format, but the output schema exists to cover the latter.

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 does not explain the parameters itself, but the input schema has detailed descriptions for latitude, longitude, and geolocation_id. The description adds an example (latitude=47.3769, longitude=8.5417) and reinforces the coordinate range, which provides minimal added meaning 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 tool returns an hourly weather forecast for the next 24 hours from SRF Meteo. This specific resource and time frame distinguishes it from sibling tools like srgssr_weather_current and srgssr_weather_forecast_7day.

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 use_case tag gives clear context for when to use the tool (daily planning, event organization, short-term warnings). However, it does not explicitly exclude alternatives or mention when to use the current or 7-day forecast, so it stops short of full alternative guidance.

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

srgssr_weather_forecast_7dayA
Read-onlyIdempotent

Liefert die tΓ€gliche Wettervorhersage der nΓ€chsten 7 Tage von SRF Meteo mit Min/Max-Temperatur, Niederschlag und Wetterlage pro Tag.

Wochenplanung, Tourismus-Empfehlungen, Trendanalysen.

Nur fΓΌr Schweizer Standorte. Liefert maximal 7 Tage; Tage 1–3 sind deutlich verlΓ€sslicher als Tage 5–7.

latitude=47.3769, longitude=8.5417

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, idempotentHint, and destructiveHint=false, so safety is covered. The description adds meaningful behavioral context: the 7-day limit, decreasing reliability for days 5–7, and Switzerland-only support. These are not implied by the annotations and help the agent set expectations.

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

Conciseness5/5

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

The description is short, front-loaded with the main purpose, and uses structured <use_case> and <important_notes> tags to organize supplementary information without redundancy. Every sentence earns its place.

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

Completeness4/5

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

The description covers the core function, use cases, limitations, and an example. Since an output schema exists, the return format is already specified. It does not mention error scenarios or geocoding fallback, but for a forecast tool with good schema coverage, it is sufficiently 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?

The schema provides descriptions for all parameters (latitude, longitude, geolocation_id), so the description does not need to explain them. The example in the description ('latitude=47.3769, longitude=8.5417') offers a concrete usage hint but does not add meaning beyond the schema's own parameter descriptions. Baseline 3 applies.

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

Purpose5/5

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

The description uses a specific verb ('Liefert') and resource ('tΓ€gliche Wettervorhersage der nΓ€chsten 7 Tage von SRF Meteo') with concrete content (Min/Max-Temperatur, Niederschlag, Wetterlage). This clearly distinguishes it from siblings like srgssr_weather_current and srgssr_weather_forecast_24h.

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 <use_case> section explicitly states appropriate contexts (Wochenplanung, Tourismus-Empfehlungen, Trendanalysen). The <important_notes> provides a key caveat about reliability (Tage 1–3 vs 5–7) and geographic restriction (Nur fΓΌr Schweizer Standorte). However, it does not explicitly name alternative tools for 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.

srgssr_weather_search_locationA
Read-onlyIdempotent

Sucht Schweizer Standorte fΓΌr die Wettervorhersage nach Name oder Postleitzahl und gibt eine Liste von Orten mit geolocationId zurΓΌck.

Wetteranalysen, Reiseplanung und journalistische Recherchen zu Schweizer Standorten. Erster Schritt vor srgssr_weather_current, srgssr_weather_forecast_24h oder srgssr_weather_forecast_7day, um die prΓ€zise geolocationId fΓΌr eine Vorhersage zu ermitteln.

BeschrΓ€nkt auf Schweizer Standorte (SRF Meteo). Die zurΓΌckgelieferte geolocationId verbessert die QualitΓ€t der Wettervorhersagen gegenΓΌber reinen Koordinaten.

query='ZΓΌrich' | query='8001' | query='Lausanne'

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/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. The description adds valuable context: limited to Swiss locations (SRF Meteo) and that the geolocationId improves forecast quality. 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?

The description is concise, well-structured with <use_case>, <important_notes>, and <example> tags. Every sentence adds value, and the purpose is front-loaded.

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

Completeness5/5

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

For a simple search tool with one parameter and an existing output schema, the description covers purpose, usage guidelines, limitations, and examples completely. 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?

The schema provides a description for the query parameter (Ortname oder Postleitzahl). The tool description adds examples (query='ZΓΌrich', '8001', 'Lausanne') and context on usage, enhancing meaning 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 it searches for Swiss locations by name or zip code, returning a list with geolocationId. It uses a specific verb ('Sucht') and resource ('Schweizer Standorte'), and the <use_case> tag differentiates it from sibling weather tools.

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

Usage Guidelines5/5

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

The <use_case> tag explicitly says this is the first step before srgssr_weather_current, srgssr_weather_forecast_24h, or srgssr_weather_forecast_7day to get the geolocationId. This provides clear when-to-use and prerequisite context.

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. 6 tool updatesv2.0.0
    • Changedsrgssr_audio_get_shows3 fields changed
      • addedInput schema / $defs / AudioShowsInput
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "business_unit": {
        +      "$ref": "#/$defs/BusinessUnit",
        +      "description": "SRG SSR Unternehmenseinheit: 'srf', 'rts', 'rsi', 'rtr' oder 'swi'"
        +    },
        +    "channel_id": {
        +      "description": "Radiokanal-ID. Die v2-API listet Radiosendungen nur pro Kanal β€” gΓΌltige IDs liefert srgssr_audio_get_livestreams.",
        +      "maxLength": 200,
        +      "minLength": 1,
        +      "pattern": "^[A-Za-z0-9_-]+$",
        +      "title": "Channel Id",
        +      "type": "string"
        +    },
        +    "character_filter": {
        +      "anyOf": [
        +        {
        +          "pattern": "^[a-z#]$",
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "Anfangsbuchstabe der Sendungstitel: 'a'–'z' oder '#' fΓΌr alles Übrige. Weglassen, um alle Buchstaben abzufragen.",
        +      "title": "Character Filter"
        +    },
        +    "page": {
        +      "anyOf": [
        +        {
        +          "minimum": 1,
        +          "type": "integer"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": 1,
        +      "title": "Page"
        +    },
        +    "page_size": {
        +      "anyOf": [
        +        {
        +          "maximum": 100,
        +          "minimum": 1,
        +          "type": "integer"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": 20,
        +      "title": "Page Size"
        +    }
        +  },
        +  "required": [
        +    "business_unit",
        +    "channel_id"
        +  ],
        +  "title": "AudioShowsInput",
        +  "type": "object"
        +}
      • removedInput schema / $defs / VideoShowsInput
        Removed value: -{
        -  "additionalProperties": false,
        -  "properties": {
        -    "business_unit": {
        -      "$ref": "#/$defs/BusinessUnit",
        -      "description": "SRG SSR Unternehmenseinheit: 'srf', 'rts', 'rsi', 'rtr' oder 'swi'"
        -    },
        -    "page": {
        -      "anyOf": [
        -        {
        -          "minimum": 1,
        -          "type": "integer"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ],
        -      "default": 1,
        -      "title": "Page"
        -    },
        -    "page_size": {
        -      "anyOf": [
        -        {
        -          "maximum": 100,
        -          "minimum": 1,
        -          "type": "integer"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ],
        -      "default": 20,
        -      "title": "Page Size"
        -    }
        -  },
        -  "required": [
        -    "business_unit"
        -  ],
        -  "title": "VideoShowsInput",
        -  "type": "object"
        -}
      • changedInput schema / properties / params / $ref
        Previous value: -"#/$defs/VideoShowsInput"New value: +"#/$defs/AudioShowsInput"
    • Changedsrgssr_epg_get_programs1 field changed
      • addedInput schema / $defs / EpgProgramsInput / properties / broadcast_type
        Added value: +{
        +  "default": "tv",
        +  "description": "Sendertyp: 'tv' oder 'radio'",
        +  "pattern": "^(tv|radio)$",
        +  "title": "Broadcast Type",
        +  "type": "string"
        +}
    • Changedsrgssr_video_get_shows1 field changed
      • addedInput schema / $defs / VideoShowsInput / properties / character_filter
        Added value: +{
        +  "anyOf": [
        +    {
        +      "pattern": "^[a-z#]$",
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Anfangsbuchstabe der Sendungstitel: 'a'–'z' oder '#' fΓΌr alles Übrige. Weglassen, um alle Buchstaben abzufragen.",
        +  "title": "Character Filter"
        +}
    • Changedsrgssr_weather_current2 fields changed
      • changedInput schema / $defs / WeatherForecastInput / properties / geolocation_id / anyOf
        Previous value: -[
        -  {
        -    "maxLength": 50,
        -    "minLength": 1,
        -    "pattern": "^[A-Za-z0-9_-]+$",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maxLength": 50,
        +    "minLength": 1,
        +    "pattern": "^[A-Za-z0-9_.,-]+$",
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / $defs / WeatherForecastInput / properties / geolocation_id / description
        Previous value: -"Optionale geolocationId aus srgssr_weather_search_location fΓΌr prΓ€zisere Vorhersagen"New value: +"Optionale geolocationId aus srgssr_weather_search_location. Ohne Angabe wird sie aus latitude/longitude aufgelΓΆst."
    • Changedsrgssr_weather_forecast_24h2 fields changed
      • changedInput schema / $defs / WeatherForecastInput / properties / geolocation_id / anyOf
        Previous value: -[
        -  {
        -    "maxLength": 50,
        -    "minLength": 1,
        -    "pattern": "^[A-Za-z0-9_-]+$",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maxLength": 50,
        +    "minLength": 1,
        +    "pattern": "^[A-Za-z0-9_.,-]+$",
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / $defs / WeatherForecastInput / properties / geolocation_id / description
        Previous value: -"Optionale geolocationId aus srgssr_weather_search_location fΓΌr prΓ€zisere Vorhersagen"New value: +"Optionale geolocationId aus srgssr_weather_search_location. Ohne Angabe wird sie aus latitude/longitude aufgelΓΆst."
    • Changedsrgssr_weather_forecast_7day2 fields changed
      • changedInput schema / $defs / WeatherForecastInput / properties / geolocation_id / anyOf
        Previous value: -[
        -  {
        -    "maxLength": 50,
        -    "minLength": 1,
        -    "pattern": "^[A-Za-z0-9_-]+$",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maxLength": 50,
        +    "minLength": 1,
        +    "pattern": "^[A-Za-z0-9_.,-]+$",
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / $defs / WeatherForecastInput / properties / geolocation_id / description
        Previous value: -"Optionale geolocationId aus srgssr_weather_search_location fΓΌr prΓ€zisere Vorhersagen"New value: +"Optionale geolocationId aus srgssr_weather_search_location. Ohne Angabe wird sie aus latitude/longitude aufgelΓΆst."
  2. 15 tool updatesv1.0.0
    • First observedsrgssr_audio_get_episodes
    • First observedsrgssr_audio_get_livestreams
    • First observedsrgssr_audio_get_shows
    • First observedsrgssr_daily_briefing
    • First observedsrgssr_epg_get_programs
    • First observedsrgssr_polis_get_elections
    • First observedsrgssr_polis_get_votation_results
    • First observedsrgssr_polis_get_votations
    • First observedsrgssr_video_get_episodes
    • First observedsrgssr_video_get_livestreams
    • First observedsrgssr_video_get_shows
    • First observedsrgssr_weather_current
    • First observedsrgssr_weather_forecast_24h
    • First observedsrgssr_weather_forecast_7day
    • First observedsrgssr_weather_search_location

TDQS

A4/5.0
Disambiguation5/5

Each tool targets a clearly distinct resource or data view: video vs audio vs EPG vs weather vs politics. Weather tools separate search/current/24h/7day by timeframe, and polis tools separate votations, results, and elections. No two tools overlap in purpose.

Naming Consistency3/5

Most tools follow the srgssr_<domain>_get_<resource> pattern, but weather tools deviate (search, current, forecast_24h, forecast_7day omit 'get') and srgssr_daily_briefing abandons the pattern entirely. The consistent prefix and readable names keep it mostly predictable, but the mixed verb styles are noticeable.

Tool Count5/5

With 15 tools spanning five distinct domains (video, audio, EPG, weather, politics) plus a composite briefing tool, the count is well-scoped for the server's broad purpose. Each tool earns its place and none feel redundant.

Completeness3/5

The server covers video/audio catalogs, EPG, weather, and political votations thoroughly, but the political domain has a notable gap: elections can be listed via srgssr_polis_get_elections but there is no corresponding election results tool, creating a dead end for agents. No playback or search tools exist, though these may be outside the intended scope.

Maintenance

ActivityActive
ResponsivenessSlow

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
    A
    quality
    A
    maintenance
    An MCP server connecting AI models to the Swiss Federal Parliament via the Curia Vista OData API, enabling queries of motions, votes, members, sessions, and debate transcripts without authentication.
    7
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    MCP server for Switzerland's national metadata catalogue, enabling AI agents to discover datasets, APIs, public services, and publishers through free-text search and structured queries.
    13
    MIT

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/malkreide/srgssr-mcp'

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