使用说明
MCP媒体服务器
一个用于列出和播放媒体文件的模型上下文协议(MCP)服务器和客户端 ~/Media/MOVIES支持stdio、HTTP和HTTPS传输协议,与Claude Desktop兼容。
特点
- 列出电影浏览您“电影”目录中的所有媒体文件
- 播放电影使用系统默认媒体播放器开始播放
- 多种运输方式stdio(用于Claude桌面版)、HTTP和HTTPS
- 跨平台在Linux上运行(之后也支持macOS和Windows)
安装
# Install dependencies
pip install -r requirements.txt
# Or install individually
pip install mcp starlette uvicorn sse-starlette
快速入门
服务器
stdio(针对Claude桌面版):
python media_server.py --transport stdio
HTTP:(超文本传输协议)
python media_server.py --transport http --host 0.0.0.0 --port 3000
HTTPS: 没有内置的HTTPS(无论怎么说)使用Caddy作为反向代理来处理HTTPS,并将HTTP请求转发到media_server
### Client
**List movies via stdio:**
```bash
python media_client.py --protocol stdio --command list
通过标准输入输出流播放电影:
python media_client.py --protocol stdio --command play --movie "example.mp4"
通过HTTP列出电影:
python media_client.py --protocol http --url http://localhost:3000/sse --command list
通过HTTPS播放电影:
python media_client.py --protocol https --url https://localhost:3001/sse \
--command play --movie "example.mp4"
用于https的代理服务器(或:https的代理)
pi5c.example.com:3001 {
tls /etc/caddy/certs/fullchain.pem /etc/caddy/certs/privkey.pem
reverse_proxy localhost:3000
}
在我的情况下,“pi5c.example.com”是一个具有本地IP的公共DNS条目。肯定有更好的方法, 但目前它还能用。
我有一个针对 *.example.com 的通配符证书,我已经将其复制到本地 将证书复制到 /etc/caddy/certs/ 目录(如果该目录不存在,请先创建),并将所有者更改为 caddy
mkdir -p /etc/caddy/certs
cp /etc/letsencrypt/live/example.com/fullchain.pem /etc/caddy/certs/
cp /etc/letsencrypt/live/example.com/privkey.pem /etc/caddy/certs/
chown caddy:caddy /etc/caddy/certs/*
chmod 644 /etc/caddy/certs/fullchain.pem
chmod 600 /etc/caddy/certs/privkey.pem
配置
媒体目录
默认情况下,服务器会在 ~/Media/MOVIES要更改这一点,请编辑 MEDIA_DIR 变量在 media_server.py:
MEDIA_DIR = Path.home() / "Media" / "MOVIES"
支持的文件类型
支持以下视频格式:
- .mp4, .mkv, .avi, .mov, .wmv, .flv, .webm, .m4v, .mpg, .mpeg(这些是视频文件的常见扩展名,翻译为中文即:.mp4、.mkv、.avi、.mov、.wmv、.flv、.webm、.m4v、.mpg、.mpeg)
要添加更多格式,请编辑 MEDIA_EXTENSIONS 设定为 media_server.py。
Claude桌面集成
添加到您的Claude桌面配置中(claude_desktop_config.json):
{
"mcpServers": {
"media-server": {
"command": "python",
"args": ["/path/to/media_server.py", "--transport", "stdio"]
}
}
}
n8n 集成
未经测试 对于 n8n,请使用 HTTP 或 HTTPS 传输方式:
- 使用HTTP/HTTPS传输启动服务器
- 在 n8n 中,使用 HTTP 请求节点来连接到
http://your-server:8000/sse - 使用POST请求来
/messagesMCP通信的端点
媒体播放器要求
服务器将自动检测并使用可用的媒体播放器:
Linux:
- MPV(多用途汽车)
mpv这是唯一一个能可靠运行的播放器 - VLC(
vlc) - MPlayer(
mplayer) - 或系统默认(
xdg-open)
macOS:
- 用途
open命令(系统默认播放器)
Windows:
- 用途
os.startfile()(系统默认播放器)
安装播放器(Linux)
# Ubuntu/Debian
sudo apt install vlc
# Fedora
sudo dnf install vlc
# Arch
sudo pacman -S vlc
API 参考文档
工具
列出电影
列出Movies目录中的所有媒体文件。
参数: 无
返回值: 包含电影名称、路径、大小和文件类型的列表
示例:
{
"name": "list_movies",
"arguments": {}
}
播放电影
使用系统默认的媒体播放器播放特定的电影。
参数:
filename(字符串,必填):电影文件的名称
返回值: 状态消息,指示成功或错误
示例:
{
"name": "play_movie",
"arguments": {
"filename": "example.mp4"
}
}
服务器命令行选项
usage: media_server.py [-h] [--transport {stdio,http,https}] [--host HOST]
[--port PORT] [--certfile CERTFILE] [--keyfile KEYFILE]
optional arguments:
--transport {stdio,http}
Transport protocol to use (default: stdio)
--host HOST Host to bind to for HTTP/HTTPS (default: 127.0.0.1)
--port PORT Port to bind to for HTTP/HTTPS (default: 8000)
客户端命令行选项
usage: media_client.py [-h] --protocol {stdio,http,https} --command {list,play}
[--movie MOVIE] [--url URL] [--server-script SERVER_SCRIPT]
optional arguments:
--protocol {stdio,http,https}
Protocol to use for connecting to server
--command {list,play}
Command to execute (list or play)
--movie MOVIE Movie filename to play (required for 'play' command)
--url URL Server URL for HTTP/HTTPS (e.g., http://localhost:8000/sse)
--server-script SERVER_SCRIPT
Path to server script for stdio (default: media_server.py)
故障排除
未找到媒体播放器
安装MPV或其他支持的媒体播放器:
sudo apt install mpv # Linux
HTTP/HTTPS 连接错误
- 检查服务器是否正在运行
- 验证URL中是否包含
/sse终端节点 - 对于HTTPS,请确保证书文件有效
权限错误
确保 ~/Media/MOVIES 目录存在且可读:
mkdir -p ~/Media/MOVIES
chmod 755 ~/Media/MOVIES
安全注意事项
- 服务器仅访问配置的媒体目录中的文件
- 服务器不会修改或删除任何文件
许可证
MIT 许可证 - 欢迎根据需要自由使用和修改。