srgssr-mcp
The srgssr-mcp server connects AI assistants to SRG SSR (Switzerland's national public broadcaster) public APIs, providing read-only access to Swiss weather, TV/radio metadata, program guides, and historical democratic data.
π¦οΈ Weather (SRF Meteo, Switzerland only)
Search locations by name or postal code
Get current conditions (temperature, wind, precipitation, humidity)
24-hour hourly forecast and 7-day daily forecast
πΊ Video / TV
List TV shows, fetch latest episodes, and get live TV channels for any SRG SSR business unit (SRF, RTS, RSI, RTR, SWI)
ποΈ Audio / Radio
List radio shows/podcasts, fetch latest episodes, and get live radio stations for any business unit
π EPG (Electronic Program Guide)
Get the full daily program schedule for any SRF, RTS, or RSI TV/radio channel on a specific date
π³οΈ Polis (Swiss Democracy)
Browse popular votes and referenda since 1900 (filterable by year range and canton)
Retrieve detailed results for a specific vote (yes/no shares, turnout, cantonal breakdowns)
Browse election results (National Council, Council of States, cantonal) since 1900
π Daily Briefing
Combined single-call tool aggregating the 24-hour weather forecast and EPG for a specified channel
Key constraints: EPG is only available for SRF, RTS, and RSI (not RTR or SWI). All access is read-only. Requires free OAuth2 credentials from developer.srgssr.ch; commercial use requires written permission.
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 "Install 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.
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_episodesARead-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 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.
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.
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.
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.
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.
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_livestreamsARead-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 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.
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.
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.
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.
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.
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_showsARead-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 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.
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.
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.
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.
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.
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_briefingARead-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?
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.
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.
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.
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.
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.
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_programsARead-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 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.
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.
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.
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.
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.
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_electionsARead-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 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.
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.
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.
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.
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.
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_resultsARead-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 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.
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.
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.
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.
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.
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_votationsARead-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?
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.
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.
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.
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.
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.
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_episodesARead-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?
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.
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.
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.
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.
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.
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_livestreamsARead-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?
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.
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.
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.
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.
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.
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_showsARead-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?
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.
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.
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.
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.
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.
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_currentARead-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 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.
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.
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.
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.
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.
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_24hARead-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 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.
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.
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.
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.
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.
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_7dayARead-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, 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.
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.
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.
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.
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.
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_locationARead-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=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.
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.
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.
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.
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.
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.
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
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.
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.
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.
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
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
- 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.
1Self-hosted MCP gateway: turn any API, database or MCP server into AI connectors β no code.
Related MCP Servers
- AlicenseAqualityDmaintenanceSwiss open data MCP server β transport, weather, geodata, companies, etc,. Zero API keys.7622722MIT
- 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.3416MIT
- 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
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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