🚀 拡張 Home Assistant MCP
包括的なMCP(Model Context Protocol)サーバーで、Home Assistantとの広範な統合を提供し、AIアシスタントがスマートホームデバイス、自動化、およびシステム管理と対話できるようにします。

🚀 クイックスタート
NPXを使用したクイックスタート
インストール不要! npxで直接実行します:
export HOMEASSISTANT_URL="http://your-ha-ip:8123"
export HOMEASSISTANT_TOKEN="your-long-lived-access-token"
npx @thelord/enhanced-homeassistant-mcp
📖 NPXの完全な使用ガイド →
🚧 Smitheryデプロイメントの状態: 現在、Smitheryのツールスキャン中のタイムアウトを防ぐためにツールの読み込みを最適化しています。詳細はTIMEOUT_RESOLUTION.mdを参照してください。
前提条件
- Node.js 18+
- APIアクセス可能なHome Assistantインスタンス
- Home Assistantの長期アクセストークン
インストール
git clone https://github.com/gilberth/enhanced-homeassistant-mcp.git
cd enhanced-homeassistant-mcp
npm install
cp .env.example .env
設定
.envファイルを編集して、Home Assistantの詳細を入力します:
HOME_ASSISTANT_URL=http://homeassistant.local:8123
HOME_ASSISTANT_TOKEN=your_long_lived_access_token_here
DEBUG=false
REQUEST_TIMEOUT=10000
アクセストークンの取得方法
- ブラウザでHome Assistantを開きます。
- プロファイルに移動します(サイドバーのユーザー名をクリック)。
- 「Long-Lived Access Tokens」までスクロールします。
- 「Create Token」をクリックします。
- 名前を付けて、生成されたトークンをコピーします。
サーバーの実行
オプション1: NPX(推奨 - インストール不要)
npx @thelord/enhanced-homeassistant-mcp
npx @thelord/enhanced-homeassistant-mcp --debug start
npx @thelord/enhanced-homeassistant-mcp inspect
npx @thelord/enhanced-homeassistant-mcp health
オプション2: ローカルインストール
npm run dev
npm run build
npm start
npm run inspector
🐳 Dockerデプロイメント(推奨)
Dockerを使用した簡単で安全なデプロイメント方法:
docker build -t enhanced-homeassistant-mcp .
docker run -d \
--name homeassistant-mcp \
--restart unless-stopped \
-e HOME_ASSISTANT_URL="http://your-hass-ip:8123" \
-e HOME_ASSISTANT_TOKEN="your_long_lived_token" \
enhanced-homeassistant-mcp
📖 Dockerの完全ガイド: 詳細な手順はDOCKER.mdを参照してください。
☁️ Smitheryデプロイメント(クラウド)
Smitheryを通じてクラウドでデプロイされたサーバーを使用するには:
- アクセス: Smithery.ai
- 検索:
@gilberth/enhanced-homeassistant-mcp
- インスタンスを設定:
- Home Assistant URL
- 長期アクセストークン
- オプション(デバッグ、タイムアウト)
import { createSmitheryUrl } from "@smithery/sdk";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
const config = {
homeAssistantToken: "your_token",
homeAssistantUrl: "http://your-hass-ip:8123",
};
const serverUrl = createSmitheryUrl(
"https://server.smithery.ai/@gilberth/enhanced-homeassistant-mcp",
{ config, apiKey: "your-smithery-api-key" }
);
🎯 Smitheryの利点: インフラストラクチャの設定不要、自動スケーリング、グローバルアクセス
✨ 主な機能
📊 基本操作
- ✅ APIステータスの検証
- 📱 エンティティ状態の管理
- 🔄 高度なパラメータを持つサービス呼び出し
- 📝 エンティティの検出と一覧表示
- 🛠️ 設定情報
🤖 自動化と制御
- 📜 自動化の管理(有効/無効/トリガー)
- 🎬 シーンのアクティブ化
- 📜 スクリプトの実行
- 🔘 入力ブール値の制御
- 📅 スケジュールされた自動化の洞察
📊 履歴と監視
- 📈 エンティティの履歴追跡
- 📝 ログブックのエントリー
- ⚠️ エラーログの監視
- 📡 システムイベント
- 🔍 設定の検証
🏠 デバイス制御
- 💡 照明: 明るさ、色、温度の制御
- 🌡️ 空調: 温度、HVACモード、プリセット
- 📺 メディアプレーヤー: 再生/一時停止、音量、メディア選択
- 🏠 カバー: 開閉、位置制御
- 📢 通知: 複数サービスのメッセージング
- 🔍 デバイス検出: タイプ/ドメインでフィルタリング
⚙️ システム管理
- 📊 システム情報とヘルスチェック
- 🏷️ テンプレートレンダリング(Jinja2)
- 🏠 エリアとデバイスの管理
- 🔌 統合の監視
- 🔄 システムの再起動機能
- 📱 スーパーバイザーとアドオンの管理
- 🔍 エンティティの検索と検出
🛠️ 利用可能なツール
基本ツール
| ツール名 |
説明 |
パラメータ |
homeassistant_api_status |
APIの接続性を確認 |
なし |
homeassistant_get_entity_state |
エンティティの状態を取得 |
entity_id |
homeassistant_list_all_entities |
すべてのエンティティを一覧表示 |
domain (オプション) |
homeassistant_call_service |
HAサービスを呼び出す |
domain, service, entity_id, service_data |
homeassistant_list_services |
利用可能なサービスを一覧表示 |
domain (オプション) |
homeassistant_get_config |
HAの設定を取得 |
なし |
自動化ツール
| ツール名 |
説明 |
パラメータ |
homeassistant_list_automations |
すべての自動化を一覧表示 |
なし |
homeassistant_toggle_automation |
自動化を有効/無効に切り替える |
entity_id, action |
homeassistant_trigger_automation |
自動化をトリガーする |
entity_id |
homeassistant_list_scenes |
すべてのシーンを一覧表示 |
なし |
homeassistant_activate_scene |
シーンをアクティブ化する |
entity_id |
homeassistant_list_scripts |
すべてのスクリプトを一覧表示 |
なし |
homeassistant_run_script |
スクリプトを実行する |
entity_id |
homeassistant_list_input_booleans |
入力ブール値を一覧表示 |
なし |
homeassistant_toggle_input_boolean |
入力ブール値を切り替える |
entity_id, action |
履歴ツール
| ツール名 |
説明 |
パラメータ |
homeassistant_get_entity_history |
エンティティの履歴を取得 |
entity_id, start_time, end_time, minimal_response |
homeassistant_get_logbook |
ログブックのエントリーを取得 |
entity_id, start_time, end_time |
homeassistant_get_events |
イベントタイプを一覧表示 |
なし |
homeassistant_get_error_log |
エラーログを取得 |
なし |
homeassistant_check_config |
設定を検証する |
なし |
デバイス制御ツール
| ツール名 |
説明 |
パラメータ |
homeassistant_control_lights |
照明を制御する |
entity_id, action, brightness, color_name, rgb_color, etc. |
homeassistant_control_climate |
空調デバイスを制御する |
entity_id, temperature, hvac_mode, preset_mode, etc. |
homeassistant_control_media_player |
メディアプレーヤーを制御する |
entity_id, action, media_content_id, volume_level, etc. |
homeassistant_control_covers |
カバー/ブラインドを制御する |
entity_id, action, position |
homeassistant_get_devices_by_type |
ドメインでデバイスを一覧表示 |
domain |
homeassistant_send_notification |
通知を送信する |
service, title, message, target |
システムツール
| ツール名 |
説明 |
パラメータ |
homeassistant_system_info |
システム情報を取得 |
なし |
homeassistant_render_template |
Jinja2テンプレートをレンダリングする |
template |
homeassistant_list_areas |
すべてのエリアを一覧表示 |
なし |
homeassistant_list_devices |
すべてのデバイスを一覧表示 |
なし |
homeassistant_list_integrations |
統合を一覧表示 |
なし |
homeassistant_restart_service |
Home Assistantを再起動する |
confirm |
homeassistant_supervisor_info |
スーパーバイザーの情報を取得 |
なし |
homeassistant_list_addons |
アドオンを一覧表示 |
なし |
homeassistant_search_entities |
エンティティを検索する |
search, domain |
💻 使用例
基本的なエンティティ制御
const lightState = await homeassistant_get_entity_state({
entity_id: "light.living_room",
});
const result = await homeassistant_control_lights({
entity_id: "light.living_room",
action: "turn_on",
brightness_pct: 75,
color_name: "warm_white",
});
自動化管理
const automations = await homeassistant_list_automations();
const enabled = await homeassistant_toggle_automation({
entity_id: "automation.morning_routine",
action: "turn_on",
});
const scene = await homeassistant_activate_scene({
entity_id: "scene.movie_time",
});
空調制御
const climate = await homeassistant_control_climate({
entity_id: "climate.living_room",
temperature: 22,
hvac_mode: "heat",
});
システム情報
const systemInfo = await homeassistant_system_info();
const searchResults = await homeassistant_search_entities({
search: "temperature",
domain: "sensor",
});
🎮 クライアントの使用例
使用可能なクライアントの例はディレクトリにあります:
📁 利用可能な例
simple-client.js - 基本的な接続とツールの使用
smithery-client.js - 全機能のデモンストレーション
secure-client.js - 環境ベースの安全な設定
🚀 例を使ったクイックスタート
cd examples
npm install
cp .env.example .env
npm run secure
🔗 Smitheryとの連携: これらの例はSmithery.aiでデプロイされたサーバーと連携できます。
📖 詳細ガイド: 完全なセットアップ手順はを参照してください。
🔧 開発
プロジェクト構造
src/
├── index.ts # メインサーバーファイル
├── utils/
│ └── api.ts # APIユーティリティ
└── tools/
└── homeassistant/
├── basic.ts # 基本的なHA操作
├── automation.ts # 自動化ツール
├── history.ts # 履歴と監視
├── devices.ts # デバイス制御
└── system.ts # システム管理
新しいツールの追加方法
- 適切なツールファイルに新しい関数を作成します。
server.tool()を使用してサーバーに登録します。
- 既存のエラーハンドリングとレスポンスフォーマットのパターンに従います。
- READMEにドキュメントを追加します。
テスト
npm run inspector
curl -H "Authorization: Bearer YOUR_TOKEN" \
"http://localhost:8123/api/states"
🚑 トラブルシューティング
一般的な問題
接続失敗
- HOME_ASSISTANT_URLが正しく、アクセス可能であることを確認します。
- Home Assistantが実行中であることを確認します。
- ファイアウォールが接続をブロックしていないことを確認します。
認証失敗
- 長期アクセストークンが正しいことを確認します。
- トークンが期限切れまたは取り消されていないことを確認します。
- トークンに必要な権限があることを確認します。
エンティティが見つからない
homeassistant_list_all_entitiesを使用して正しいエンティティIDを見つけます。
- エンティティが存在し、Home Assistantで有効になっていることを確認します。
- 正しいドメインプレフィックス(例:
light., sensor.)を確認します。
サービス呼び出し失敗
homeassistant_list_servicesを使用してサービスの可用性を確認します。
- サービスのパラメータがデバイスに適していることを確認します。
- 一部のサービスは特定のエンティティタイプまたは状態を必要とします。
デバッグモード
.envでデバッグログを有効にします:
DEBUG=true
🤝 コントリビューション
- リポジトリをフォークします。
- 機能ブランチを作成します:
git checkout -b feature/amazing-feature
- 変更をコミットします:
git commit -m 'Add amazing feature'
- ブランチにプッシュします:
git push origin feature/amazing-feature
- プルリクエストを開きます。
開発ガイドライン
- 既存のコードスタイルとパターンに従います。
- 適切なTypeScript型を追加します。
- すべてのAPI呼び出しにエラーハンドリングを含めます。
- 新機能のドキュメントを更新します。
- 実際のHome Assistantインスタンスでテストします。
📜 APIリファレンス
このMCPサーバーはHome Assistant REST APIを使用しています。主要なエンドポイント:
/api/ - API情報
/api/states - エンティティの状態
/api/services - 利用可能なサービス
/api/config - 設定
/api/history - 履歴データ
/api/logbook - ログブックのエントリー
📄 ライセンス
このプロジェクトはMITライセンスの下でライセンスされています - 詳細はLICENSEファイルを参照してください。
🙏 謝辞
📞 サポート
問題が発生した場合や質問がある場合は:
- トラブルシューティングセクションを確認します。
- 既存のGitHubイシューを検索します。
- 新しいイシューを作成し、以下の情報を含めます:
- Home Assistantのバージョン
- MCPサーバーのログ
- 再現手順
- 期待される動作と実際の動作
❤️ Home Assistantコミュニティのために作られました