anova-oven-mcp
Библиотека Anova Precision Oven + MCP-сервер
Этот проект содержит два намеренно раздельных уровня:
anova_oven: асинхронная Python-библиотека для аутентификации Anova, обнаружения устройств, температур, управления приготовлением, этапов и кадров камеры WebRTC APO 2.0.anova_oven_mcp: тонкий адаптер MCP 2.x поверх этой библиотеки.
Разделение сохраняет код устройства пригодным для повторного использования в будущем сервисе на Raspberry Pi или расширении, не делая MCP основной зависимостью.
Возможности
Захват одного JPEG-кадра камеры или потребление кадров как асинхронного итератора.
Чтение четырёх физических датчиков приготовления: сухой верх, сухой низ, влажный термометр и щуп для еды. Активное значение сухого контроля возвращается отдельно.
Запуск и остановка приготовления. Таймерные этапы поддерживают от 1 секунды до максимальных 359 940 секунд (99 ч 59 мин); пропущенная длительность означает работу до остановки.
Использование этапов, завершаемых по щупу, и последовательных, таймерных, с предварительным нагревом или ручным продвижением этапов.
Замена списка этапов активного приготовления.
Возврат времени суток в UTC как часов, минут и секунд.
Загрузка учётных данных из связки ключей macOS, приватного файла с режимом 0600 или внедрённого секрета окружения.
Related MCP server: Mealie MCP Server
Важные примечания о статусе и безопасности
Команды приготовления физически активируют прибор. Инструменты MCP, которые запускают или изменяют
приготовление, требуют acknowledge_physical_action=true и проверяют задокументированные пределы
температуры, таймера, щупа, нагревательного элемента, пара, вентилятора и решёток духовки.
Путь камеры — это приватный протокол мобильного приложения, не входящий в задокументированную поверхность команд Personal Access Token от Anova. В настоящее время он требует:
Anova Precision Oven 2.0
активное приготовление
совместимую/текущую прошивку
подходящую подписку Anova
Форма команды или ответа для живого видео может измениться с будущим релизом приложения/бэкенда Anova. Подписанные URL для воспроизведения хранятся внутри и никогда не возвращаются библиотекой или MCP-сервером.
См. VALIDATION.md для завершённых проверок датчиков, приготовления, камеры и безопасности после тестов.
Установка
Требуется Python 3.11 или новее. Рекомендуется Python 3.12.
python3.12 -m venv .venv
source .venv/bin/activate
python -m pip install -e ".[server]"Для использования библиотеки без MCP или видео:
python -m pip install -e .Дополнительные опции: camera, mcp, server и test. Базовая установка сохраняет
основную библиотеку лёгкой; команда anova-oven-mcp укажет вам установить
дополнение mcp или server, если его необязательный рантайм отсутствует.
Учётные данные
Порядок поиска учётных данных по умолчанию:
ANOVA_FIREBASE_REFRESH_TOKENфайл, указанный в
ANOVA_FIREBASE_REFRESH_TOKEN_FILEэлемент связки ключей macOS с типом "generic-password" со следующими параметрами:
сервис
com.codex.anova-camera.firebase-refresh-tokenаккаунт
anova-oven-mcp
Фиксированная метка аккаунта в связке ключей предотвращает случайный выбор старого учётного данного под тем же сервисом. Чтение связки ключей и ротация токенов используют напрямую фреймворк Security от Apple, поэтому секрет не попадает в аргументы процесса.
Не помещайте токен обновления в исходный код, конфигурацию MCP, историю оболочки или журналы. Для Pi рекомендуется адаптер через менеджер секретов хоста или файл учётных данных с режимом 0600, принадлежащий root:
chmod 600 /run/credentials/anova-refresh-token
export ANOVA_FIREBASE_REFRESH_TOKEN_FILE=/run/credentials/anova-refresh-tokenЕсли подключено более одной духовки, установите ANOVA_OVEN_ID в окружении процесса.
Инструмент списка устройств MCP намеренно возвращает только сокращённые ID; настраивайте полный ID
вне контекста, видимого модели.
MCP-сервер
Локальный стандарт — stdio, поэтому он не открывает слушающий порт:
.venv/bin/anova-oven-mcpТипичная конфигурация MCP для рабочего стола выглядит так:
{
"mcpServers": {
"anova-oven": {
"command": "/absolute/path/to/anova-oven-mcp/.venv/bin/anova-oven-mcp"
}
}
}Доступные инструменты:
Инструмент | Назначение |
| Список подключённых духовок с сокращёнными ID |
| Чтение всех четырёх физических датчиков и значения сухого контроля |
| Возврат одного изображения MCP |
| Запуск одноэтапного таймерного, щупового или безлимитного приготовления |
| Запуск многоэтапного приготовления |
| Замена этапов в активном приготовлении |
| Переход к настроенному UUID этапа |
| Остановка приготовления и закрытие живого видео |
| Возврат часов, минут и секунд в UTC |
Claude Code и Claude Desktop
Включённый конфигуратор может зарегистрировать этот локальный stdio-сервер в Claude Code, Claude Desktop или в обоих. Он не копирует учётные данные Anova ни в один из клиентов.
Сначала просмотрите изменения:
python scripts/configure_claude.py --dry-runНастройте оба клиента (Claude Code по умолчанию использует пользовательскую область):
python scripts/configure_claude.py --target bothПолезные альтернативы:
# One client only
python scripts/configure_claude.py --target code
python scripts/configure_claude.py --target desktop
# Update an existing same-named Claude Code entry
python scripts/configure_claude.py --target code --replace
# Remove the entry from both clients
python scripts/configure_claude.py --removeКонфигурация Claude Desktop объединяется атомарно, сохраняя другие серверы и создавая
резервную копию с меткой времени и режимом 0600. После этого закройте и снова откройте Claude Desktop.
Для распространения за пределами локальной копии текущий предпочтительный формат Anthropic —
устанавливаемый MCP Bundle (.mcpb).
Для будущего сервиса на Pi тот же адаптер может использовать Streamable HTTP:
anova-oven-mcp --transport streamable-httpЭто привязывается к 127.0.0.1:8766. Не-loopback привязка требует --allow-lan; не открывайте
его, пока не будет настроен аутентифицированный обратный прокси или уровень авторизации MCP.
Пример библиотеки
import asyncio
from anova_oven import CookPlan, CookingStage, PrecisionOvenClient
async def main() -> None:
async with PrecisionOvenClient() as oven:
temperatures = await oven.get_temperatures()
print(temperatures.as_dict())
plan = CookPlan(
title="Two-stage example",
stages=(
CookingStage(
title="Warm",
target_celsius=60,
duration_seconds=600,
),
CookingStage(
title="Finish",
target_celsius=180,
duration_seconds=300,
),
),
)
# This physically starts the oven:
receipt = await oven.start_cook(plan)
print(receipt.stage_ids)
try:
frame = await oven.capture_frame(timeout=60)
with open("oven-frame.jpg", "wb") as output:
output.write(frame.jpeg_bytes)
finally:
await oven.stop_cook()
asyncio.run(main())Для повторяющихся кадров используйте oven.frames() как асинхронный итератор. MCP намеренно
предоставляет одноразовые изображения, потому что бесконечная потоковая передача вызовов инструментов
плохо переносится между хостами.
Проверка
python -m pip install -e ".[server,test]"
ruff check .
mypy src
pytest
python -m pip checkПроверка учётной записи только для чтения:
python scripts/live_read_only.pyЗащищённый смоук-тест камеры запускает трёхминутное приготовление при минимальной температуре, ожидает независимое событие состояния, подтверждающее это приготовление, захватывает один кадр и выполняет физическую остановку перед очисткой медиа с максимальными усилиями:
python scripts/live_camera_smoke.py --acknowledge-empty-oven-and-start-cookЭтот тест успешно прошёл на APO 2.0. Захваченный проверочный кадр включён как oven-camera-smoke.jpg.
Источники протокола
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables interaction with 3D printer management systems through an MCP server, supporting STL file manipulation, slicing, and control of printers like OctoPrint, Klipper, Duet, and more.103225GPL 2.0
- AlicenseNot gradedqualityBmaintenanceEnables interaction with Mealie for managing recipes, meal plans, shopping lists, foods, units, tags, categories, and more through MCP.MIT
- AlicenseNot gradedqualityBmaintenanceMCP server for interacting with Fireboard BBQ temperature monitoring. Enables querying devices, live probe temperatures, Drive fan controller status, and historical cook sessions.MIT
- FlicenseNot gradedqualityBmaintenanceEnables control of external Home Assistant devices via an MCP control layer and frontend system page.
Related MCP Connectors
An authenticated remote MCP server for user-owned devices and one-shot capability invocation.
MCP server wrapping the Tesla Fleet API and TeslaMate API
Tailscale device, route, DNS, key, user, and ACL management over MCP and CLI.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/ampdot-io/anova-oven-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server