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: 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 .

オプションのエクストラは cameramcpservertest です。基本インストールではコアライブラリを軽量に保ちます。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 として含まれています。

プロトコルソース

A
license - permissive license
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

View all related MCP servers

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.

View all MCP Connectors

Latest Blog Posts

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