「AIにお願いしたら家の電気がパッとついた!」――そんな未来っぽいことをやってみたくないですか?
今回はOpenAI Agent SDKを使ってSwitchBot APIをMCPサーバ化し、AIエージェントから直接家電を操作できるようにしたので、その方法をシェアします。
コードも動画もあるので、同じように再現できると思いますよ!
どうやってAIが家電を動かすの?
仕組みはシンプルです。
ユーザーが自然言語で指示 → Agent SDKが解釈 → MCPサーバがSwitchBot APIを呼び出す → 家電が動く という流れ。
つまり「電気つけて」と言ったら、裏でAPIに turnOn コマンドを投げてくれる感じです。
まずはこちらの動画をどうぞ!実際にライトが反応する様子が見れます
最初にやること:SwitchBot APIの準備
SwitchBot APIを使うにはトークンとデバイスIDが必要です。

1. トークン発行
SwitchBotアプリのプロフィール → 「開発者向けオプション」から発行できます。
2. デバイスIDの確認
APIで一覧を取って、対象デバイスのIDをゲットします。
ちなみに、自分でHTTPリクエストを書くのはちょっと面倒…という人のために、SwitchBotが公式で SwitchBot API SDK を公開しています。
このSDKを使えば、デバイス一覧や操作をPythonコードからサクッと呼び出せるので、ゼロからリクエスト処理を書くよりずっと楽です。
エージェントを用意しよう
次にAIエージェントを作ります。ポイントはSwitchBot API SDKをラップしてMCPサーバを作成し、そのMCPサーバとつなぐこと。
下のサンプルでは、エージェント名や初期プロンプトを設定して、MCPサーバを登録しています。
from agents import Agent
from agents.mcp import MCPServer
from agents.models.openai_provider import OpenAIProvider
from ..config import Settings
DEFAULT_AGENT_INSTRUCTIONS = """
あなたはSwitchBot Agentで、SwitchBotデバイスを制御したり、それらについての質問に答えたりする役立つアシスタントです。
常に簡潔で実行可能な応答を提供し、利用可能な場合はデバイスの状態を参照してください。
""".strip()
def create_agent(
settings: Settings,
provider: OpenAIProvider,
mcp_servers: list[MCPServer],
) -> Agent:
instructions = settings.agent_instructions.strip() if settings.agent_instructions else DEFAULT_AGENT_INSTRUCTIONS
name = settings.agent_name or "SwitchBot Agent"
model = provider.get_model(settings.default_model)
return Agent(
name=name,
instructions=instructions,
model=model,
mcp_servers=mcp_servers,
)これでエージェントの箱は完成。
次は中身=SwitchBotの操作ツールを入れていきます。
SwitchBot用のMCPツールをつくる
MCPサーバ側には、SwitchBot APIを呼び出すツールを用意します。
今回は3つだけ:デバイス一覧、状態確認、制御コマンド。これだけで十分遊べます。
@server.tool()
async def list_devices() -> dict[str, Any]:
"""Return all SwitchBot devices accessible to the API token."""
return await _require_client().list_devices()
@server.tool()
async def get_device_status(device_id: str) -> dict[str, Any]:
"""Fetch the latest status for a device."""
return await _require_client().get_device_status(device_id)
@server.tool()
async def control_device(
device_id: str,
command: str,
parameter: str = "default",
command_type: str = "command",
) -> dict[str, Any]:
"""Send a control command to a device."""
normalized_command = _normalize_command(command)
normalized_command_type = _normalize_command_type(command_type)
return await _require_client().control_device(
device_id=device_id,
command=normalized_command,
parameter=parameter,
command_type=normalized_command_type,
)例えば「リビングの電気をつけて」と入力したら、エージェントがこの control_device を呼び出して turnOn を実行してくれるイメージです。
実際に動かしてみた!
さあ、エージェントに「電気つけて」とお願いしてみましょう。
裏で control_device が走って、SwitchBot APIがライトに「turnOn」コマンドを送ります。
レスポンス例はこんな感じ
{
"statusCode": 100,
"body": {
"command": "turnOn",
"message": "success"
}
}
そしてライトがパッと点灯!これ、めちゃくちゃテンション上がります。
応用アイデアいろいろ
この仕組みを作っちゃえば、あとは何でも応用できます。
– エアコンをオンオフ
– カーテンを開け閉め
– 「おはよう」で一気に家中のデバイスを操作
声やスケジュールと組み合わせれば、ほんとに「AI執事」が完成しそうです。
まとめ
OpenAI Agent SDKとSwitchBot APIをMCPサーバ経由でつなげば、AIに自然に話しかけるだけで家電を動かせます。
コードはそんなに複雑じゃないので、手元のSwitchBot環境でぜひ試してみてください。
一度動くと、スマートホームの楽しさが一気に広がりますよ!


コメント