README
🚀 Webcam MCP 📸
Webcam MCP 是一个模型上下文协议(MCP)服务器,它能让大语言模型(LLM)代理直接访问你的网络摄像头。它使自主代理能够拍摄照片和录制视频序列,从而可以在无需人工干预的情况下调试网络物理系统、监控环境以及与现实世界进行交互。

🚀 快速开始
Webcam MCP 是一个模型上下文协议(MCP)服务器,它能让大语言模型(LLM)代理直接访问你的网络摄像头。它使自主代理能够拍摄照片和录制视频序列,从而可以在无需人工干预的情况下调试网络物理系统、监控环境以及与现实世界进行交互。
✨ 主要特性
- 📸 高分辨率照片:拍摄静态图像
- 🎥 视频录制:在指定时间段内录制一系列帧
- 🌐 远程访问:支持 SSE 传输,便于网络访问部署
- ⚙️ 可配置:可调整分辨率、摄像头索引和质量设置
- 🔌 跨平台:支持 Linux、macOS 和 Windows 系统
- 🚀 易于集成:MCP 客户端配置简单
📦 安装指南
pip install webcam-mcp
启动 MCP 服务器:
webcam-mcp
默认情况下,服务器将在 http://0.0.0.0:8000/sse 上启动。
你可以使用任何 MCP 客户端来测试服务器,例如 MCP Inspector(通过 npx @modelcontextprotocol/inspector 安装)。
CLI 选项
| 选项 | 类型 | 默认值 | 描述 |
|--------|------|---------|-------------|
| --host | 字符串 | 0.0.0.0 | 服务器主机地址 |
| --port | 整数 | 8000 | 服务器端口 |
| --camera-index | 整数 | 0 | 网络摄像头设备索引 |
| --photo-width | 整数 | 1920 | 默认照片宽度(像素) |
| --photo-height | 整数 | 1080 | 默认照片高度(像素) |
| --video-width | 整数 | 640 | 默认视频帧宽度(像素) |
| --video-height | 整数 | 480 | 默认视频帧高度(像素) |
| --version | - | - | 显示版本并退出 |
💻 使用示例
基础用法
# 在自定义端口启动
webcam-mcp --port 9000
# 使用不同的摄像头(例如,外部 USB 网络摄像头)
webcam-mcp --camera-index 1
# 自定义照片分辨率
webcam-mcp --photo-width 1280 --photo-height 720
📚 详细文档
MCP 客户端配置
Claude Desktop
将以下内容添加到你的 claude_desktop_config.json 文件中:
{
"mcpServers": {
"webcam": {
"url": "http://localhost:8000/sse"
}
}
}
配置文件位置:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
其他 MCP 客户端
任何支持 SSE 传输的 MCP 客户端都可以连接到:
http://<主机>:<端口>/sse
MCP 工具
take_photo
从网络摄像头拍摄一张高分辨率照片。 参数: 无 返回值: JPEG 图像 在 Claude 中的使用示例:
你能拍张照片并描述你看到的内容吗?
record_video
在指定时间段内录制视频帧。 参数:
duration_seconds(浮点数,可选):录制时长(秒)- 最小值:1.0 秒
- 最大值:60.0 秒
- 默认值:5.0 秒 返回值: JPEG 帧列表 在 Claude 中的使用示例:
录制一段 10 秒的视频,并分析你检测到的任何运动。
🔧 技术细节
故障排除
摄像头权限被拒(macOS)
在 macOS 系统上,你需要授予摄像头权限:
- 打开 系统设置 → 隐私与安全 → 摄像头
- 为 终端(或你的终端应用程序)启用摄像头访问权限
- 重启终端并再次尝试
摄像头已在使用中
如果你看到 “摄像头不可用” 错误:
- 关闭其他使用网络摄像头的应用程序(如 Zoom、Skype 等)
- 检查是否有另一个
webcam-mcp实例正在运行 - 尝试使用不同的摄像头索引:
webcam-mcp --camera-index 1
摄像头索引错误
要查找可用的摄像头:
import cv2
for i in range(10):
cap = cv2.VideoCapture(i)
if cap.isOpened():
print(f"摄像头 {i}: 可用")
cap.release()
else:
print(f"摄像头 {i}: 不可用")
然后使用正确的编号设置 --camera-index。
分辨率不支持
如果你的摄像头不支持请求的分辨率,服务器将:
- 记录一条警告信息,显示实际达到的分辨率
- 继续使用摄像头支持的最大分辨率运行 检查日志中是否有类似以下的消息:
WARNING: Requested resolution 1920x1080, but camera provided 1280x720
开发
# 以可编辑模式安装并包含开发依赖项
pip install -e ".[dev]"
# 运行所有测试
pytest
# 以详细输出模式运行
pytest -v
# 运行特定的测试文件
pytest tests/test_camera.py
所有测试都使用模拟的摄像头硬件,因此测试时无需物理网络摄像头。
发布
要标记并发布新版本,请将包含新 __version__ 字符串的新提交推送到 main 分支。这将触发一个新的标签,并将新版本推送到 PyPI。
📄 许可证
本项目采用 MIT 许可证。
Scan to join WeChat group