Forge
markdownad090a99
1# Webcam MCP
2
3> **Сплит на отдельные репо:** логика разнесена на [webcam-mcp-shared](../webcam-mcp-shared), [webcam-capture-mcp](../webcam-capture-mcp) и [webcam-analysis-mcp](../webcam-analysis-mcp). Этот каталог можно считать монолитом для обратной совместимости; для новых установок предпочтительны два MCP-сервера из `capture` и `analysis`.
4
5MCP-сервер для **ручного** захвата с камеры и микрофона и передачи данных агенту для анализа.
6Поддерживает одиночный кадр, burst-серии и аудио-burst в WAV.
7
8## Модульная раскладка
9
10Тот же функционал в стеке **financial-open** разнесён по трём сабмодулям (источник правды — GitLab; на GitHub — зеркала):
11
12- [webcam-mcp-shared](https://github.com/KarataevDmitry/webcam-mcp-shared) — общая библиотека
13- [webcam-capture-mcp](https://github.com/KarataevDmitry/webcam-capture-mcp) — захват (камера, экран, аудио, A/V)
14- [webcam-analysis-mcp](https://github.com/KarataevDmitry/webcam-analysis-mcp) — анализ, OCR, Whisper
15
16**Этот репозиторий** — один процесс со **всеми** тулами в одном MCP; если так проще подключать в `mcp.json`, это остаётся нормальным вариантом.
17
18## Стек
19
20- C#, .NET 10, win-x64, self-contained
21- `ModelContextProtocol` (C# SDK)
22- `OpenCvSharp4` + `OpenCvSharp4.runtime.win`
23- `NAudio`
24- `Whisper.net` + `Whisper.net.Runtime`
25
26## Лицензия
27
28MIT (см. `LICENSE`).
29
30## Публикация
31
32```bash
33dotnet publish -c Release -o publish
34```
35
36Для подключения удобно использовать фиксированный путь к exe (например через junction), затем добавить сервер в `mcp.json`.
37
38## Пример `mcp.json`
39
40```json
41{
42 "mcpServers": {
43 "webcam-mcp": {
44 "command": "D:\\webcam-mcp\\WebcamMcp.exe",
45 "args": []
46 }
47 }
48}
49```
50
51## Tool
52
53### `capture_webcam_frame`
54
55Делает одиночный снимок с выбранной камеры и сохраняет изображение в workspace.
56
57Обязательный параметр:
58
59- `workspace_path` — путь к workspace.
60
61Опциональные параметры:
62
63- `camera_index` (int, default `0`)
64- `width` / `height` (int)
65- `warmup_frames` (int, default `5`)
66- `image_format` (`jpg` | `png`, default `jpg`)
67- `jpeg_quality` (int `1..100`, default `92`)
68- `output_subdir` (relative path, default `.cascade-ide\\webcam-captures`)
69- `file_name` (без расширения)
70
71Ответ: JSON-строка с `file_path`, `width`, `height`, `camera_index`, `image_format`, `captured_at_utc`.
72
73### `capture_webcam_burst`
74
75Делает серию кадров с камеры в течение заданной длительности.
76
77Обязательный параметр:
78
79- `workspace_path` — путь к workspace.
80
81Опциональные параметры:
82
83- `camera_index` (int, default `0`)
84- `width` / `height` (int)
85- `warmup_frames` (int, default `5`)
86- `duration_sec` (int, default `2`)
87- `target_fps` (int, default `24`)
88- `image_format` (`jpg` | `png`, default `jpg`)
89- `jpeg_quality` (int `1..100`, default `92`)
90- `output_subdir` (relative path, default `.cascade-ide\\webcam-captures`)
91- `burst_name` (имя серии, опционально)
92- `save_video` (bool, default `false`)
93- `video_fps` (int, default `24`)
94- `video_format` (`mp4` | `avi`, default `mp4`)
95
96Ответ: JSON-строка с `burst_dir`, `frames_captured`, `target_fps`, `actual_fps`, `video_path` (если включено), и метаданными кадра.
97
98### `capture_screen_burst`
99
100Делает серию кадров с экрана в течение заданной длительности (вместо веб-камеры).
101
102Обязательный параметр:
103
104- `workspace_path` — путь к workspace.
105
106Опциональные параметры:
107
108- `monitor` (int 1-based слева направо **или** `all`; если указан и `x/y/width/height` не переданы, регион берётся по выбранному монитору; `all` = весь виртуальный экран)
109- `x` / `y` (int, default: начало виртуального экрана)
110- `width` / `height` (int, default: размер виртуального экрана)
111- `duration_sec` (int, default `2`)
112- `target_fps` (int, default `24`)
113- `image_format` (`jpg` | `png`, default `jpg`)
114- `jpeg_quality` (int `1..100`, default `92`)
115- `output_subdir` (relative path, default `.cascade-ide\\screen-captures`)
116- `burst_name` (имя серии, опционально)
117- `save_video` (bool, default `false`)
118- `video_fps` (int, default `24`)
119- `video_format` (`mp4` | `avi`, default `mp4`)
120
121Ответ: JSON-строка с `burst_dir`, `frames_captured`, `target_fps`, `actual_fps`, `capture_region`, `video_path` (если включено) и временем захвата.
122
123### `analyze_burst_sequence`
124
125Анализирует папку burst как последовательность кадров и возвращает структурный отчёт о динамике.
126
127Обязательные параметры:
128
129- `workspace_path` — путь к workspace.
130- `burst_dir` — путь к папке burst (абсолютный или относительный к workspace).
131
132Опциональные параметры:
133
134- `sample_every` (int, default `1`) — анализировать каждый N-й кадр
135- `max_frames` (int, default `3000`) — лимит кадров
136- `scene_cut_threshold` (number `1..255`, default `35`) — порог «резкой смены сцены»
137
138Ответ содержит:
139
140- `avg_motion_score`, `min_motion_score`, `max_motion_score`
141- `scene_cut_count`
142- `top_motion_peaks`
143- `timeline` (переходы между кадрами с оценкой движения)
144- краткий `summary`
145
146### `capture_audio_burst`
147
148Записывает короткий WAV-фрагмент с микрофона по явной команде.
149
150Обязательный параметр:
151
152- `workspace_path` — путь к workspace.
153
154Опциональные параметры:
155
156- `duration_sec` (int, default `10`)
157- `sample_rate` (int, default `16000`)
158- `channels` (int, default `1`)
159- `device_number` (int, default `0`)
160- `output_subdir` (relative path, default `.cascade-ide\\audio-captures`)
161- `file_name` (имя файла без расширения)
162
163Ответ содержит путь к WAV и параметры записи.
164
165### `analyze_audio_sequence`
166
167Анализирует WAV-файл и возвращает таймлайн по окнам громкости.
168
169Обязательные параметры:
170
171- `workspace_path`
172- `audio_path` (абсолютный или относительный к workspace)
173
174Опциональные параметры:
175
176- `frame_ms` (int, default `50`)
177- `silence_threshold_db` (number, default `-45`)
178
179Ответ содержит:
180
181- `duration_sec`, `peak_dbfs`, `avg_rms`, `activity_ratio`, `silence_ratio`
182- `zero_crossings_per_sec`
183- `timeline` и краткий `summary`
184
185### `transcribe_audio_whisper`
186
187Локальная транскрипция аудио через Whisper.net (на базе whisper.cpp runtime).
188
189Поддерживаемые форматы: **WAV** (напрямую); **WebM, MP4, M4A** и др. — через конвертацию в WAV с помощью **FFmpeg** (должен быть в PATH). Без FFmpeg для не-WAV файлов вернётся ошибка с подсказкой.
190
191Обязательные параметры:
192
193- `workspace_path`
194- `audio_path`
195
196Опциональные параметры:
197
198- `model_path` — путь к локальной модели Whisper (`ggml/gguf`)
199- `language` — `auto` (по умолчанию), `ru`, `en`, ...
200- `max_segments` — лимит сегментов в ответе
201
202Если `model_path` не передан, используется переменная окружения:
203
204- `WHISPER_MODEL_PATH`
205
206Ответ содержит:
207
208- `transcript` (полный текст)
209- `segments` (таймкоды + текст)
210
211### `capture_av_burst`
212
213Снимает короткую синхронную A/V-сессию:
214
215- кадры с камеры в `frames/`
216- аудио в `audio.wav`
217- метаданные тайминга в `metadata.json`
218- опционально `video.mp4`
219
220Обязательный параметр:
221
222- `workspace_path`
223
224Опциональные параметры:
225
226- `duration_sec` (int, default `10`)
227- `target_fps` (int, default `24`)
228- `camera_index` (int, default `0`)
229- `audio_device_number` (int, default `0`)
230- `width` / `height` (int)
231- `audio_sample_rate` (int, default `16000`)
232- `audio_channels` (int, default `1`)
233- `warmup_frames` (int, default `5`)
234- `image_format` (`jpg` | `png`)
235- `jpeg_quality` (int `1..100`)
236- `output_subdir` (default `.cascade-ide\\av-captures`)
237- `session_name` (опционально)
238- `save_video` (bool, default `true`)
239- `video_fps` (int, default `24`)
240
241### `capture_screen_av_burst`
242
243Одновременная запись короткой A/V-сессии: кадры с экрана + WAV с микрофона + метаданные синхронизации.
244
245Обязательный параметр:
246
247- `workspace_path` — путь к workspace.
248
249Опциональные параметры:
250
251- `duration_sec` (int, default `10`)
252- `target_fps` (int, default `24`)
253- `audio_device_number` (int, default `0`)
254- `monitor` (int 1-based слева направо **или** `all`; если указан и `x/y/width/height` не переданы, регион берётся по выбранному монитору; `all` = весь виртуальный экран)
255- `x` / `y` (int, default: начало виртуального экрана)
256- `width` / `height` (int, default: размер виртуального экрана)
257- `audio_sample_rate` (int, default `16000`)
258- `audio_channels` (int, default `1`)
259- `image_format` (`jpg` | `png`, default `jpg`)
260- `jpeg_quality` (int `1..100`, default `92`)
261- `output_subdir` (relative path, default `.cascade-ide\\av-captures`)
262- `session_name` (имя сессии, опционально)
263- `save_video` (bool, default `true`)
264- `video_fps` (int, default `24`)
265
266Ответ: JSON-строка с `session_dir`, `frames_dir`, `audio_path`, `video_path`, `metadata_path`, `frame_count`, `actual_fps`, `capture_region`.
267
268### `analyze_av_sequence`
269
270Комплексный отчёт по A/V-сессии: объединяет видео- и аудио-анализ.
271
272Обязательные параметры:
273
274- `workspace_path`
275- `session_dir`
276
277Опциональные параметры:
278
279- `sample_every`, `max_frames`, `scene_cut_threshold` (для видео)
280- `audio_frame_ms`, `silence_threshold_db` (для аудио)
281
282Ответ содержит:
283
284- `av_profile` (интегральный тип сцены)
285- `summary`
286- `video_analysis`
287- `audio_analysis`
288
289## Приватность и безопасность
290
291- Съёмка выполняется **только** при явном вызове tool.
292- Файлы сохраняются только внутри `workspace_path` (попытки выхода наружу блокируются).
293
View only · write via MCP/CIDE