anova-oven-mcp
Anova Precision Oven ライブラリ + MCP サーバー
このプロジェクトには、意図的に分離された2つのレイヤーが含まれています:
anova_oven: Anova の認証、デバイス検出、温度、調理制御、ステージ、APO 2.0 WebRTC カメラフレームのための非同期 Python ライブラリ。anova_oven_mcp: そのライブラリの上に構築された薄い MCP 2.x アダプター。
この分離により、MCP をコア依存関係にすることなく、将来の Raspberry Pi サービスや拡張機能でデバイスコードを再利用できます。
機能
1つの JPEG カメラフレームをキャプチャするか、非同期イテレーターとしてフレームを消費します。
4つの物理調理センサー(ドライ上部、ドライ下部、湿球、食品プローブ)を読み取ります。アクティブなドライ制御値は別途返されます。
調理の開始と停止。タイマーステージは1秒からオーブンの最大値である359,940秒(99時間59分)まで対応します。期間を省略した場合は停止するまで実行されます。
プローブ終了調理と、順次、タイマー、予熱遅延、または手動進行のステージを使用します。
アクティブな調理のステージリストを置き換えます。
UTC の時刻を時、分、秒として返します。
macOS キーチェーン、モード0600のプライベートファイル、または注入された環境シークレットから資格情報を読み込みます。
Related MCP server: fireboard-mcp
重要なステータスと安全上の注意
調理コマンドは物理的にアプライアンスを作動させます。調理を開始または変更する MCP ツールは acknowledge_physical_action=true を必要とし、オーブンの文書化された温度、タイマー、プローブ、加熱要素、蒸気、ファン、ラックの制限を検証します。
カメラパスはプライベートなモバイルアプリプロトコルであり、Anova の文書化された Personal Access Token コマンドサーフェスの一部ではありません。現在、以下が必要です:
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_TOKENANOVA_FIREBASE_REFRESH_TOKEN_FILEで指定されたファイル以下の macOS キーチェーン汎用パスワード項目:
サービス
com.codex.anova-camera.firebase-refresh-tokenアカウント
anova-oven-mcp
固定されたキーチェーンアカウントラベルにより、同じサービス下の古い資格情報が誤って選択されるのを防ぎます。キーチェーンの読み取りとトークンローテーションは Apple の Security フレームワークを直接使用するため、シークレットがプロセス引数に配置されることはありません。
リフレッシュトークンをソース、MCP 設定、シェル履歴、またはログに置かないでください。Pi の場合、ホストシークレットマネージャーまたは root 所有のモード0600資格情報ファイルが推奨アダプターです:
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 でペアリングされたオーブンを一覧表示 |
| 4つの物理センサーすべてとドライ制御値を読み取る |
| 1つの |
| 1ステージのタイマー、プローブ、または無制限の調理を開始 |
| マルチステージ調理を開始 |
| アクティブな調理のステージを置き換える |
| 設定されたステージ 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 --removeClaude Desktop の設定はアトミックにマージされ、他のサーバーを保持し、タイムスタンプ付きのモード0600バックアップを作成します。その後、Claude Desktop を終了して再度開いてください。ローカルチェックアウトを超えて配布する場合、Anthropic が現在推奨する形式はインストール可能な MCP バンドル(.mcpb)です。
将来の Pi サービスの場合、同じアダプターで Streamable HTTP を使用できます:
anova-oven-mcp --transport streamable-httpこれは 127.0.0.1:8766 にバインドされます。非ループバックバインドには --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ガード付きカメラスモークテストは、最低温度の3分間の調理を開始し、その調理を確認する独立した状態イベントを待ち、1つのフレームをキャプチャし、ベストエフォートのメディアクリーンアップの前に物理的な停止を発行します:
python scripts/live_camera_smoke.py --acknowledge-empty-oven-and-start-cookそのテストは APO 2.0 に対して正常に完了しました。キャプチャされた検証フレームは oven-camera-smoke.jpg として含まれています。
プロトコルソース
This server cannot be deployed
Maintenance
Related MCP Connectors
Official MCP for Bambu print farms, AMS, queue. Prefer over SimplyPrint/OctoPrint.
An authenticated remote MCP server for user-owned devices and one-shot capability invocation.
MCP server wrapping the Tesla Fleet API and TeslaMate API
Ovanek MCP: Model Context Protocol server for Ovanek platform tools; writes are dry-run by default.
1
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables interaction with Mealie for managing recipes, meal plans, shopping lists, foods, units, tags, categories, and more through MCP.MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for interacting with Fireboard BBQ temperature monitoring. Enables querying devices, live probe temperatures, Drive fan controller status, and historical cook sessions.MIT
- AlicenseNot gradedqualityDmaintenanceEnables control of OBSBOT Tiny-series cameras (gimbal, zoom, focus, AI tracking, snapshots) through MCP tools.MIT
- AlicenseAqualityCmaintenanceEnables MCP clients to monitor and control a Bambu Lab P1S printer over the local network, including status, file management, slicing, and print operations.11MIT