Skip to main content
Glama
ampdot-io

anova-oven-mcp

by ampdot-io

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 エクストラのインストールを案内します。

資格情報

デフォルトの資格情報検索順序は次のとおりです:

  1. ANOVA_FIREBASE_REFRESH_TOKEN

  2. ANOVA_FIREBASE_REFRESH_TOKEN_FILE で指定されたファイル

  3. 以下の 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"
    }
  }
}

利用可能なツール:

ツール

目的

oven_list_devices

マスクされた ID でペアリングされたオーブンを一覧表示

oven_get_temperatures

4つの物理センサーすべてとドライ制御値を読み取る

oven_get_camera_frame

1つの image/jpeg MCP イメージを返す

oven_start_cook

1ステージのタイマー、プローブ、または無制限の調理を開始

oven_start_staged_cook

マルチステージ調理を開始

oven_configure_stages

アクティブな調理のステージを置き換える

oven_start_stage

設定されたステージ UUID に進む

oven_stop_cook

調理を停止し、ライブビデオを閉じる

get_utc_time

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 バンドル(.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 として含まれています。

プロトコルソース

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server for interacting with Fireboard BBQ temperature monitoring. Enables querying devices, live probe temperatures, Drive fan controller status, and historical cook sessions.
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables MCP clients to monitor and control a Bambu Lab P1S printer over the local network, including status, file management, slicing, and print operations.
    11
    MIT