IPTV管理MCP服务器

面向AI代理的Dispatcharr MCP服务器,用于通过统一接口管理IPTV直播流、频道、EPG电子节目指南和VOD点播库。

  • by crunchingcode
  • Python
  • 混合部署
  • 16 星标
  • 更新于
在 GitHub 查看 crunchingcode/dispatcharr-mcp

使用说明

dispatcharr-mcp

An MCP server for Dispatcharr — giving AI agents full control over your IPTV streams, channels, EPG, and VOD library.

Authentication

Two modes are supported — DISPATCHARR_API_KEY takes priority if set:

Mode Variables needed
API Key (stateless, no token expiry) DISPATCHARR_URL + DISPATCHARR_API_KEY
JWT (username/password) DISPATCHARR_URL + DISPATCHARR_USERNAME + DISPATCHARR_PASSWORD

If DISPATCHARR_API_KEY is set, the username/password are ignored — a rejected key is reported as an error (with Dispatcharr's reason, e.g. Invalid API key) rather than falling back to a login. An empty DISPATCHARR_API_KEY counts as unset.

To generate an API key: Dispatcharr UI → System → Users → edit your user → copy the API Key field.

The key is sent as Authorization: ApiKey <key>. Dispatcharr also accepts X-API-Key: <key>, but not Api-Key — that scheme is silently ignored, so it appears to work against public endpoints such as /api/core/version/ while every protected one returns 401. If calls fail with 401 in API key mode, the key itself is wrong or has been regenerated; update DISPATCHARR_API_KEY rather than the header.

Tools

Domain Tools
Accounts / Users list_users, get_user, create_user, update_user, delete_user, get_current_user, update_current_user, list_user_groups, get_user_group, create_user_group, update_user_group, delete_user_group, list_permissions, list_api_keys, generate_api_key, revoke_api_key
Channels list_channels, get_channel, create_channel, update_channel, delete_channel, get_channel_streams, get_channel_stream_stats, get_channels_in_number_range, bulk_delete_channels, bulk_update_channels, bulk_regex_update_channels, assign_channels, batch_set_epg, match_epg_all, set_logos_from_epg, set_names_from_epg, set_tvg_ids_from_epg, create_channels_from_streams_bulk, get_channels_by_uuids, reorder_channel, set_channel_epg, match_channel_epg
Channel Groups list_channel_groups, create_channel_group, update_channel_group, delete_channel_group
Streams list_streams, get_stream, create_channel_from_stream, preview_regex_streams, create_stream, update_stream, delete_stream, bulk_delete_streams, list_stream_groups, list_stream_filter_options, list_stream_ids, get_streams_by_ids
Proxy / Live get_proxy_status, get_channel_proxy_status, change_channel_stream, next_channel_stream, stop_channel_stream, stop_channel_client, get_all_proxy_stats
EPG list_epg_sources, get_epg_source, create_epg_source, upload_epg_source, update_epg_source, delete_epg_source, list_epg_data, list_epg_programs, search_epg_programs, get_current_programs, get_epg_grid
Schedules Direct get_sd_lineups, add_sd_lineup, remove_sd_lineup, search_sd_lineups
M3U Accounts list_m3u_accounts, get_m3u_account, create_m3u_account, update_m3u_account, delete_m3u_account, refresh_m3u_account, refresh_all_m3u_accounts, get_m3u_auto_channels_count, repack_m3u_group, refresh_m3u_vod, update_m3u_group_settings, list_m3u_filters, get_m3u_filter, create_m3u_filter, update_m3u_filter, delete_m3u_filter, list_m3u_account_profiles, get_m3u_account_profile, create_m3u_account_profile, update_m3u_account_profile, delete_m3u_account_profile
M3U Server Groups list_m3u_server_groups, get_m3u_server_group, create_m3u_server_group, update_m3u_server_group, delete_m3u_server_group
Channel Profiles list_channel_profiles, create_channel_profile, delete_channel_profile, get_channel_profile, update_channel_profile, duplicate_channel_profile, bulk_update_profile_channels, update_profile_channel
VOD list_movies, get_movie, list_series, get_series, list_episodes, list_vod_categories
System get_core_settings, get_version, list_stream_profiles, get_stream_profile, create_stream_profile, update_stream_profile, delete_stream_profile, get_system_events, list_timezones, list_useragents, get_useragent, create_useragent, update_useragent, delete_useragent, get_setting, update_setting, delete_setting, check_settings, get_env_settings, rehash_streams, list_log_files, get_log_file
Output Profiles list_output_profiles, get_output_profile, create_output_profile, update_output_profile, delete_output_profile
Notifications list_notifications, get_notification, get_notification_count, dismiss_notification, dismiss_all_notifications, delete_notification
Connect list_integrations, get_integration, create_integration, update_integration, delete_integration, test_integration, get_integration_subscriptions, set_integration_subscriptions, list_subscriptions, get_subscription, create_subscription, update_subscription, delete_subscription, list_stream_delivery_logs, get_delivery_log
Channel Logos list_channel_logos, get_channel_logo, create_channel_logo, update_channel_logo, delete_channel_logo, bulk_delete_channel_logos, cleanup_channel_logos
VOD extras list_all_vod, get_vod_item, get_vod_category, get_episode, get_series_episodes, get_movie_provider_info, get_series_provider_info
VOD Logos list_vod_logos, get_vod_logo, create_vod_logo, update_vod_logo, delete_vod_logo, bulk_delete_vod_logos, cleanup_vod_logos
HDHomeRun list_hdhr_devices, get_hdhr_device, create_hdhr_device, update_hdhr_device, delete_hdhr_device
Proxy / Live get_proxy_status, get_channel_proxy_status, change_channel_stream, next_channel_stream, stop_channel_stream, stop_channel_client, get_all_proxy_stats
Catchup create_catchup_session, delete_catchup_session, update_catchup_session_position, get_catchup_stats, stop_catchup_client
Proxy extras get_vod_proxy_stats, stop_vod_client
DVR Recordings list_recordings, get_recording, schedule_recording, update_recording, delete_recording, stop_recording, extend_recording, update_recording_metadata, refresh_recording_artwork, run_comskip, bulk_delete_upcoming_recordings, get_comskip_config, update_comskip_config
DVR Series Rules list_series_rules, create_series_rule, delete_series_rule, evaluate_series_rules, preview_series_rule, bulk_remove_series_rules
DVR Recurring Rules list_recurring_rules, get_recurring_rule, create_recurring_rule, update_recurring_rule, delete_recurring_rule
EPG (programs) get_epg_program, create_epg_program, update_epg_program, delete_epg_program, import_epg, get_epg_data_entry, get_epg_program_poster_url
Backups list_backups, create_backup, restore_backup, delete_backup, get_backup_schedule, update_backup_schedule, get_backup_status, get_backup_download_token
Plugins list_plugins, enable_plugin, run_plugin, configure_plugin, import_plugin, reload_plugins, delete_plugin, list_plugin_repos, create_plugin_repo, update_plugin_repo, delete_plugin_repo

TODO

The following API endpoints are not yet implemented. Contributions welcome.

Tier 2 — Useful management operations

  • File uploads — upload_backup, upload_channel_logo (multipart file upload, requires different client support)

Tier 3 — Niche / lower priority

  • Plugin extras — refresh_plugin_repo, install_plugin, list_available_plugins, get_repo_settings, update_repo_settings, preview_plugin, get_plugin_detail (not present in current swagger spec)

Setup

There are two ways to run dispatcharr-mcp. Choose the one that fits your setup:

Approach Best for Transport
Docker Homelab / NAS / remote server — MCP server runs separately from your IDE HTTP (type: http)
Local install MCP server runs as a subprocess on the same machine as your IDE stdio (type: stdio)

Where do these config snippets go?

All the snippets below are MCP server configuration. Where you put them depends on your AI client:

Client File location Scope
VS Code — project .mcp.json in your project root (alongside .git/) This project only
VS Code — user Ctrl+Shift+P → Open User Settings (JSON) → "mcp" key All projects
Claude Desktop (Linux) ~/.config/Claude/claude_desktop_config.json All conversations
Claude Desktop (macOS) ~/Library/Application Support/Claude/claude_desktop_config.json All conversations

Tip: Use a project-scoped .mcp.json when you want to commit the config with your project. Use user/global config when you want dispatcharr-mcp available everywhere.


Docker

Pre-built images are published to the GitHub Container Registry for linux/amd64 and linux/arm64.

The Docker image runs in streamable-http mode, exposing the MCP server on port 8000. Your AI client connects over HTTP — credentials stay in the container, not in your IDE config.

Start the container

docker run -d -p 8000:8000 \
  -e DISPATCHARR_URL=http://your-dispatcharr-host:9191 \
  -e DISPATCHARR_API_KEY=your-api-key \
  -e FASTMCP_HOST=0.0.0.0 \
  ghcr.io/crunchingcode/dispatcharr-mcp:latest

Connect your AI client (HTTP)

Add one of these to your .mcp.json (project root) or your client's global config — see the table above for file locations.

Same machine as the container:

{
  "servers": {
    "dispatcharr": {
      "type": "http",
      "url": "http://localhost:8000/mcp"
    }
  }
}

Container on a different machine on your LAN:

{
  "servers": {
    "dispatcharr": {
      "type": "http",
      "url": "http://192.168.1.x:8000/mcp"
    }
  }
}

Local Installation

Use this approach when you want the MCP server to run as a subprocess on the same machine as your IDE.

Requirements

  • Python 3.10+
  • A running Dispatcharr instance (v0.20+)
  • A Dispatcharr API key or a username + password

Install

git clone https://github.com/crunchingcode/dispatcharr-mcp
cd dispatcharr-mcp
python3 -m venv .venv
.venv/bin/pip install -e .

Connect your AI client (stdio)

Add one of these to your .mcp.json (project root), VS Code user settings, or Claude Desktop config — see the table above for file locations.

API Key (recommended):

{
  "servers": {
    "dispatcharr": {
      "type": "stdio",
      "command": "/path/to/dispatcharr-mcp/.venv/bin/dispatcharr-mcp",
      "args": [],
      "env": {
        "DISPATCHARR_URL": "http://your-dispatcharr-host:9191",
        "DISPATCHARR_API_KEY": "your-api-key"
      }
    }
  }
}

Username/Password (JWT):

{
  "servers": {
    "dispatcharr": {
      "type": "stdio",
      "command": "/path/to/dispatcharr-mcp/.venv/bin/dispatcharr-mcp",
      "args": [],
      "env": {
        "DISPATCHARR_URL": "http://your-dispatcharr-host:9191",
        "DISPATCHARR_USERNAME": "mcp",
        "DISPATCHARR_PASSWORD": "your-password"
      }
    }
  }
}

CLI / manual

export DISPATCHARR_URL=http://dispatcharr.local:9191
export DISPATCHARR_API_KEY=your-api-key   # or use USERNAME + PASSWORD below

.venv/bin/dispatcharr-mcp

Environment Variables

Variable Required Description
DISPATCHARR_URL ✅ Base URL of your Dispatcharr instance
DISPATCHARR_API_KEY ✅ (or user+pass) Static API key — preferred auth method
DISPATCHARR_USERNAME ✅ (or api key) Dispatcharr username (JWT fallback)
DISPATCHARR_PASSWORD ✅ (or api key) Dispatcharr password (JWT fallback)
DISPATCHARR_REVEAL_CREDENTIALS Set to true to turn off credential masking (see below)

Credential masking

Tool results never show provider credentials or API keys by default. Instead, <redacted> takes their place in:

  • URLs: user:pass@, ?username=…&password=…, and Xtream Codes paths such as /live/<user>/<pass>/123.ts, anywhere in a result, including log files and error messages
  • values under keys such as password, token, secret and authorization
  • API keys, which keep their last four characters (<redacted>a1b2) so you can tell them apart

generate_api_key, get_backup_download_token and create_catchup_session exist to return a credential, so their results are not masked. A tool call whose arguments contain <redacted> is refused, so a masked URL can't be written back over the real one. Only the operator can turn masking off; the model can't.

License

MIT