media-mcp
The media-mcp server provides a centralized interface to manage a self-hosted media stack (Sonarr, Radarr, qBittorrent via Qui, Prowlarr, Jellyfin).
Sonarr (TV): Check system status, health, disk space. List, search, add, delete TV series; manage quality profiles and root folders. View download queue with diagnostics, history (grabs, imports, deletions), upcoming episodes. Manage seasons: monitor/unmonitor, trigger searches; delete episode files, seasons, or entire series. Calendar of upcoming episodes.
Radarr (Movies): Check system status, health, disk space. List, search, add, delete movies; manage quality profiles and root folders. View download queue with diagnostics, history, upcoming releases. Manage movies: monitor/unmonitor, trigger searches; delete movie files or entire movies. Calendar of upcoming releases.
qBittorrent (via Qui): List instances, torrents (by name/hash), get details (bridging Sonarr/Radarr downloadId). Pause, resume, delete torrents (with optional file deletion).
Prowlarr: Check status/health, list indexers with health, test connectivity. Cross-search all indexers for any content (movies, ebooks, manga, software, etc.). Grab releases and send to download client.
Jellyfin: Server status, list movies. Manage collections: create, delete, list, add/remove movies, view contents. Set descriptions/lock overviews. Advanced movie resolution: match by tmdbId, Jellyfin id, or approximate title (with Radarr fallback).
Coordinated Purge: Delete TV season files or movie files from Sonarr/Radarr AND their associated torrents (including cross-seeds) from qBittorrent in one operation, with dry-run preview.
Safety: All destructive actions default to dry-run (
confirm=False) and require explicitconfirm=Trueto execute. Movie/collection references support fuzzy matching with ambiguity detection.
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., "@media-mcpSearch for the movie 'Inception' and add it to Radarr"
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.
media-mcp
Serveur MCP pour piloter un stack média self-hosted : Sonarr + Radarr, qBittorrent via qui (autobrr), Prowlarr (indexeurs) et Jellyfin (collections curatives / BoxSets).
Deux transports : stdio (défaut, dev local / Claude Desktop) et HTTP (service Docker sur le homelab). Voir Déploiement.
Prérequis
Python 3.11+
uvinstallé
Related MCP server: MCP *arr Server
Installation
# Cloner / se placer dans le répertoire du projet
cd media-mcp
# Installer les dépendances
uv sync
# Copier et remplir les variables d'environnement
cp .env.example .env
# Éditer .env avec vos URLs et clés APILancement en développement
uv run python -m media_mcpLe serveur démarre en mode stdio (défaut) et attend des messages MCP sur stdin/stdout.
Pour le lancer en HTTP localement :
MCP_TRANSPORT=http PORT=8080 uv run python -m media_mcp
# endpoint MCP : http://127.0.0.1:8080/mcpConfiguration Claude Desktop
Ajouter dans ~/Library/Application Support/Claude/claude_desktop_config.json
(macOS) ou %APPDATA%\Claude\claude_desktop_config.json (Windows) :
{
"mcpServers": {
"media-mcp": {
"command": "uv",
"args": ["--directory", "/chemin/absolu/media-mcp", "run", "python", "-m", "media_mcp"],
"env": {
"SONARR_URL": "http://localhost:8989",
"SONARR_API_KEY": "xxx",
"RADARR_URL": "http://localhost:7878",
"RADARR_API_KEY": "xxx",
"QUI_URL": "https://qui.example.com",
"QUI_API_KEY": "xxx",
"QUI_INSTANCE": "",
"PROWLARR_URL": "http://localhost:9696",
"PROWLARR_API_KEY": "xxx"
}
}
}
}Remplacer /chemin/absolu/media-mcp par le chemin réel du projet.
Variables d'environnement
Variable | Description | Défaut |
| Transport : |
|
| Interface d'écoute (transports HTTP uniquement) |
|
| Port d'écoute (transports HTTP uniquement) |
|
| URL de base Sonarr |
|
| Clé API Sonarr | (requis) |
| URL de base Radarr |
|
| Clé API Radarr | (requis) |
| URL de base de l'instance qui | (requis pour qBit) |
| Clé API qui (Settings > API Keys) | (requis pour qBit) |
| Instance qBit ciblée (id ou nom) ; vide = auto si une seule | (optionnel) |
| URL de base Prowlarr | (requis pour Prowlarr) |
| Clé API Prowlarr | (requis pour Prowlarr) |
| URL de base Jellyfin (ex. | (requis pour Jellyfin) |
| Clé API Jellyfin (Dashboard > API Keys) | (requis pour Jellyfin) |
Tools disponibles
Sonarr
Tool | Type | Description |
| read | Statut et version de Sonarr |
| read | Liste des séries suivies |
| read | Recherche une série (pour ajout) |
| read | Profils de qualité disponibles |
| read | Dossiers racine configurés |
| read | File de téléchargement + diagnostic des items bloqués (voir ci-dessous) |
| read | Espace disque par volume, le plus plein en premier |
| read | Avertissements de santé de l'instance |
| read | Événements récents (grab/import/…) avec downloadId ; filtre |
| write | Retire un item (par |
| read | Épisodes à venir via calendrier |
| read | Détail saison par saison d'une série |
| read | Liste les épisodes d'une saison (E-num, titre, hasFile ✓/✗, monitored ✓/✗, id, fileId) |
| write | Ajoute une série |
| write | (Dé)monitore une saison précise |
| write | Lance la recherche d'une saison |
| destructive | Supprime tous les fichiers d'une saison |
| destructive | Supprime un fichier d'épisode |
| destructive | Supprime une série |
Radarr
Tool | Type | Description |
| read | Statut et version de Radarr |
| read | Liste des films suivis |
| read | Recherche un film (pour ajout) |
| read | Profils de qualité disponibles |
| read | Dossiers racine configurés |
| read | File de téléchargement + diagnostic des items bloqués (voir Sonarr) |
| read | Espace disque par volume, le plus plein en premier |
| read | Avertissements de santé de l'instance |
| read | Événements récents (grab/import/…) avec downloadId ; filtre |
| write | Retire un item (par |
| read | Films à venir via calendrier |
| write | Ajoute un film |
| write | (Dé)monitore un film |
| write | Lance la recherche d'un film |
| destructive | Supprime le fichier d'un film (garde le film suivi) |
| destructive | Supprime un film |
qBittorrent (via qui)
Accès uniquement via qui (le gestionnaire web multi-instance d'autobrr), jamais via l'API qBittorrent directe. Auth par header
X-API-Key. Les tools ciblent l'instance résolue depuisQUI_INSTANCE(id ou nom) ; si vide et qu'une seule instance existe, elle est choisie automatiquement ; si plusieurs, une erreur liste les instances disponibles.
Tool | Type | Description |
| read | Instances qBittorrent gérées par qui (id + nom) |
| read | Torrents de l'instance (nom, hash complet, état, %, taille, ratio, catégorie) ; |
| read | Détail d'un torrent par hash ou préfixe unique (pont avec le |
| control | Met un torrent en pause (réversible, pas de confirm) |
| control | Reprend un torrent (réversible, pas de confirm) |
| destructive | Retire un torrent de qBittorrent, avec option suppression des fichiers |
Les tools prenant un hash acceptent le hash complet (40 car., copiable depuis
qbit_list_torrents) ou un préfixe unique ; un préfixe ambigu liste les candidats sans
agir.
Le hash qBittorrent est la clé de liaison : c'est la valeur renvoyée par le downloadId
de l'historique Sonarr/Radarr. La comparaison est insensible à la casse (qBit renvoie le
hash en minuscules, les *arr souvent en majuscules).
Prowlarr (indexeurs)
Gestionnaire d'indexeurs Servarr — API en /api/v1 (et non v3), auth X-Api-Key.
Orienté diagnostic des indexeurs.
Tool | Type | Description |
| read | Version de Prowlarr |
| read | Indexeurs configurés (id, nom, activé ✓/✗, protocole, privacy, catégories, tags), triés par nom |
| read | Indexeurs en échec / désactivés temporairement (+ |
| read | Avertissements globaux Prowlarr (type/source/message) |
| action | Teste la connectivité d'un indexeur → PASS/FAIL + message (pas de confirm) |
| action | Teste tous les indexeurs → résumé pass/fail, échecs mis en avant |
| read | Recherche cross-indexeurs (tout contenu) triée par seeders ; affiche |
| acquisition | Envoie une release au download client de Prowlarr (dry-run/confirm) |
prowlarr_indexer_statusne porte pas de message textuel de raison (l'API/indexerstatusn'expose queindexerId+ horodatages) : il croise la liste des indexeurs pour le nom et affiche la date de reprise (disabledTill). Pour le « pourquoi » global, voirprowlarr_health.
Recherche & grab (contenu hors-*arr : ebooks, manga, logiciels…)
prowlarr_search interroge tous les indexeurs et renvoie, par release, la référence de grab
(guid + indexerId) à passer à prowlarr_grab. Les résultats sont triés par seeders
décroissant (le limit de Prowlarr n'étant pas un vrai plafond, la coupe est faite côté client).
prowlarr_grab envoie la release au download client configuré dans Prowlarr (dry-run par
défaut ; confirm=True pour exécuter). Aucune catégorie n'est passée par le MCP : le
classement final dans qBittorrent (ebook / logiciel / autre) est décidé par les Mapped
Categories du download client, à configurer dans l'UI Prowlarr (Settings → Download
Clients). S'il n'y a aucun download client, le grab renvoie un message clair (à ajouter d'abord
dans l'UI). La recherche/le grab avec catégorie explicite restent gérés côté Prowlarr, pas ici.
Jellyfin (collections curatives / BoxSets)
Serveur média Jellyfin — endpoints à la racine du serveur (pas de préfixe /api/vN),
auth par header Authorization: MediaBrowser Token="<clé>". Objectif : créer et gérer des
collections curatives (BoxSets) avec description, pilotables en langage naturel.
Client autonome (ne dérive PAS d'
ArrClient, commeQuiClient) : Jellyfin n'est pas une API *arr. LeuserIdrequis par les endpoints d'items est résolu une fois (premier comptePolicy.IsAdministratorviaGET /Users) puis mis en cache pour la durée du process.
Tool | Type | Description |
| read | Nom + version du serveur (valide la clé API) |
| read | Films de la bibliothèque (short id, titre, année, tmdbId) |
| read | Collections/BoxSets (short id, nom, nb d'items, description tronquée) |
| read | Contenu d'une collection (par nom ou id) |
| read | Stats de visionnage par utilisateur sur |
| read | Qui regarde quoi maintenant : utilisateur, appareil/client, item, état, progression, direct play/transcode |
| read | Historique de lecture d'un item (qui, quand, combien de fois, combien de temps) — nécessite Playback Reporting |
| action | Déclenche un scan de bibliothèque : global ( |
| write | Crée une collection depuis une liste de films ; option description (verrouillée) |
| write | Ajoute des films à une collection |
| write | Retire des films d'une collection (les films restent en bibliothèque) |
| write | Écrit la description d'un item (collection ou film) ; |
| destructive | Supprime le conteneur collection (les films sont conservés) |
Résolution des films (movies) et références (collection_ref / item_ref)
Le paramètre movies accepte une liste mixte : tmdbId numériques, ids Jellyfin (ou
préfixe unique de 8 car.), ou titres approximatifs (casse/accents/articles/ponctuation
normalisés — « Le Solitaire » ≈ « solitaire »). La résolution est une cascade qui s'arrête
au premier niveau donnant un match unique :
tmdbIdexact (viaProviderIds.Tmdb)id Jellyfin, ou préfixe unique
NameJellyfin normaliséOriginalTitleJellyfin normalisérepli Radarr — Radarr connaît les titres localisés/alternatifs (
title,originalTitle,alternateTitles) que Jellyfin n'indexe parfois que sous un titre anglais. Le titre demandé y est matché, sontmdbIdrécupéré, puis rebranché sur Jellyfin partmdbId. Utilise le client Radarr interne (jamais un appel vers nos propres tools MCP) ; si Radarr n'est pas configuré ou est injoignable, le niveau 5 est simplement sauté (not_foundpropre, aucune exception).
La règle est identique à chaque niveau : un seul candidat → matched ; plusieurs → ambiguous (candidats remontés, jamais un choix arbitraire) ; aucun → niveau suivant.
Chaque movies déclenche au plus un fetch bibliothèque Jellyfin + au plus un fetch
Radarr (ce dernier uniquement si une référence atteint le niveau 5, en lazy). Les dry-runs
(confirm=False) affichent exactement les films matched / ambiguous / not found avant toute
écriture, avec une colonne indiquant le moyen de résolution (tmdb / id / title /
original-title / via-radarr) ; un match via-radarr (le plus faillible) affiche en clair le
titre Radarr ET le titre Jellyfin retenus. Sur confirm=True, une création/modification
refuse de procéder si des références restent non résolues (pas de collection partielle en
silence). ProviderIds.Tmdb est le pont fiable avec le tmdbId Radarr (jamais de match sur le
titre en interne quand un tmdbId existe).
Sessions actives (jellyfin_active_sessions)
GET /Sessions renvoie tous les clients connectés, y compris ceux qui ne lisent rien : dans
ce cas NowPlayingItem est absent (pas null) et PlayState ne contient que
CanSeek/IsPaused/IsMuted/RepeatMode/PlaybackOrder. Le tool ne liste donc que les
sessions avec NowPlayingItem et se contente de compter les clients connectés inactifs
(« No active playback sessions (3 client(s) connected but idle) »). Par session : utilisateur,
client + appareil, item (épisodes rendus « Série — S11E06 — Titre »), état playing/paused,
progression position / durée (%) depuis les ticks (100 ns), et méthode de lecture
(PlayState.PlayMethod : DirectPlay / DirectStream / Transcode) enrichie de TranscodingInfo
(codecs, TranscodeReasons) quand ce bloc est présent. Le tool décrit l'état, il n'en
tire aucune conclusion (l'agent décide, par exemple, s'il est prudent de lancer une suppression).
Limite assumée : lors de la découverte aucune session n'était en cours de lecture (3 clients connectés, 0 en lecture). Les champs propres à une lecture active (
PlayState.PositionTicks,PlayState.PlayMethod,TranscodingInfo) sont donc issus du contrat Jellyfin, pas d'une capture live — et l'OpenAPI de ce serveur répond 500, un plugin cassant sa génération. Ils sont tous lus défensivement (absents →?/unknown, jamais d'exception), ce que le cas idle exerce déjà en vrai et qu'un test couvre explicitement.
Scan de bibliothèque (jellyfin_scan_library)
Deux routes, existence vérifiée sans effet de bord (un GET sur une route POST-only répond
405 Method Not Allowed = la route existe ; 404 = elle n'existe pas) :
Cas | Route | Effet |
|
| Scan global, aucun paramètre |
|
| Scan ciblé sur une bibliothèque |
La bibliothèque est résolue via GET /Library/VirtualFolders (par nom, accents/casse
normalisés — « series » trouve « Séries » —, ou par id/préfixe 8 car.). Ces entrées exposent
leur id sous ItemId (pas Id), d'où un résolveur dédié dans jellyfin_resolve.py.
Introuvable ou ambigu → message clair listant les bibliothèques disponibles, aucune action.
Paramètres de /Items/{id}/Refresh confirmés en live (valeur invalide → 400 nommant le
paramètre) : metadataRefreshMode et imageRefreshMode sont des enums validés
(Default | None | ValidationOnly | FullRefresh), replaceAllMetadata,
replaceAllImages et regenerateTrickplay sont des booléens bindés. Il n'existe PAS de
paramètre recursive (il est ignoré : rafraîchir un dossier parcourt déjà ses enfants). Le
tool envoie Default/Default avec replaceAll*=false — la sémantique « chercher les
nouveaux/anciens fichiers » de l'UI, qui conserve métadonnées et images.
confirm=False (défaut) est un dry-run strict : il annonce global (avec la liste des
bibliothèques) ou ciblé (nom, id, type, chemins) et n'émet aucun POST. confirm=True
déclenche ; Jellyfin exécute ensuite le scan de façon asynchrone (suivi dans
Dashboard > Scheduled Tasks), la réponse confirme donc le déclenchement, pas la fin du scan.
Historique par item (jellyfin_item_history)
Il n'existe aucun filtre par item côté API : les paramètres item_id/itemId passés à
user_activity sont acceptés (HTTP 200) mais ignorés — vérifié en live, payload identique.
Le seul chemin réel est l'endpoint SQL du plugin, POST /user_usage_stats/submit_custom_query,
qui interroge sa table PlaybackActivity (DateCreated, UserId, ItemId, ItemType,
ItemName, PlaybackMethod, ClientName, DeviceName, PlayDuration en secondes).
Pièges de cet endpoint, tous confirmés en live et gérés :
Pas de requête paramétrée : la requête est du SQL brut. Chaque id est donc validé contre la forme GUID 32 hex avant interpolation (et provient toujours d'une réponse Jellyfin, jamais d'une saisie brute) ; tout le reste est écarté. Un test vérifie qu'une chaîne d'injection ne produit aucun appel HTTP.
UserNamen'est pas une colonne : avec"ReplaceUserId": true, le plugin remplace a posteriori les valeurs de la colonneUserIdpar des noms et renomme l'en-tête enUserName. Le SQL doit donc sélectionnerUserId; sélectionnerUserNameéchoue en « no such column ».La clé de réponse est
colums(typo du plugin), à côté deresults(liste de listes de chaînes — y compris les compteurs) etmessage.Les erreurs SQL arrivent en HTTP 200,
colums/resultsvides et unmessagecommençant par « Error Running Query » suivi d'une stack trace .NET. Un résultat légitimement vide est lui aussi vide mais son message est « Query executed, no data returned. ». Les deux sont distingués : le premier remonte une erreur propre (stack trace retirée), le second un « no playback recorded ».Un id de série ne matche rien : Playback Reporting enregistre l'id de la feuille lue. Vérifié : l'id de « Grey's Anatomy » → 0 ligne, ses 97 ids d'épisodes → 38 lignes. Le tool développe donc les conteneurs (
Series/Season/BoxSet) en leurs descendants, plafonné à 500 ids par requête (501 testés OK) — et annonce la troncature le cas échéant.
item est résolu sur les films ET les séries (resolve_media_item) avec la cascade de
titres déjà en place (tmdbId → id/préfixe → Name → OriginalTitle, accents/articles
normalisés) ; un titre ambigu liste les candidats (id + titre) sans rien faire. Sortie :
un agrégat par utilisateur (lectures, temps cumulé, dernière lecture) sur la totalité des
lectures, puis les 20 lectures les plus récentes en détail (le plafond est affiché).
Limite : l'item doit exister dans la bibliothèque pour être résolu. Playback Reporting conserve l'historique des items supprimés depuis (constaté en live), qui reste donc inatteignable par titre — passer directement l'id le retrouve.
Stats de visionnage — dépendance au plugin Playback Reporting
jellyfin_playback_stats(days=7) ne lit pas Jellyfin core : les statistiques viennent du
plugin Playback Reporting (Dashboard > Plugins > Catalogue), qui expose ses propres routes
sous le préfixe /user_usage_stats. Plugin absent/désactivé → 404 ; c'est traduit en
JellyfinPluginMissingError (sous-classe de JellyfinClientError) et le tool renvoie un
message actionnable — jamais une exception. Aucune variable d'env supplémentaire : le
tool réutilise JELLYFIN_URL / JELLYFIN_API_KEY et l'auth existante (header
MediaBrowser Token, confirmé en live sur l'endpoint plugin ; la variante dépréciée
?api_key= fonctionne aussi mais n'est pas utilisée).
Comportement de GET /user_usage_stats/user_activity vérifié en live (Playback Reporting
17.0.0.0 / Jellyfin 10.11.10) :
daysest le seul paramètre qui filtre réellement.end_dateetfiltersont acceptés (HTTP 200) mais silencieusement ignorés — payload identique quelle que soit leur valeur ; ils ne sont donc pas exposés. Sans aucun paramètre l'endpoint renvoie[], d'où le refus explicite dedays < 1(qui se lirait à tort « aucune activité »).La réponse est une liste avec une ligne PAR UTILISATEUR (pas par item) :
user_name/user_id,total_count(nb de lectures),total_time(secondes),total_play_time(chaîne lisible du plugin), etitem_name/client_name/latest_date/last_seenqui décrivent uniquement la lecture la plus récente de cet utilisateur. Le tool trie par nombre de lectures décroissant et l'annonce dans sa sortie.Piège
total_time: le plugin accumule les durées sur un compteur 32 bits et une seule ligne corrompue fait déborder le total en négatif (observé en live :-2147441290, soit ≈int32.min, sur un utilisateur dont letotal_countétait pourtant correct). Son propretotal_play_timeest calculé depuis cette même valeur, donc tout aussi faux (« < 1 minute »). Les deux sont rejetés : la durée s'affichen/aavec une note nommant les utilisateurs concernés, plutôt qu'une durée plausible mais fausse. Les compteurs de lectures, eux, restent fiables.
Cadrage :
jellyfin_item_historys'est greffé sur ce socle (via_playback_report_post). Les tools restants (plus regardés, « pas vu depuis N jours »…) ne sont pas dans cette itération mais la place est prête — mêmeJellyfinClient._playback_report(), mapping 404 → plugin manquant déjà mutualisé. Routes sœurs confirmées en live sur le même préfixe :/GetTvShowsReport(par série,count+time, non affecté par le débordement par utilisateur),/PlayActivity(par jour),/HourlyReport,/user_list,/type_filter_list, et/submit_custom_querypour tout ce que les routes figées ne couvrent pas.
Pièges Jellyfin gérés
POST /Items/{id}= GET-modify-POST du BaseItemDto complet (pas de PATCH). Un DTO partiel renvoie 400 et peut corrompre l'item jusqu'au prochain rescan (champs collectionnullpassés à.ToList()). Avant tout envoi, les champs tableau (Tags,Genres,Studios,People,LockedFields,GenreItems,TagItems…) sont normalisés en[](jamaisnull) etProviderIdsen{}(map, pas liste). Un test respx vérifie explicitement qu'aucunnullne part dans un champ tableau.Verrouillage : après écriture d'un
Overview,"Overview"est ajouté àLockedFields(verrou au niveau champ) pour qu'un refresh de métadonnées n'écrase pas la description. Comportement par défaut, désactivable vialock=False.Bibliothèque « Collections » absente :
POST /Collectionspeut renvoyer une 500 (Sequence contains no elements) ; c'est traduit en message actionnable (créer une première collection depuis l'UI web) plutôt qu'une erreur brute.
Cadrage : l'upload d'affiche (
jellyfin_set_collection_image) n'est pas dans cette itération — la place est prévue dans l'architecture (POST /Items/{id}/Images/Primary, corps base64 +Content-Typeréel), à ajouter ensuite.
Tools coordonnés — purge « partout »
Suppriment, en un geste avec aperçu et confirm, les fichiers bibliothèque (Sonarr/Radarr)
ET le(s) torrent(s) correspondants côté qBittorrent-via-qui, cross-seeds inclus.
Tool | Type | Description |
| destructive | Purge une saison partout (fichiers Sonarr + torrents + cross-seeds) |
| destructive | Purge un film partout (fichier Radarr + torrents + cross-seeds) |
Flux :
Lister les fichiers concernés côté *arr (saison / film) → nombre + taille.
Extraire les
downloadIddepuis l'historique *arr (/history/series,/history/movie) → ensemble des hash d'origine (dédupliqués ; un season pack partage un seuldownloadId).Côté qui, pour chaque origine : résoudre le torrent, puis
local-matches?strict=true→ cross-seeds (siblings).Ensemble à supprimer = origines présentes ∪ siblings, dédupliqué par hash.
include_loose_matches=Falseexclut les siblingsmatch_type ∈ {name, release}(garde les matchescontent_path) et indique combien ont été exclus.Dry-run (
confirm=False) : aperçu exhaustif des deux côtés, rien supprimé.confirm=True: suppression des fichiers *arr puis un seulbulk-action delete(avecdeleteFilesselondelete_torrent_files) sur tous les hash ; rapport combiné.
Cas limites gérés (sans planter) : aucun downloadId (historique purgé → suppression
biblio seule, torrents à gérer à la main) ; origine absente de qBit (ignorée, signalée) ;
saison/film sans fichier (torrents traités quand même) ; cross-seed indispo (repli sur les
origines seules).
Honnêteté sur l'espace disque : les tailles bibliothèque et torrents ne sont jamais additionnées — hardlinkées, ce sont généralement les mêmes octets. L'aperçu les montre séparément et rappelle que, comme on supprime les deux côtés (+ cross-seeds), l'espace de ce contenu sera cette fois réellement libéré (≈ la plus grande des deux tailles, pas la somme).
Pattern dry-run / confirm
Toutes les actions à effet de bord (add_*, delete_*, search_*) acceptent un paramètre confirm:
confirm=False(défaut) → aperçu sans exécution (dry-run)confirm=True→ exécution réelle
Note hardlink : les tools de suppression de fichiers (
sonarr_delete_season,sonarr_delete_episode_file,radarr_delete_movie_file) retirent les fichiers côté Sonarr/Radarr uniquement. Si les fichiers sont en hardlink avec un client torrent, l'espace disque n'est pas libéré tant que le torrent n'est pas aussi supprimé côté client. L'aperçu dry-run le rappelle.
Filtre event_type de *_history
L'API attend un entier pour son query param eventType, donc le filtrage est fait
côté client sur le champ texte eventType de chaque événement. event_type accepte :
Alias | Correspond à ( |
|
|
|
|
|
|
|
|
|
|
|
|
La chaîne canonique exacte est aussi acceptée (ex. event_type="downloadFolderImported").
Une valeur inconnue renvoie un message listant les valeurs valides, sans appel API.
Comme le filtrage est côté client sur une fenêtre élargie (une requête,
pageSize = max(limit*5, 100)), un résultat filtré partiel ajoute une note
showing N of up to {limit} (searched the {window} most recent events).
Diagnostic & regroupement de *_queue
sonarr_queue / radarr_queue surfacent, pour chaque item, pourquoi il est bloqué :
trackedDownloadStatus / trackedDownloadState (ex. warning / importBlocked), le texte
des statusMessages et l'errorMessage éventuel. Les messages par item sont bornés
((+N more)) pour rester lisibles ; un champ absent/null est géré sans erreur.
Les items partageant le même downloadId (un season pack = un torrent, N lignes) sont
regroupés en une entrée [×N] affichant le downloadId (le pont vers qBittorrent) et la
ligne ids: … (les queue IDs individuels du groupe, tronquée si trop longue). Les items sans
downloadId restent individuels et conservent taille/ETA.
*_delete_queue_item accepte exactement un de queue_id (un item) ou download_id
(tous les items du download, retirés en un seul DELETE /queue/bulk) ; en dry-run il liste
le nombre d'items, leur(s) titre(s) et les IDs ciblés avant toute suppression.
Déploiement
⚠️ Sécurité — l'image GHCR est PUBLIQUE
Ne jamais mettre de secret dans l'image, le
Dockerfile, un workflow ou un fichier suivi par git. Toutes les clés et URLs arrivent au runtime (env_file/environment/docker run -e). LeDockerfilene déclare queMCP_TRANSPORT,HOSTetPORT..dockerignoreexclut.env*,.git,tests/,.venv… : rien de sensible n'entre dans le build context..gitignoreexclut.env, ses variantes et le vraidocker-compose.yml. Seuls.env.exampleetdocker-compose.example.yml(placeholders) sont committés.Les URLs configurées doivent être les URLs INTERNES du homelab (
http://sonarr:8989,http://qui:7476,http://jellyfin:8096…), jamais les URLs Cloudflare/publiques : elles ne doivent ni fuiter ni faire transiter le trafic par l'extérieur. Cela vaut pour tous les tools Jellyfin, les nouveaux compris (jellyfin_active_sessions,jellyfin_scan_library,jellyfin_item_history) : ils n'introduisent aucune variable d'environnement supplémentaire et réutilisentJELLYFIN_URL/JELLYFIN_API_KEYfournies au runtime du conteneur (ZimaOS :env_file/environment, jamais dans l'image). Si les tools Jellyfin actuels fonctionnent en déployé, ceux-ci fonctionnent sans reconfiguration.Le serveur MCP n'a aucune authentification : ne pas publier son port hors du homelab.
Transports
| Transport FastMCP | Usage |
| stdio | Dev local, Claude Desktop |
| streamable-http | Service Docker — endpoint |
| sse | Clients MCP qui ne parlent que l'ancien transport — endpoint |
Le défaut reste stdio : la config Claude Desktop existante fonctionne sans changement.
Une valeur inconnue fait échouer le démarrage avec la liste des valeurs acceptées.
Build & run Docker
docker build -t media-mcp:local .
# L'image démarre en HTTP sur 8080 (MCP_TRANSPORT=http est le défaut DANS l'image)
docker run --rm -p 127.0.0.1:8080:8080 --env-file .env media-mcp:localL'image est multi-stage (deps résolues par uv, puis seul le venv est copié), tourne en
non-root (uid 10001) et n'embarque ni les tests, ni .env, ni .git.
docker-compose (homelab)
cp docker-compose.example.yml docker-compose.yml # le vrai compose est gitignoré
cp .env.example .env # puis remplir avec les URLs INTERNES
docker compose up -dRéseau : media-mcp doit être sur le même réseau Docker que les services
*arr / qui / Prowlarr / Jellyfin pour les joindre par nom de conteneur. Le compose
d'exemple s'attache à un réseau external — le remplacer par le réseau réel
(docker network ls). Si le client MCP (Hermes) tourne dans ce même réseau, il joint
http://media-mcp:8080/mcp directement : inutile de publier le port.
CI/CD (GitHub Actions)
Workflow | Déclencheur | Ce qu'il fait |
PR vers |
| |
push sur | build et push vers |
L'auth GHCR passe par le GITHUB_TOKEN intégré (permissions: packages: write) : aucun
PAT ni secret perso à stocker. Les workflows ne contiennent aucun secret applicatif — ils
buildent l'image, ils ne la font pas tourner.
Rendre le package public (une seule fois, après le premier push) : GitHub → onglet Packages →
media-mcp→ Package settings → Change visibility → Public. Les packages GHCR sont privés par défaut.
Développement
# Lint & format
uv run ruff check src tests
uv run ruff format src tests
# Tests
uv run pytestArchitecture
src/media_mcp/
config.py # pydantic-settings — lit les variables d'env
models.py # modèles pydantic pour les réponses simplifiées
coordinated.py # service d'orchestration purge (arr + qui), logique lourde
jellyfin_resolve.py # résolution en cascade (tmdbId/id/Name/OriginalTitle + repli Radarr injecté)
server.py # instancie FastMCP (host/port) et enregistre tous les tools
__main__.py # entrypoint: python -m media_mcp — résout MCP_TRANSPORT
clients/
base.py # ArrClient: httpx async, gestion des erreurs
sonarr.py # SonarrClient(ArrClient)
radarr.py # RadarrClient(ArrClient)
prowlarr.py # ProwlarrClient(ArrClient) — /api/v1
qui.py # QuiClient: httpx async, header X-API-Key (NE dérive PAS d'ArrClient)
jellyfin.py # JellyfinClient: root path, MediaBrowser Token (NE dérive PAS d'ArrClient)
tools/
sonarr_tools.py # @mcp.tool pour Sonarr
radarr_tools.py # @mcp.tool pour Radarr
qbit_tools.py # @mcp.tool pour qBittorrent via qui
prowlarr_tools.py # @mcp.tool pour Prowlarr (indexeurs)
coordinated_tools.py # @mcp.tool purge saison/film "partout" (arr + qui)
jellyfin_tools.py # @mcp.tool pour Jellyfin (collections curatives / BoxSets)Déploiement :
Dockerfile # image multi-stage (uv -> venv), non-root, http:8080
.dockerignore # garde secrets/tests/.git hors du build context
docker-compose.example.yml # modèle homelab (le vrai docker-compose.yml est gitignoré)
.github/workflows/
ci.yml # PR : lint + tests + build sans push
release.yml # main : build + push GHCR (latest + SHA)Ajouter un nouveau service (ex. Jellyseerr) : créer clients/jellyseerr.py et
tools/jellyseerr_tools.py, puis enregistrer dans server.py.
Available Tools
60 toolsjellyfin_add_to_collectionA
Add movies to an existing collection (by collection name or id).
Same resolution ergonomics as jellyfin_create_collection. Movies already in the collection are reported and skipped. With confirm=False nothing is written; with confirm=True the add proceeds only if every reference resolved.
| Name | Required | Description | Default |
|---|---|---|---|
| movies | Yes | ||
| confirm | No | ||
| collection_ref | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral disclosure. It explains that duplicates are reported and skipped, and the confirm flag controls whether writes occur. This provides useful behavioral traits, though it could clarify error handling for unresolvable references.
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 three sentences with no wasted words. The first sentence delivers the core purpose, and subsequent sentences add behavioral details in a logical order.
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 tool has moderate complexity with three parameters and an output schema. The description explains key behavior (duplicate handling, confirm flag) but omits the movies parameter format and any prerequisites. While output schema exists, the lack of complete param documentation reduces completeness.
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 clarifies 'collection_ref' as name or ID and explains 'confirm' behavior, but does not define the format of items in the 'movies' array (e.g., title, ID). This leaves a significant gap for one of three 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 'Add movies to an existing collection,' using a specific verb and resource. It distinguishes itself from sibling tools like jellyfin_create_collection and jellyfin_remove_from_collection by focusing on adding to an existing collection.
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 mentions 'Same resolution ergonomics as jellyfin_create_collection' but does not explicitly state when to use this tool versus alternatives. It lacks exclusions or prerequisites, leaving the agent to infer usage context from the purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jellyfin_collection_itemsA
List the movies inside a collection (by collection name or id).
collection_ref accepts a collection name or a Jellyfin id (or its unique prefix).
| Name | Required | Description | Default |
|---|---|---|---|
| collection_ref | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It discloses that collection_ref accepts a name or ID (including prefix), adding behavioral context beyond a simple parameter type. However, it does not mention rate limits, authentication, or return format (though output schema exists).
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?
Two concise sentences, front-loaded with the main action and immediately followed by parameter clarification. 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?
Given the low complexity (one parameter, no enums, output schema present), the description is complete. It explains the tool's purpose and parameter semantics adequately for an AI agent to use 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?
The sole parameter has zero schema description coverage, but the description adds substantial meaning: 'collection_ref accepts a collection name or a Jellyfin id (or its unique prefix)'. This fully compensates for the lack of schema-level documentation.
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 ('List the movies inside a collection') and specifies the input flexibility ('by collection name or id'), distinguishing it from sibling tools like jellyfin_list_movies and jellyfin_list_collections.
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 implies usage when you have a collection reference, but does not explicitly state when to use this tool versus alternatives (e.g., jellyfin_list_movies or jellyfin_list_collections) or provide exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jellyfin_create_collectionA
Create a curated collection (BoxSet) from a list of movie references.
movies accepts a mixed list of tmdbIds, Jellyfin ids (or unique prefixes) and
approximate titles; each is resolved and, in a dry-run, shown as matched / ambiguous
/ not found. Ambiguous or unknown references are NEVER guessed. With confirm=False
(default) nothing is written. With confirm=True the collection is created only if
EVERY reference resolved, so a partial collection is never created silently. Set
overview to also write (and lock) a description on the new collection.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| movies | Yes | ||
| confirm | No | ||
| overview | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It comprehensively discloses behavioral traits: references are resolved and shown as matched/ambiguous/not found; ambiguous references are never guessed; with confirm=False nothing is written; with confirm=True creation only occurs if all references resolve; and overview can be written and locked. This is highly transparent and trustworthy.
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: first sentence states the core purpose, followed by a paragraph explaining the movies parameter behavior and the confirm/overview logic. Every sentence adds information without fluff. It is front-loaded with the main action.
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 creation tool with 4 parameters and no annotations, the description covers behavior thoroughly. It explains parameter resolution, safety, and the overview lock. However, it does not mention prerequisites (e.g., authentication, permissions) or what the response contains (but output schema exists). Still, it provides enough context for an agent to use 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 has 0% description coverage, so description must compensate. It explains movies in detail (accepts mixed ids and titles, resolution process), confirm (default false, only creates if all resolved), and overview (write and lock description). The name parameter is not described beyond being required, but its purpose is clear from context. Overall, significant value added over 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 explicitly states it creates a curated collection (BoxSet) from movie references. This clearly distinguishes it from siblings like jellyfin_add_to_collection (adds to existing) and jellyfin_delete_collection (deletes). The verb 'create' and resource 'collection (BoxSet)' are specific and unique.
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 clear usage context: it explains the dry-run behavior with ambiguous/unknown references, the safety mechanism of confirm flag, and the condition for creation. While it doesn't explicitly state when not to use or name alternatives, the context of sibling tools and the detailed behavior give strong implicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jellyfin_delete_collectionA
Delete a collection/BoxSet (by name or id). The movies themselves are kept.
confirm=False previews; confirm=True deletes the collection container only.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| collection_ref | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the full burden. It discloses that movies are kept and that confirm=False previews while confirm=True deletes only the collection container. This adds useful context.
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?
Two sentences, no fluff, front-loaded with the core action. Every word adds value.
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, it covers return values. The description is sufficient for a delete operation, though it could mention prerequisite that the collection exists.
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 adds meaning beyond the schema: it explains the confirm parameter's function (preview vs delete) and implies collection_ref is an identifier by name or id.
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 deletes a collection/BoxSet by name or id, and specifies that movies are kept. This distinguishes it from sibling tools like create_collection, add_to_collection, and remove_from_collection.
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 explains the behavior of confirm=False vs confirm=True (preview vs actual delete), but does not provide explicit guidance on when to use this tool versus alternatives or 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.
jellyfin_list_collectionsA
List Jellyfin collections/BoxSets (short id, name, item count, description).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It does not disclose any behavioral traits beyond the basic list action, such as authentication needs, rate limits, or side effects. The description is minimal and adds no extra transparency.
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 sentence that efficiently conveys the purpose and returned fields. No superfluous information.
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 no parameters and the presence of an output schema, the description is complete for a simple list tool. It explains what data is returned (id, name, item count, description) and context is 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?
There are zero parameters, so the description does not need to add parameter meaning. Schema coverage is 100% trivially. Baseline for 0 parameters is 4.
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 ('List') and the resource ('Jellyfin collections/BoxSets'), listing the fields returned. It distinguishes from sibling tools like jellyfin_collection_items (items within a collection) and jellyfin_create_collection (creation).
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 no guidance on when to use this tool versus alternatives. No mention of context, prerequisites, or exclusions. Sibling tool names are available but not referenced in the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jellyfin_list_moviesA
List movies in the Jellyfin library (short id, title, year, tmdbId).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavior. It only states output fields and omits details like pagination, ordering, or whether full list is returned. Minimal transparency.
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?
Single, front-loaded sentence that conveys purpose and output. 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?
With zero parameters and an existing output schema, the description is sufficiently complete. It tells what the tool lists and what fields are returned.
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 no parameters, and schema description coverage is 100% (trivially). Per rubric, 0 parameters yields baseline 4.
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 'List movies' and the resource 'Jellyfin library', and specifies the output fields (id, title, year, tmdbId). It distinguishes itself from sibling tools like jellyfin_list_collections.
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?
No explicit guidance on when to use this tool versus alternatives. For a simple list tool, usage is implied but no mention of contexts where it might not be suitable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jellyfin_remove_from_collectionA
Remove movies from a collection (by collection name or id).
The movies stay in the library; only their membership in the collection is removed. Same resolution ergonomics; references resolving to movies not currently in the collection are reported and skipped. confirm=False previews; confirm=True proceeds only if every reference resolved.
| Name | Required | Description | Default |
|---|---|---|---|
| movies | Yes | ||
| confirm | No | ||
| collection_ref | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses that membership is removed but movies remain, reports skipped references, and explains confirm=false previews. This is good transparency for a mutation tool.
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?
Three sentences, front-loaded with the main action, then concise behavioral notes. No unnecessary words; each sentence adds value.
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 complexity (3 params, simple behavior) and presence of output schema (not shown), the description covers effects, error handling, and confirm modes adequately. Missing details on return format are offset by output schema.
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%, so description must add meaning. It clarifies that collection_ref can be name or id, movies is an array of strings (references), and confirm controls preview vs execution. This compensates well.
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 (remove), resource (movies from a collection), and adds specificity (by collection name or id). It distinguishes from sibling tools like jellyfin_add_to_collection and jellyfin_delete_collection.
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 explains that movies stay in the library (non-destructive), mentions error handling for references not in the collection, and clarifies the confirm flag behavior. It doesn't explicitly state when to use this vs alternatives, but the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jellyfin_set_overviewA
Set an item's Overview/description (a collection or a movie, by name or id).
By default lock=True adds "Overview" to the item's LockedFields so a later metadata refresh cannot overwrite the curated text; set lock=False to leave it unlocked. confirm=False previews; confirm=True writes.
| Name | Required | Description | Default |
|---|---|---|---|
| lock | No | ||
| confirm | No | ||
| item_ref | Yes | ||
| overview | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description must disclose behavior. It explains the lock mechanism (prevents overwrite on refresh), the confirm parameter (preview vs write), and the scope (collections/movies by name/id). This goes beyond the schema's defaults. However, it omits details like return values or error handling, which may be covered by the output schema.
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 four sentences, each earning its place: purpose, lock behavior, confirm behavior. It is front-loaded with the core action. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists (context says true) and no annotations, the description covers the main behavior but lacks details on edge cases (e.g., item not found, distinguishing name vs ID). It does not specify if it works on other item types beyond movies and collections, which would be important.
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 has 0% description coverage, so the description must clarify all parameters. It explains lock (default true, adds to LockedFields), confirm (false previews, true writes), and overview (the text to set). Item_ref is implied as 'by name or id', but not detailed. This adds meaning beyond 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 tool's action: 'Set an item's Overview/description'. It specifies the resource type ('a collection or a movie') and how to identify it ('by name or id'). This uniquely distinguishes it from sibling tools like jellyfin_list_movies or jellyfin_create_collection.
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 no guidance on when to use this tool compared to alternatives. It does not mention when not to use it or suggest other tools for related tasks. The only usage context is about lock and confirm behavior, not about selection between tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jellyfin_system_statusA
Return Jellyfin server name + version (validates the API key).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly states that the tool validates the API key, which is a key behavioral trait. It implies a read-only operation with no side effects. With no annotations provided, the description adequately covers the main behavioral aspects.
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, efficient sentence that conveys all necessary information without waste. It is front-loaded with the action and result.
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 parameterless tool with an output schema, the description is fully adequate. It covers purpose and a key behavior (API key validation) and does not need additional details.
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 no parameters, so coverage is 100% trivially. The description adds meaning by specifying the return content (name + version) and the validation behavior, providing context beyond the empty 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 the Jellyfin server name and version, and validates the API key. It is specific and distinguishes from sibling status tools (e.g., sonarr_system_status, radarr_system_status) which are for other services.
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?
No guidance is provided on when to use this tool versus alternatives. The description does not mention any prerequisites or context, leaving the agent to infer from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prowlarr_grabA
Send a release to Prowlarr's download client (acquisition side effect).
No category is passed: Prowlarr routes the download and its qBittorrent category comes from Prowlarr's Mapped Categories (configured in the Prowlarr UI). Set confirm=True to actually grab; omit or set False for a dry-run preview. Use the guid + indexerId shown by prowlarr_search.
| Name | Required | Description | Default |
|---|---|---|---|
| guid | Yes | ||
| confirm | No | ||
| indexer_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries the burden. It states the tool has an 'acquisition side effect' (mutation), explains category routing from Prowlarr UI, and details confirm behavior. This adds meaningful context beyond the schema, though it could mention rate limits or error cases.
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 three sentences, each serving a purpose: purpose, category routing detail, and parameter usage. It is front-loaded with the core action, 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 that an output schema exists (so return values are documented elsewhere), the description covers purpose, usage guidelines, and parameter semantics adequately. For a tool with 3 parameters and 0% schema coverage, this is 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?
Schema description coverage is 0%, so description must compensate. It explains guid and indexer_id come from prowlarr_search, and describes confirm's effect (dry-run vs actual grab). While it doesn't define the exact meaning of guid or indexer_id, it tells the agent where to obtain them, which is sufficient.
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 starts with a clear action: 'Send a release to Prowlarr's download client (acquisition side effect).' This specifies the verb (grab) and resource (release to download client), distinguishing it from siblings like prowlarr_search which searches for releases.
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 explicit guidance: 'Use the guid + indexerId shown by prowlarr_search.' It also clarifies the confirm parameter for dry-run vs actual grab. While it doesn't explicitly list when not to use, the context from siblings makes it clear this is for grabbing after searching.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prowlarr_healthA
Show Prowlarr global health warnings (type/source/message).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the tool shows health warnings with specific fields, which is a read operation. However, it lacks details on caching, freshness, or any side effects. The description is adequate but not rich.
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, concise sentence that is front-loaded with the key action and resource. Every word is necessary, and there is no extraneous information.
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 the tool has no parameters and an output schema exists (which likely details the return values), the description is sufficiently complete. However, a note about what constitutes a 'warning' or how to interpret results could enhance completeness. Still, for a simple health check, it is adequate.
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 tool has zero parameters, and the schema coverage is 100% (trivially). With no parameters to describe, the description adds no extra param info, which is appropriate. Baseline for 0 parameters is 4.
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 'Show', the resource 'Prowlarr global health warnings', and specifies the output fields (type/source/message). It distinguishes from sibling tools like sonarr_health or radarr_health by specifying 'Prowlarr' and 'global'.
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 implies the tool is used to check health warnings, but it does not explicitly state when to use it over similar siblings like prowlarr_system_status or other service health tools. No exclusions or context are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prowlarr_indexer_statusA
List indexers currently failing / temporarily disabled, with the retry time.
Prowlarr disables an indexer after repeated failures until disabledTill. Status
entries carry no textual reason (see prowlarr_health for that), so timestamps are
shown. Returns a clear message when every indexer is healthy.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Explains the disabled-until behavior and absence of textual reasons, which is sufficient for a read-only status tool. No annotations provided, but description covers key aspects.
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?
Three sentences with front-loaded purpose; each sentence adds value (main action, behavior explanation, edge case handling).
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 all essential points: what it lists, why timestamps, reference to companion tool, and healthy state. Output schema exists for return details.
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?
No parameters exist; baseline of 4 applies as no additional info is needed.
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 lists failing/disabled indexers with retry time, distinguishing from sibling tools like prowlarr_health (textual reasons) and prowlarr_list_indexers (all indexers).
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 context on when to use (check failing indexers) and directs to prowlarr_health for textual reasons, but does not explicitly 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.
prowlarr_list_indexersA
List indexers configured in Prowlarr.
Per indexer: id, name, enabled (✓/✗), protocol, privacy, main categories, tags. Sorted by name.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Clearly describes what is returned (fields, sorting) and implies no side effects; no annotations needed for read-only list operation.
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?
Extremely concise with purpose stated first, followed by relevant details; 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?
Complete for a simple list tool with no parameters and an output schema; describes all key aspects.
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?
No parameters exist; description provides context on output fields, which is sufficient.
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 configured Prowlarr indexers with specific fields, but does not explicitly differentiate from sibling tools like prowlarr_grab or prowlarr_search.
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?
Implied usage for viewing indexers, but no explicit when-to-use or alternatives noted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prowlarr_searchA
Cross-indexer search via Prowlarr (works for any content: movies, ebooks, manga, software...). Results sorted by seeders descending.
Per result: title, indexer, size, seeders/leechers, protocol, age, category, and the grab reference (guid + indexerId) to pass to prowlarr_grab. Optionally restrict to indexer_ids and/or categories (newznab category ids).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| categories | No | ||
| indexer_ids | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description bears full responsibility. It discloses the sorting (seeders descending), result fields (title, indexer, size, etc.), and optional filters. It does not mention rate limits, authentication, or destructive behavior, but as a search tool, this is adequate. However, it could note that search is across multiple indexers and may have latency.
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 two short paragraphs: the first states the main purpose and sorting, the second lists result fields and optional restrictions. Every sentence adds value, with no redundancy. It is front-loaded with key information.
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?
An output schema exists (context signal true), so the description needn't detail return values extensively. It covers result fields, sorting, and optional filters. The only missing detail is the limit parameter and potential pagination, but overall it is sufficient for an agent to understand invocation and outcome.
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%, so the description must explain parameters. It describes query (implicitly required), indexer_ids, and categories as 'newznab category ids'. However, the 'limit' parameter is not mentioned in the description, even though it has a default of 20 in the schema. This leaves agents unaware of the optional limit parameter, a notable gap.
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 'Cross-indexer search via Prowlarr' and specifies it works for any content (movies, ebooks, manga, software). It distinguishes from the sibling prowlarr_grab by mentioning the grab reference. The verb 'search' with 'cross-indexer' and 'Prowlarr' is specific and unambiguous.
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 indicates it is for searching any content and optionally restricting by indexer_ids and categories. It implies the use case for finding torrents before grabbing with prowlarr_grab. However, it does not explicitly state when not to use it or mention alternatives for filtering by user/workspace.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prowlarr_system_statusA
Return Prowlarr system status (version).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavior. It only states it returns 'system status (version)', omitting details like read-only nature, side effects, or what the full return object contains. This is insufficient for a tool with no 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, efficient sentence that immediately conveys the tool's purpose. No unnecessary words 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?
Given the tool's simplicity (no parameters, output schema exists) and sibling tools, the description is nearly complete. It mentions 'version' which adds value. Could improve by stating it is a read-only operation, but overall adequate.
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 zero parameters, so the description naturally provides no parameter details. Per calibration, baseline for 0 params is 4.
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 'Return' and the resource 'Prowlarr system status (version)', distinguishing it from other prowlarr tools and system status tools of other services.
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 no guidance on when or when not to use this tool, nor does it mention alternatives or prerequisites. As a simple status check, usage is intuitive but the description lacks explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prowlarr_test_all_indexersA
Test every indexer and summarize pass/fail, highlighting the failures.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must disclose behavioral traits. It does not mention side effects (e.g., network requests), permissions, rate limits, or what 'test' exactly entails.
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?
Extremely concise single sentence with no wasted words. Front-loaded with the verb 'test' and resource 'every indexer'.
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?
Adequate for a parameterless tool with output schema, but lacks details on what 'test' means (e.g., connectivity check) and output format beyond pass/fail summary.
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?
No parameters exist, and schema coverage is 100%. Baseline is 4 as description could explicitly state 'no arguments required', but the schema already covers this.
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 tests every indexer and summarizes pass/fail, distinguishing itself from the sibling 'prowlarr_test_indexer' which likely tests a single indexer.
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?
Implies usage for batch testing all indexers, but no explicit when-to-use or alternatives provided. The sibling 'prowlarr_test_indexer' exists but is not mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prowlarr_test_indexerA
Test connectivity of a single indexer. Returns pass/fail + message(s).
Benign side effect (no confirm). Unknown indexer_id -> clear message.
| Name | Required | Description | Default |
|---|---|---|---|
| indexer_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses that the tool has a 'benign side effect' and requires no confirmation. It also explains behavior for unknown IDs. However, it does not elaborate on whether the tool is read-only or has other mutation effects.
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 (two sentences) and front-loaded, but slightly lacks structure. It effectively conveys the tool's purpose and behavior without unnecessary 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 basic behavior and return format, with the output schema presumably detailing the structure. However, it omits prerequisites (e.g., indexer existence) and does not mention authentication or rate limits, leaving some gaps for a simple diagnostic 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?
The description only references indexer_id in the error handling context without explaining its purpose, source, or valid values. Given 0% schema description coverage, the description fails to compensate for the missing parameter 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 clearly states the action 'Test connectivity' and the target 'single indexer', explicitly distinguishing it from the sibling tool 'prowlarr_test_all_indexers'. It also specifies the return type: pass/fail plus messages.
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 implies use for testing a single indexer, contrasting with testing all. It provides error handling advice ('Unknown indexer_id -> clear message') but lacks explicit when-not-to-use or alternative recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qbit_delete_torrentA
Remove a torrent from qBittorrent by hash (via qui).
Accepts a full hash or a unique prefix. Set delete_files=True to also delete its downloaded files from disk. Set confirm=True to actually remove; omit or set False for a dry-run preview.
| Name | Required | Description | Default |
|---|---|---|---|
| hash | Yes | ||
| confirm | No | ||
| delete_files | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist; the description carries the full burden. It reveals the dry-run preview and optional file deletion, but does not explain what 'remove' entails (e.g., stopping downloads, removing metadata) or mention prerequisites, permissions, or reversibility. Moderate transparency.
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 only four lines: a concise purpose statement followed by three single-line parameter explanations. No unnecessary words, clearly organized, and front-loaded with the main action.
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 three parameters and no schema descriptions, the description covers the essential functionality and parameter usage. It lacks details on error handling or prerequisites (e.g., torrent must exist), but is otherwise complete for a deletion tool with a dry-run feature.
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 has 0% description coverage, so the description must add all meaning. It explains that hash accepts a full hash or unique prefix, confirm controls real deletion vs dry-run, and delete_files removes associated files from disk. This fully compensates for the missing 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 'Remove a torrent from qBittorrent by hash', specifying a concrete verb and resource. Among sibling tools, it is the only delete operation, making its purpose distinct and unambiguous.
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 explains how to use the confirm and delete_files parameters, including the dry-run behavior for confirm=False. However, it does not compare with sibling tools like qbit_pause to guide when to delete vs pause, which would strengthen usage guidelines.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qbit_get_torrentA
Show a single torrent by its hash (via qui).
The hash is the same value as the Sonarr/Radarr history downloadId, so this is the bridge to locate a release's torrent. Accepts a full hash or a unique prefix; matching is case-insensitive.
| Name | Required | Description | Default |
|---|---|---|---|
| hash | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description carries full burden. It discloses hash matching behavior (prefix, case-insensitivity) but does not mention read-only nature, error handling, or authentication needs.
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?
Two concise sentences with main purpose front-loaded. No unnecessary 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?
Given simple input and presence of output schema, description is fairly complete. Explains hash matching and context, though missing potential error conditions.
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 has 0% coverage for hash parameter, but description compensates by explaining hash format (full or prefix, case-insensitive) and its origin (Sonarr/Radarr downloadId).
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?
Clearly states 'Show a single torrent by its hash', a specific verb+resource. Distinguishes from sibling qbit_list_torrents and explains its role as a bridge to Sonarr/Radarr.
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 mentions when to use (when you have a hash from Sonarr/Radarr). Implicitly excludes listing scenarios, but no explicit when-not or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qbit_list_instancesA
List the qBittorrent instances managed by qui (id + name).
Useful to find the id/name to put in QUI_INSTANCE when several exist. Access goes through qui, never qBittorrent directly.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Mentions that access goes through qui, never qBittorrent directly, giving a behavioral hint; however, with no annotations, it lacks explicit safety or side-effect disclosure.
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?
Two sentences, front-loaded with purpose, efficient and to the point.
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 zero parameters and an output schema, the description adequately covers the tool's purpose and return value (id + name).
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?
No parameters exist, so schema coverage is complete; description doesn't need to add parameter 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 clearly states the tool lists qBittorrent instances managed by qui with id and name, distinguishing it from other qbit tools that perform actions on instances.
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 states that it's useful to find the id/name for QUI_INSTANCE when multiple instances exist, providing context for when to use it, though it doesn't discuss alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qbit_list_torrentsA
List torrents of the target qBittorrent instance (via qui).
Optional filter is a free-text search (name, and also matches the hash).
Each line shows: state, name, short hash, progress %, size, ratio, category.
| Name | Required | Description | Default |
|---|---|---|---|
| filter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It reveals that the tool is read-only (implicit from 'list') and describes the output format, but does not mention potential side effects, authentication needs, or rate limits. Acceptable but not thorough.
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 three sentences: purpose, filter behavior, and output format. It is front-loaded with the main action and contains no 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?
Given a single optional parameter and no annotations, the description covers the core behavior, filter usage, and output details. While pagination or limits are not mentioned, the output schema likely provides structure, making this 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 only parameter 'filter' has zero schema description coverage, but the description adds value by explaining it is a free-text search matching name and hash. This compensates well for the lack of schema documentation.
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 'List torrents' with verb and resource, and mentions the target instance. It implicitly distinguishes from siblings like qbit_get_torrent (specific torrent) and qbit_list_instances (list instances), but does not explicitly differentiate.
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 does not provide guidance on when to use this tool versus alternative sibling tools, nor does it mention prerequisites or exclusions. It only describes the tool's functionality without usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qbit_pauseA
Pause a torrent by hash or unique prefix (via qui).
Reversible, so no confirm required.
| Name | Required | Description | Default |
|---|---|---|---|
| hash | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description provides some transparency by stating pausing is reversible and no confirmation is required. However, it does not detail side effects (e.g., seeding status, download cancellation) or permission needs.
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?
Two sentences, front-loaded with the core action and method. No unnecessary words; every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (1 param, no nested objects), the description covers the action and parameter usage. An output schema exists, but the description lacks return value details; still sufficient for most agents.
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 has 0% description coverage, but the description adds meaning by clarifying that the hash parameter accepts a full hash or a unique prefix. This is valuable beyond the raw 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 action 'Pause a torrent' with a specific resource (torrent) and method (by hash or unique prefix). It distinguishes from siblings like qbit_resume and qbit_delete_torrent.
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?
No explicit guidance on when to use this tool vs alternatives. While it's implied when pausing is desired, there is no discussion of when not to use it or comparison to sibling tools like qbit_delete_torrent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qbit_resumeC
Resume a torrent by hash or unique prefix (via qui).
Reversible, so no confirm required.
| Name | Required | Description | Default |
|---|---|---|---|
| hash | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description discloses reversibility but lacks other behavioral details like permissions, idempotency, error states.
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?
Very concise (2 sentences), front-loaded with purpose. Minor issue: ambiguous term 'via qui' may reduce 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?
Adequate for a simple tool with one parameter; covers purpose and key trait (reversibility). Lacks error handling or response info, but output schema is present.
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 has 0% coverage; description adds meaning by clarifying that 'hash' can be a full hash or unique prefix, but does not specify format or length.
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?
Clearly states verb 'Resume' and resource 'torrent', with specific identifier method (hash/prefix). Differentiates from siblings like qbit_pause, but no explicit sibling differentiation in text.
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?
No guidance on when to use this tool vs alternatives (e.g., qbit_pause, qbit_delete_torrent). Only mentions reversibility, not selection context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
radarr_add_movieA
Add a movie to Radarr by tmdbId.
Use radarr_lookup_movie to get tmdb_id, radarr_quality_profiles for quality_profile_id, and radarr_root_folders for root_folder_path.
Set confirm=True to actually add; omit or set False for a dry-run preview.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| tmdb_id | Yes | ||
| root_folder_path | Yes | ||
| quality_profile_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must disclose behavioral traits. It explains that confirm=True actually adds, while False/omit does a dry-run. However, it does not mention idempotency, error handling, or what happens if the movie already exists.
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 only three concise sentences. The first states purpose, the second lists prerequisite tools, and the third explains the confirm behavior. No superfluous information.
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 fairly complete for a simple creation tool. It explains how to obtain all required parameters and the confirm behavior. However, it lacks details on whether duplicates are handled, permissions needed, or potential errors. Since an output schema exists, return values need not be described.
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 tells the agent to use specific sibling tools to obtain rmdb_id, quality_profile_id, and root_folder_path, giving semantic meaning beyond the schema. However, it does not describe the confirm parameter's type or default, which is already in schema, and does not elaborate on parameter constraints.
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 adds a movie to Radarr by tmdbId. The verb 'Add' and resource 'movie' are specific, and it distinguishes from sibling tools like radarr_list_movies or radarr_delete_movie.
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 the agent to use radarr_lookup_movie, radarr_quality_profiles, and radarr_root_folders to obtain the required parameters. It also explains the confirm parameter's role in performing a dry-run vs actual addition, providing clear when-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
radarr_delete_movieA
Delete a movie from Radarr by its internal id.
Set delete_files=True to also remove downloaded files from disk. Set confirm=True to actually delete; omit or set False for a dry-run preview.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| movie_id | Yes | ||
| delete_files | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses dry-run capability via confirm parameter and file deletion option, but lacks details on permissions, irreversible consequences, or prerequisites. With no annotations, more behavioral context would be beneficial.
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?
Three sentences: first states purpose, second and third explain key parameters. No fluff, well-structured, and 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?
With output schema present, return values need not be explained. Covers key parameters and their effect, but could mention prerequisites (e.g., movie exists) and confirm that deletion is irreversible.
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 has 0% description coverage; description adds meaning for confirm (dry-run) and delete_files (file removal). movie_id is self-explanatory given purpose. Adds value beyond 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?
Description clearly states the verb 'Delete', the resource 'a movie', and the method 'by its internal id'. It distinguishes from siblings like radarr_delete_movie_file that delete a specific file, not the whole movie.
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?
Description mentions dry-run behavior and optional file deletion, but does not explicitly compare to alternatives like radarr_delete_movie_file or radarr_purge_movie, nor provide when-to-use or when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
radarr_delete_movie_fileA
Delete the movie's file but KEEP the movie tracked in Radarr (destructive).
Unlike radarr_delete_movie, this only removes the downloaded file, so the movie stays monitored for re-download/upgrade. Set confirm=True to actually delete; omit or set False for a dry-run preview.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| movie_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries a heavy burden for behavioral disclosure. It labels the tool as 'destructive' and explains the confirm parameter's behavior (dry-run vs. actual delete). However, it does not mention permissions, rate limits, or the response format, though the output schema exists. Overall, it provides sufficient transparency for a simple file deletion operation.
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 four sentences with no wasted words. It front-loads the main purpose and immediately distinguishes from the sibling tool. The structure is clear and each 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 (2 parameters, no nested objects), the description fully covers purpose, usage, parameter semantics, and differentiation from siblings. An output schema exists, so return value explanation is unnecessary. The description is complete for an AI agent to correctly invoke this 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?
The input schema has no descriptions (0% coverage), so the description must add meaning. It explains that confirm=True triggers actual deletion, while omit or False does a dry-run. It also implies movie_id is the target movie. This adds significant semantic value beyond the raw 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 action ('Delete the movie's file'), the resource ('the movie's file'), and distinguishes it from radarr_delete_movie by noting that the movie remains tracked. The verb 'delete' and resource 'movie file' are specific, and the contrast with the sibling tool is 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 explicitly contrasts with radarr_delete_movie, stating that this tool only removes the file while keeping the movie monitored for re-download/upgrade. It also explains the confirm parameter's role: actual deletion vs. dry-run preview. This provides clear guidance on when to use this tool and how to use it correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
radarr_delete_queue_itemA
Remove item(s) from the Radarr download queue (stuck/failed download).
Provide EXACTLY ONE of:
queue_id: a single queue item;
download_id: ALL items sharing that downloadId, removed in one gesture. remove_from_client also deletes the download from the torrent/usenet client; blocklist prevents the same release from being grabbed again. Set confirm=True to actually remove; omit or set False for a dry-run preview.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| queue_id | No | ||
| blocklist | No | ||
| download_id | No | ||
| remove_from_client | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes the behavioral traits: it removes items from queue, can delete from client (remove_from_client), and can blocklist the release. Annotations are absent, so description carries burden; it adequately discloses side effects, though could mention irreversibility.
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?
Concise and well-structured: front-loaded purpose, then brief parameter groups. Every sentence provides value without redundancy. Efficiently uses bullet points for 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?
Complete coverage for a deletion tool with 5 parameters and mutual exclusivity. Explains when to use each identifier, the dry-run vs actual deletion, and the effect of boolean flags. Output schema exists but is not needed.
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 coverage, description explains all five parameters: queue_id, download_id, remove_from_client, blocklist, confirm. It clarifies mutual exclusivity and dry-run behavior, adding meaning beyond 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?
Description clearly states that the tool removes item(s) from Radarr download queue, specifically targeting stuck/failed downloads. It uses the verb 'remove' and resource 'queue item', distinguishing it from sibling tools like radarr_delete_movie.
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 provides when to use each parameter: queue_id for single item, download_id for all items sharing that downloadId. Also explains the dry-run behavior using confirm flag and the effect of remove_from_client and blocklist, offering clear guidance on usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
radarr_disk_spaceA
Show free disk space per volume known to Radarr, fullest volume first.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so description must carry full burden. It states the tool shows free disk space, indicating read-only behavior, but does not mention permissions, rate limits, or side effects. For a simple query tool, this is adequate but not extensive.
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?
A single sentence that is efficient and information-dense with no extraneous words. Every word is necessary to convey the tool's 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 zero-parameter tool with an output schema, the description provides enough context: it lists disk space per volume with ordering. The existence of the output schema handles return value details.
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 zero parameters with 100% schema coverage. With no parameters, the description does not need to add parameter details, fitting the baseline 4.
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 verb 'Show' and resource 'free disk space per volume known to Radarr', with sorting order 'fullest volume first'. It clearly distinguishes from sibling disk space tools that target other systems (e.g., sonarr_disk_space).
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 implies usage for checking disk space but provides no explicit guidance on when to use this tool versus alternatives like radarr_system_status. No when-not or alternative tool mentions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
radarr_healthA
Show Radarr instance health checks (notices, warnings, errors).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It only states 'Show', implying read-only, but does not disclose any behavioral traits such as permission requirements, idempotency, or response format.
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 concise sentence with no wasted words. It is front-loaded and directly states 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?
Given the simple health check nature and presence of an output schema, the description adequately covers the tool's functionality. Could be slightly more detailed about the categories of checks, but 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?
There are zero parameters, so no parameter description is needed. Baseline score of 4 is appropriate as the description adds no value beyond the schema (which is trivially complete).
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 'Show' and resource 'Radarr instance health checks', with parenthetical examples. It distinguishes from sibling tools like sonarr_health by naming Radarr, but does not explicitly differentiate.
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 implies usage for checking health status but provides no when-to-use or alternative guidance. For a self-explanatory health tool, this is adequate but lacks explicit context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
radarr_historyA
Show recent Radarr history events (grab/import/deletion...).
Surfaces the downloadId (the torrent hash) when present, which later links a release to its torrent in the download client. Optionally filter by event_type, accepting a readable alias (grabbed, imported, failed, deleted, renamed, ignored) or an exact canonical eventType (e.g. downloadFolderImported). Filtering is done client-side, so a filtered result may include a note when the window is not filled.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| event_type | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the tool surfaces downloadId and performs client-side filtering, implying it is a read-only operation. However, it does not explicitly state safety (non-destructive) or any auth/rate limit concerns, leaving some ambiguity.
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 three sentences, each adding value: purpose, downloadId detail, and filtering behavior. It is front-loaded with the main action and efficient, with 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?
Given no annotations and an output schema (not shown), the description covers parameter details and a key behavioral note (client-side filtering). It lacks information on ordering (e.g., most recent first) or pagination beyond limit, but overall is adequate for a history-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?
Schema description coverage is 0%, so the description compensates fully. It explains the 'limit' parameter (default 20) and 'event_type' parameter with aliases (grabbed, imported, etc.) and notes client-side filtering, which adds critical meaning beyond 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 tool's purpose: 'Show recent Radarr history events (grab/import/deletion...).' This specifies the verb (show), resource (Radarr history), and scope (recent events), distinguishing it from sibling tools like radarr_queue or sonarr_history.
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 does not explicitly guide when to use this tool versus alternatives (e.g., radarr_queue for current queue or sonarr_history for Sonarr). It only describes its own functionality without context on when-not or alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
radarr_list_moviesA
List all movies tracked in Radarr.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. The description implies a read-only operation but does not explicitly state non-destructiveness, rate limits, or return format. With no annotations, the description carries full burden but only provides minimal clarity.
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?
A single, direct sentence with no superfluous content. Every word is necessary and 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 list tool with no parameters and an output schema, the description is fully adequate. It explains what the tool does without missing context.
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?
No parameters exist; schema coverage is trivially 100%. Baseline for zero parameters is 4, and the description adds no additional parameter info, which is acceptable since none are needed.
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 'List all movies tracked in Radarr' uses a specific verb (list) and resource (movies) with clear scope (all tracked). It distinguishes from sibling tools like jellyfin_list_movies (different system) and radarr_lookup_movie (different action).
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?
No explicit guidance on when to use this tool versus alternatives like radarr_lookup_movie for specific movies. Usage is implied but not clarified with exclusions or context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
radarr_lookup_movieA
Search Radarr for a movie by title (for adding a new movie).
Returns tmdbId needed for radarr_add_movie.
| Name | Required | Description | Default |
|---|---|---|---|
| term | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must bear full burden. It states search by title and returns tmdbId, but does not explicitly declare read-only nature or discuss side effects, permissions, or limits. Adequate for a simple lookup.
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?
Two sentences, no wasted words. First sentence states main purpose, second adds critical detail about return value. Well-structured and efficient.
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 simple tool (1 param, no annotations, output schema exists), description covers purpose, parameter meaning, and return value. Output schema handles return format, so completeness is adequate.
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 has one parameter 'term' with 0% description coverage, but description adds 'by title', clarifying the parameter's meaning. Provides needed semantics beyond 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?
Description clearly states verb 'search', resource 'movie', and context 'for adding a new movie'. Differentiates from sibling tools like radarr_list_movies (listing existing) and radarr_add_movie (adding).
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 says 'for adding a new movie' and notes return of tmdbId needed for radarr_add_movie, implying when to use. Lacks explicit when-not or alternatives, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
radarr_purge_movieA
Purge a movie everywhere: delete its file in Radarr AND remove the matching torrent(s) in qBittorrent-via-qui, cross-seeds included (destructive).
The torrents are located via the movie's history downloadId(s) and their qui cross-seed siblings. include_loose_matches=False drops name/release-matched siblings (keeps content_path matches). delete_torrent_files also deletes the torrents' files from disk. Set confirm=True to execute; False for a dry-run.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| movie_id | Yes | ||
| delete_torrent_files | No | ||
| include_loose_matches | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description fully discloses destructive nature, cross-seed handling, and parameter effects, exceeding 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?
Single paragraph front-loads action, but dense content could benefit from bullet points for readability.
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 complexity and existing output schema, description covers key aspects of destructive operation, cross-seed removal, and parameter nuances, leaving no major 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?
With 0% schema coverage, description explains all four parameters, including confirm, movie_id (implicit), delete_torrent_files, and include_loose_matches with default behaviors.
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 purges a movie by deleting its file in Radarr and removing matching torrents in qBittorrent, distinguishing it from siblings like radarr_delete_movie.
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 context for when to use (purge everywhere) and how with confirm parameter for dry-run vs execution, but lacks explicit comparison to alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
radarr_quality_profilesA
List available quality profiles in Radarr (id + name needed for radarr_add_movie).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description indicates a safe read operation ('List available quality profiles') but lacks details on authentication, rate limits, or return format; however, the output schema likely covers return values.
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 sentence that is front-loaded and contains no superfluous words; it efficiently conveys the tool's function and a key usage hint.
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 no parameters, an output schema exists, and sibling tools provide context, the description is complete and sufficient for an agent to understand and invoke 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 no parameters and 100% schema coverage, the baseline is 4. The description adds meaning by stating the purpose and connection to radarr_add_movie, which is useful context beyond the empty 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 lists available quality profiles in Radarr and specifies that the id and name are needed for radarr_add_movie, distinguishing it from 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?
The description implicitly guides usage by linking to radarr_add_movie, but does not explicitly state when to use or not use this tool, nor mention alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
radarr_queueA
Show current download queue in Radarr, with diagnostics for stuck items.
Surfaces trackedDownloadStatus/State and statusMessages/errorMessage (the "why"), and groups items sharing a downloadId.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. The description implies a read-only operation ('show') but does not explicitly state permissions, side effects, or limitations. For a read tool without annotations, this is adequate but not thorough.
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?
Three concise sentences: first states purpose, second adds diagnostic detail, third mentions grouping. No wasted words, front-loaded with key action.
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 zero parameters and an existing output schema, the description fully covers the tool's behavior: what it shows, key data fields, and grouping. 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?
No parameters exist (0 params, 100% coverage), so there is no need for parameter descriptions. Baseline score of 4 applies as the description adds no parameter info, which 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 tool shows the current download queue in Radarr with diagnostics for stuck items, distinguishing it from siblings like radarr_delete_queue_item or radarr_history by mentioning specific data fields and grouping.
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 implies use for viewing queue diagnostics but does not explicitly state when to use this tool versus alternatives like radarr_history or radarr_delete_queue_item. No guidance on 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.
radarr_root_foldersA
List configured root folders in Radarr (path needed for radarr_add_movie).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It describes a read-only list operation, which is straightforward, but adds no extra behavioral context beyond the fact of listing.
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?
One sentence, front-loaded with the purpose, 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?
Given the tool's simplicity, no parameters, and availability of output schema, the description is fully complete for an agent to understand its use.
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?
No parameters exist, so baseline is 4. The description adds no parameter info, but none is needed.
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 configured root folders and specifies the purpose ('path needed for radarr_add_movie'), making it distinct from 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?
The description implies usage before radarr_add_movie, providing clear context, but does not explicitly state when not to use it or mention alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
radarr_search_movieA
Trigger a search/download for an already-added movie.
Set confirm=True to actually launch the search; omit or set False for a dry-run preview.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| movie_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must cover behavioral traits. It discloses the dry-run vs. actual launch behavior via the confirm parameter, but does not mention other aspects like authorization needs, rate limits, or state changes beyond triggering a search.
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 extremely concise with two sentences, front-loading the main purpose. Every word adds value, and there is no unnecessary fluff.
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 only two parameters and an output schema exists, the description covers the core functionality and the key behavior of the confirm flag. It is largely complete for its purpose, though it does not describe output or error handling.
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 has 0% description coverage, so the description must explain parameters. It explicitly explains the confirm parameter's effect but does not define movie_id, leaving it implied by the tool name and 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 verb ('trigger') and resource ('search/download') for an already-added movie. It effectively distinguishes from sibling tools like radarr_lookup_movie and radarr_add_movie by specifying the condition.
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 explains when to use the tool (for already-added movies) and how to use the confirm parameter for dry-run vs. actual search. It lacks explicit mention of when not to use or alternatives, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
radarr_set_movie_monitoringA
Enable or disable monitoring for a single movie.
Reversible action with no immediate grab, so no confirm is required. Returns the movie state after the change.
| Name | Required | Description | Default |
|---|---|---|---|
| movie_id | Yes | ||
| monitored | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that the action is reversible and has no immediate grab, indicating it is non-destructive. It also states that the function returns the movie state after the change. Missing details like required permissions or rate limits, but the provided context is valuable and accurate.
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 three sentences, each providing essential information. The first sentence states the main action, the second adds safety context, and the third describes the return value. No redundant or filler content is present.
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 toggle tool with two parameters and an output schema, the description covers the main purpose, safety, and return value. It could mention how to obtain the movie_id (e.g., from radarr_list_movies) or that monitored=true enables monitoring, but overall it is sufficiently complete for an AI to use 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. However, it does not define 'movie_id' or 'monitored' beyond their types. The agent must infer that 'movie_id' is an integer ID and 'monitored' is a boolean. No extra semantic meaning is added to aid parameter 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 explicitly states 'Enable or disable monitoring for a single movie', providing a clear verb-resource pair. It distinguishes itself from sibling tools like radarr_add_movie or radarr_delete_movie by focusing on the monitoring toggle action.
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 notes that the action is reversible and requires no confirmation, implying safe usage. However, it does not explicitly state when to use this tool versus alternatives like radarr_add_movie (which creates a new movie with monitoring) or radarr_delete_movie. No comparisons or 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.
radarr_system_statusA
Return Radarr system status (version, health).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description mentions returning status but does not explicitly state that it is read-only or non-destructive. Without annotations, the agent lacks safety context, though the name implies a simple query.
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?
Single sentence, directly to the point, with 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?
Given the output schema exists and the tool is simple, the description is mostly complete. It could mention that the status includes version and health, but the output schema covers return values.
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?
No parameters exist, so baseline is 4 as per rules. The description does not need to add parameter info.
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 returns Radarr system status including version and health. It differentiates from sibling tool 'radarr_health' which likely returns health only, but could explicitly mention that it provides combined status.
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?
No guidance on when to use this vs alternatives like radarr_health or sonarr_system_status. The agent is left to infer without explicit context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
radarr_upcomingA
Show movies releasing in the next N days (default 7) via Radarr calendar.
Uses the most relevant release date available (digital > physical > cinema).
| Name | Required | Description | Default |
|---|---|---|---|
| days | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full disclosure burden. It explains the release date selection priority (digital > physical > cinema), but does not mention read-only nature, error handling, or edge cases. Moderate transparency.
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?
Two concise sentences: first states the core purpose and default, second adds important behavioral detail. No redundant 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?
Given the simple parameter and presence of an output schema, the description adequately covers functionality. Minor gap: does not specify output format or sorting, but output schema likely addresses this.
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 has 0% description coverage for the 'days' parameter. The description compensates by stating it represents 'next N days' with a default of 7, adding meaning beyond the schema's default value.
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?
Description clearly states the operation: 'Show movies releasing in the next N days' with the specific resource and source ('via Radarr calendar'). It also details the release date priority logic, distinguishing it from sibling tools like radarr_list_movies.
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?
No explicit guidance on when to use or avoid this tool, nor mentions of alternatives. The description only implies usage for upcoming movies, leaving it to the agent to infer context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sonarr_add_seriesA
Add a series to Sonarr by tvdbId.
Use sonarr_lookup_series to get tvdb_id, sonarr_quality_profiles for quality_profile_id, and sonarr_root_folders for root_folder_path.
Set confirm=True to actually add; omit or set False for a dry-run preview.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| tvdb_id | Yes | ||
| root_folder_path | Yes | ||
| quality_profile_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It reveals the dry-run behavior when confirm=False/True, which is critical for safe experimentation. It does not mention side effects, but the main behavior is well covered.
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 three concise sentences, front-loading the purpose and then providing necessary context. Every sentence earns its place with no 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 simplicity of the tool (3 required parameters, output schema exists), the description provides sufficient context for an agent to understand prerequisites and the confirm flag. It could optionally mention the return value, but the output schema fills that gap.
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%, so the description must compensate. It fully explains each parameter: tvdb_id from lookup, quality_profile_id from profiles, root_folder_path from folders, and confirm as dry-run toggle. This adds significant 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 verb 'Add' and resource 'a series to Sonarr by tvdbId', making the purpose explicit. It also distinguishes from sibling tools like sonarr_list_series and sonarr_lookup_series.
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 instructs to use sonarr_lookup_series, sonarr_quality_profiles, and sonarr_root_folders to get prerequisites. It also explains when to set confirm=True vs False, providing clear guidance on usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sonarr_delete_episode_fileA
Delete a single episode file by its id (destructive).
Set confirm=True to actually delete; omit or set False for a dry-run preview. Note: files are removed from Sonarr only — hardlinked files are not freed on disk until the torrent is removed too.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| episode_file_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries full burden. It discloses that the action is destructive, explains the dry-run preview, and notes that hardlinked files are not freed on disk until the torrent is removed. This adds useful behavioral context beyond the obvious.
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?
Three concise sentences front-loaded with purpose, followed by key details. No wasted words. Perfectly structured for quick comprehension.
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 action, id, confirm behavior, and disk-space nuance. With an output schema present, return values are handled. Could mention prerequisites or error cases, but overall adequate for a simple delete 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?
Schema description coverage is 0%, so the description must compensate. It explicitly explains the confirm parameter (dry-run vs delete) which adds meaning beyond the schema. However, the episode_file_id parameter is only mentioned as 'by its id' with no guidance on how to obtain it.
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 deletes a single episode file by its id, with the explicit label 'destructive'. This distinguishes it from sibling tools like sonarr_delete_queue_item, sonarr_delete_series, etc.
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 explains the dry-run vs actual delete behavior using the confirm parameter. However, it does not provide explicit guidance on when to use this tool over alternatives or mention prerequisites like obtaining the episode_file_id.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sonarr_delete_queue_itemA
Remove item(s) from the Sonarr download queue (stuck/failed download).
Provide EXACTLY ONE of:
queue_id: a single queue item;
download_id: ALL items sharing that downloadId (a season pack = one torrent, many rows) removed in one gesture. remove_from_client also deletes the download from the torrent/usenet client; blocklist prevents the same release from being grabbed again. Set confirm=True to actually remove; omit or set False for a dry-run preview.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| queue_id | No | ||
| blocklist | No | ||
| download_id | No | ||
| remove_from_client | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavior. It covers the dry-run mode, batch deletion by download_id, and side effects like client deletion and blocklisting. It lacks mention of error handling but is otherwise thorough.
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 five sentences long, each serving a clear purpose: purpose, parameter exclusivity, batch behavior, additional options, and dry-run feature. 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?
Given the tool's complexity (5 parameters, destructive action) and the presence of an output schema, the description covers all necessary behavioral and usage aspects. It is complete for agent decision-making.
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%, yet the description explains all five parameters: queue_id/download_id exclusivity, confirm for dry-run, remove_from_client and blocklist booleans. It adds meaning beyond the schema, such as the constraint and the effect of each 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 'Remove item(s) from the Sonarr download queue' with a specific verb and resource. While it doesn't explicitly distinguish from sibling 'radarr_delete_queue_item', the tool name prefix 'sonarr_' inherently differentiates it.
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 explicit guidance: 'Provide EXACTLY ONE of: queue_id or download_id' and explains the dry-run preview via 'confirm', the effects of 'remove_from_client' and 'blocklist'. It tells exactly when to use each parameter and the consequences.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sonarr_delete_seasonA
Delete ALL episode files of a single season (destructive).
Set confirm=True to actually delete; omit or set False for a dry-run preview. Handles one season per call. Note: files are removed from Sonarr only — hardlinked files are not freed on disk until the torrent is removed too.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| series_id | Yes | ||
| season_number | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses destructive behavior and the important caveat that hardlinked files are not freed until the torrent is removed. This goes beyond basic 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?
Three tightly written sentences with no redundancy. The first sentence states the core purpose, the second explains the key parameter, and the third adds a behavioral nuance. Every sentence adds value.
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 the essential aspects: purpose, destructive nature, dry-run, and hardlink limitation. An output schema exists but is not shown; the description doesn't explain return values or prerequisites (e.g., series must exist). Given the minimal complexity, it is nearly 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?
Schema coverage is 0%, but the description adds crucial meaning for the confirm parameter (dry-run vs actual delete). The series_id and season_number are left to their names, which are self-explanatory in context, though examples or range hints would improve clarity.
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 explicitly states it deletes all episode files of a single season, using specific verb and resource. It distinguishes from sibling tools like sonarr_delete_episode_file and sonarr_delete_series by targeting a whole season.
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?
Clearly explains the dry-run mode using the confirm parameter, and notes that only one season is handled per call. However, it does not provide explicit when-not-to-use guidance or compare with alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sonarr_delete_seriesA
Delete a series from Sonarr by its internal id.
Set delete_files=True to also remove downloaded files from disk. Set confirm=True to actually delete; omit or set False for a dry-run preview.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| series_id | Yes | ||
| delete_files | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Explains dry-run behavior (confirm=false) and file deletion option (delete_files). No annotations provided, so missing behavioral traits like destructiveness or recovery options. Adequate but not comprehensive.
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?
Three sentences, purpose first, no fluff. Every sentence adds value.
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 no annotations and 0% schema coverage, description covers key behavioral aspects. With output schema present, return values may be documented there. Slightly incomplete regarding side effects.
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%, so description must compensate. Adds meaning to confirm (dry-run) and delete_files, but does not mention series_id. Two out of three parameters explained, partially compensates.
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?
Clearly states verb 'delete', resource 'series', and method 'by its internal id'. Distinguishes from sibling tools like sonarr_delete_season and sonarr_delete_episode_file.
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 clear context on when to use confirm and delete_files parameters. Does not explicitly state when not to use or alternatives, but purpose is straightforward.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sonarr_disk_spaceA
Show free disk space per volume known to Sonarr, fullest volume first.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility. It correctly indicates a read operation ('show') but does not disclose potential behavioral details such as refresh rate or performance impact. For a simple query, this is adequate.
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, complete sentence with no wasted words. It is front-loaded and efficiently conveys the tool's 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?
Given that the tool has no parameters and an output schema exists (presumably listing volumes), the description fully covers what the tool does and how the results are ordered. No additional context is needed.
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?
There are no parameters in the input schema, and schema description coverage is 100%. With zero parameters, the baseline is 4, and the description does not need to add parameter information.
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 ('show free disk space') and the resource ('per volume known to Sonarr') with ordering ('fullest volume first'). It distinguishes from the sibling tool radarr_disk_space by specifying 'Sonarr'.
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 implies usage context (checking disk space) but lacks explicit guidance on when to use this tool over alternatives. However, the tool is parameterless and straightforward, so the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sonarr_healthA
Show Sonarr instance health checks (notices, warnings, errors).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description only states what the tool does. It does not disclose read-only nature, authorization needs, or other behavioral traits beyond the action 'Show'. For a tool with no annotations, more detail would be beneficial.
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, clear sentence with no unnecessary 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?
For a simple health check tool with no parameters and an output schema, the description is mostly complete. It could mention that the output is a list, but the output schema likely covers that. The description is sufficient for an agent to understand what the tool returns.
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 tool has no parameters, and schema coverage is 100%. The description adds no parameter info, but none is needed. Baseline for zero parameters is 4.
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 'Show', the resource 'Sonarr instance health checks', and specifies categories 'notices, warnings, errors'. It is distinct from sibling tools like sonarr_system_status which likely show system-level info.
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?
No guidance on when to use this tool versus alternatives such as radarr_health or sonarr_system_status. The description does not provide context about appropriate usage or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sonarr_historyA
Show recent Sonarr history events (grab/import/deletion...).
Surfaces the downloadId (the torrent hash) when present, which later links a release to its torrent in the download client. Optionally filter by event_type, accepting a readable alias (grabbed, imported, failed, deleted, renamed, ignored) or an exact canonical eventType (e.g. downloadFolderImported). Filtering is done client-side, so a filtered result may include a note when the window is not filled.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| event_type | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully discloses key behaviors: it surfaces downloadId when present, supports filtering by event_type with readable aliases, notes that filtering is client-side, and mentions a note may appear when the window is not filled. This covers the tool's operational characteristics comprehensively.
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 very concise: two short sentences in the first paragraph, and a second paragraph adding specific detail about downloadId and filtering. Every sentence adds value with no redundancy or fluff.
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 (not shown) and low parameter count, the description covers the main use cases and filtering behavior. However, it does not explain pagination or the effect of the limit parameter, which could be important for large history sets.
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 has 0% description coverage, so the description must compensate. It provides meaningful semantics for the event_type parameter (aliases vs canonical values, client-side filtering), but the limit parameter is not mentioned at all. This leaves one parameter without additional context beyond its default value.
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 shows recent Sonarr history events and lists event types (grab, import, deletion). This verb+resource pair is specific and distinct from sibling tools, which are all different operations (e.g., disk space, queue, system status).
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 explains when to use the tool (to view history events) and how filtering works (client-side, with aliases). However, it does not explicitly state when not to use it or provide direct comparisons to sibling tools, missing some guidance for selecting among alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sonarr_list_seriesA
List all monitored and unmonitored series tracked in Sonarr.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must carry the full burden of behavioral disclosure. It fails to mention that the tool is read-only or that it has no side effects, leaving the agent to infer behavior from the name alone.
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?
A single, clear sentence that contains no filler and is efficiently 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 tool's simplicity (no parameters, output schema exists), the description fully captures its capabilities. No additional detail is necessary.
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 zero parameters and 100% schema coverage, the description adds no additional parameter meaning, but none is needed. Baseline of 4 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 verb 'list' and the resource 'all monitored and unmonitored series tracked in Sonarr,' making the tool's purpose specific and distinct from siblings like sonarr_lookup_series or sonarr_add_series.
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?
No guidance on when to use this tool versus alternatives such as sonarr_lookup_series or sonarr_series_seasons. The description is purely functional without contextual advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sonarr_lookup_seriesA
Search Sonarr for series by title (for adding a new series).
Returns tvdbId needed for sonarr_add_series.
| Name | Required | Description | Default |
|---|---|---|---|
| term | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It explicitly states the tool searches and returns a tvdbId, implying a read-only lookup. However, it does not mention potential behavior like handling multiple matches or case sensitivity, but for a simple search tool, this is adequate.
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 two sentences, direct and front-loaded with the purpose and return value. Every sentence provides critical information without any fluff.
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 complete for a simple lookup tool. It explains what it does, what it returns, and how it integrates with sonarr_add_series. An output schema exists (not shown), so no need to detail return format.
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 no description for the 'term' parameter (0% coverage). The description clarifies that 'term' refers to the series title, which adds essential meaning beyond the schema's bare type definition.
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 series by title, specifically for adding a new series. It also explicitly mentions that it returns the tvdbId needed for sonarr_add_series, distinguishing it from sibling tools like sonarr_list_series or sonarr_search_season.
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 indicates when to use this tool: when adding a new series and needing the tvdbId. It does not explicitly mention when not to use, but the context of siblings and the tool's purpose provides sufficient guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sonarr_purge_seasonA
Purge a whole season everywhere: delete its episode files in Sonarr AND remove the matching torrent(s) in qBittorrent-via-qui, cross-seeds included (destructive).
The torrents are located via the season's history downloadId(s) and their qui cross-seed siblings. include_loose_matches=False drops name/release-matched siblings (keeps content_path matches). delete_torrent_files also deletes the torrents' files from disk. Set confirm=True to execute; False for a dry-run.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| series_id | Yes | ||
| season_number | Yes | ||
| delete_torrent_files | No | ||
| include_loose_matches | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but the description fully covers behaviors: destructive action, cross-seed inclusion, torrent location via history downloadIds, and effects of include_loose_matches and delete_torrent_files. The dry-run capability is also 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 two paragraphs: a summary first, then details on how torrents are located and parameter behavior. Every sentence adds value 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 complexity of multi-system purge with cross-seeds and options, the description covers all key aspects. An output schema exists, so return values need not be explained. The description is adequate for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description explains three of five parameters: confirm (dry-run vs execute), include_loose_matches (drops name/release-matched siblings), and delete_torrent_files (deletes from disk). series_id and season_number are self-explanatory from the tool name and 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 clearly states the tool purges a whole season by deleting episode files in Sonarr and removing matching torrents in qBittorrent, including cross-seeds. It distinguishes itself from siblings like sonarr_delete_season and radarr_purge_movie by specifying the multi-system cleanup.
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 explains the dry-run mechanism with confirm and details on options like include_loose_matches and delete_torrent_files. However, it does not explicitly state when to use this tool over alternatives (e.g., sonarr_delete_season for Sonarr-only cleanup), leaving some ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sonarr_quality_profilesA
List available quality profiles in Sonarr (id + name needed for sonarr_add_series).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description should disclose behavioral traits. It states that the output includes id and name, which is useful. However, it does not describe any side effects (none expected), rate limits, or other behavior. The presence of an output schema partially compensates, so score is adequate.
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 one short sentence with a parenthetical note, efficiently conveying the tool's purpose and relevance. No unnecessary 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?
For a simple list tool with no parameters and an output schema, the description is complete. It explains what the tool does and why the output matters (for sonarr_add_series). 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 input schema has zero parameters, and schema coverage is 100%. Per guidelines, baseline for 0 params is 4. The description correctly implies no parameters are needed.
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?
Description clearly states the tool lists quality profiles in Sonarr and specifies that the id and name are needed for sonarr_add_series. This distinguishes it from sibling tools, none of which serve a similar 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 description implies usage context by noting that the id and name are needed for sonarr_add_series, suggesting use before adding a series. However, it lacks explicit guidance on when not to use or alternatives, which are not needed here since no other tool duplicates this function.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sonarr_queueA
Show current download queue in Sonarr, with diagnostics for stuck items.
Surfaces trackedDownloadStatus/State and statusMessages/errorMessage (the "why"), and groups items sharing a downloadId (a season pack is one torrent, many rows).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It details behavioral traits: surfaces trackedDownloadStatus/State and statusMessages/errorMessage, and groups items by downloadId. This goes beyond a simple listing, providing insight into output structure and grouping.
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?
Two sentences, efficiently front-loaded. First sentence states core purpose, second adds diagnostic details and grouping. No filler, every sentence adds value.
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 zero parameters and presence of output schema, description fully covers purpose and key output features: diagnostics for stuck items and grouping by downloadId. Sufficient for an agent to understand tool's value and behavior.
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?
No parameters in input schema, so baseline is 4. Description adds no parameter info, but schema coverage is 100% and there are no parameters to explain.
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?
Description clearly states 'Show current download queue in Sonarr, with diagnostics for stuck items.' This specifies the verb 'show', resource 'download queue', and special feature of diagnostics, distinguishing it from sibling tools like sonarr_delete_queue_item.
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?
Usage is implied for checking queue status, especially stuck items, but no explicit guidance on when not to use or alternatives (e.g., sonarr_history for historical data). The description lacks explicit when-to-use or when-not-to-use context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sonarr_root_foldersA
List configured root folders in Sonarr (path needed for sonarr_add_series).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of disclosing behavior. It states the tool lists root folders and hints at the output being paths, but does not mention any behavioral traits like read-only nature, authentication requirements, or error handling. The output schema may fill some gaps, but the description itself is sparse.
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 sentence that efficiently conveys the tool's purpose and a key usage hint. Every word is necessary with no 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 (0 parameters, simple listing operation, and an output schema presumably documenting the return structure), the description is fully complete. It tells the agent exactly what the tool does and why it matters, requiring no further elaboration.
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 tool has zero parameters, so no parameter documentation is needed. The description adds value by explaining the purpose of the output (path needed for sonarr_add_series), which aids the agent in understanding how to use the results. Schema coverage is 100% trivially.
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?
Description clearly states it lists configured root folders in Sonarr and explicitly mentions its use case for sonarr_add_series. It distinguishes from siblings by specifying 'in Sonarr' and using a unique verb+resource.
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 implies when to use the tool (before adding a series) by noting the path is needed for sonarr_add_series. However, it does not explicitly state when not to use it or mention alternatives, though alternatives are minimal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sonarr_search_seasonB
Trigger a search/download for a whole season.
Set confirm=True to actually launch the search; omit or set False for a dry-run preview of what would be searched.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| series_id | Yes | ||
| season_number | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Behavior is partially disclosed: confirms that confirm=True triggers action and confirm=False is dry-run. No annotations exist, so description carries full burden; but lacks details on side effects, permissions, or rate limits.
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?
Two short sentences, front-loaded with main action. Efficient but could be slightly more concise. No unnecessary 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?
Output schema exists, so return values are covered. But description omits prerequisites (e.g., series must exist) or expected behavior when season is already downloaded. Adequate but not fully 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?
With 0% schema description coverage, description only adds meaning to 'confirm' (dry-run vs launch). No explanation for series_id or season_number beyond their names. Insufficient compensation for missing 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 triggers a search/download for a whole season. It distinguishes from siblings like sonarr_set_season_monitoring and sonarr_purge_season, but doesn't explicitly differentiate itself.
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 guidance on confirm parameter: set to True to launch search, False for dry-run. This helps the agent decide when to invoke. However, no guidance on when not to use this tool or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sonarr_season_episodesA
List the episodes of one season with their file/monitoring status.
Per episode: E-number, title, hasFile (✓/✗), monitored (✓/✗), episode id, and episodeFileId when present. Useful to see exactly what is present/missing (e.g. confirm a phantom episode with no file). Sorted by episode number.
| Name | Required | Description | Default |
|---|---|---|---|
| series_id | Yes | ||
| season_number | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries burden. It explains returned fields (hasFile, monitored, IDs) and sorting. No contradictions. Could mention that it's a read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences with no redundant information. Front-loaded with main action.
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 output schema exists and tool is straightforward, description covers purpose, behavior, and usage. 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?
Schema has 0% description coverage; description only indirectly implies parameters (series_id, season_number). No additional details provided about format or constraints.
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 lists episodes of a season with file/monitoring status. It uses specific verbs and resources, and distinguishes from sibling tools like sonarr_series_seasons.
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 concrete use case: confirming phantom episodes. It does not explicitly mention when not to use, but the example is helpful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sonarr_series_seasonsA
Show a season-by-season breakdown of an already-tracked series.
For each season: number, whether it is monitored, episodes present/total, and whether it is complete. Season 0 is labelled as Specials.
| Name | Required | Description | Default |
|---|---|---|---|
| series_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided. The description indicates a read-only operation ('Show'), but does not explicitly confirm non-destructive behavior, required permissions, or other side effects. It relies on the verb to imply safety.
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?
Two sentences: first states the core purpose, the second details output fields. No redundant information, front-loaded, and easy to parse.
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 read tool with an output schema (present, not shown), the description covers what the agent needs: purpose, input, and output content. It leaves no obvious 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?
Schema description coverage is 0%, so the parameter 'series_id' is only described by its name and type. The description adds context that it refers to a tracked series, but does not explain how to obtain the ID (e.g., from sonarr_list_series). This is adequate but not exemplary.
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 shows a 'season-by-season breakdown of an already-tracked series', with specific output details. This differentiates it from siblings like sonarr_list_series (list all series) and sonarr_season_episodes (episodes of a specific season).
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 implies the tool is for series already in Sonarr ('already-tracked'), but does not explicitly state when not to use it or mention alternatives. It lacks guidance on distinguishing from other season-related tools like sonarr_search_season.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sonarr_set_season_monitoringA
Enable or disable monitoring for a single season of a series.
Reversible action with no immediate grab, so no confirm is required. Returns the season state after the change.
| Name | Required | Description | Default |
|---|---|---|---|
| monitored | Yes | ||
| series_id | Yes | ||
| season_number | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description sufficiently discloses key behaviors: it's reversible, does not trigger a download ('no immediate grab'), and returns the new state. This helps agents understand the side effects and safety profile without additional context.
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 three concise sentences. The first sentence states the core purpose, the second adds a key behavioral note, and the third specifies the return value. No unnecessary words; every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low parameter count and the presence of an output schema, the description covers the essential behavioral context but fails to document parameter semantics. Combined with 0% schema coverage, this leaves ambiguity in parameter usage, making it incomplete for first-time use.
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 0% description coverage, yet the description provides no explanation for the three parameters (series_id, season_number, monitored). While the parameter names are somewhat self-explanatory, the description does not clarify details like expected formats or zero-based indexing, which would be helpful for correct invocation.
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: 'Enable or disable monitoring for a single season of a series.' This is a specific verb-resource pair, and it distinguishes itself from sibling tools like sonarr_delete_season or sonarr_search_season by focusing on the monitoring state toggle.
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 mentions the action is reversible and doesn't require confirmation, but provides no guidance on when to use this tool versus alternatives like sonarr_delete_season or sonarr_purge_season. It lacks explicit when-to-use or when-not-to-use information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sonarr_system_statusA
Return Sonarr system status (version, health).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must bear the full burden of behavioral disclosure. The description implies a read-only operation (by stating 'Return'), but does not explicitly confirm idempotency, auth requirements, or potential side effects. For a simple status endpoint, this is adequate but not exemplary.
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 sentence of 8 words, conveying the core purpose with no wasted content. It is front-loaded and to the point.
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 zero parameters, an output schema exists, and the tool is simple, the description provides enough context to understand what the tool does. It mentions version and health, which are key fields. However, it could be slightly more comprehensive by hinting at other possible status fields.
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?
There are zero parameters, so the baseline is 4. The description does not need to add parameter meaning, and it does not attempt to, which 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 it returns Sonarr system status with examples (version, health), which distinguishes it from sibling tools like radarr_system_status and prowlarr_system_status. However, it does not explicitly differentiate from the closely related sonarr_health tool, which is a sibling.
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 no explicit guidance on when to use this tool versus alternatives like sonarr_health. While the context implies a general status check, the lack of any usage conditions or exclusions leaves room for ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sonarr_upcomingB
Show episodes airing in the next N days (default 7) via Sonarr calendar.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must disclose behavior. It mentions 'via Sonarr calendar' but does not state that it is a read-only operation, any required permissions, or the scope (only future episodes). Lacks detail on side effects or safety.
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 clear sentence, front-loading the core purpose. It is appropriately concise, though it could be slightly more structured with explicit parameter info.
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 an output schema (not shown) and a simple input, the description is minimally complete. However, it does not explain the return format or any additional context about the calendar source, leaving some uncertainty for the 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 single parameter 'days' has no schema description (0% coverage), but the tool description explains its meaning and default value, effectively compensating for the schema gap.
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 specifies the verb 'show' and resource 'episodes airing' with a time range, distinguishing it from sibling tools like sonarr_list_series or sonarr_season_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?
No guidance on when to use this tool versus alternatives, nor any exclusion criteria or prerequisites. It only states what it does without context for selection.
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.
60 tool updates
v0.1.0- First observed
jellyfin_add_to_collection - First observed
jellyfin_collection_items - First observed
jellyfin_create_collection - First observed
jellyfin_delete_collection - First observed
jellyfin_list_collections - First observed
jellyfin_list_movies - First observed
jellyfin_remove_from_collection - First observed
jellyfin_set_overview - First observed
jellyfin_system_status - First observed
prowlarr_grab - First observed
prowlarr_health - First observed
prowlarr_indexer_status - First observed
prowlarr_list_indexers - First observed
prowlarr_search - First observed
prowlarr_system_status - First observed
prowlarr_test_all_indexers - First observed
prowlarr_test_indexer - First observed
qbit_delete_torrent - First observed
qbit_get_torrent - First observed
qbit_list_instances - First observed
qbit_list_torrents - First observed
qbit_pause - First observed
qbit_resume - First observed
radarr_add_movie - First observed
radarr_delete_movie - First observed
radarr_delete_movie_file - First observed
radarr_delete_queue_item - First observed
radarr_disk_space - First observed
radarr_health - First observed
radarr_history - First observed
radarr_list_movies - First observed
radarr_lookup_movie - First observed
radarr_purge_movie - First observed
radarr_quality_profiles - First observed
radarr_queue - First observed
radarr_root_folders - First observed
radarr_search_movie - First observed
radarr_set_movie_monitoring - First observed
radarr_system_status - First observed
radarr_upcoming - First observed
sonarr_add_series - First observed
sonarr_delete_episode_file - First observed
sonarr_delete_queue_item - First observed
sonarr_delete_season - First observed
sonarr_delete_series - First observed
sonarr_disk_space - First observed
sonarr_health - First observed
sonarr_history - First observed
sonarr_list_series - First observed
sonarr_lookup_series - First observed
sonarr_purge_season - First observed
sonarr_quality_profiles - First observed
sonarr_queue - First observed
sonarr_root_folders - First observed
sonarr_search_season - First observed
sonarr_season_episodes - First observed
sonarr_series_seasons - First observed
sonarr_set_season_monitoring - First observed
sonarr_system_status - First observed
sonarr_upcoming
TDQS
All 60 tools are clearly grouped by service (qbit_, prowlarr_, jellyfin_, radarr_, sonarr_) and within each group, each tool has a distinct purpose. There is no ambiguity between tools, even across similar operations on different services.
Tool names follow a consistent pattern of service_verb_noun in snake_case (e.g., sonarr_add_series, radarr_delete_movie). The naming is predictable and uniform across all services, with no mixing of styles.
With 60 tools across 5 services, the count is on the higher side but appropriate for the breadth of functionality. Each service has a reasonable number of tools (e.g., ~6 for qBittorrent, ~18 for Sonarr) covering essential operations without being excessive.
The tool set covers core workflows for each service: CRUD for movies/series, collections, queue management, search, and system status. Minor gaps exist (e.g., no tag management or custom format operations), but the surface is comprehensive enough for most media management tasks.
Maintenance
Related MCP Connectors
Manage Superlist tasks and lists in plain language from any MCP-compatible AI agent.
- AchriomOAuthcom.achriom
Media memory for AI agents and their humans: books, movies, music, shows, anime, podcasts, games.
Movies and TV show data — search, details, ratings, and cast from iTunes and TVmaze APIs
Unlock a world of television with the TV Maze MCP server. Effortlessly search for shows by name or
Related MCP Servers
- FlicenseBqualityDmaintenanceEnables AI assistants to manage TV series collections through Sonarr's API using natural language interactions. Supports searching, adding, updating, and deleting TV series with detailed control over quality profiles, season monitoring, and episode downloads.9-
- AlicenseAqualityAmaintenanceEnables unified control of \*arr media management applications (Sonarr, Radarr, Lidarr, Readarr, Prowlarr) through natural language queries. Manage TV shows, movies, music, books, search for content, monitor downloads, and check upcoming releases across all services.66572206MIT
- AlicenseNot gradedqualityDmaintenanceEnables interaction with Sonarr and Radarr APIs to query media libraries, check recent additions, view upcoming releases, manage download queues, and perform searches for TV shows and movies through natural language.1MIT
- FlicenseNot gradedqualityDmaintenanceIntegrates with Radarr and Sonarr to manage your media library, enabling search, download requests, status checks, and system health monitoring.6-
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/ava-hip/mcp-media-stack'
If you have feedback or need assistance with the MCP directory API, please join our Discord server