大华MCP服务器
MCP服务器,用于通过其CGI HTTP API管理大华/Amcrest IP摄像机。支持单个实例中的多个摄像头,同时支持stdio和HTTP传输。
快速开始
1.创建摄像头配置文件
创建 ~/.config/dahua-mcp/cameras.yaml (或 cameras.json)使用您的相机凭据。这是默认的配置位置——不需要env-var。
对象符号 (cameras.json):
{
"cameras": [
{
"name": "front-door",
"host": "192.168.1.108",
"port": 80,
"username": "admin",
"password": "secret"
},
{
"name": "backyard",
"host": "192.168.1.109",
"port": 80,
"username": "admin",
"password": "secret"
}
]
}YAML (cameras.yaml):
cameras:
- name: front-door
host: 192.168.1.108
port: 80
username: admin
password: secret
- name: backyard
host: 192.168.1.109
port: 80
username: admin
password: secret每个摄像头条目支持:
| 字段 | 必填 | 默认 | 描述 |
|---|---|---|---|
name | 是 | -- | 所有工具调用中使用的唯一相机名称 |
host | 是 | -- | 摄像头主机名或IP地址 |
port | 没有 | 80 | HTTP端口(443 自动启用HTTPS) |
username | 是 | -- | 摄像头用户名 |
password | 是 | -- | 摄像头密码 |
verify_ssl | 没有 | false | 验证SSL证书 |
2.添加MCP服务器
选项A:stdio(克劳德代码/克劳德桌面)
使用Claude Code CLI(摄像头配置自动发现) ~/.config/dahua-mcp/):
# From PyPI
claude mcp add dahua-mcp -- uvx dahua-mcp
# From a local clone
claude mcp add dahua-mcp -- uv run --directory /path/to/dahua-mcp dahua-mcp
# With a custom config path
claude mcp add dahua-mcp -e DAHUA_CAMERAS_CONFIG=/path/to/cameras.json -- uvx dahua-mcp或者手动添加到您的克劳德代码设置中(~/.claude.json)或Claude桌面配置:
{
"mcpServers": {
"dahua-mcp": {
"type": "stdio",
"command": "uvx",
"args": ["dahua-mcp"]
}
}
}或者从本地克隆运行:
{
"mcpServers": {
"dahua-mcp": {
"type": "stdio",
"command": "uv",
"args": ["run", "--directory", "/path/to/dahua-mcp", "dahua-mcp"]
}
}
}要覆盖配置位置,请添加 env 块:
{
"env": {
"DAHUA_CAMERAS_CONFIG": "/custom/path/cameras.yaml"
}
}选项B:Docker容器(HTTP传输)
运行装载了配置文件卷的容器:
docker run -d \
-v /path/to/cameras.json:/config/cameras.json:ro \
-p 8000:8000 \
ghcr.io/brianegge/dahua-mcp:latest然后将HTTP服务器添加到MCP客户端配置中:
{
"mcpServers": {
"dahua-mcp": {
"type": "http",
"url": "http://localhost:8000/mcp"
}
}
}要在Docker中使用YAML配置:
docker run -d \
-v /path/to/cameras.yaml:/config/cameras.yaml:ro \
-e DAHUA_CAMERAS_CONFIG=/config/cameras.yaml \
-p 8000:8000 \
ghcr.io/brianegge/dahua-mcp:latest要添加承载令牌身份验证,请执行以下操作:
docker run -d \
-v /path/to/cameras.json:/config/cameras.json:ro \
-e MCP_HTTP_BEARER_TOKEN=your-secret-token \
-p 8000:8000 \
ghcr.io/brianegge/dahua-mcp:latest{
"mcpServers": {
"dahua-mcp": {
"type": "http",
"url": "http://localhost:8000/mcp",
"headers": {
"Authorization": "Bearer your-secret-token"
}
}
}
}环境变量
除了相机凭据之外的所有设置都是通过环境变量配置的:
| 变量 | 默认值 | 描述 |
|---|---|---|
DAHUA_CAMERAS_CONFIG | ~/.config/dahua-mcp/cameras.yaml | 摄像头配置文件的路径(JSON或YAML)。自动发现来自 ~/.config/dahua-mcp/ 如果没有设置。 |
DAHUA_TIMEOUT | 20 | HTTP请求超时(秒) |
READ_ONLY_MODE | false | 禁用所有写入工具(重新启动、set_config等) |
DISABLED_TAGS | -- | 要禁用的逗号分隔标签(例如。 destructive,write) |
LOG_LEVEL | INFO | 日志记录级别 |
RATE_LIMIT_ENABLED | false | 启用速率限制 |
RATE_LIMIT_MAX_REQUESTS | 60 | 每个窗口的最大请求数 |
RATE_LIMIT_WINDOW_MINUTES | 1 | 速率限制窗口(分钟) |
MCP_TRANSPORT | stdio | 运输类型: stdio, sse,或 http |
MCP_HTTP_HOST | 0.0.0.0 | HTTP绑定主机 |
MCP_HTTP_PORT | 8000 | HTTP绑定端口 |
MCP_HTTP_BEARER_TOKEN | -- | HTTP身份验证的可选承载令牌 |
可用工具
发现
| 工具 | 描述 | 只读 |
|---|---|---|
list_cameras | 列出所有已配置的摄像头(名称、主机、端口) | 是 |
系统信息
| 工具 | 描述 | 只读 |
|---|---|---|
get_system_info | 获取完整的系统信息(设备类型、序列号、固件等) | 是 |
get_device_type | 获取设备类型/型号 | 是 |
get_software_version | 获取固件版本 | 是 |
get_machine_name | 获取相机的机器名称 | 是 |
get_serial_number | 获取序列号 | 是 |
get_hardware_version | 获取硬件版本 | 是 |
get_vendor | 获取供应商/制造商 | 是 |
配置读取
| 工具 | 描述 | 只读 |
|---|---|---|
get_config | 按名称获取任何配置节 | 是 |
get_motion_detection | 获取运动检测配置 | 是 |
get_video_in_mode | 获取视频输入模式(日夜模式) | 是 |
get_encoding_config | 获取编码/流配置 | 是 |
get_network_config | 获取网络配置(IP、网关、DNS) | 是 |
get_ntp_config | 获取NTP时间同步配置 | 是 |
配置写入
| 工具 | 描述 | 破坏性 |
|---|---|---|
set_config | 设置任意配置键值对 | 是 |
enable_motion_detection | 启用/禁用运动检测 | 否 |
set_record_mode | 设置录制模式(自动/手动/关闭) | 否 |
系统控制
| 工具 | 描述 | 破坏性 |
|---|---|---|
reboot | 重新启动相机 | 是 |
take_snapshot | 拍摄JPEG快照(base64) | 否 |
日志
| 工具 | 描述 | 只读 |
|---|---|---|
search_logs | 按时间范围和类型搜索摄像头日志 | 是 |
发展
git clone https://github.com/brianegge/dahua-mcp.git
cd dahua-mcp
uv sync
uv run pre-commit install # Install ruff format/lint hook
uv run pytest # Run tests
uv run ruff check . # Lint许可证
MIT许可证-有关详细信息,请参阅许可证文件。
