Tdarr MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| TDARR_URL | No | Base URL of Tdarr Server, e.g. http://tdarr.local:8265. | |
| TDARR_SERVER | No | Alias for TDARR_URL. Used if TDARR_URL is unset. | |
| TDARR_API_KEY | No | API key from Tools → API Keys. Only needed when auth is enabled. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_statusA | Get Tdarr Server status: version, build date, uptime, OS and server engine (GET /api/v2/status). Also serves as a connectivity/API-key check — call this first when something looks wrong. |
| get_server_timeA | Get the current time on the Tdarr Server as a Unix epoch in milliseconds. Useful for interpreting the epoch timestamps returned by file and job records. |
| get_server_logA | Get the Tdarr Server log as plain text (GET /api/v2/get-server-log). Returns the trailing lines only (default 100) — the full log can be very large. |
| get_resource_statsA | Get current Tdarr Server resource usage: process uptime and heap, plus host CPU percentage and memory used/total (POST /api/v2/get-res-stats). |
| get_db_statusesA | Get the status of the Tdarr databases (POST /api/v2/get-db-statuses). Use when the UI reports the database as loading, busy or corrupted. |
| get_process_infoA | Get the process tree of the server and every connected node — pid, ppid, executable, script and memory usage per process (POST /api/v2/get-process-info). Useful for spotting stuck ffmpeg/HandBrake child processes. |
| get_performance_statsA | Get Tdarr internal performance statistics (POST /api/v2/performance-stats) — timings for server operations, used to diagnose a slow server or database. |
| check_for_updateA | Check whether a Tdarr update is available (POST /api/v2/updater/check). Defaults to a check only. Set download_update to fetch the update, and apply_update to install it — applying an update requires calling relaunch_server afterwards. |
| get_package_indexA | Get the Tdarr package index (POST /api/v2/updater/package-index) — the versions and artifacts the updater can install. |
| relaunch_serverA | Relaunch Tdarr Server to finish applying a downloaded update (POST /api/v2/updater/relaunch). Only call this after check_for_update reported the update as applied — it interrupts running jobs. |
| restart_serverA | Restart Tdarr Server (POST /api/v2/restart-server). Disruptive: running workers are interrupted and every node reconnects. Ask the user before calling this. |
| restart_uiA | Restart the Tdarr web UI process (GET /api/v2/restart-ui). Does not interrupt transcoding — use it when the UI is unresponsive but jobs are fine. |
| run_help_commandA | Run an ffmpeg or HandBrake help command on the server and return its output (POST /api/v2/run-help-command). Use it to check which encoders, filters or presets the server's binaries actually support before writing transcode arguments. |
| list_nodesA | List the connected Tdarr nodes (GET /api/v2/get-nodes), keyed by node ID. The summary gives name, paused state, version, worker limits, running worker count and resource stats; pass detailed for the full record including every running worker. |
| get_node_logA | Get a node's log as plain text (POST /api/v2/get-node-log). Returns the trailing lines only (default 100). Use it to see why a node's transcodes are failing. |
| get_dispatch_readinessA | Check whether the server is ready to dispatch tasks and has finished server/node plugin setup (GET /api/v2/nodes/ready). Returns { ready, reasons } — call it before queueing work after a restart. |
| update_nodeA | Update a connected node's settings (POST /api/v2/update-node). node_updates is merged into the node record — e.g. { nodePaused: true } to pause a node, { nodeName: 'basement' } to rename it, or { priority: 1 } to change its task priority. Read the current record with list_nodes(detailed) first. |
| alter_worker_limitA | Increase or decrease by one the number of workers of a given type on a node (POST /api/v2/alter-worker-limit). Call it repeatedly to move the limit by more than one. |
| cancel_worker_itemA | Cancel the item a worker is currently processing (POST /api/v2/cancel-worker-item). The worker stays alive and picks up the next item; the cancelled file goes back to the queue. |
| kill_workerA | Kill a worker on a node (POST /api/v2/kill-worker). Unlike cancel_worker_item this removes the worker itself — use it for a worker that is wedged and not responding to a cancel. |
| restart_nodeA | Restart a node process (POST /api/v2/restart-node). Its running workers are interrupted and their files are requeued. |
| disconnect_nodeA | Forcefully disconnect a node from the server (POST /api/v2/disconnect-node). Use it to clear a node that shows as connected but is actually gone. |
| list_librariesA | List the configured Tdarr libraries with their ID, name, source folder, priority, plugin stack or flow, and scanning settings. The library _id is the dbID every other library and file tool needs. |
| get_libraryA | Get one library's full settings record — folders, filters, schedule, plugin stack or flow ID, transcode and health check options. |
| scan_libraryA | Start a file scan on a library (POST /api/v2/scan-files). 'scanFindNew' adds files not yet in the database, 'scanFresh' rescans everything from scratch, and 'scanFolderWatcher' scans a specific list of file paths. Scanning is asynchronous — poll get_scanner_status for progress. |
| get_scanner_statusA | Get the progress of a library's file scanner (POST /api/v2/get-filescanner-status). Poll this after scan_library. |
| kill_scannerA | Stop a library's file scanner mid-run (POST /api/v2/kill-file-scanner). |
| remove_library_filesA | Remove every file record of a library from the Tdarr database (POST /api/v2/remove-library-files). Files on disk are NOT touched — this only clears the scan results, which then have to be rebuilt with scan_library. Ask the user before calling this. |
| toggle_folder_watchB | Enable or disable folder watching for one of a library's folders (POST /api/v2/toggle-folder-watch). |
| toggle_scheduleA | Turn a contiguous range of hour blocks in a library's weekly schedule on or off (POST /api/v2/toggle-schedule). The schedule controls when Tdarr is allowed to process the library. |
| update_schedule_blockA | Enable or disable a single block in a library's weekly schedule (POST /api/v2/update-schedule-block). |
| manage_library_pluginA | Add, remove or enable/disable a classic plugin in a library's plugin stack. Adding requires the plugin source and the position in the stack; get the plugin IDs from search_plugins. Libraries that use a flow instead of a classic stack are not affected. |
| manage_codec_exclusionA | Add, remove or toggle a codec in a library's basic transcoding include/exclude list. Applies to the basic (non-plugin) video or audio transcode settings of the library. |
| list_subdirectoriesA | List the subfolders of a path as seen by Tdarr Server (POST /api/v2/get-subdirectories). Use it to discover the paths a library can point at — the server sees container paths, not host paths. |
| verify_folder_existsA | Check whether a folder exists and is readable by Tdarr Server (POST /api/v2/verify-folder-exists). Returns a boolean. |
| search_filesA | Search the Tdarr file database by filename substring and file size (POST /api/v2/search-db). Returns one summarized record per match: path, library, container, size, codecs, and transcode/health status. |
| get_fileA | Get one file's full database record — ffProbe output, MediaInfo, transcode and health check history, and the current queue status. |
| query_tableA | Query one of the paginated tables behind the Tdarr UI (POST /api/v2/client/{client_type}) with server-side filtering, sorting and paging. This is the low-level escape hatch for views search_files cannot express; the valid client_type and opts.table values are the ones the Tdarr UI uses for that page. Prefer search_files for plain file lookups. |
| rescan_fileA | Rescan a single file so Tdarr refreshes its ffProbe data and queue status (POST /api/v2/rescan-file). Use it after changing a file on disk outside Tdarr. |
| scan_file_detailsA | Run ExifTool, MediaInfo and/or a closed-caption scan against one file and return the results (POST /api/v2/scan-individual-file). Works on any path the server can read, whether or not it is in a library. |
| create_sampleA | Create a 30 second sample of a file (POST /api/v2/create-sample) and return the path of the sample. Useful for testing a plugin stack or flow on a short clip before running it on a whole library. |
| requeue_filesA | Requeue every file of a library for transcoding or health checking (POST /api/v2/set-all-status). Tdarr's file tables are table1 transcode queue, table2 transcode success, table3 transcode error, table4 health check queue, table5 health check success, table6 health check error — requeueing from table2 back to the transcode queue re-runs the whole library. |
| set_staged_verdictA | Take action on an item staged for user approval (POST /api/v2/transcode-user-verdict) — accept, reject or otherwise resolve a transcode that is waiting on a decision. |
| bulk_update_filesA | Update fields on specific file records by ID (POST /api/v2/bulk-update-files). The update object is merged into every listed file — e.g. { holdUntil: 0 } to release a hold, or { TranscodeDecisionMaker: 'Queued' } to requeue just those files. |
| delete_fileA | Delete one file from disk and remove it from the Tdarr database (POST /api/v2/delete-file). This deletes real media — confirm with the user first. |
| bulk_delete_filesA | Delete several files from disk and remove them from the Tdarr database (POST /api/v2/bulk-delete-files). This deletes real media — list the files for the user and confirm before calling. |
| delete_unhealthy_filesA | Delete every file in the transcode-error table (table3) or the health-check-error table (table6) from disk (POST /api/v2/delete-unhealthy-files). This deletes real media in bulk — always list the affected files with query_table and confirm with the user first. |
| delete_cache_fileA | Delete a leftover file from the Tdarr transcode cache (POST /api/v2/delete-cache-file). Use it to clear partial output from an interrupted worker. |
| find_duplicatesA | Start Tdarr's duplicate detection (POST /api/v2/find-duplicates). 'metadata' compares stream metadata and is fast; 'sha256' hashes file content and is accurate but slow — with sha256, hash_amount controls how much of each file is read. Runs asynchronously; stop it with stop_find_duplicates. |
| stop_find_duplicatesA | Stop a running duplicate detection pass (GET /api/v2/stop-dedupe). |
| get_pie_statsA | Get the pie-chart statistics shown on the Tdarr dashboard (POST /api/v2/stats/get-pies) — file counts by transcode status, health status, container, video and audio codec, resolution and channel layout. Omit library_id for totals across every library. |
| get_stream_statsA | Get stream-level statistics (POST /api/v2/stats/get-streams) — the codecs, languages and stream types present across the library's files. |
| get_space_savedA | Get space saved by transcoding over time, bucketed (POST /api/v2/stats/get-space-saved). Filter by library, node, worker type or plugin to see which of them actually saves storage. |
| get_worker_verdict_historyA | Get transcode and health check outcomes over time, bucketed (POST /api/v2/stats/get-worker-verdict-hist) — successes, errors and not-required counts. The quickest way to see whether a change made failures go up. |
| get_resource_historyB | Get the Tdarr Server resource history (POST /api/v2/stats/get-res-hist) — CPU percentage, memory and heap usage over time. |
| get_worker_historyA | Get the history of running worker counts by type (POST /api/v2/stats/get-running-worker-hist). Use it to check whether workers were actually busy over a period, or idle waiting for work. |
| search_pluginsA | Search the classic plugins available to the server (POST /api/v2/search-plugins). Returns name, type, operation, description, version and source for each match — the source and ID are what manage_library_plugin needs. |
| search_flow_pluginsB | Search the flow plugins — the individual nodes available inside a Tdarr flow (POST /api/v2/search-flow-plugins). |
| search_flow_templatesA | Search the ready-made flow templates (POST /api/v2/search-flow-templates). Read one before designing a flow from scratch — the templates show how the official flows wire their nodes together. |
| read_pluginA | Read the source of a classic plugin (POST /api/v2/read-plugin-text). Read a Community plugin to understand what it does before adding it to a library, or a Local plugin before editing it. |
| save_pluginA | Write the source of a local classic plugin (POST /api/v2/save-plugin-text). Overwrites the whole file, so read_plugin first and send back the full modified source. Only edit Local plugins — Community plugins are overwritten on the next plugin update. |
| create_pluginA | Create a basic local classic plugin with Tdarr's plugin creator (POST /api/v2/create-plugin). The conditionals string is the plugin's matching logic; the action describes what to run when it matches. For anything beyond a simple condition/action pair, create it here and then refine the source with read_plugin and save_plugin. |
| copy_community_plugin_to_localA | Copy a Community plugin into Local plugins so it can be edited without being overwritten by plugin updates (POST /api/v2/copy-community-to-local). |
| verify_pluginA | Check whether a classic plugin exists on the server (POST /api/v2/verify-plugin). Returns a boolean — use it before adding a plugin to a library's stack. |
| delete_pluginA | Delete a plugin from the server (POST /api/v2/delete-plugin). Deleting a plugin that a library's stack still references leaves that stack broken — check with list_libraries first. |
| update_community_pluginsA | Pull the latest Community plugins from the Tdarr plugin repo (POST /api/v2/update-plugins). This overwrites Community plugins; Local plugins are untouched. |
| sync_plugins_to_nodesA | Push the server's current plugins out to every connected node (POST /api/v2/sync-plugins). Run it after update_community_plugins or save_plugin so nodes execute the new code. |
| list_plugin_repo_versionsA | List recent commits on the Tdarr plugin repo — SHA, date, message and author (POST /api/v2/plugin-repo-versions). Use it to see what changed upstream before pulling plugin updates. |
| list_flowsA | List the Tdarr flows defined on the server with their ID, name, description and size. A library's flowId (from list_libraries) points at one of these. |
| get_flowA | Get one flow's complete graph — every node with its plugin ID and inputs, plus the edges between them. Read this to explain or debug what a library's flow actually does. |
| search_job_reportsA | Search the job reports on the server by filename (POST /api/v2/search-job-reports). Returns the matching report filenames and their last-modified time; read one with get_job_report. |
| get_job_reportA | Get a job report by job ID (GET /api/v2/job-reports/{jobId}) — the full worker log for that job plus its metadata, including whether the job is still running. This is where the ffmpeg command line and its errors live, so read it first when a transcode fails. |
| list_file_job_reportsA | List every job report recorded for one file (POST /api/v2/list-footprintId-reports). The footprintId is on the file record from get_file, and identifies the file across renames and transcodes. |
| read_job_report_fileA | Read one report file belonging to a job (POST /api/v2/read-job-file). Use it for the individual files listed by list_file_job_reports when a job produced more than one report. |
| delete_job_reportA | Delete one job report from the database and from disk (POST /api/v2/delete-job-report). |
| delete_job_reportsA | Delete job reports in bulk (POST /api/v2/delete-job-reports). With no filters this deletes every report — pass filters to narrow it, and confirm with the user first. |
| list_backupsA | List the Tdarr database backups on the server with their name, size and date (POST /api/v2/get-backups). |
| create_backupA | Create a backup of the Tdarr database (POST /api/v2/create-backup). Runs asynchronously — poll get_backup_status for progress. Take one before any bulk change to libraries or files. |
| get_backup_statusA | Get the status of a backup in progress (POST /api/v2/get-backup-status). |
| reset_backup_statusA | Reset a stuck backup status (POST /api/v2/reset-backup-status). Use it when get_backup_status keeps reporting a backup that is no longer running. |
| delete_backupA | Delete a Tdarr database backup (POST /api/v2/delete-backup). |
| list_automationsA | List the automation configurations defined on the server. The _id of one of these is the config_id run_automation takes. |
| get_automationA | Get one automation configuration in full — its trigger, payload shape and targets. |
| run_automationA | Manually trigger an automation (POST /api/v2/run-automation). Scope it to specific libraries or nodes, and use the bypass flags only when you deliberately want to jump the worker or staged-file limits. |
| query_databaseA | Read a Tdarr database collection directly (POST /api/v2/cruddb) for anything the dedicated tools do not cover — global settings, variables, staged items, jobs, statistics. Read-only: this tool cannot insert, update or remove documents. 'getAll' on FileJSONDB returns the entire file database, so prefer search_files there. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
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/OrellBuehler/tdarr-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server