srgssr-mcp
The server is an MCP interface that lets AI assistants access SRG SSR public data (Swiss broadcaster) — weather, TV/radio metadata, program guides, and Swiss votations/elections — through read-only tools.
Weather (SRF Meteo): search Swiss locations by name or postal code; get current conditions, 24-hour hourly forecasts, and 7-day daily forecasts.
TV/Video: list TV shows by business unit (SRF, RTS, RSI, RTR, SWI), fetch latest episodes, and list live TV channels.
Radio/Audio: list radio shows per channel, fetch audio episodes/podcasts, and list live radio stations.
EPG: retrieve the daily TV/radio program schedule for SRF, RTS, and RSI channels.
Polis (Swiss democracy): query popular votes and elections since 1900 with filters (year range, canton), and fetch detailed votation results.
Daily briefing: combine 24-hour weather with an EPG program schedule in one call (graceful degradation if one source fails).
Multi-unit coverage: operations across SRF (German), RTS (French), RSI (Italian), RTR (Romansh), and SWI (multilingual).
Safe and metadata-rich: read-only, OAuth2-authenticated, with provenance/license/source fields on every response.
Allows AI agents to query SRG SSR public APIs for weather forecasts, TV/radio metadata, program guides, and Swiss votation/election results since 1900.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@srgssr-mcpwhat's the weather in Zurich today?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
🇨🇭 Part of the Swiss Public Data MCP Portfolio
📺 srgssr-mcp
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).
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):
Create an account and log in
Under "My Apps", create a new application
Add the product SRG SSR PUBLIC API V2
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-mcpOr via pip:
pip install srgssr-mcpQuickstart
# 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-mcpTry 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.jsonWindows:
%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.serverTransport, 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 |
| Daily TV/radio program guide for SRF, RTS, RSI (e.g. |
| Detailed result of a closed Swiss popular vote (e.g. |
EPG station ids — hyphenated, and not the same as the livestream ids:
Business unit | TV | Radio |
SRF |
|
|
RTS |
|
|
RSI |
|
|
Prompts
Name | Arguments | Purpose |
|
| Structured analysis of a Swiss popular vote |
|
| 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 |
| Search for a location by name or postal code to obtain a | SRF Meteo |
| Current weather conditions for a Swiss location | SRF Meteo |
| Hourly 24-hour forecast | SRF Meteo |
| Daily 7-day forecast | SRF Meteo |
📺 Video (3 tools)
Tool | Description | Data Source |
| List TV shows for a business unit ( | SRG SSR IL |
| Retrieve latest episodes of a show | SRG SSR IL |
| List live TV channels | SRG SSR IL |
🎙️ Audio (3 tools)
Tool | Description | Data Source |
| List radio shows for one radio channel ( | SRG SSR IL |
| Retrieve audio episodes of a show | SRG SSR IL |
| List live radio stations | SRG SSR IL |
📅 EPG – Electronic Program Guide (1 tool)
Tool | Description | Data Source |
| Daily program schedule for a TV or radio channel | SRG SSR IL |
🗳️ Polis – Swiss Democracy (3 tools)
Tool | Description | Data Source |
| Popular votes since 1900 (national or cantonal) | Polis API |
| Detailed results of a specific vote | Polis API |
| Election results since 1900 | Polis API |
Supported Business Units
Code | Unit | Language |
| SRF (Schweizer Radio und Fernsehen) | German |
| RTS (Radio Télévision Suisse) | French |
| RSI (Radiotelevisione svizzera) | Italian |
| RTR (Radiotelevisiun Svizra Rumantscha) | Romansh |
| SWI swissinfo.ch | Multilingual |
Example Use Cases
Query | Tool |
"Weather in Zurich tomorrow?" |
|
"What's on SRF 1 tonight?" |
|
"Latest Tagesschau episodes?" |
|
"Popular votes in Canton Bern 2010–2020?" |
|
"Cantonal results of the mask initiative vote?" |
|
"All current RTS radio 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 |
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-mcporswiss-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 |
|
| What today's clients speak. The server answers with the revision asked for, or with the |
Per-request envelope |
| A request carrying the |
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.
What the server actually puts on the wire
The table above used to be an assertion held against SDK constants.
tests/test_spec_2026_07_28.py now sends real
requests through MCPServer.streamable_http_app() over httpx.ASGITransport
and asserts the answers, in both eras. What that measurement pins:
Property | On the wire |
Modern entry |
|
Handshake ceiling | A client asking for |
Server identity |
|
Freshness (SEP-2549) |
|
Tool display names |
|
Withdrawn at |
|
Logging capability | Not declared, and not used: SEP-2577 deprecates it as of |
The measurement paid for itself on its first run, against 425 green tests and
96% coverage: serverInfo.version was the empty string, every tools/call
came back isError (a FastMCP 1.x ctx.info(msg, **kwargs) call shape that
mcp 2.x rejects), and eight tools refused the enum string their own published
inputSchema advertises (ConfigDict(strict=True) demands an enum instance,
which no JSON payload can carry). None of that is visible from inside the
process — which is the whole argument for testing the wire.
Update Policy
SDK dependency updates land via Dependabot (
.github/dependabot.yml, monthly cadence, grouped under themcp-sdklabel) 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.mdand, 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:
HTTPS-only —
http://,file://,ftp://and other non-HTTPS schemes are rejected.Host allowlist — the URL hostname must equal
ALLOWED_HOSTS = {"api.srgssr.ch"}(exact match — subdomain tricks likeapi.srgssr.ch.attacker.exampleare blocked). One host covers everything: the OAuth2 token endpoint and every data endpoint.IP blocklist — every resolved IP for the hostname is checked against private, loopback, link-local (incl.
169.254.169.254cloud-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:
Update
ALLOWED_HOSTSinsrc/srgssr_mcp/_http.py.Document the reason in the PR and
CHANGELOG.md.Add a positive test case in
tests/test_unit.py(mirrortest_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
timestampon every recordRFC 5424 severity levels:
debug,info,notice,warning,error,critical,alert,emergencyPer-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 |
| OAuth token cache hits, internal state |
| Tool invocations, successful responses, server lifecycle |
| Recoverable conditions (rate-limit approaching, unsupported business unit) |
| API failures, timeouts (recoverable) |
| 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-mcpJSON 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
Credits & Related Projects
Data: SRG SSR Developer Portal · SRF Meteo · Polis API
Protocol: Model Context Protocol – Anthropic / Linux Foundation
Related:
Server | Description |
City of Zurich open data (OSTLUFT air quality, weather, parking, geodata) | |
Swiss public transport – OJP 2.0 journey planning, SIRI-SX disruptions | |
BAFU environmental data – air quality, hydrology, natural hazards | |
BFS STAT-TAB – 682 statistical datasets | |
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)
Portfolio: Swiss Public Data MCP Portfolio
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 toolssrgssr_audio_get_episodesSRG SSR Audio – Episoden einer SendungARead-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'
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior. The description adds useful behavioral context: episodes are returned in chronological descending order and limited to the latest ones. It does not mention pagination limits or response shape, but the output schema partially covers that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: core action, use case, ordering note, and example each appear in a distinct tagged section. There is no redundant filler, and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema, safety annotations, use case, ordering guarantee, and example, the description is sufficiently complete for a straightforward read-only episode lookup. Minor gaps such as explicit pagination behavior and sibling-tool differentiation prevent a perfect score.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The example (business_unit='srf', show_id='echo') adds practical meaning by showing how to supply the two required parameters. However, with 0% schema description coverage, the description does not explain page/page_size semantics or enumerate allowed business_unit values, leaving significant parameter meaning to inference.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Ruft ... ab') and resource ('neuesten Episoden einer Radiosendung'), making it clear the tool returns recent podcast/radio episodes. It is distinct from video and livestream siblings via the 'Radiosendung' qualifier, though it does not explicitly name a sibling alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The use-case tag ('Auffinden konkreter Radiobeiträge oder Podcast-Folgen') implies when the tool should be used. However, it gives no explicit guidance on when not to use it or how it relates to sibling tools like srgssr_audio_get_shows or srgssr_audio_get_livestreams.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
srgssr_audio_get_livestreamsSRG SSR Audio – Live-RadiosenderARead-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'
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds valuable behavioral context: it returns all live stations for a business unit, notes that RTR and SWI have few or no live channels, and explains the relationship to the EPG tool. This goes beyond the structured hints 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loaded with the core purpose, and structured into useful sections: use_case, important_notes, and example. Every sentence earns its place and no unnecessary details are included.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a single required parameter with enum values in the schema and an output schema present, the description provides complete guidance for selecting and invoking the tool. It covers purpose, alternatives, edge cases, and a concrete invocation example, leaving no critical gap for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents the business_unit parameter with an enum of allowed values and a descriptive German label. The description adds a concrete example (business_unit='srf') and clarifies that the parameter selects a SRG SSR Unternehmenseinheit, which helps an agent invoke it correctly despite the low schema description coverage noted in context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Listet alle Live-Radiosender einer SRG SSR Unternehmenseinheit auf.' It also names the sibling alternatives srgssr_video_get_livestreams for live TV and srgssr_audio_get_shows for show directories, so an agent can clearly distinguish this tool from related ones.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The use_case section explicitly states when to use the tool, including building radio directories and live-stream selection, and notes that it is a prerequisite for srgssr_epg_get_programs. It also gives exclusions and alternatives: use video livestreams for TV and audio shows for show directories.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
srgssr_audio_get_showsSRG SSR Audio – Radiosendungen auflistenARead-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'
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds useful behavioral context: it explains that shows are grouped by initial letter, and that omitting character_filter triggers multiple queries that are merged. This goes beyond the annotations. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with a main sentence, a use_case block, important_notes, and an example. Each section adds unique value without redundancy. The main sentence is front-loaded. While slightly verbose due to XML tags, the content is purposeful and well-organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has a nested parameter object and an output schema, the description covers the key operational details: required channel_id source, character_filter behavior, and podcast inclusion. Pagination is not explained, but that is a common pattern. The example further clarifies usage. Overall, the description is sufficient for an agent to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite the reported schema description coverage of 0%, the nested schema actually contains descriptions for channel_id, business_unit, and character_filter. The tool description reinforces and extends this by explaining the origin of channel_id and the query-count implications of character_filter. It does not detail page/page_size, but these are standard pagination parameters. The description compensates for the schema coverage gap effectively.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Listet Radiosendungen auf') and the resource (SRG SSR radio channel). The use_case provides browsing context, and the title reinforces the purpose. It is distinct from sibling tools like srgssr_audio_get_episodes or srgssr_audio_get_livestreams, though it doesn't explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The important_notes explicitly state that channel_id is mandatory and must come from srgssr_audio_get_livestreams, and explain the behavior of character_filter (single query vs. 27 combined queries). This gives clear operational guidance. It doesn't explicitly say when not to use this tool, but the use_case implies catalog browsing for radio/podcast formats.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
srgssr_daily_briefingSRG SSR – Tagesbriefing (Wetter + EPG)ARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| epg | Yes | |
| date | Yes | |
| source | No | Upstream provider identity. |
| license | No | Licensing terms. |
| weather | Yes | |
| channel_id | Yes | |
| fetched_at | No | UTC timestamp when this response was assembled. |
| business_unit | Yes | |
| provenance_url | No | Canonical developer portal for the upstream API. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and idempotentHint annotations, the description discloses meaningful runtime behavior: both data sources are fetched in parallel via 'asyncio.gather,' and a failure in one source still returns the other with a 'ToolErrorResponse' in the corresponding field. This graceful-degradation detail is genuinely useful for an agent deciding how robust the output is.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well structured, with the core purpose up front, then a use-case tag, important notes, and a concrete example. Every sentence adds value: the parallel-fetch note justifies the single-call approach, the degradation note sets expectations, and the example makes parameter formatting concrete.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema and annotations cover return/read-only semantics, the description provides everything needed to invoke the tool correctly: what it combines, when to use it, which business units support EPG, how failures behave, and a full parameter example. No critical operational context is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has very low description coverage and the description does not explain each parameter's role explicitly. However, the included example ('business_unit='srf', channel_id='srf-1', date='2026-04-30', latitude=47.3769, longitude=8.5417') conveys the expected shape and realistic values for all required parameters. It also mentions that EPG applies only to certain business units, which helps interpret the business_unit parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb and resource: it 'kombiniert die 24-Stunden-Wettervorhersage von SRF Meteo mit dem EPG-Tagesprogramm eines SRG SSR TV- oder Radiosenders.' This differentiates it from the sibling weather and EPG tools by explicitly presenting it as a combined briefing in a single call.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a concrete use case ('Abendplanung, redaktionelle Tages-Briefings') and explains the benefit over two sequential roundtrips: 'ein einzelner Tool-Call genügt statt zweier sequentieller Roundtrips.' It also notes an important limitation, that EPG is only available for SRF, RTS, and RSI. However, it does not explicitly name alternative sibling tools or state when users should prefer a dedicated weather-only or EPG-only 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_programsSRG SSR EPG – ProgrammvorschauARead-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'
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only, idempotent, and non-destructive, so the bar for behavioral disclosure is lower. The description adds valuable behavioral context: the channel_id naming convention, uppercase requirements for RTS radio, and the specific availability limitations. It does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and then structured into use case, important notes, and examples. The channel list is long but earns its place because it prevents likely mistakes with channel_id formatting and availability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple parameter objectabbility and the presence of an output schema, this description is complete enough for an agent to invoke the tool correctly. It covers what the tool does, which business units and channels are valid, formatting quirks, and concrete usage examples. No critical information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is low, but the description compensates by explaining the channel_id format, listing many valid channel IDs, and providing two worked examples that map business_unit, broadcast_type, channel_id, and date. It does not deeply define `date` beyond the schema pattern, but the examples and opening sentence supply sufficient semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action—retrieving the full electronic program guide for an SRG SSR TV or radio channel for a given day—with clear scope. It identifies the resource (program schedule) and is distinguishable from all sibling tools, which focus on weather, audio/video episodes, or polis data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: TV/radio program previews and editorial program tips. It also provides explicit exclusions ('nicht für RTR oder SWI') and known channels, but it does not explicitly name alternative tools or when to prefer them over this one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
srgssr_polis_get_electionsSRG SSR Polis – Schweizer WahlenARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, and non-destructive behavior. The description adds meaningful context by stating the historical depth (back to 1900), the available filters, and the returned fields. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well structured: one action sentence, followed by use case, important notes, and a concrete example. Every element earns its place and there is no redundant wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple filtered list tool with an output schema and strong annotations, the description provides enough to call it correctly: source system, data domain, historical range, filters, and sample usage. Pagination defaults are visible in the schema, so nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds meaning for year/canton filters and gives an example (year_from=2023), but it does not explain page, page_size, or year_to semantics. Pagination is left entirely to the schema names and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: it retrieves Swiss National Council, Council of States, and cantonal elections from the Polis system and lists the returned fields (date, designation, ID). The domain 'Wahlen' clearly separates it from the sibling 'Votations' tools without needing to open the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It names concrete use cases (historical election analyses, journalistic research) and states capabilities (filter by year/canton, data since 1900). It does not explicitly mention when not to use it or point to sibling alternatives such as get_votations, so it is clear but not fully prescriptive.
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_resultsSRG SSR Polis – AbstimmungsresultateARead-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'
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds useful behavioral context by specifying what data the tool returns for one votation, and it does not contradict the annotations. It omits error/rate-limit details, but the annotation coverage lowers the burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured, with use_case, important_notes, and example sections that each earn their place. The core retrieval meaning is front-loaded, and there is no unnecessary prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only one parameter, an output schema present, and annotations covering safety, the description is complete enough for correct invocation. It provides purpose, source of the required ID, a concrete example, and confirms the non-mutating nature via annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does so by explaining that votation_id must be obtained from srgssr_polis_get_votations and by providing the concrete example 'v1'. This adds meaningful provenance beyond the schema's pattern and title, even though it does not explain the ID's full format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Ruft detaillierte Resultate einer einzelnen Schweizer Volksabstimmung ab' and lists concrete result content (Ja/Nein-Anteile, Stimmbeteiligung, kantonale Ergebnisse, Annahme/Ablehnung). The word 'einzelnen' clearly distinguishes this tool from sibling srgssr_polis_get_votations, which lists votations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear use case ('Vertiefte politische Analysen, Visualisierung kantonaler Unterschiede') and an important dependency: the votation_id must come from srgssr_polis_get_votations. It does not explicitly name alternatives to avoid, but the singular scope and the cross-reference make the intended usage 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_votationsSRG SSR Polis – Schweizer AbstimmungenARead-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'
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive. The description adds valuable behavioral context beyond annotations: data goes back to 1900, the canton filter resolves to a locationid, and a year range translates into multiple queries because it maps to voting days – this is non-obvious and affects expectations. It also discloses pagination bounds (page_size 1–100). This goes beyond what annotations provide, though it doesn't cover rate limits or auth, which are likely irrelevant for this read-only endpoint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with XML-style tags that front-load the purpose, then the use case, important notes, and example. Every sentence earns its place – there is no filler. The <example> provides a concrete invocation that reinforces the parameter semantics. The length is justified by the density of operational details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a list-fetch tool with an output schema and annotations covering safety, the description is nearly complete. It covers purpose, usage, behavioral nuances, and parameter effects. The only minor gaps are the lack of explicit mention of the response's pagination structure or the meaning of 'openWorldHint', but those are not essential for correct invocation given the output schema exists. Overall, an agent has enough to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains the semantics of canton and year_from/year_to (how they get resolved), and mentions page_size's range. However, it does not explicitly explain the 'page' parameter or the default behavior of each parameter individually. The example clarifies usage but does not fully cover all parameters. It adds meaningful meaning for the two core filters but leaves page and page_size under-described, so a 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific verb ('Ruft ... ab') and resource ('Schweizer Volksabstimmungen und Referenden aus dem Polis-System'), and lists the returned fields (Datum, Titel, votation_id). It explicitly distinguishes itself from srgssr_polis_get_elections and positions itself as the prerequisite for srgssr_polis_get_votation_results, so an agent can tell it apart from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The <use_case> tag gives concrete contexts (historical analysis, journalistic research) and explicitly states when NOT to use it ('Für Wahlen ... stattdessen srgssr_polis_get_elections'). It also provides operational guidance in <important_notes> about filter behavior (canton→locationid, year→voting days) and pagination limits, leaving no ambiguity about when to select this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
srgssr_video_get_episodesSRG SSR Video – Episoden einer SendungARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, idempotent, and non-destructive behaviors. The description adds useful behavioral details beyond these: episodes are delivered in descending chronological order and pagination is constrained to page_size 1–50. This clarifies response structure and limits, which is valuable and does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured with XML-like tags (use_case, important_notes, example) that separate purpose, behavioral notes, and an example. The primary sentence is front-loaded, and every element adds value—there is no fluff. It could arguably be more compact, but is appropriately sized for the information conveyed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (3 parameters plus pagination), the description covers the essential behavioral aspects (ordering, pagination), provides a usage context, and links to the prerequisite tool for show_id. The output schema exists, so return values are documented elsewhere. What is missing is any mention of authorization or rate limits, but these are unlikely critical for a read-only listing tool with annotations covering safety. Overall, it is complete enough for an agent to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% (only business_unit has a description in the schema), so the description must compensate. It does so by providing a concrete example (business_unit='srf', show_id='tagesschau') and noting that show_id comes from get_shows. It also specifies the page_size range (1–50). The page parameter is not explicitly explained, but its meaning is clear from the pagination context and default value in the schema. Overall, enough meaningful guidance is added for the key parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action: 'Ruft die neuesten Episoden einer TV-Sendung ab' (retrieves the latest episodes of a TV show), and lists the returned fields (episode title, date, duration, video ID). It specifies the resource (TV show episodes) and verb, but does not explicitly contrast with the sibling audio_get_episodes. The tool name and title already convey the video domain, so differentiation is implicit rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a use case ('Recherche zu konkreten Sendungsausgaben' – research on specific show editions) and notes that a valid show_id comes from srgssr_video_get_shows, guiding the agent on a prerequisite. However, it does not explicitly state when to use this tool over alternatives (e.g., not for audio episodes) nor provide 'when-not' guidance. The context is helpful but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
srgssr_video_get_livestreamsSRG SSR Video – Live-TV-SenderARead-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'
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare read-only, idempotent, and non-destructive behavior. The description adds a useful behavioral caveat: RTR and SWI have fewer or no live channels, so an empty or short result is expected, and it surfaces the dependency on 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The main statement is one concise sentence, followed by compact, well-structured tags for use case, caveat, and example. There is no filler or repetition; every element earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only tool with an output schema and strong annotations, the description covers what the tool does, when to use it, an important business-unit caveat, and an example. Nothing needed to select or invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully documents business_unit with an enum and a description, so the example (business_unit='srf') is helpful but adds little new semantic meaning. Since the schema carries the parameter burden, this is a solid baseline rather than an exceptional contribution.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the specific operation ('Listet alle Live-TV-Sender...') and the scope ('einer SRG SSR Unternehmenseinheit'), making it clear what resource is returned. It also distinguishes this tool from siblings like srgssr_audio_get_livestreams and srgssr_video_get_shows.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The use_case explicitly frames this as the live-stream selection step and prerequisite for srgssr_epg_get_programs, which needs a channel_id. It lacks explicit when-not-to-use guidance against the audio or on-demand siblings, but the main usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
srgssr_video_get_showsSRG SSR Video – Sendungen auflistenARead-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'
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly, openWorld, idempotent, and non-destructive behavior. The description adds valuable context beyond annotations: the API groups shows by first letter, omitting character_filter triggers 27 merged queries, and page_size applies per letter. This discloses a significant performance behavior without contradicting any annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loaded with the verb+resource statement, and efficiently organized into use case, important notes, and example. Every sentence contributes useful information, especially the 27-request warning, with no padding or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a list-only tool with annotations and an output schema, the description covers the non-obvious behavior that an agent needs to invoke it correctly: optional letter filtering, per-letter pagination, request-count implications, and the sibling to use for episodes. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema description coverage is low, the description compensates well for the key parameters: it explains the behavioral impact of character_filter, notes that page_size is per letter, and provides a concrete example with business_unit='srf' and character_filter='t'. It does not add semantic depth for page, but schema defaults and titles cover its basic usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Listet') and resource: TV shows of an SRG SSR business unit, including title, ID, and description. The use case tag ('Katalog-Browsing für TV-Sendungen') makes the tool's role clear and distinguishes it from audio/video siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The important_notes give explicit guidance: without character_filter, 27 requests are executed and should only be made when the whole catalog is truly needed; with character_filter, a single request is made. It also routes episode lookups to srgssr_video_get_episodes via show_id, which is direct when-to-use versus 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_currentSRF Meteo – Aktuelles WetterARead-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)
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds non-annotated behavioral context: the Swiss-only coordinate bounds, the recommendation to use geolocation_id from srgssr_weather_search_location, and the data fields returned. No contradiction with annotations; the description complements them well.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The main sentence is dense and informative, and the use_case, important_notes, and example are cleanly separated with XML tags. Every section contributes operational value (purpose, scenarios, constraints, example) and there is no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and annotations already cover safety properties, the description supplies the remaining practical context: use cases, geographic restrictions, and a tool relationship. It is complete enough for correct invocation; minor details like measurement units are not necessary for calling the tool successfully.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is reported as 0% at the top level, though nested properties do have descriptions. The description compensates by providing a concrete coordinate example (Zürich) and the valid lat/lon ranges, and it clarifies the source of geolocation_id. It does not explain the 'params' wrapper or elaborate on parameter types beyond what the schema already contains, so coverage is moderate rather than comprehensive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb 'Liefert' and a precise resource: 'aktuelle Wettersituation von SRF Meteo für einen Schweizer Standort', followed by the returned data fields. The term 'aktuelle' plus the listed siblings (forecast_24h, forecast_7day) make the distinction between current weather and forecasts clear without needing to inspect schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The <use_case> section explicitly lists suitable scenarios (outdoor activities, traffic reports, energy forecasts, editorial enrichment), and the <important_notes> section gives a geographic boundary and recommends geolocation_id from srgssr_weather_search_location. It does not explicitly say 'use forecast tools for future conditions', but the sibling names and 'aktuelle' strongly imply the boundary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
srgssr_weather_forecast_24hSRF Meteo – 24-Stunden-PrognoseARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, establishing a safe read-only operation. The description adds valuable behavioral constraints: it works only for Swiss coordinates (latitude/longitude ranges) and returns at most 24 hourly data points. It also notes that geolocation_id can be omitted and will be resolved from coordinates. These details go beyond 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the core purpose is in the first sentence, followed by clearly structured XML-style tags for use cases, important notes, and an example. There is no redundancy or filler; every section adds distinct value. This is an exemplary structure for a tool description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of a rich input schema and an output schema, the description covers the essential context: geographic constraints, data point limit, and a usage example. It does not mention units, timezone, or the exact response format, but those are likely defined in the output schema. The description is sufficiently complete for an agent to call the tool correctly and interpret the results, though a note about timezone could have been included.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, meaning the description does not repeat parameter explanations. However, the input schema itself provides detailed descriptions for latitude, longitude, and geolocation_id, so the agent can rely on the schema. The description adds a concrete example (latitude=47.3769, longitude=8.5417) which illustrates usage but does not explain parameter semantics beyond that. Since the schema already covers the parameters thoroughly, a score of 3 is appropriate, though the description could have added a note about the optional geolocation_id resolution.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool's purpose clearly: it delivers the hourly weather forecast for the next 24 hours from SRF Meteo. The verb 'Liefert' and the specific resource 'Wettervorhersage der nächsten 24 Stunden' are explicit. It distinguishes from siblings like srgssr_weather_current (current weather) and srgssr_weather_forecast_7day (7-day forecast) by the time frame, and from srgssr_weather_search_location by purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The use_case tag provides practical contexts (Tagesplanung, Veranstaltungsorganisation, kurzfristige Wetterwarnungen) that indicate when this tool is appropriate. It does not explicitly compare with alternatives or state when not to use it, but the use cases and the time-frame specificity offer clear guidance for selection. The important_notes also constrain valid input, which indirectly guides usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
srgssr_weather_forecast_7daySRF Meteo – 7-Tages-PrognoseARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds valuable behavioral context beyond annotations: the reliability drop-off (Tage 1–3 vs. 5–7) and the geographic limitation to Switzerland. This exceeds the baseline given annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured with a clear main sentence followed by tagged use_case, important_notes, and example sections. Each part earns its place, and the most critical information (what it does, Swiss scope, reliability) is front-loaded. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the main purpose, use cases, key constraints, and provides an example. Since an output schema exists, return-value details are not needed in the description. It lacks explicit differentiation from the 24h forecast tool, but the 7-day scope makes that implicit. Overall, an agent can call this tool correctly with the provided information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the top-level param, but the nested properties have descriptions. The tool description provides an example with concrete latitude/longitude values and notes the Swiss location constraint, which partially compensates for the low coverage. However, it does not explain the optional geolocation_id parameter or specify units for temperature/precipitation, so it doesn't fully compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Liefert') and resource ('tägliche Wettervorhersage der nächsten 7 Tage von SRF Meteo') with concrete data fields (Min/Max-Temperatur, Niederschlag, Wetterlage). It clearly distinguishes from siblings like srgssr_weather_forecast_24h and srgssr_weather_current by specifying the 7-day horizon.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The use_case section provides clear contexts (Wochenplanung, Tourismus-Empfehlungen, Trendanalysen) and the important_notes gives constraints (only Swiss locations, reliability window). However, it does not explicitly mention alternatives or when not to use this tool versus siblings, so it lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
srgssr_weather_search_locationSRF Meteo – Standort suchenARead-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'
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, covering the safety profile. The description adds valuable context beyond annotations: it explains that the geolocationId improves forecast quality compared to coordinates, and reiterates the Swiss scope. It does not contradict annotations and provides useful operational nuance.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with use_case, important_notes, and example sections. Every part serves a purpose: the core sentence states functionality, use_case gives context, important_notes adds scope and benefit, and examples clarify parameter values. It's slightly longer than necessary but remains efficient and front-loads the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter search tool with an output schema (not shown), the description is complete: it explains what it returns (list with geolocationId), when to use it, the Swiss scope, and gives concrete examples. An agent has everything needed to invoke it correctly and interpret its role in the forecast workflow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the signal reports 0% schema description coverage, the schema actually includes a description for the query property. The tool description reinforces the format with examples (query='Zürich', '8001', 'Lausanne') and explicitly mentions 'Name oder Postleitzahl'. This compensates well for any perceived coverage gap and clarifies acceptable input patterns beyond the regex.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action (search Swiss locations), the resource (weather forecast locations), and the output (list with geolocationId). It distinguishes itself from sibling weather tools by explicitly positioning itself as the first step to obtain a precise geolocationId before calling forecast tools. No ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 precise geolocationId. This gives clear when-to-use guidance and names the alternatives. The important_notes also sets scope (Swiss locations only), preventing misuse for non-Swiss queries.
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.
6 tool updates
v2.0.0- Changed
srgssr_audio_get_shows3 fields changed- added
Input schema / $defs / AudioShowsInputAdded 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" +} - removed
Input schema / $defs / VideoShowsInputRemoved 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" -} - changed
Input schema / properties / params / $refPrevious value: -"#/$defs/VideoShowsInput"New value: +"#/$defs/AudioShowsInput"
- Changed
srgssr_epg_get_programs1 field changed- added
Input schema / $defs / EpgProgramsInput / properties / broadcast_typeAdded value: +{ + "default": "tv", + "description": "Sendertyp: 'tv' oder 'radio'", + "pattern": "^(tv|radio)$", + "title": "Broadcast Type", + "type": "string" +}
- Changed
srgssr_video_get_shows1 field changed- added
Input schema / $defs / VideoShowsInput / properties / character_filterAdded 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" +}
- Changed
srgssr_weather_current2 fields changed- changed
Input schema / $defs / WeatherForecastInput / properties / geolocation_id / anyOfPrevious 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" + } +] - changed
Input schema / $defs / WeatherForecastInput / properties / geolocation_id / descriptionPrevious 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."
- Changed
srgssr_weather_forecast_24h2 fields changed- changed
Input schema / $defs / WeatherForecastInput / properties / geolocation_id / anyOfPrevious 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" + } +] - changed
Input schema / $defs / WeatherForecastInput / properties / geolocation_id / descriptionPrevious 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."
- Changed
srgssr_weather_forecast_7day2 fields changed- changed
Input schema / $defs / WeatherForecastInput / properties / geolocation_id / anyOfPrevious 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" + } +] - changed
Input schema / $defs / WeatherForecastInput / properties / geolocation_id / descriptionPrevious 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."
15 tool updates
v1.0.0- First observed
srgssr_audio_get_episodes - First observed
srgssr_audio_get_livestreams - First observed
srgssr_audio_get_shows - First observed
srgssr_daily_briefing - First observed
srgssr_epg_get_programs - First observed
srgssr_polis_get_elections - First observed
srgssr_polis_get_votation_results - First observed
srgssr_polis_get_votations - First observed
srgssr_video_get_episodes - First observed
srgssr_video_get_livestreams - First observed
srgssr_video_get_shows - First observed
srgssr_weather_current - First observed
srgssr_weather_forecast_24h - First observed
srgssr_weather_forecast_7day - First observed
srgssr_weather_search_location
TDQS
Scored across 15 tools
Each tool has an explicit domain prefix (epg, weather, audio, video, polis) and a unique resource/action combination, so agents can reliably distinguish them. The only composite tool, srgssr_daily_briefing, is clearly documented as an aggregation rather than a primitive operation.
Most tools follow the srgssr_<domain>_<verb>_<noun> pattern with snake_case throughout, which is readable and predictable. However, srgssr_daily_briefing omits a domain and verb, and weather tools use adjective/noun forms like srgssr_weather_current, so the pattern is not perfectly uniform.
15 tools is at the upper end of the ideal range but is justified by the multi-domain scope: media/EPG, weather, and politics each have compact, purposeful sets. There is no clear redundancy; srgssr_daily_briefing serves as a deliberate convenience aggregate.
Core chains are well covered: weather search feeds forecasts, livestreams/shows feed episodes, and votations feed votation results. However, srgssr_polis_get_elections lists elections but has no corresponding election-results tool, leaving election analysis at a dead end. Media search and single-item detail are also absent but less critical.
Maintenance
Related MCP Connectors
- UnifAPIOAuthcom.unifapi
Hosted MCP server for live public-data APIs and Skills for AI agents.
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
Hosted MCP server for Xweather weather data: conditions, forecasts, alerts, and more.
MCP server that lets AI assistants use all OneSchema features exposed via the public API.
Related MCP Servers
- AlicenseAqualityDmaintenanceSwiss open data MCP server — transport, weather, geodata, companies, etc,. Zero API keys.76275 npm22MIT
- AlicenseAqualityAmaintenanceAn 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.7MIT
- AlicenseBqualityDmaintenanceMCP server exposing all major Swiss official public APIs as native tools for any MCP-compatible AI agent.342 npmMIT
- AlicenseAqualityAmaintenanceMCP 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.13MIT