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: Mealie MCP Server
重要なステータスと安全上の注意
調理コマンドは物理的にアプライアンスを作動させます。調理を開始または変更する 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 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