使用说明
伦菲尔德mcp dlna
充当UPnP/DLNA的MCP服务器 控制点:发现渲染器 和
MediaServers通过SSDP向渲染器播放无缝队列,并浏览内容
图书馆。每设备类后端覆盖标准DLNA AVTransport、OpenHome
(Linn,本地设备端队列)和Sonos(通过 soco).
内容可以来自任何MediaServer的ContentDirectory(例如Jellyfin的内置目录)
DLNA服务器)通过 play_from_server,或通过以下方式从呼叫者提供的URL获取 play_tracks.
工具
渲染器(播放)
| 工具 | 说明 |
|---|---|
list_renderers |
在网络上发现DLNA渲染器(5分钟缓存);报告 supports_queue |
play_tracks |
播放无缝队列的曲目列表(SetNextAVTransportURI) |
stop |
停止播放并清空队列 |
pause / resume |
暂停/恢复播放 |
next_track / previous_track |
跳到下一首/上一首曲目 |
seek |
在当前轨迹内寻找一个位置(秒) |
set_play_mode |
设置播放模式: normal/repeat_one/repeat_all/shuffle/random (单UPnP播放模式,门控开启 valid_play_modes) |
get_status |
状态、跟踪信息、队列位置, 位置/持续时间/功能/音量/静音/有效播放模式 |
set_volume / get_volume |
设置/获取音量(0-100) |
set_mute / get_mute |
静音/取消静音/查询静音 |
媒体服务器(内容库)
| 工具 | 说明 |
|---|---|
list_servers |
在网络上发现DLNA媒体服务器(ContentDirectory) |
browse_server |
列出库容器的子项(分页; object_id "0" =根) |
search_server |
按标题搜索库(功能门控) |
play_from_server |
解析库对象(专辑/播放列表/曲目)并在渲染器上播放它——不需要调用方URL |
安装
pip install .
用法
stdio(默认值--用于MCP子流程)
renfield-mcp-dlna
# or
python -m renfield_mcp_dlna
流式http(独立服务)
MCP_TRANSPORT=streamable-http MCP_PORT=9091 renfield-mcp-dlna
服务器正在监听 http://0.0.0.0:9091/mcp (可通过以下方式配置 MCP_HOST 和 MCP_PORT).
环境变量
| 变量 | 默认值 | 描述 |
|---|---|---|
MCP_TRANSPORT |
stdio |
运输: stdio 或 streamable-http |
MCP_HOST |
0.0.0.0 |
绑定地址(仅限可流式传输的http) |
MCP_PORT |
9091 |
监听端口(仅限可流式传输的http) |
DLNA_LISTEN_IP |
auto | 覆盖用于UPnP事件回调URL的本地IP(多宿主主机) |
RENFIELD_OPENHOME |
on | OpenHome渲染器(Linn)默认使用本地播放列表后端(经过硬件验证);集 0 回到AVTransport |
RENFIELD_SONOS |
未设置 | 1 将Sonos渲染器路由到 soco-后端支持(暂定;需要 .[sonos]) |
部署
SSDP组播(239.255.255.250:1900)要求 局域网接入,所以这个服务器
必须共享主机的网络——可以直接在主机上运行,也可以在
集装箱 主机网络 (docker run --network host /库贝内特斯
hostNetwork: true).网桥/NAT网络上的容器看不到SSDP,也不会看到
发现渲染器。(运行在长寿命 streamable-http 运输也
启用被动SSDP实时缓存+会话监视器。)
码头工人
专用图像由包含的内容构建 Dockerfile (默认为
streamable-http 上 0.0.0.0:9091):
docker build -t renfield-mcp-dlna .
docker run --rm --network host renfield-mcp-dlna
要获得Sonos支持,请使用额外功能进行构建:添加 RUN pip install '.[sonos]' 或设置
RENFIELD_SONOS=1 针对包含以下内容的图像 soco.
systemd服务
# /etc/systemd/system/renfield-mcp-dlna.service
[Unit]
Description=Renfield DLNA MCP Server
After=network.target
[Service]
Type=simple
User=your-user
Environment=MCP_TRANSPORT=streamable-http
Environment=MCP_PORT=9091
Environment=MCP_HOST=0.0.0.0
ExecStart=/home/your-user/.local/bin/renfield-mcp-dlna
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now renfield-mcp-dlna
Renfield配置
在 config/mcp_servers.yaml:
- name: dlna
transport: streamable_http
url: "${DLNA_MCP_URL:-http://host.docker.internal:9091/mcp}"
enabled: "${DLNA_MCP_ENABLED:-false}"
在 .env:
DLNA_MCP_ENABLED=true
# DLNA_MCP_URL=http://host.docker.internal:9091/mcp # default
建筑
DLNA Renderers (LAN) DLNA MCP Server (Host) Renfield Backend (Docker)
Linn, Samsung TV, etc. SSDP discovery + UPnP MCP client
↑ ↑ ↑
│ SSDP Multicast │ streamable-http │
│ 239.255.255.250:1900 │ :9091/mcp │
└────────────────────────────┘ │
└──────────────────────────────┘
host.docker.internal:9091/mcp
依赖项
mcp>=1.26.0--模型上下文协议SDKasync-upnp-client>=0.47.0--UPnP/SSDP客户端(DmrDevice/DmsDevice、播放模式、元数据协商)python-didl-lite>=1.4.0--用于UPnP元数据的DIDL Lite XMLaiohttp>=3.9.0--异步HTTP用于获取设备描述defusedxml>=0.7--(局域网恶搞)设备描述的强化XML解析ifaddr>=0.2--用于多接口SSDP发现的本地接口枚举
可选: pip install '.[sonos]' 添加 soco>=0.30 Sonos后端(暂定)。