Skip to main content
Glama

tdarr-mcp

A Model Context Protocol (MCP) server for Tdarr — the distributed media transcoding/health-check automation platform. It gives AI assistants (Claude Desktop, Claude Code, and any MCP-compatible client) programmatic control over a Tdarr server through its HTTP API.

Speaks MCP over stdio and exposes 105 tools across 12 categories.

Features

Category

Tools

Examples

Libraries

19

scan, create/update/delete libraries, folder & filter settings, transcode/health-check options

Nodes

19

list nodes & workers, pause/resume, set worker limits, reassign jobs

Server

18

server status, settings, schedules, statistics, maintenance

Files

11

search, bulk update/delete, create samples, inspect file records

Plugins

9

list/get plugins, plugin stacks, community plugins

Stats

7

transcode/health stats, space saved, processing history

Users

7

list/create/update/delete users, auth settings

Backups

5

create backup, status, reset

Jobs

5

queue management, job control

Database

3

cruddb, search DB, client queries

Automations

1

run an automation

Processes

1

process info

All tools are prefixed tdarr_* (e.g. tdarr_get_nodes, tdarr_search_db, tdarr_run_automation).

Related MCP server: Arr-MCP

Prerequisites

  • Node.js ≥ 18 (uses the native fetch API), or Bun.

  • A running Tdarr server reachable over HTTP.

Installation & build

git clone https://github.com/maximeallanic/tdarr-mcp.git
cd tdarr-mcp

# with Bun
bun install
bun run build      # tsc → dist/

# …or with npm
npm install
npm run build

This compiles src/ to dist/.

Configuration

The server reads its target from environment variables:

Variable

Required

Description

TDARR_URL

❌

Base URL of the Tdarr server. Defaults to http://localhost:8265.

TDARR_API_KEY

❌

API key, sent as the x-api-key header. Only needed if your Tdarr instance has API auth enabled.

Usage with an MCP client

Add the server to your MCP client configuration (e.g. Claude Desktop / Claude Code mcpServers block):

{
  "mcpServers": {
    "tdarr": {
      "command": "node",
      "args": ["/absolute/path/to/tdarr-mcp/dist/main.js"],
      "env": {
        "TDARR_URL": "http://your-tdarr-host:8265"
      }
    }
  }
}

During development you can run the TypeScript entry directly with Bun (no build step):

TDARR_URL=http://your-tdarr-host:8265 bun run src/main.ts

How it works

Each tool is a thin declarative mapping (TdarrToolDef) to a Tdarr API endpoint: HTTP method, path (with :param substitution), and an input JSON schema. POST bodies are wrapped in { data: ... } by default (Tdarr's convention) unless a tool sets dataWrapped: false. Responses are returned as pretty-printed JSON text.

License

MIT © Maxime Allanic

Available Tools

105 tools
tdarr_add_audio_codec_excludeC

Add an audio codec to be excluded/included in basic audio transcoding settings

Inputs: ele (required), dbID (required).

tdarr_add_plugin_includeB

Add a plugin to a classic plugin stack

Inputs: ele (required), dbID (required), index (required), source (required).

tdarr_add_video_codec_excludeC

Add a video codec to be excluded/included in basic video transcoding settings

Inputs: ele (required), dbID (required).

tdarr_admin_registerB

Admin register a new user

Inputs: roles (required), username (required).

tdarr_admin_reset_passwordC

Admin reset a user password

Inputs: username (required).

tdarr_alter_worker_limitB

Change the number of running workers of a specific type on a specific node

Inputs: nodeID (required), process (required), workerType (required).

tdarr_auth_logoutA

Log out the current user

Inputs: no named parameters.

tdarr_auth_reset_passwordC

Reset current user password

Inputs: password (required), oldPassword (required).

tdarr_auth_statusC

Check Tdarr Pro status

Inputs: saU (required).

tdarr_auth_verify_tokenB

Verify a user token

Inputs: no named parameters.

tdarr_bulk_delete_filesA

Bulk delete selected files from disk and remove them from the database

Inputs: fileIds (required).

tdarr_bulk_update_filesB

Bulk update specific files by their IDs

Inputs: fileIds (required), updatedObj (required).

tdarr_cancel_worker_itemB

Cancel a running worker item on a specific node

Inputs: cause (required), nodeID (required), workerID (required).

tdarr_clientC

Load and update data in various tables found around the Tdarr UI. clientType can be: files, staging, rejected, transcode_success, transcode_error, health_check_success, health_check_error

Inputs: opts (required), sorts (required), start (required), filters (required), +2 more.

tdarr_copy_community_to_localC

Copy a community plugin to local plugins

Inputs: pluginID (required), forceOverwrite (required).

tdarr_create_backupA

Create a backup of the Tdarr database

Inputs: no named parameters.

tdarr_create_pluginC

Create a basic classic plugin using the classic plugin creator

Inputs: action (required), details (required), conditionalNotes (required), conditionalsString (required).

tdarr_create_sampleB

Create a 30 second sample of a file

Inputs: filePath (required).

tdarr_cruddbB

Interact with the database. Modes: insert (requires collection, docID, obj), getById (requires collection, docID), getAll (requires collection), update (requires collection, docID, obj), delete (requires collection, docID), filter (requires collection, filters)

Inputs: mode (required), collection (required), obj, docID, +1 more.

tdarr_debugB

Get a page with various debug info

Inputs: no named parameters.

tdarr_debug_varsC

Get various debug info by type

Inputs: type (required).

tdarr_delete_backupB

Delete a backup of the Tdarr database

Inputs: name (required).

tdarr_delete_cache_fileC

Delete a cache file

Inputs: file (required).

tdarr_delete_fileB

Delete a file on disk of a file in Tdarr DB

Inputs: file (required).

tdarr_delete_job_reportA

Delete a single job report from both database and disk

Inputs: jobId (required).

tdarr_delete_job_reportsA

Delete multiple job reports from both database and disk (with optional filters)

Inputs: filters.

tdarr_delete_pluginC

Delete a plugin

Inputs: pluginID (required), pluginSource (required).

tdarr_delete_unhealthy_filesA

Delete files which have failed to transcode (table3) or unhealthy files (table6)

Inputs: table (required).

tdarr_disconnect_nodeC

Forcefully disconnect a node

Inputs: nodeID (required).

tdarr_download_pluginsA

Download the latest plugins zip (used by nodes)

Inputs: no named parameters.

tdarr_file_downloadC

Download a file

Inputs: filePath.

tdarr_file_uploadC

Upload a file

Inputs: no named parameters.

tdarr_find_duplicatesC

Start the find duplicates process

Inputs: count (required), threshold (required).

tdarr_get_backupsA

Get a list of backups of the Tdarr database

Inputs: no named parameters.

tdarr_get_backup_statusB

Get the status of a Tdarr backup in progress

Inputs: no named parameters.

tdarr_get_db_statusesB

Get the statuses of the Tdarr database

Inputs: no named parameters.

tdarr_get_filescanner_statusB

Get the status of a file scanner in progress

Inputs: dbID (required).

tdarr_get_new_taskB

Request a new task for a node

Inputs: nodeID (required), workerID (required), workerType (required), automation.

tdarr_get_node_logC

Get the log of a node

Inputs: nodeID (required).

tdarr_get_nodesA

Get connected nodes information

Inputs: no named parameters.

tdarr_get_process_infoA

Get process information from server and nodes with child process relationships

Inputs: no named parameters.

tdarr_get_res_statsC

Get server resource information

Inputs: no named parameters.

tdarr_get_server_logB

Get the server log

Inputs: no named parameters.

tdarr_get_subdirectoriesB

Get subdirectories of a folder

Inputs: folderPath (required).

tdarr_get_time_nowA

Get the current time on the server

Inputs: no named parameters.

tdarr_is_server_aliveA

Check if the server is alive (legacy, prefer tdarr_status)

Inputs: no named parameters.

tdarr_item_proc_endB

Signal that a node completed processing an item

Inputs: obj (required), nodeID (required).

tdarr_kill_file_scannerB

Kill a file scanner in progress

Inputs: dbID (required).

tdarr_kill_workerB

Kill a worker on a node

Inputs: nodeID (required), workerID (required).

tdarr_list_footprint_reportsC

List all job reports for a specific footprintId

Inputs: footprintId (required).

tdarr_log_job_reportC

Update a job report

Inputs: job (required), date (required), text (required).

tdarr_nodes_version_checkB

Verify the server version before establishing a full node connection

Inputs: nodeVersion (required), nodeID, inDocker, nodeName, +2 more.

tdarr_performance_statsC

Get various performance stat info

Inputs: no named parameters.

tdarr_poll_worker_limitsA

Get worker limits for a node and check if there's anything in the queue

Inputs: nodeID (required).

tdarr_public_auth_loginC

Log in a user

Inputs: password (required), username (required).

tdarr_public_auth_registerC

Register a new user

Inputs: password (required), username (required).

tdarr_read_job_fileC

Read a job report

Inputs: jobId (required), jobFileId (required), footprintId (required).

tdarr_read_pluginC

Read a plugin (used by nodes)

Inputs: plugin (required).

tdarr_read_plugin_textA

Read a plugin file for the classic plugin editor

Inputs: pluginID (required), pluginSource (required).

tdarr_remove_audio_codec_excludeB

Remove an audio codec from the excluded/included list in basic audio transcoding settings

Inputs: ele (required), dbID (required).

tdarr_remove_library_filesB

Remove all files from a Tdarr library DB (files on disk are not removed)

Inputs: DB (required).

tdarr_remove_plugin_includeB

Remove a plugin from a classic plugin stack

Inputs: ele (required), dbID (required).

tdarr_remove_video_codec_excludeC

Remove a video codec from the excluded/included list in basic video transcoding settings

Inputs: ele (required), dbID (required).

tdarr_rescan_fileC

Rescan a file

Inputs: DB (required), _id (required).

tdarr_reset_backup_statusB

Reset the backup status

Inputs: no named parameters.

tdarr_restart_nodeC

Restart a specific node

Inputs: nodeID (required).

tdarr_restart_serverA

Restart Tdarr Server

Inputs: no named parameters.

tdarr_restart_uiC

Restart the Tdarr UI

Inputs: no named parameters.

tdarr_run_automationC

Manually trigger an automation

Inputs: configId (required), payload, libraryIds, targetNodeIds, +4 more.

tdarr_run_help_commandB

Run an ffmpeg or handbrake help command on the Help tab

Inputs: mode (required), text (required).

tdarr_save_plugin_textC

Save plugin text for the classic plugin editor

Inputs: text (required), pluginID (required), pluginSource (required).

tdarr_scan_filesB

Run a scanFresh, scanFindNew or scanFolderWatcher on a library. scanFresh & scanFindNew require a single string dbID inside scanConfig.

Inputs: scanConfig (required).

tdarr_scan_individual_fileC

Scan an individual file with various tools

Inputs: file (required), scanTypes (required).

tdarr_search_dbA

Search the file database (legacy endpoint, prefer tdarr_client instead)

Inputs: string (required), lessThanGB (required), greaterThanGB (required).

tdarr_search_flow_pluginsC

Search flow plugins

Inputs: string (required), pluginType (required).

tdarr_search_flow_templatesC

Search flow templates

Inputs: string (required), pluginType (required).

tdarr_search_job_reportsD

Search job reports

Inputs: searchTerms (required).

tdarr_search_pluginsC

Search classic plugins

Inputs: string (required), pluginType (required).

tdarr_set_all_statusC

Requeue files for transcode or health check for a specific library

Inputs: dbID (required), mode (required), table (required), processStatus (required).

tdarr_stats_get_piesC

Get all or library pie stats

Inputs: libraryId.

tdarr_stats_get_res_histC

Get server resource history

Inputs: timeframe.

tdarr_stats_get_running_worker_histC

Get running worker history

Inputs: timeframe.

tdarr_stats_get_space_savedC

Get space saved history

Inputs: nodeId, pluginId, libraryId, timeframe, +1 more.

tdarr_stats_get_streamsC

Get stream stats info

Inputs: libraryId.

tdarr_stats_get_worker_verdict_histC

Get worker verdict history

Inputs: nodeId, libraryId, timeframe, workerType.

tdarr_stats_space_saved_addC

Add a space saved record

Inputs: libraryId, spaceSaved.

tdarr_statusB

Check server status

Inputs: no named parameters.

tdarr_stop_dedupeB

Stop the dedupe process

Inputs: no named parameters.

tdarr_sync_pluginsA

Sync plugins from server to all nodes

Inputs: no named parameters.

tdarr_toggle_folder_watchC

Enable/disable folder watching on a library

Inputs: auto (required), dbID (required), folder (required), status (required).

tdarr_toggle_scheduleC

Update the schedule of a library

Inputs: end (required), dbID (required), type (required), start (required).

tdarr_transcode_user_verdictC

Take action on a staged item

Inputs: obj (required), verdict (required).

tdarr_update_audio_codec_excludeA

Update an audio codec excluded/included status in basic audio transcoding settings

Inputs: ele (required), dbID (required), status (required).

tdarr_update_nodeC

Update a connected node from the UI

Inputs: nodeID (required), nodeUpdates (required).

tdarr_update_node_relayC

Update the server with node status (used by nodes)

Inputs: nodeID (required), workers (required), resStats (required).

tdarr_update_plugin_includeB

Enable/disable a plugin in a classic plugin stack

Inputs: ele (required), dbID (required), status (required).

tdarr_update_pluginsB

Request the server to update community plugins

Inputs: force (required).

tdarr_updater_checkC

Check if an update is available

Inputs: applyUpdate (required), resetUpdater (required), downloadUpdate (required).

tdarr_updater_package_indexB

Get the package index

Inputs: no named parameters.

tdarr_updater_relaunchA

Relaunch Tdarr Server when an update is ready

Inputs: no named parameters.

tdarr_update_schedule_blockB

Update a block in a library schedule

Inputs: ele (required), dbID (required), status (required).

tdarr_update_video_codec_excludeC

Update a video codec excluded/included status in basic video transcoding settings

Inputs: ele (required), dbID (required), status (required).

tdarr_use_tokenD

Use a token

Inputs: token (required), redirect (required).

tdarr_verify_folder_existsB

Verify if a folder exists

Inputs: folderPath (required).

tdarr_verify_pluginC

Verify if a classic plugin exists

Inputs: pluginID (required), community (required).

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    C2.6/5.0

    Scored across 105 tools

    Disambiguation2/5

    While most tools are named by resource+action, several generic database accessors overlap: tdarr_cruddb, tdarr_client, and legacy tdarr_search_db all provide table/file lookups or updates. tdarr_status/tdarr_is_server_alive and tdarr_read_plugin/tdarr_read_plugin_text also blur boundaries, so an agent may not reliably pick the right tool.

    Naming Consistency3/5

    All tools share the tdarr_ prefix and mostly use snake_case verb_noun names, but conventions are mixed: generic tools like tdarr_cruddb, tdarr_client, tdarr_status, tdarr_debug, and tdarr_item_proc_end break the verb_noun pattern, while stats_get_* and auth_*/admin_*/public_auth_* introduce different orderings. The pattern is readable but not predictable enough for a set this large.

    Tool Count1/5

    105 tools is far beyond a typical MCP surface and includes low-level node handshake/relay methods, updater mechanics, and raw database access that duplicate higher-level operations. The sheer count makes browsing and selection impractical, fitting the extreme mismatch calibration.

    Completeness4/5

    The set covers most Tdarr workflows: backups, libraries/scans, transcode decisions, plugins, nodes, stats, auth, and job reports. It lacks explicit library create/delete operations and some higher-level flow management, but the generic db/client tools and broad coverage mean agents can work around minor gaps.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      C
      maintenance
      MCP server to manage your *ARR media stack (Radarr, Sonarr, Lidarr, Readarr, Prowlarr) for searching, adding, and managing movies, TV shows, music, books, and indexers.
      1
      ISC
    • A
      license
      Not graded
      quality
      C
      maintenance
      A FastMCP server that exposes Tdarr's OpenAPI endpoints as MCP tools, enabling management and monitoring of Tdarr transcoding jobs.
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      MCP server that enables local LLMs to manage a home media stack including Radarr, Sonarr, Prowlarr, and others.
      MIT