server

package
v1.4.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 30, 2026 License: MIT Imports: 12 Imported by: 0

Documentation

Overview

Package server exposes an *arr media stack over the Model Context Protocol.

Index

Constants

This section is empty.

Variables

View Source
var (
	// ErrDeclined means the user was asked and said no.
	ErrDeclined = errors.New("the user declined this action")
	// ErrConfirmUnsupported means the client cannot prompt the user at all.
	ErrConfirmUnsupported = errors.New("client does not support elicitation")
	// ErrReadOnly means the server is configured to refuse all mutations.
	ErrReadOnly = errors.New("server is running in readonly mode")
)

Errors returned when a call is not permitted.

View Source
var Version = resolveVersion()

Version is the version this server reports over MCP and via --version.

Functions

func InstanceCredentials added in v1.1.0

func InstanceCredentials(inst *config.Instance) arr.Credentials

InstanceCredentials converts a configured instance's secrets into client credentials. Config validation has already ensured only the fields the service uses are set, so every field is passed through.

Types

type Access

type Access int

Access describes how much damage a tool can do.

const (
	// AccessRead only reads state.
	AccessRead Access = iota
	// AccessWrite creates or modifies state.
	AccessWrite
	// AccessDestructive removes state or files.
	AccessDestructive
)

func (Access) Annotations

func (a Access) Annotations() *mcp.ToolAnnotations

Annotations returns the MCP hints matching this access tier so clients can render their own warnings independently of our gating.

func (Access) String

func (a Access) String() string

String names the access tier for prompts and logs.

type AddIndexerArgs added in v1.1.0

type AddIndexerArgs struct {
	InstanceArg
	DefinitionName string         `json:"definitionName" jsonschema:"definitionName from prowlarr_list_indexer_schemas"`
	Name           string         `json:"name" jsonschema:"display name for the new indexer"`
	Enable         *bool          `json:"enable,omitempty"`
	Priority       *int           `json:"priority,omitempty" jsonschema:"1 is highest, 50 is lowest; 25 is the default"`
	AppProfileID   *int           `json:"appProfileId,omitempty" jsonschema:"sync profile id from prowlarr_list_app_profiles"`
	Tags           []int          `json:"tags,omitempty" jsonschema:"tag ids from prowlarr_list_tags"`
	Fields         map[string]any `json:"fields,omitempty" jsonschema:"indexer settings by field name from prowlarr_get_indexer_schema, e.g. baseUrl and apiKey"`
}

AddIndexerArgs is the input for prowlarr_add_indexer. The optional settings are pointers so an omitted argument keeps the definition's own default rather than resetting it to a zero value.

type AddMovieArgs

type AddMovieArgs struct {
	InstanceArg
	TMDBID              int    `json:"tmdbId" jsonschema:"TMDB id from radarr_search_movies"`
	Title               string `json:"title,omitempty"`
	QualityProfileID    int    `json:"qualityProfileId" jsonschema:"id from radarr_list_quality_profiles"`
	RootFolderPath      string `json:"rootFolderPath" jsonschema:"path from radarr_list_root_folders"`
	SearchNow           bool   `json:"searchNow,omitempty" jsonschema:"start searching for the movie immediately"`
	MinimumAvailability string `json:"minimumAvailability,omitempty" jsonschema:"tba, announced, inCinemas or released; defaults to released"`
	Monitored           *bool  `json:"monitored,omitempty" jsonschema:"monitor the movie; defaults to true"`
	Tags                []int  `json:"tags,omitempty" jsonschema:"tag ids from radarr_list_tags"`
}

AddMovieArgs is the input for radarr_add_movie. As with AddSeriesArgs, an omitted optional keeps the previous default rather than sending a zero value.

type AddNZBArgs added in v1.1.0

type AddNZBArgs struct {
	InstanceArg
	URL       string `json:"url,omitempty" jsonschema:"link to an .nzb file for NZBGet to fetch; exactly one of url and content is required"`
	Content   string `json:"content,omitempty" jsonschema:"base64-encoded .nzb file content, as an alternative to url"`
	Filename  string `json:"filename,omitempty" jsonschema:"name ending in .nzb; required with content, optional with url"`
	Category  string `json:"category,omitempty" jsonschema:"NZBGet category, e.g. Movies or Series"`
	Priority  int    `` /* 136-byte string literal not displayed */
	AddToTop  bool   `json:"addToTop,omitempty" jsonschema:"put the download at the top of the queue"`
	AddPaused bool   `json:"addPaused,omitempty" jsonschema:"add in a paused state"`
	DupeKey   string `json:"dupeKey,omitempty" jsonschema:"duplicate detection key, e.g. an imdb or tvdb id"`
	DupeScore int    `json:"dupeScore,omitempty" jsonschema:"quality score for duplicate resolution; higher wins"`
	DupeMode  string `json:"dupeMode,omitempty" jsonschema:"SCORE, ALL or FORCE; defaults to SCORE"`
}

AddNZBArgs is the input for nzbget_add_nzb.

type AddProviderArgs added in v1.3.0

type AddProviderArgs struct {
	InstanceArg
	ProviderFlagArgs
	Kind           string         `json:"kind" jsonschema:"provider family: indexer, downloadClient, notification or importList"`
	Implementation string         `json:"implementation" jsonschema:"implementation from the provider schemas tool, e.g. Nzbget or Discord"`
	Name           string         `json:"name" jsonschema:"display name for the new provider"`
	Priority       *int           `json:"priority,omitempty" jsonschema:"indexers and download clients only; 1 is highest"`
	Tags           []int          `json:"tags,omitempty" jsonschema:"tag ids from the service's tag listing"`
	Fields         map[string]any `` /* 134-byte string literal not displayed */
}

AddProviderArgs is the input for the provider creation tool. The optional settings are pointers so an omitted argument keeps the implementation's own default rather than resetting it to a zero value.

type AddSeriesArgs

type AddSeriesArgs struct {
	InstanceArg
	TVDBID           int    `json:"tvdbId" jsonschema:"TheTVDB id from sonarr_search_series"`
	Title            string `json:"title,omitempty"`
	QualityProfileID int    `json:"qualityProfileId" jsonschema:"id from sonarr_list_quality_profiles"`
	RootFolderPath   string `json:"rootFolderPath" jsonschema:"path from sonarr_list_root_folders"`
	SearchNow        bool   `json:"searchNow,omitempty" jsonschema:"start searching for episodes immediately"`
	Monitor          string `` /* 145-byte string literal not displayed */
	SeriesType       string `json:"seriesType,omitempty" jsonschema:"standard, daily or anime; defaults to standard"`
	SeasonFolder     *bool  `json:"seasonFolder,omitempty" jsonschema:"store each season in its own folder; defaults to true"`
	Tags             []int  `json:"tags,omitempty" jsonschema:"tag ids from sonarr_list_tags"`
}

AddSeriesArgs is the input for sonarr_add_series. The optional settings are pointers or empty strings so that omitting one keeps the behaviour this tool had before they existed: monitor everything, in season folders.

type AddTorrentArgs added in v1.1.0

type AddTorrentArgs struct {
	InstanceArg
	URLs             []string `json:"urls" jsonschema:"http, https or magnet links to add"`
	SavePath         string   `json:"savePath,omitempty" jsonschema:"download directory; omit for the default"`
	Category         string   `json:"category,omitempty" jsonschema:"category from qbittorrent_list_categories"`
	Tags             []string `json:"tags,omitempty" jsonschema:"tags to apply on add"`
	Stopped          bool     `json:"stopped,omitempty" jsonschema:"add without starting the download"`
	Rename           string   `json:"rename,omitempty" jsonschema:"display name for the torrent"`
	DownloadLimit    *int64   `json:"downloadLimit,omitempty" jsonschema:"bytes per second"`
	UploadLimit      *int64   `json:"uploadLimit,omitempty" jsonschema:"bytes per second"`
	RatioLimit       *float64 `json:"ratioLimit,omitempty" jsonschema:"stop seeding at this share ratio"`
	SeedingTimeLimit *int     `json:"seedingTimeLimit,omitempty" jsonschema:"stop seeding after this many minutes"`
	AutoTMM          *bool    `json:"autoTMM,omitempty" jsonschema:"let automatic torrent management pick the save path"`
}

AddTorrentArgs is the input for qbittorrent_add_torrent. Optional limits are pointers so an omitted argument leaves the instance defaults untouched.

type AppProfileList added in v1.1.0

type AppProfileList struct {
	Profiles []arr.AppProfile `json:"profiles"`
	Count    int              `json:"count"`
}

AppProfileList wraps Prowlarr sync profile results.

type ApplicationList added in v1.1.0

type ApplicationList struct {
	Applications []arr.Application `json:"applications"`
	Count        int               `json:"count"`
}

ApplicationList wraps the *arr instances Prowlarr syncs indexers to.

type BazarrHealthList added in v0.3.0

type BazarrHealthList struct {
	Issues []arr.BazarrHealthIssue `json:"issues"`
	Count  int                     `json:"count"`
}

BazarrHealthList wraps Bazarr health issues, which use their own shape.

type BazarrMovieList added in v0.3.0

type BazarrMovieList struct {
	Movies   []arr.BazarrMovie `json:"movies"`
	Returned int               `json:"returned"`
	Total    int               `json:"total" jsonschema:"total movies in the library, which may exceed those returned"`
}

BazarrMovieList wraps a page of Bazarr's movie view.

type BazarrSeriesList added in v0.3.0

type BazarrSeriesList struct {
	Series   []arr.BazarrSeries `json:"series"`
	Returned int                `json:"returned"`
	Total    int                `json:"total" jsonschema:"total series in the library, which may exceed those returned"`
}

BazarrSeriesList wraps a page of Bazarr's series view.

type BazarrTaskList added in v1.1.0

type BazarrTaskList struct {
	Tasks []arr.BazarrTask `json:"tasks"`
	Count int              `json:"count"`
}

BazarrTaskList wraps Bazarr scheduled jobs. Distinct from TaskList, which covers the *arr apps' own task shape.

type BlacklistPageArgs added in v1.1.0

type BlacklistPageArgs struct {
	InstanceArg
	Kind   string `json:"kind" jsonschema:"which blacklist to read: episodes or movies"`
	Start  int    `json:"start,omitempty" jsonschema:"offset into the result set; defaults to 0"`
	Length int    `json:"length,omitempty" jsonschema:"maximum records to return; defaults to all"`
}

BlacklistPageArgs pages one of Bazarr's two subtitle blacklists.

type BlacklistSubtitleArgs added in v1.1.0

type BlacklistSubtitleArgs struct {
	InstanceArg
	Kind          string `json:"kind" jsonschema:"episodes or movies"`
	SeriesID      int    `json:"seriesId,omitempty" jsonschema:"sonarrSeriesId; required when kind is episodes"`
	EpisodeID     int    `json:"episodeId,omitempty" jsonschema:"sonarrEpisodeId; required when kind is episodes"`
	RadarrID      int    `json:"radarrId,omitempty" jsonschema:"radarrId; required when kind is movies"`
	Provider      string `json:"provider" jsonschema:"provider from bazarr_episode_history or bazarr_movie_history"`
	SubsID        string `json:"subsId" jsonschema:"subs_id from the same history record"`
	Language      string `json:"language" jsonschema:"two-letter language code of the subtitle"`
	SubtitlesPath string `json:"subtitlesPath" jsonschema:"subtitles_path from the same history record"`
}

BlacklistSubtitleArgs blacklists one downloaded subtitle.

type BlocklistList added in v0.3.0

type BlocklistList struct {
	Items []arr.BlocklistItem `json:"items"`
	Count int                 `json:"count"`
	Total int                 `json:"total" jsonschema:"releases blocklisted across all pages"`
}

BlocklistList wraps blocklist results.

type CalendarArgs

type CalendarArgs struct {
	InstanceArg
	Start string `json:"start,omitempty" jsonschema:"start date as YYYY-MM-DD"`
	End   string `json:"end,omitempty" jsonschema:"end date as YYYY-MM-DD"`
}

CalendarArgs is the input for calendar tools.

type CategoryArgs added in v1.1.0

type CategoryArgs struct {
	InstanceArg
	Name     string `json:"name" jsonschema:"category name"`
	SavePath string `json:"savePath,omitempty" jsonschema:"download directory for the category; omit for the default"`
}

CategoryArgs is the input for creating or editing a qBittorrent category.

type CategoryList added in v1.1.0

type CategoryList struct {
	Categories []arr.TorrentCategory `json:"categories"`
	Count      int                   `json:"count"`
}

CategoryList wraps qBittorrent category results.

type CategoryNamesArgs added in v1.1.0

type CategoryNamesArgs struct {
	InstanceArg
	Names []string `json:"names" jsonschema:"category names from qbittorrent_list_categories"`
}

CategoryNamesArgs is the input for qbittorrent_delete_categories.

type CollectionList added in v0.3.0

type CollectionList struct {
	Collections []arr.Collection `json:"collections"`
	Count       int              `json:"count"`
}

CollectionList wraps Radarr collection results.

type CommandArgs

type CommandArgs struct {
	InstanceArg
	Name string `json:"name" jsonschema:"command name, e.g. RefreshSeries, RssSync, Backup"`
}

CommandArgs is the input for triggering a background command.

type Confirmer

type Confirmer interface {
	Confirm(ctx context.Context, prompt string) (bool, error)
}

Confirmer asks the user to approve an action. Implementations return ErrConfirmUnsupported when the connected client cannot prompt.

type CreateCustomFormatArgs added in v1.4.0

type CreateCustomFormatArgs struct {
	InstanceArg
	Name                string                `json:"name" jsonschema:"a name for the new format"`
	IncludeWhenRenaming bool                  `json:"includeCustomFormatWhenRenaming,omitempty" jsonschema:"add the format's name to renamed files"`
	Specifications      []CustomFormatSpecArg `json:"specifications" jsonschema:"the rules that make this format match; use the shape the get_custom_format tool reports"`
}

CreateCustomFormatArgs is the input for the create_custom_format tools.

type CreateQualityProfileArgs added in v1.4.0

type CreateQualityProfileArgs struct {
	InstanceArg
	Name           string   `json:"name" jsonschema:"a name for the new profile"`
	Allowed        []string `json:"allowed" jsonschema:"quality names to accept, e.g. WEBDL-1080p; group names from an existing profile also work"`
	Cutoff         string   `json:"cutoff,omitempty" jsonschema:"quality to stop upgrading at; defaults to the best of allowed"`
	UpgradeAllowed *bool    `` /* 136-byte string literal not displayed */
}

CreateQualityProfileArgs is the input for the create_quality_profile tools. Qualities are named rather than numbered so a caller never has to guess an id.

type CreateReleaseProfileArgs added in v1.4.0

type CreateReleaseProfileArgs struct {
	InstanceArg
	Name      string   `json:"name,omitempty" jsonschema:"a name for the new profile"`
	Enabled   *bool    `json:"enabled,omitempty" jsonschema:"defaults to true"`
	Required  []string `json:"required,omitempty" jsonschema:"terms a release title must contain"`
	Ignored   []string `json:"ignored,omitempty" jsonschema:"terms that reject a release"`
	IndexerID *int     `json:"indexerId,omitempty" jsonschema:"limit to one indexer, from the list_indexers tool; 0 means every indexer"`
	Tags      []int    `json:"tags,omitempty" jsonschema:"tag ids from the list_tags tool; empty applies the profile to everything"`
}

CreateReleaseProfileArgs is the input for sonarr_create_release_profile.

type CustomFormatList added in v0.3.0

type CustomFormatList struct {
	Formats []arr.CustomFormat `json:"formats"`
	Count   int                `json:"count"`
}

CustomFormatList wraps custom format results.

type CustomFormatSpecArg added in v1.4.0

type CustomFormatSpecArg struct {
	Name           string         `json:"name" jsonschema:"a name for this rule"`
	Implementation string         `` /* 151-byte string literal not displayed */
	Negate         bool           `json:"negate,omitempty" jsonschema:"invert the rule, so a match rejects instead of accepts"`
	Required       bool           `json:"required,omitempty" jsonschema:"the format only matches when this rule does"`
	Fields         map[string]any `` /* 133-byte string literal not displayed */
}

CustomFormatSpecArg is one matching rule of a custom format.

type DefinitionArgs added in v1.1.0

type DefinitionArgs struct {
	InstanceArg
	DefinitionName string `json:"definitionName" jsonschema:"definitionName from prowlarr_list_indexer_schemas"`
}

DefinitionArgs selects one indexer definition by name.

type DelayProfileList added in v0.3.0

type DelayProfileList struct {
	Profiles []arr.DelayProfile `json:"profiles"`
	Count    int                `json:"count"`
}

DelayProfileList wraps delay profile results.

type DeleteArgs

type DeleteArgs struct {
	InstanceArg
	ID          int  `json:"id" jsonschema:"internal id of the item to remove"`
	DeleteFiles bool `json:"deleteFiles,omitempty" jsonschema:"also delete downloaded files from disk"`
}

DeleteArgs is the input for deletion tools.

type DeleteBlacklistArgs added in v1.1.0

type DeleteBlacklistArgs struct {
	InstanceArg
	Kind     string `json:"kind" jsonschema:"episodes or movies"`
	Provider string `json:"provider,omitempty" jsonschema:"provider from bazarr_list_blacklist; required unless all is true"`
	SubsID   string `json:"subsId,omitempty" jsonschema:"subs_id from bazarr_list_blacklist; required unless all is true"`
	All      bool   `json:"all,omitempty" jsonschema:"empty the whole blacklist instead of removing one entry"`
}

DeleteBlacklistArgs removes blacklist entries.

type DeleteEpisodeSubtitleArgs added in v0.3.0

type DeleteEpisodeSubtitleArgs struct {
	InstanceArg
	SeriesID  int    `json:"seriesId" jsonschema:"sonarrSeriesId of the episode"`
	EpisodeID int    `json:"episodeId" jsonschema:"sonarrEpisodeId of the episode"`
	Language  string `json:"language" jsonschema:"two-letter language code of the subtitle to delete"`
	Path      string `json:"path" jsonschema:"subtitle file path from bazarr_list_episode_subtitles"`
	Forced    bool   `json:"forced,omitempty"`
	HI        bool   `json:"hi,omitempty" jsonschema:"hearing impaired subtitle"`
}

DeleteEpisodeSubtitleArgs identifies an existing subtitle file to remove. Path is required and comes from bazarr_list_episode_subtitles.

type DeleteMovieSubtitleArgs added in v0.3.0

type DeleteMovieSubtitleArgs struct {
	InstanceArg
	RadarrID int    `json:"radarrId" jsonschema:"radarrId of the movie"`
	Language string `json:"language" jsonschema:"two-letter language code of the subtitle to delete"`
	Path     string `json:"path" jsonschema:"subtitle file path of the subtitle to delete"`
	Forced   bool   `json:"forced,omitempty"`
	HI       bool   `json:"hi,omitempty" jsonschema:"hearing impaired subtitle"`
}

DeleteMovieSubtitleArgs identifies an existing movie subtitle file to remove.

type DeleteQueueArgs

type DeleteQueueArgs struct {
	InstanceArg
	ID               int  `json:"id" jsonschema:"queue item id from the queue tool"`
	RemoveFromClient bool `json:"removeFromClient,omitempty" jsonschema:"also remove the download from the download client"`
	Blocklist        bool `json:"blocklist,omitempty" jsonschema:"blocklist the release so it is not grabbed again"`
}

DeleteQueueArgs is the input for queue removal tools.

type DeleteQueueItemsArgs added in v1.2.0

type DeleteQueueItemsArgs struct {
	InstanceArg
	IDs              []int `json:"ids" jsonschema:"queue item ids from the queue tool"`
	RemoveFromClient bool  `json:"removeFromClient,omitempty" jsonschema:"also remove the downloads from the download client"`
	Blocklist        bool  `json:"blocklist,omitempty" jsonschema:"blocklist the releases so they are not grabbed again"`
}

DeleteQueueItemsArgs is the input for the delete_queue_items tools.

type DeleteTorrentsArgs added in v1.1.0

type DeleteTorrentsArgs struct {
	InstanceArg
	Hashes      []string `json:"hashes" jsonschema:"torrent hashes from qbittorrent_list_torrents, or [\"all\"] for every torrent"`
	DeleteFiles bool     `json:"deleteFiles,omitempty" jsonschema:"also delete the downloaded files from disk"`
}

DeleteTorrentsArgs is the input for qbittorrent_delete_torrents.

type Deleted

type Deleted struct {
	ID      int  `json:"id"`
	Deleted bool `json:"deleted"`
}

Deleted reports the outcome of a deletion.

type DeletedCount added in v0.3.0

type DeletedCount struct {
	Deleted int `json:"deleted"`
}

DeletedCount reports how many records a bulk deletion removed. A partial failure reports the count reached before the error, because deleted files do not come back and the caller must not blindly retry the whole list.

type DiskSpaceList

type DiskSpaceList struct {
	Disks []arr.DiskSpace `json:"disks"`
}

DiskSpaceList wraps disk space results.

type DownloadEpisodeSubtitleArgs added in v1.1.0

type DownloadEpisodeSubtitleArgs struct {
	InstanceArg
	SeriesID       int    `json:"seriesId" jsonschema:"sonarrSeriesId of the episode"`
	EpisodeID      int    `json:"episodeId" jsonschema:"sonarrEpisodeId the search was run for"`
	Provider       string `json:"provider" jsonschema:"provider from bazarr_manual_search_episode, unchanged"`
	Subtitle       string `json:"subtitle" jsonschema:"subtitle token from bazarr_manual_search_episode, unchanged"`
	HI             bool   `json:"hi,omitempty" jsonschema:"the candidate's hearingImpaired value"`
	Forced         bool   `json:"forced,omitempty" jsonschema:"the candidate's forced value"`
	OriginalFormat bool   `json:"originalFormat,omitempty" jsonschema:"keep the provider's subtitle format instead of converting to srt"`
}

DownloadEpisodeSubtitleArgs downloads one manual search result.

type DownloadMovieSubtitleArgs added in v1.1.0

type DownloadMovieSubtitleArgs struct {
	InstanceArg
	RadarrID       int    `json:"radarrId" jsonschema:"radarrId the search was run for"`
	Provider       string `json:"provider" jsonschema:"provider from bazarr_manual_search_movie, unchanged"`
	Subtitle       string `json:"subtitle" jsonschema:"subtitle token from bazarr_manual_search_movie, unchanged"`
	HI             bool   `json:"hi,omitempty" jsonschema:"the candidate's hearingImpaired value"`
	Forced         bool   `json:"forced,omitempty" jsonschema:"the candidate's forced value"`
	OriginalFormat bool   `json:"originalFormat,omitempty" jsonschema:"keep the provider's subtitle format instead of converting to srt"`
}

DownloadMovieSubtitleArgs downloads one manual search result for a movie.

type EditMoviesArgs added in v0.3.0

type EditMoviesArgs struct {
	InstanceArg
	MovieIDs            []int  `json:"movieIds" jsonschema:"movie ids from radarr_list_movies"`
	Monitored           *bool  `json:"monitored,omitempty" jsonschema:"monitor or unmonitor the movies"`
	QualityProfileID    *int   `json:"qualityProfileId,omitempty" jsonschema:"id from radarr_list_quality_profiles"`
	MinimumAvailability string `json:"minimumAvailability,omitempty" jsonschema:"tba, announced, inCinemas or released"`
	RootFolderPath      string `json:"rootFolderPath,omitempty" jsonschema:"path from radarr_list_root_folders"`
	Tags                []int  `json:"tags,omitempty" jsonschema:"tag ids from radarr_list_tags"`
	ApplyTags           string `json:"applyTags,omitempty" jsonschema:"how to apply tags: add, remove or replace; defaults to add"`
	MoveFiles           bool   `json:"moveFiles,omitempty" jsonschema:"move files on disk when rootFolderPath changes"`
}

EditMoviesArgs is the input for radarr_edit_movies.

type EditSeriesArgs added in v0.3.0

type EditSeriesArgs struct {
	InstanceArg
	SeriesIDs        []int  `json:"seriesIds" jsonschema:"series ids from sonarr_list_series"`
	Monitored        *bool  `json:"monitored,omitempty" jsonschema:"monitor or unmonitor the series"`
	QualityProfileID *int   `json:"qualityProfileId,omitempty" jsonschema:"id from sonarr_list_quality_profiles"`
	SeasonFolder     *bool  `json:"seasonFolder,omitempty"`
	RootFolderPath   string `json:"rootFolderPath,omitempty" jsonschema:"path from sonarr_list_root_folders"`
	SeriesType       string `json:"seriesType,omitempty" jsonschema:"standard, daily or anime"`
	MonitorNewItems  string `json:"monitorNewItems,omitempty" jsonschema:"all or none"`
	Tags             []int  `json:"tags,omitempty" jsonschema:"tag ids from sonarr_list_tags"`
	ApplyTags        string `json:"applyTags,omitempty" jsonschema:"how to apply tags: add, remove or replace; defaults to add"`
	MoveFiles        bool   `json:"moveFiles,omitempty" jsonschema:"move files on disk when rootFolderPath changes"`
}

EditSeriesArgs is the input for sonarr_edit_series. Optional fields are pointers so an omitted argument stays absent from the upstream request instead of resetting the setting to its zero value.

type EmptyArgs

type EmptyArgs struct{ InstanceArg }

EmptyArgs is the input for tools that only need an instance.

type EpisodeHistoryArgs added in v1.1.0

type EpisodeHistoryArgs struct {
	InstanceArg
	Start     int `json:"start,omitempty" jsonschema:"offset into the result set; defaults to 0"`
	Length    int `json:"length,omitempty" jsonschema:"maximum records to return; defaults to 50"`
	EpisodeID int `json:"episodeId,omitempty" jsonschema:"limit to one episode by sonarrEpisodeId"`
}

EpisodeHistoryArgs pages Bazarr's episode subtitle history.

type EpisodeList

type EpisodeList struct {
	Episodes []arr.Episode `json:"episodes"`
	Count    int           `json:"count"`
	Total    int           `json:"total,omitempty" jsonschema:"records available across all pages"`
}

EpisodeList wraps episode results. Total is set only by the paged tools, where the page is capped and the count alone would understate the library.

type EpisodeMonitorArgs added in v0.3.0

type EpisodeMonitorArgs struct {
	InstanceArg
	EpisodeIDs []int `json:"episodeIds" jsonschema:"episode ids from sonarr_list_episodes"`
	Monitored  bool  `json:"monitored" jsonschema:"true to monitor the episodes, false to unmonitor them"`
}

EpisodeMonitorArgs is the input for sonarr_monitor_episodes.

type EpisodeSubtitleArgs added in v0.3.0

type EpisodeSubtitleArgs struct {
	InstanceArg
	SeriesID  int    `json:"seriesId" jsonschema:"sonarrSeriesId from bazarr_wanted_episodes"`
	EpisodeID int    `json:"episodeId" jsonschema:"sonarrEpisodeId from bazarr_wanted_episodes"`
	Language  string `json:"language" jsonschema:"two-letter language code, e.g. en"`
	Forced    bool   `json:"forced,omitempty"`
	HI        bool   `json:"hi,omitempty" jsonschema:"hearing impaired subtitle"`
}

EpisodeSubtitleArgs identifies one episode subtitle language to search for.

type EpisodeSubtitlesList added in v0.3.0

type EpisodeSubtitlesList struct {
	Episodes []arr.EpisodeSubtitles `json:"episodes"`
	Count    int                    `json:"count"`
}

EpisodeSubtitlesList wraps per-episode subtitle state.

type EpisodesArgs

type EpisodesArgs struct {
	InstanceArg
	SeriesID int `json:"seriesId" jsonschema:"series id from sonarr_list_series"`
}

EpisodesArgs is the input for listing a series' episodes.

type FileIDsArgs added in v0.3.0

type FileIDsArgs struct {
	InstanceArg
	FileIDs []int `json:"fileIds" jsonschema:"file ids from the file listing tool"`
}

FileIDsArgs is the input for file deletion.

type FolderList

type FolderList struct {
	Folders []arr.RootFolder `json:"folders"`
}

FolderList wraps root folder results.

type Gate

type Gate struct {
	Perms config.Permissions
}

Gate applies the configured permission policy to tool calls.

func (Gate) Authorize

func (g Gate) Authorize(ctx context.Context, c Confirmer, tool string, a Access) error

Authorize decides whether a tool call may proceed, prompting the user when the policy requires it. A nil return means the call is allowed.

func (Gate) Registers

func (g Gate) Registers(a Access) bool

Registers reports whether a tool of this access tier should be exposed at all. Filtering at registration keeps readonly deployments from advertising tools they would only refuse later.

type GlobalLimitsArgs added in v1.1.0

type GlobalLimitsArgs struct {
	InstanceArg
	DownloadLimit   *int64 `json:"downloadLimit,omitempty" jsonschema:"global limit in bytes per second; 0 removes it"`
	UploadLimit     *int64 `json:"uploadLimit,omitempty" jsonschema:"global limit in bytes per second; 0 removes it"`
	AlternativeMode *bool  `json:"alternativeMode,omitempty" jsonschema:"switch the alternative speed limits on or off"`
}

GlobalLimitsArgs is the input for qbittorrent_set_global_limits.

type GrabArgs added in v1.1.0

type GrabArgs struct {
	InstanceArg
	GUID      string `json:"guid" jsonschema:"guid from prowlarr_search"`
	IndexerID int    `json:"indexerId" jsonschema:"indexerId from prowlarr_search, identifying which indexer the release came from"`
}

GrabArgs identifies one release to send to a download client.

type GrabReleaseArgs added in v1.2.0

type GrabReleaseArgs struct {
	InstanceArg
	GUID      string `json:"guid" jsonschema:"guid from the list_releases tool"`
	IndexerID int    `json:"indexerId" jsonschema:"indexerId from the same list_releases result as the guid"`
}

GrabReleaseArgs is the input for the grab_release tools.

type Grabbed added in v1.2.0

type Grabbed struct {
	Grabbed bool   `json:"grabbed"`
	GUID    string `json:"guid,omitempty"`
	ID      int    `json:"id,omitempty"`
}

Grabbed reports that a release was handed to a download client.

type HealthList

type HealthList struct {
	Issues []arr.HealthIssue `json:"issues"`
	Count  int               `json:"count"`
}

HealthList wraps health check results.

type HistoryList

type HistoryList struct {
	Records []arr.HistoryRecord `json:"records"`
	Count   int                 `json:"count"`
}

HistoryList wraps history results.

type IDArgs added in v0.3.0

type IDArgs struct {
	InstanceArg
	ID int `json:"id" jsonschema:"internal id of the record"`
}

IDArgs is the input for tools that act on a single record by id.

type IndexerList

type IndexerList struct {
	Indexers []arr.Indexer `json:"indexers"`
	Count    int           `json:"count"`
}

IndexerList wraps indexer results.

type IndexerSchemaList added in v1.1.0

type IndexerSchemaList struct {
	Schemas []arr.IndexerSchema `json:"schemas"`
	Count   int                 `json:"count"`
}

IndexerSchemaList wraps indexer definition results. The listing is capped, so Count is the size of the page rather than the number of definitions Prowlarr ships; narrow the query to see fewer.

type IndexerStatList

type IndexerStatList struct {
	Stats []arr.IndexerStat `json:"stats"`
}

IndexerStatList wraps Prowlarr indexer statistics.

type IndexerTestList added in v1.1.0

type IndexerTestList struct {
	Results []arr.IndexerTestResult `json:"results"`
	Count   int                     `json:"count"`
	Failed  int                     `json:"failed" jsonschema:"how many indexers failed their test"`
}

IndexerTestList wraps the outcome of testing every indexer.

type InstanceArg

type InstanceArg struct {
	Instance string `json:"instance,omitempty" jsonschema:"which configured instance to use; omit to use the default"`
}

InstanceArg is embedded in every tool input to select which configured instance of a service the call targets.

type LabelArgs added in v0.3.0

type LabelArgs struct {
	InstanceArg
	Label string `json:"label" jsonschema:"tag label, e.g. kids or 4k"`
}

LabelArgs is the input for tag creation.

type LanguageList added in v0.3.0

type LanguageList struct {
	Languages []arr.SubtitleLanguage `json:"languages"`
}

LanguageList wraps subtitle languages.

type LanguageProfileList added in v1.1.0

type LanguageProfileList struct {
	Profiles []arr.LanguageProfile `json:"profiles"`
	Count    int                   `json:"count"`
}

LanguageProfileList wraps Bazarr languages profiles.

type LanguagesArgs added in v0.3.0

type LanguagesArgs struct {
	InstanceArg
	All bool `json:"all,omitempty" jsonschema:"return every ISO language instead of only the enabled ones"`
}

LanguagesArgs is the input for listing Bazarr languages.

type LimitArgs

type LimitArgs struct {
	InstanceArg
	Limit int `json:"limit,omitempty" jsonschema:"maximum records to return; defaults to 20"`
}

LimitArgs is the input for paged listing tools.

type ManualImportArgs added in v1.2.0

type ManualImportArgs struct {
	InstanceArg
	Files      []ManualImportFileArg `json:"files" jsonschema:"the files to import, from manual_import_preview"`
	ImportMode string                `json:"importMode,omitempty" jsonschema:"auto, move or copy; defaults to auto"`
}

ManualImportArgs is the input for the manual_import tools.

type ManualImportCandidateList added in v1.2.0

type ManualImportCandidateList struct {
	Files []arr.ManualImportCandidate `json:"files"`
	Count int                         `json:"count"`
}

ManualImportCandidateList wraps manual import preview results.

type ManualImportFileArg added in v1.2.0

type ManualImportFileArg struct {
	Path         string   `json:"path" jsonschema:"path from the manual_import_preview tool, unchanged"`
	SeriesID     *int     `json:"seriesId,omitempty" jsonschema:"Sonarr only; which series the file belongs to"`
	EpisodeIDs   []int    `json:"episodeIds,omitempty" jsonschema:"Sonarr only; which episodes the file contains"`
	MovieID      *int     `json:"movieId,omitempty" jsonschema:"Radarr only; which movie the file is"`
	Quality      string   `json:"quality,omitempty" jsonschema:"quality name, e.g. WEBDL-1080p; taken from the preview unless it was wrong"`
	Languages    []string `json:"languages,omitempty" jsonschema:"language names, e.g. English"`
	ReleaseGroup string   `json:"releaseGroup,omitempty"`
	DownloadID   string   `json:"downloadId,omitempty" jsonschema:"downloadId from the preview, so the import is credited to that download"`
}

ManualImportFileArg is one file to import. Quality and Languages are names as the preview reports them, e.g. "WEBDL-1080p" and "English".

type ManualImportPreviewArgs added in v1.2.0

type ManualImportPreviewArgs struct {
	InstanceArg
	Folder              string `json:"folder,omitempty" jsonschema:"path on the service's filesystem to scan"`
	DownloadID          string `json:"downloadId,omitempty" jsonschema:"downloadId from the queue tool"`
	SeriesID            *int   `json:"seriesId,omitempty" jsonschema:"Sonarr only; series id to match the files against"`
	MovieID             *int   `json:"movieId,omitempty" jsonschema:"Radarr only; movie id to match the files against"`
	FilterExistingFiles *bool  `json:"filterExistingFiles,omitempty" jsonschema:"hide files already in the library; defaults to the service's own behaviour"`
}

ManualImportPreviewArgs is the input for the manual_import_preview tools. Exactly one of Folder and DownloadID identifies what to inspect.

type ManualSearchEpisodeArgs added in v1.1.0

type ManualSearchEpisodeArgs struct {
	InstanceArg
	EpisodeID int `json:"episodeId" jsonschema:"sonarrEpisodeId from bazarr_wanted_episodes or bazarr_list_episode_subtitles"`
}

ManualSearchEpisodeArgs selects the episode to search providers for.

type ManualSearchMovieArgs added in v1.1.0

type ManualSearchMovieArgs struct {
	InstanceArg
	RadarrID int `json:"radarrId" jsonschema:"radarrId from bazarr_wanted_movies or bazarr_list_movies"`
}

ManualSearchMovieArgs selects the movie to search providers for.

type MediaFileList added in v0.3.0

type MediaFileList struct {
	Files []arr.MediaFile `json:"files"`
	Count int             `json:"count"`
}

MediaFileList wraps episode and movie file results.

type ModifySubtitleArgs added in v1.1.0

type ModifySubtitleArgs struct {
	InstanceArg
	Action           string `json:"action" jsonschema:"sync, translate, or a mod: remove_HI, remove_tags, OCR_fixes, common, fix_uppercase, reverse_rtl"`
	Path             string `json:"path" jsonschema:"subtitle file path from bazarr_list_episode_subtitles"`
	Language         string `json:"language" jsonschema:"the subtitle's two-letter language code, or the target code when translating"`
	MediaType        string `json:"mediaType" jsonschema:"episode or movie"`
	MediaID          int    `json:"mediaId" jsonschema:"sonarrEpisodeId for an episode, radarrId for a movie"`
	Forced           bool   `json:"forced,omitempty" jsonschema:"the subtitle is a forced track"`
	HI               bool   `json:"hi,omitempty" jsonschema:"the subtitle is a hearing impaired track"`
	OriginalFormat   bool   `json:"originalFormat,omitempty" jsonschema:"keep the original subtitle format instead of converting to srt"`
	Reference        string `` /* 157-byte string literal not displayed */
	MaxOffsetSeconds int    `json:"maxOffsetSeconds,omitempty" jsonschema:"largest shift a sync may apply; defaults to Bazarr's setting"`
	NoFixFramerate   bool   `json:"noFixFramerate,omitempty" jsonschema:"do not let a sync correct the framerate"`
	GSS              bool   `json:"gss,omitempty" jsonschema:"use Golden-Section Search when syncing"`
}

ModifySubtitleArgs edits an existing subtitle file in place.

type MovieActionArgs added in v1.1.0

type MovieActionArgs struct {
	InstanceArg
	RadarrID int    `json:"radarrId" jsonschema:"radarrId from bazarr_list_movies"`
	Action   string `json:"action" jsonschema:"scan-disk, search-missing or search-wanted"`
}

MovieActionArgs runs one Bazarr maintenance action against a movie.

type MovieArgs added in v0.3.0

type MovieArgs struct {
	InstanceArg
	MovieID int `json:"movieId" jsonschema:"movie id from radarr_list_movies"`
}

MovieArgs is the input for tools scoped to one movie.

type MovieHistoryArgs added in v1.1.0

type MovieHistoryArgs struct {
	InstanceArg
	Start    int `json:"start,omitempty" jsonschema:"offset into the result set; defaults to 0"`
	Length   int `json:"length,omitempty" jsonschema:"maximum records to return; defaults to 50"`
	RadarrID int `json:"radarrId,omitempty" jsonschema:"limit to one movie by radarrId"`
}

MovieHistoryArgs pages Bazarr's movie subtitle history.

type MovieIDsArgs added in v0.3.0

type MovieIDsArgs struct {
	InstanceArg
	MovieIDs []int `json:"movieIds" jsonschema:"movie ids from radarr_list_movies"`
}

MovieIDsArgs is the input for tools acting on several movies.

type MovieList

type MovieList struct {
	Movies []arr.Movie `json:"movies"`
	Count  int         `json:"count"`
	Total  int         `json:"total,omitempty" jsonschema:"records available across all pages"`
}

MovieList wraps movie results. Total is set only by the paged tools, where the page is capped and the count alone would understate the library.

type MovieSubtitleArgs added in v0.3.0

type MovieSubtitleArgs struct {
	InstanceArg
	RadarrID int    `json:"radarrId" jsonschema:"radarrId from bazarr_wanted_movies"`
	Language string `json:"language" jsonschema:"two-letter language code, e.g. en"`
	Forced   bool   `json:"forced,omitempty"`
	HI       bool   `json:"hi,omitempty" jsonschema:"hearing impaired subtitle"`
}

MovieSubtitleArgs identifies one movie subtitle language to search for.

type NZBAdded added in v1.1.0

type NZBAdded struct {
	NZBID int `json:"nzbId" jsonschema:"queue id of the added download; use it with the nzbget queue tools"`
}

NZBAdded reports the queue id of a newly added nzb.

type NZBCategoryArgs added in v1.1.0

type NZBCategoryArgs struct {
	InstanceArg
	IDs      []int  `json:"ids" jsonschema:"NZBID values from nzbget_list_queue"`
	Category string `json:"category" jsonschema:"category name; controls the completed-download folder and post-processing"`
}

NZBCategoryArgs is the input for nzbget_set_category.

type NZBDeleteArgs added in v1.1.0

type NZBDeleteArgs struct {
	InstanceArg
	IDs   []int `json:"ids" jsonschema:"NZBID values of the items to delete"`
	Final bool  `json:"final,omitempty" jsonschema:"delete permanently instead of the recoverable default; see the tool description"`
}

NZBDeleteArgs is the input for the NZBGet deletion tools.

type NZBGroupList added in v1.1.0

type NZBGroupList struct {
	Groups []arr.NZBGroup `json:"groups"`
	Count  int            `json:"count"`
}

NZBGroupList wraps download queue entries.

type NZBHistoryArgs added in v1.1.0

type NZBHistoryArgs struct {
	InstanceArg
	Hidden bool `` /* 175-byte string literal not displayed */
	Limit  int  `json:"limit,omitempty" jsonschema:"maximum records to return, newest first; defaults to 20"`
}

NZBHistoryArgs is the input for nzbget_history.

type NZBHistoryList added in v1.1.0

type NZBHistoryList struct {
	Items []arr.NZBHistoryItem `json:"items"`
	Count int                  `json:"count"`
}

NZBHistoryList wraps NZBGet history entries.

type NZBIDsArgs added in v1.1.0

type NZBIDsArgs struct {
	InstanceArg
	IDs []int `json:"ids" jsonschema:"NZBID values from nzbget_list_queue"`
}

NZBIDsArgs is the input for tools acting on queue entries by id.

type NZBMarkArgs added in v1.1.0

type NZBMarkArgs struct {
	InstanceArg
	IDs  []int  `json:"ids" jsonschema:"NZBID values from nzbget_history"`
	Mark string `json:"mark" jsonschema:"good or bad; bad also downloads the next duplicate if one is queued"`
}

NZBMarkArgs is the input for nzbget_mark_history_items.

type NZBMoveArgs added in v1.1.0

type NZBMoveArgs struct {
	InstanceArg
	IDs      []int  `json:"ids" jsonschema:"NZBID values from nzbget_list_queue"`
	Position string `json:"position" jsonschema:"top, bottom or offset"`
	Offset   int    `json:"offset,omitempty" jsonschema:"positions to move when position is offset; negative moves towards the top"`
}

NZBMoveArgs is the input for nzbget_move_items.

type NZBPriorityArgs added in v1.1.0

type NZBPriorityArgs struct {
	InstanceArg
	IDs      []int `json:"ids" jsonschema:"NZBID values from nzbget_list_queue"`
	Priority int   `` /* 126-byte string literal not displayed */
}

NZBPriorityArgs is the input for nzbget_set_priority.

type NZBRenameArgs added in v1.1.0

type NZBRenameArgs struct {
	InstanceArg
	ID   int    `json:"id" jsonschema:"NZBID from nzbget_list_queue"`
	Name string `json:"name" jsonschema:"new display name for the download"`
}

NZBRenameArgs is the input for nzbget_rename_item.

type NZBRetryArgs added in v1.1.0

type NZBRetryArgs struct {
	InstanceArg
	IDs        []int `json:"ids" jsonschema:"NZBID values from nzbget_history"`
	Redownload bool  `` /* 126-byte string literal not displayed */
}

NZBRetryArgs is the input for nzbget_retry_history_items.

type PageArgs added in v0.3.0

type PageArgs struct {
	InstanceArg
	Start  int `json:"start,omitempty" jsonschema:"offset into the result set; defaults to 0"`
	Length int `json:"length,omitempty" jsonschema:"maximum records to return; defaults to 50"`
}

PageArgs is the input for Bazarr's start/length paged listings.

type PathArgs added in v1.4.0

type PathArgs struct {
	InstanceArg
	Path string `` /* 132-byte string literal not displayed */
}

PathArgs is the input for the add_root_folder tools.

type PauseScopeArgs added in v1.1.0

type PauseScopeArgs struct {
	InstanceArg
	Scope string `` /* 164-byte string literal not displayed */
}

PauseScopeArgs is the input for nzbget_pause_download and nzbget_resume_download.

type PauseState added in v1.1.0

type PauseState struct {
	Scope  string `json:"scope"`
	Paused bool   `json:"paused"`
}

PauseState reports which NZBGet queue was paused or resumed.

type ProfileList

type ProfileList struct {
	Profiles []arr.QualityProfile `json:"profiles"`
}

ProfileList wraps quality profile results.

type ProviderFlagArgs added in v1.3.0

type ProviderFlagArgs struct {
	Enable                  *bool `json:"enable,omitempty" jsonschema:"download clients only: whether the client is used"`
	EnableRSS               *bool `json:"enableRss,omitempty" jsonschema:"indexers only: use this indexer for RSS monitoring"`
	EnableAutomaticSearch   *bool `json:"enableAutomaticSearch,omitempty" jsonschema:"indexers only: use this indexer for automatic searches"`
	EnableInteractiveSearch *bool `json:"enableInteractiveSearch,omitempty" jsonschema:"indexers only: use this indexer for interactive searches"`
	EnableAutomaticAdd      *bool `json:"enableAutomaticAdd,omitempty" jsonschema:"import lists only: add what the list contains automatically"`
}

ProviderFlagArgs are the enable switches a provider may declare. Each is a pointer so an omitted argument leaves the stored setting alone, and each is only accepted by the kinds that have it: a flag the provider does not declare is an error rather than a silent no-op. A notification's onGrab, onDownload and other triggers are not settable here; they keep their current values.

type ProviderIDArgs added in v1.3.0

type ProviderIDArgs struct {
	InstanceArg
	Kind string `json:"kind" jsonschema:"provider family: indexer, downloadClient, notification or importList"`
	ID   int    `json:"id" jsonschema:"provider id from the matching listing tool, e.g. sonarr_list_indexers"`
}

ProviderIDArgs selects one configured provider.

type ProviderList added in v0.3.0

type ProviderList struct {
	Providers []arr.Provider `json:"providers"`
	Count     int            `json:"count"`
}

ProviderList wraps indexer, download client, import list and notification results, which all share the upstream provider shape.

type ProviderSchemaArgs added in v1.3.0

type ProviderSchemaArgs struct {
	InstanceArg
	Kind  string `json:"kind" jsonschema:"provider family: indexer, downloadClient, notification or importList"`
	Query string `` /* 140-byte string literal not displayed */
	Limit int    `json:"limit,omitempty" jsonschema:"maximum implementations to return; defaults to 10"`
}

ProviderSchemaArgs is the input for the provider schema listing.

type ProviderSchemaList added in v1.3.0

type ProviderSchemaList struct {
	Schemas []arr.ProviderSchema `json:"schemas"`
	Count   int                  `json:"count"`
}

ProviderSchemaList wraps the implementations one provider kind supports. The listing is capped, so Count is the size of the page rather than the number of implementations the service ships; narrow the query to see fewer.

type ProwlarrSearchArgs

type ProwlarrSearchArgs struct {
	InstanceArg
	Query      string `json:"query" jsonschema:"search term"`
	Categories []int  `json:"categories,omitempty" jsonschema:"newznab category ids to filter by"`
	Limit      int    `json:"limit,omitempty" jsonschema:"maximum results to return; defaults to 25"`
}

ProwlarrSearchArgs is the input for prowlarr_search.

type QualityDefinitionList added in v0.3.0

type QualityDefinitionList struct {
	Definitions []arr.QualityDefinition `json:"definitions"`
	Count       int                     `json:"count"`
}

QualityDefinitionList wraps quality size limit results.

type QueueList

type QueueList struct {
	Items []arr.QueueItem `json:"items"`
	Count int             `json:"count"`
}

QueueList wraps download queue results.

type RadarrReleaseSearchArgs added in v1.2.0

type RadarrReleaseSearchArgs struct {
	InstanceArg
	MovieID int `json:"movieId" jsonschema:"movie id from radarr_list_movies"`
	Limit   int `json:"limit,omitempty" jsonschema:"maximum releases to return; defaults to 30"`
}

RadarrReleaseSearchArgs is the input for radarr_list_releases.

type RadarrRenameFilesArgs added in v1.2.0

type RadarrRenameFilesArgs struct {
	InstanceArg
	MovieID int   `json:"movieId" jsonschema:"movie id from radarr_list_movies"`
	FileIDs []int `json:"fileIds" jsonschema:"movieFileId values from radarr_rename_preview"`
}

RadarrRenameFilesArgs is the input for radarr_rename_files.

type RateLimit added in v1.1.0

type RateLimit struct {
	LimitKB int `json:"limitKB" jsonschema:"applied limit in KiB/s; 0 means unlimited"`
}

RateLimit reports the download speed limit that was applied.

type RateLimitArgs added in v1.1.0

type RateLimitArgs struct {
	InstanceArg
	LimitKB int `json:"limitKB" jsonschema:"download speed limit in KiB/s; 0 removes the limit"`
}

RateLimitArgs is the input for nzbget_set_rate_limit.

type ReleaseCandidateList added in v1.2.0

type ReleaseCandidateList struct {
	Releases []arr.ReleaseCandidate `json:"releases"`
	Count    int                    `json:"count"`
}

ReleaseCandidateList wraps interactive search results.

type ReleaseList

type ReleaseList struct {
	Releases []arr.SearchResult `json:"releases"`
	Count    int                `json:"count"`
}

ReleaseList wraps indexer search results.

type ReleaseProfileList added in v0.3.0

type ReleaseProfileList struct {
	Profiles []arr.ReleaseProfile `json:"profiles"`
	Count    int                  `json:"count"`
}

ReleaseProfileList wraps release profile results.

type RenamePreviewList added in v0.3.0

type RenamePreviewList struct {
	Renames []arr.RenamePreview `json:"renames"`
	Count   int                 `json:"count"`
}

RenamePreviewList wraps rename preview results.

type Requested added in v0.3.0

type Requested struct {
	Requested bool   `json:"requested"`
	Detail    string `json:"detail,omitempty"`
}

Requested reports that a background request was accepted.

type RunTaskArgs added in v1.1.0

type RunTaskArgs struct {
	InstanceArg
	TaskID string `json:"taskId" jsonschema:"job_id from bazarr_list_tasks"`
}

RunTaskArgs runs one Bazarr scheduled job now.

type SchemaQueryArgs added in v1.1.0

type SchemaQueryArgs struct {
	InstanceArg
	Query string `json:"query,omitempty" jsonschema:"case-insensitive substring of the definition or site name; omit to list from the start"`
	Limit int    `json:"limit,omitempty" jsonschema:"maximum definitions to return; defaults to 50"`
}

SchemaQueryArgs is the input for prowlarr_list_indexer_schemas.

type SearchArgs

type SearchArgs struct {
	InstanceArg
	Query string `json:"query" jsonschema:"title to search for"`
}

SearchArgs is the input for title lookup tools.

type SearchScopeArgs added in v0.3.0

type SearchScopeArgs struct {
	InstanceArg
	SeriesID     int   `json:"seriesId" jsonschema:"series id from sonarr_list_series"`
	SeasonNumber *int  `json:"seasonNumber,omitempty" jsonschema:"search one season only"`
	EpisodeIDs   []int `json:"episodeIds,omitempty" jsonschema:"search specific episodes only; overrides seriesId and seasonNumber"`
}

SearchScopeArgs is the input for sonarr_trigger_search.

type SeasonMonitorArgs added in v0.3.0

type SeasonMonitorArgs struct {
	InstanceArg
	SeriesID     int  `json:"seriesId" jsonschema:"series id from sonarr_list_series"`
	SeasonNumber int  `json:"seasonNumber" jsonschema:"season number; 0 is specials"`
	Monitored    bool `json:"monitored" jsonschema:"true to monitor the season, false to unmonitor it"`
}

SeasonMonitorArgs is the input for sonarr_set_season_monitored.

type SeriesActionArgs added in v1.1.0

type SeriesActionArgs struct {
	InstanceArg
	SeriesID int    `json:"seriesId" jsonschema:"sonarrSeriesId from bazarr_list_series"`
	Action   string `json:"action" jsonschema:"scan-disk, search-missing or search-wanted"`
}

SeriesActionArgs runs one Bazarr maintenance action against a series.

type SeriesList

type SeriesList struct {
	Series []arr.Series `json:"series"`
	Count  int          `json:"count"`
}

SeriesList wraps series results.

type SeriesRenameArgs added in v0.3.0

type SeriesRenameArgs struct {
	InstanceArg
	SeriesID     int  `json:"seriesId" jsonschema:"series id from sonarr_list_series"`
	SeasonNumber *int `json:"seasonNumber,omitempty" jsonschema:"limit the preview to one season; omit for the whole series"`
}

SeriesRenameArgs is the input for sonarr_rename_preview.

type SeriesSubtitlesArgs added in v0.3.0

type SeriesSubtitlesArgs struct {
	InstanceArg
	SeriesID int `json:"seriesId" jsonschema:"sonarrSeriesId from bazarr_list_series"`
}

SeriesSubtitlesArgs selects a series whose per-episode subtitles to list.

type Server

type Server struct {
	// contains filtered or unexported fields
}

Server wires configured service instances into an MCP server.

func New

func New(cfg *config.Config, log *logger.Logger) *Server

New builds a server exposing tools for every configured service instance.

func (*Server) MCP

func (s *Server) MCP() *mcp.Server

MCP returns the underlying protocol server, for transports and tests.

func (*Server) RunHTTP

func (s *Server) RunHTTP(ctx context.Context, addr string) error

RunHTTP serves MCP over Streamable HTTP at /mcp, plus a /health probe.

func (*Server) RunStdio

func (s *Server) RunStdio(ctx context.Context) error

RunStdio serves MCP over stdin/stdout until the client disconnects. Nothing else may write to stdout in this mode: it carries the JSON-RPC stream.

type SetMovieProfileArgs added in v1.1.0

type SetMovieProfileArgs struct {
	InstanceArg
	RadarrIDs []int `json:"radarrIds" jsonschema:"radarrId values from bazarr_list_movies"`
	ProfileID int   `` /* 127-byte string literal not displayed */
}

SetMovieProfileArgs assigns a Bazarr languages profile to movies.

type SetSeriesProfileArgs added in v1.1.0

type SetSeriesProfileArgs struct {
	InstanceArg
	SeriesIDs []int `json:"seriesIds" jsonschema:"sonarrSeriesId values from bazarr_list_series"`
	ProfileID int   `` /* 127-byte string literal not displayed */
}

SetSeriesProfileArgs assigns a Bazarr languages profile to series.

type SonarrReleaseSearchArgs added in v1.2.0

type SonarrReleaseSearchArgs struct {
	InstanceArg
	EpisodeID    *int `json:"episodeId,omitempty" jsonschema:"episode id from sonarr_list_episodes; searches that episode"`
	SeriesID     *int `json:"seriesId,omitempty" jsonschema:"series id from sonarr_list_series; use with seasonNumber to search a whole season"`
	SeasonNumber *int `json:"seasonNumber,omitempty" jsonschema:"season to search; requires seriesId"`
	Limit        int  `json:"limit,omitempty" jsonschema:"maximum releases to return; defaults to 30"`
}

SonarrReleaseSearchArgs is the input for sonarr_list_releases. The search is scoped either to one episode or to one season of a series.

type SonarrRenameFilesArgs added in v1.2.0

type SonarrRenameFilesArgs struct {
	InstanceArg
	SeriesID int   `json:"seriesId" jsonschema:"series id from sonarr_list_series"`
	FileIDs  []int `json:"fileIds" jsonschema:"episodeFileId values from sonarr_rename_preview"`
}

SonarrRenameFilesArgs is the input for sonarr_rename_files.

type StatusMap added in v0.3.0

type StatusMap struct {
	Status map[string]any `json:"status"`
}

StatusMap wraps a free-form status payload.

type SubtitleBlacklistList added in v1.1.0

type SubtitleBlacklistList struct {
	Items []arr.SubtitleBlacklistItem `json:"items"`
	Count int                         `json:"count"`
}

SubtitleBlacklistList wraps blacklisted subtitles.

type SubtitleCandidateList added in v1.1.0

type SubtitleCandidateList struct {
	Candidates []arr.SubtitleCandidate `json:"candidates"`
	Count      int                     `json:"count"`
}

SubtitleCandidateList wraps manual search results.

type SubtitleHistoryList added in v1.1.0

type SubtitleHistoryList struct {
	Records []arr.SubtitleHistoryRecord `json:"records"`
	Count   int                         `json:"count"`
	Total   int                         `json:"total" jsonschema:"records available across all pages"`
}

SubtitleHistoryList wraps Bazarr subtitle history.

type SubtitleInfoArgs added in v1.1.0

type SubtitleInfoArgs struct {
	InstanceArg
	Path      string `json:"path" jsonschema:"subtitle file path from bazarr_list_episode_subtitles"`
	EpisodeID int    `json:"episodeId,omitempty" jsonschema:"sonarrEpisodeId the subtitle belongs to"`
	RadarrID  int    `json:"radarrId,omitempty" jsonschema:"radarrId the subtitle belongs to"`
}

SubtitleInfoArgs inspects the tracks around one subtitle file.

type SubtitleProviderList added in v0.3.0

type SubtitleProviderList struct {
	Providers []arr.SubtitleProvider `json:"providers"`
}

SubtitleProviderList wraps Bazarr subtitle provider status. Distinct from ProviderList, which covers the *arr indexer/download-client provider shape.

type TagDetailList added in v0.3.0

type TagDetailList struct {
	Tags  []arr.TagDetail `json:"tags"`
	Count int             `json:"count"`
}

TagDetailList wraps tag usage results.

type TagList added in v0.3.0

type TagList struct {
	Tags  []arr.Tag `json:"tags"`
	Count int       `json:"count"`
}

TagList wraps tag results.

type TagNameList added in v1.1.0

type TagNameList struct {
	Tags  []string `json:"tags"`
	Count int      `json:"count"`
}

TagNameList wraps qBittorrent tag names, which are bare strings rather than the id-labelled tags the *arr services use.

type TaskList added in v0.3.0

type TaskList struct {
	Tasks []arr.Task `json:"tasks"`
	Count int        `json:"count"`
}

TaskList wraps scheduled task results.

type TorrentActionResult added in v1.1.0

type TorrentActionResult struct {
	Action string   `json:"action"`
	Hashes []string `json:"hashes" jsonschema:"the selector that was sent; [\"all\"] means every torrent"`
	Count  int      `json:"count"`
}

TorrentActionResult reports which torrents a bulk action was applied to.

type TorrentCategoryArgs added in v1.1.0

type TorrentCategoryArgs struct {
	InstanceArg
	Hashes   []string `json:"hashes" jsonschema:"torrent hashes from qbittorrent_list_torrents, or [\"all\"] for every torrent"`
	Category string   `json:"category" jsonschema:"category name from qbittorrent_list_categories; an empty string clears the category"`
}

TorrentCategoryArgs is the input for qbittorrent_set_category.

type TorrentFileList added in v1.1.0

type TorrentFileList struct {
	Files []arr.TorrentFile `json:"files"`
	Count int               `json:"count"`
}

TorrentFileList wraps the files of one torrent.

type TorrentFilterArgs added in v1.1.0

type TorrentFilterArgs struct {
	InstanceArg
	Filter   string   `` /* 134-byte string literal not displayed */
	Category *string  `json:"category,omitempty" jsonschema:"only torrents in this category; an empty string means uncategorised"`
	Tag      *string  `json:"tag,omitempty" jsonschema:"only torrents carrying this tag"`
	Hashes   []string `json:"hashes,omitempty" jsonschema:"only these torrent hashes"`
	Limit    int      `json:"limit,omitempty" jsonschema:"maximum torrents to return; defaults to 100"`
}

TorrentFilterArgs is the input for qbittorrent_list_torrents.

type TorrentHashArgs added in v1.1.0

type TorrentHashArgs struct {
	InstanceArg
	Hash string `json:"hash" jsonschema:"torrent hash from qbittorrent_list_torrents"`
}

TorrentHashArgs is the input for tools acting on a single torrent.

type TorrentHashesArgs added in v1.1.0

type TorrentHashesArgs struct {
	InstanceArg
	Hashes []string `json:"hashes" jsonschema:"torrent hashes from qbittorrent_list_torrents, or [\"all\"] for every torrent"`
}

TorrentHashesArgs is the input for bulk torrent actions.

type TorrentLimitsArgs added in v1.1.0

type TorrentLimitsArgs struct {
	InstanceArg
	Hashes                   []string `json:"hashes" jsonschema:"torrent hashes from qbittorrent_list_torrents, or [\"all\"] for every torrent"`
	DownloadLimit            *int64   `json:"downloadLimit,omitempty" jsonschema:"bytes per second; 0 removes the limit"`
	UploadLimit              *int64   `json:"uploadLimit,omitempty" jsonschema:"bytes per second; 0 removes the limit"`
	RatioLimit               *float64 `json:"ratioLimit,omitempty" jsonschema:"stop seeding at this share ratio; -1 no limit, -2 the global default"`
	SeedingTimeLimit         *int     `json:"seedingTimeLimit,omitempty" jsonschema:"minutes; -1 no limit, -2 the global default"`
	InactiveSeedingTimeLimit *int     `json:"inactiveSeedingTimeLimit,omitempty" jsonschema:"minutes of inactivity; -1 no limit, -2 the global default"`
}

TorrentLimitsArgs is the input for qbittorrent_set_torrent_limits. Omitted fields leave the current limits untouched.

type TorrentList added in v1.1.0

type TorrentList struct {
	Torrents []arr.Torrent `json:"torrents"`
	Count    int           `json:"count"`
}

TorrentList wraps torrent results.

type TorrentLocationArgs added in v1.1.0

type TorrentLocationArgs struct {
	InstanceArg
	Hashes   []string `json:"hashes" jsonschema:"torrent hashes from qbittorrent_list_torrents, or [\"all\"] for every torrent"`
	Location string   `json:"location" jsonschema:"absolute directory to move the data to"`
}

TorrentLocationArgs is the input for qbittorrent_set_location.

type TorrentPriorityArgs added in v1.1.0

type TorrentPriorityArgs struct {
	InstanceArg
	Hashes   []string `json:"hashes" jsonschema:"torrent hashes from qbittorrent_list_torrents, or [\"all\"] for every torrent"`
	Position string   `json:"position" jsonschema:"where to move them in the queue: top, bottom, up or down"`
}

TorrentPriorityArgs is the input for qbittorrent_set_priority.

type TorrentRenameArgs added in v1.1.0

type TorrentRenameArgs struct {
	InstanceArg
	Hash string `json:"hash" jsonschema:"torrent hash from qbittorrent_list_torrents"`
	Name string `json:"name" jsonschema:"new display name"`
}

TorrentRenameArgs is the input for qbittorrent_rename_torrent.

type TorrentTagsArgs added in v1.1.0

type TorrentTagsArgs struct {
	InstanceArg
	Hashes []string `json:"hashes" jsonschema:"torrent hashes from qbittorrent_list_torrents, or [\"all\"] for every torrent"`
	Tags   []string `json:"tags,omitempty" jsonschema:"tag names; required when adding, and an empty list on remove strips every tag"`
}

TorrentTagsArgs is the input for the torrent tag tools.

type UpdateCollectionArgs added in v1.2.0

type UpdateCollectionArgs struct {
	InstanceArg
	ID                  int     `json:"id" jsonschema:"collection id from radarr_list_collections"`
	Monitored           *bool   `json:"monitored,omitempty" jsonschema:"monitor the collection so new members are added"`
	QualityProfileID    *int    `json:"qualityProfileId,omitempty" jsonschema:"id from radarr_list_quality_profiles"`
	RootFolderPath      *string `json:"rootFolderPath,omitempty" jsonschema:"path from radarr_list_root_folders"`
	SearchOnAdd         *bool   `json:"searchOnAdd,omitempty" jsonschema:"search for movies as they are added from this collection"`
	MinimumAvailability *string `json:"minimumAvailability,omitempty" jsonschema:"tba, announced, inCinemas or released"`
}

UpdateCollectionArgs is the input for radarr_update_collection. The optional fields are pointers so an omitted argument leaves that setting untouched.

type UpdateCustomFormatArgs added in v1.4.0

type UpdateCustomFormatArgs struct {
	InstanceArg
	ID                  int                   `json:"id" jsonschema:"format id from the list_custom_formats tool"`
	Name                *string               `json:"name,omitempty" jsonschema:"rename the format"`
	IncludeWhenRenaming *bool                 `json:"includeCustomFormatWhenRenaming,omitempty" jsonschema:"add the format's name to renamed files"`
	Specifications      []CustomFormatSpecArg `json:"specifications,omitempty" jsonschema:"replaces the whole rule set; omit to leave the rules alone"`
}

UpdateCustomFormatArgs is the input for the update_custom_format tools. Omitting a field leaves it as it was.

type UpdateDelayProfileArgs added in v1.4.0

type UpdateDelayProfileArgs struct {
	InstanceArg
	ID                     int     `json:"id" jsonschema:"profile id from the list_delay_profiles tool"`
	PreferredProtocol      *string `json:"preferredProtocol,omitempty" jsonschema:"usenet or torrent"`
	UsenetDelay            *int    `json:"usenetDelay,omitempty" jsonschema:"minutes to hold a usenet release before grabbing it"`
	TorrentDelay           *int    `json:"torrentDelay,omitempty" jsonschema:"minutes to hold a torrent before grabbing it"`
	EnableUsenet           *bool   `json:"enableUsenet,omitempty" jsonschema:"grab usenet releases at all"`
	EnableTorrent          *bool   `json:"enableTorrent,omitempty" jsonschema:"grab torrents at all"`
	BypassIfHighestQuality *bool   `json:"bypassIfHighestQuality,omitempty" jsonschema:"grab immediately when nothing better could arrive"`
}

UpdateDelayProfileArgs is the input for the update_delay_profile tools.

type UpdateFilesArgs added in v1.2.0

type UpdateFilesArgs struct {
	InstanceArg
	FileIDs      []int    `json:"fileIds" jsonschema:"file ids from the file listing tool"`
	Quality      *string  `json:"quality,omitempty" jsonschema:"quality name, e.g. Bluray-1080p"`
	Languages    []string `json:"languages,omitempty" jsonschema:"language names, e.g. English"`
	ReleaseGroup *string  `json:"releaseGroup,omitempty"`
}

UpdateFilesArgs is the input for the update_files tools. Every changeable field is optional so an omitted one keeps the value already recorded.

type UpdateIndexerArgs added in v1.1.0

type UpdateIndexerArgs struct {
	InstanceArg
	ID           int            `json:"id" jsonschema:"indexer id from prowlarr_list_indexers"`
	Name         *string        `json:"name,omitempty"`
	Enable       *bool          `json:"enable,omitempty"`
	Priority     *int           `json:"priority,omitempty" jsonschema:"1 is highest, 50 is lowest"`
	AppProfileID *int           `json:"appProfileId,omitempty" jsonschema:"sync profile id from prowlarr_list_app_profiles"`
	Tags         []int          `json:"tags,omitempty" jsonschema:"tag ids from prowlarr_list_tags; replaces the current tags"`
	Fields       map[string]any `json:"fields,omitempty" jsonschema:"indexer settings to change, by field name from prowlarr_get_indexer"`
}

UpdateIndexerArgs is the input for prowlarr_update_indexer. Every optional member is a pointer so an omitted argument leaves that setting alone.

type UpdateList added in v0.3.0

type UpdateList struct {
	Updates []arr.UpdatePackage `json:"updates"`
	Count   int                 `json:"count"`
}

UpdateList wraps release results.

type UpdateMediaManagementConfigArgs added in v1.4.0

type UpdateMediaManagementConfigArgs struct {
	InstanceArg
	AutoUnmonitorPreviouslyDownloaded *bool   `json:"autoUnmonitorPreviouslyDownloaded,omitempty" jsonschema:"stop monitoring media whose files are deleted"`
	CreateEmptyMediaFolders           *bool   `json:"createEmptyMediaFolders,omitempty" jsonschema:"create a folder for media with no files yet"`
	RecycleBin                        *string `json:"recycleBin,omitempty" jsonschema:"move deleted files here instead of removing them; empty string deletes outright"`
	RecycleBinCleanupDays             *int    `json:"recycleBinCleanupDays,omitempty" jsonschema:"days to keep files in the recycle bin; 0 keeps them forever"`
	DownloadPropersAndRepacks         *string `json:"downloadPropersAndRepacks,omitempty" jsonschema:"preferAndUpgrade, doNotUpgrade or doNotPrefer"`
	DeleteEmptyFolders                *bool   `json:"deleteEmptyFolders,omitempty"`
	FileDate                          *string `json:"fileDate,omitempty" jsonschema:"none, or a release date the file timestamp is set to"`
	RescanAfterRefresh                *string `json:"rescanAfterRefresh,omitempty" jsonschema:"always, afterManual or never"`
	SkipFreeSpaceCheckWhenImporting   *bool   `json:"skipFreeSpaceCheckWhenImporting,omitempty"`
	MinimumFreeSpaceWhenImporting     *int    `json:"minimumFreeSpaceWhenImporting,omitempty" jsonschema:"megabytes that must stay free"`
	CopyUsingHardlinks                *bool   `json:"copyUsingHardlinks,omitempty" jsonschema:"hardlink instead of copying, so seeding torrents cost no extra space"`
	ImportExtraFiles                  *bool   `json:"importExtraFiles,omitempty" jsonschema:"import subtitles and other files alongside the media"`
	ExtraFileExtensions               *string `json:"extraFileExtensions,omitempty" jsonschema:"comma-separated, e.g. srt,nfo"`
	EnableMediaInfo                   *bool   `json:"enableMediaInfo,omitempty" jsonschema:"read codecs and resolution from the files themselves"`
}

UpdateMediaManagementConfigArgs is the input for the update_media_management_config tools. Every field is optional so an omitted one leaves that setting untouched.

type UpdateNamingConfigArgs added in v1.4.0

type UpdateNamingConfigArgs struct {
	InstanceArg
	RenameFiles              *bool   `json:"renameFiles,omitempty" jsonschema:"rename files to match these formats"`
	ReplaceIllegalCharacters *bool   `json:"replaceIllegalCharacters,omitempty" jsonschema:"substitute characters the filesystem rejects"`
	StandardEpisodeFormat    *string `json:"standardEpisodeFormat,omitempty" jsonschema:"Sonarr only"`
	DailyEpisodeFormat       *string `json:"dailyEpisodeFormat,omitempty" jsonschema:"Sonarr only"`
	AnimeEpisodeFormat       *string `json:"animeEpisodeFormat,omitempty" jsonschema:"Sonarr only"`
	SeriesFolderFormat       *string `json:"seriesFolderFormat,omitempty" jsonschema:"Sonarr only"`
	SeasonFolderFormat       *string `json:"seasonFolderFormat,omitempty" jsonschema:"Sonarr only"`
	SpecialsFolderFormat     *string `json:"specialsFolderFormat,omitempty" jsonschema:"Sonarr only"`
	StandardMovieFormat      *string `json:"standardMovieFormat,omitempty" jsonschema:"Radarr only"`
	MovieFolderFormat        *string `json:"movieFolderFormat,omitempty" jsonschema:"Radarr only"`
}

UpdateNamingConfigArgs is the input for the update_naming_config tools. Every field is optional so an omitted one leaves that format string untouched, and the fields the other service uses are refused rather than silently ignored.

type UpdateProviderArgs added in v1.3.0

type UpdateProviderArgs struct {
	InstanceArg
	ProviderFlagArgs
	Kind     string         `json:"kind" jsonschema:"provider family: indexer, downloadClient, notification or importList"`
	ID       int            `json:"id" jsonschema:"provider id from the matching listing tool"`
	Name     *string        `json:"name,omitempty"`
	Priority *int           `json:"priority,omitempty" jsonschema:"indexers and download clients only; 1 is highest"`
	Tags     []int          `json:"tags,omitempty" jsonschema:"tag ids; replaces the current tags"`
	Fields   map[string]any `` /* 146-byte string literal not displayed */
}

UpdateProviderArgs is the input for the provider update tool. Every optional member is a pointer so an omitted argument leaves that setting alone.

type UpdateQualityProfileArgs added in v1.4.0

type UpdateQualityProfileArgs struct {
	InstanceArg
	ID                int            `json:"id" jsonschema:"profile id from the list_quality_profiles tool"`
	Name              *string        `json:"name,omitempty" jsonschema:"rename the profile"`
	UpgradeAllowed    *bool          `json:"upgradeAllowed,omitempty" jsonschema:"replace a file on disk when a better release appears"`
	Cutoff            *string        `json:"cutoff,omitempty" jsonschema:"quality name to stop upgrading at, as the get_quality_profile tool reports it"`
	Allow             []string       `json:"allow,omitempty" jsonschema:"quality names to start accepting"`
	Disallow          []string       `json:"disallow,omitempty" jsonschema:"quality names to stop accepting"`
	MinFormatScore    *int           `json:"minFormatScore,omitempty" jsonschema:"custom format score a release must reach to be grabbed"`
	CutoffFormatScore *int           `json:"cutoffFormatScore,omitempty" jsonschema:"custom format score above which upgrading stops"`
	FormatScores      map[string]int `json:"formatScores,omitempty" jsonschema:"custom format name to score, using names from the list_custom_formats tool"`
}

UpdateQualityProfileArgs is the input for the update_quality_profile tools. Every field is optional so an omitted one leaves that setting untouched.

type UpdateReleaseProfileArgs added in v1.4.0

type UpdateReleaseProfileArgs struct {
	InstanceArg
	ID        int      `json:"id" jsonschema:"profile id from the list_release_profiles tool"`
	Name      *string  `json:"name,omitempty" jsonschema:"rename the profile"`
	Enabled   *bool    `json:"enabled,omitempty"`
	Required  []string `json:"required,omitempty" jsonschema:"replaces the terms a release title must contain"`
	Ignored   []string `json:"ignored,omitempty" jsonschema:"replaces the terms that reject a release"`
	IndexerID *int     `json:"indexerId,omitempty" jsonschema:"limit to one indexer; 0 means every indexer"`
	Tags      []int    `json:"tags,omitempty" jsonschema:"replaces the tags the profile is limited to"`
}

UpdateReleaseProfileArgs is the input for sonarr_update_release_profile. Every field is optional so an omitted one leaves that setting untouched.

type UpdateTagArgs added in v1.2.0

type UpdateTagArgs struct {
	InstanceArg
	ID    int    `json:"id" jsonschema:"tag id from the list_tags tool"`
	Label string `json:"label" jsonschema:"the new label for the tag"`
}

UpdateTagArgs is the input for the update_tag tools.

type Updated added in v0.3.0

type Updated struct {
	Updated int `json:"updated"`
}

Updated reports how many records a bulk edit touched.

type WantedEpisodeList added in v0.3.0

type WantedEpisodeList struct {
	Episodes []arr.WantedEpisode `json:"episodes"`
	Returned int                 `json:"returned"`
	Total    int                 `json:"total" jsonschema:"total missing across the whole library"`
}

WantedEpisodeList wraps episodes missing subtitles.

type WantedMovieList added in v0.3.0

type WantedMovieList struct {
	Movies   []arr.WantedMovie `json:"movies"`
	Returned int               `json:"returned"`
	Total    int               `json:"total"`
}

WantedMovieList wraps movies missing subtitles.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL