<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Philipp Schweizer</title>
    <description>The latest articles on DEV Community by Philipp Schweizer (@raspberry_tips).</description>
    <link>https://dev.to/raspberry_tips</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3897586%2Fa3172889-de04-48b7-9781-0c24a7ee1f8f.png</url>
      <title>DEV Community: Philipp Schweizer</title>
      <link>https://dev.to/raspberry_tips</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/raspberry_tips"/>
    <language>en</language>
    <item>
      <title>Your SD Card Dies Silently – Monitor NVMe SSD Health in Home Assistant</title>
      <dc:creator>Philipp Schweizer</dc:creator>
      <pubDate>Tue, 28 Jul 2026 15:24:21 +0000</pubDate>
      <link>https://dev.to/raspberry_tips/your-sd-card-dies-silently-monitor-nvme-ssd-health-in-home-assistant-79d</link>
      <guid>https://dev.to/raspberry_tips/your-sd-card-dies-silently-monitor-nvme-ssd-health-in-home-assistant-79d</guid>
      <description>&lt;p&gt;A microSD card dies silently: it works - until suddenly it doesn't, usually without any warning. That's exactly why switching to an NVMe SSD on the Raspberry Pi 5 isn't just faster, but also &lt;strong&gt;safer&lt;/strong&gt;. An NVMe drive reveals its health through &lt;strong&gt;SMART&lt;/strong&gt; - wear, temperature, data written, errors. In this guide I'll show you how to pull those values straight into &lt;strong&gt;Home Assistant&lt;/strong&gt; and get an automatic warning before your SSD gives out. And because there wasn't a simple solution for this yet, I built a small &lt;strong&gt;Home Assistant add-on&lt;/strong&gt; that does exactly that - one click, and the sensors show up on their own.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In short:&lt;/strong&gt; On your Raspberry Pi 5 running Home Assistant OS you install the free &lt;em&gt;"NVMe SMART Monitor"&lt;/em&gt; add-on from the raspberry.tips repository. It reads your NVMe SSD's SMART values (wear, temperature, data written, spare, errors) and adds them automatically as sensors in Home Assistant via MQTT discovery. A single automation then warns you before the SSD fails.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is SMART on an NVMe SSD?&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;SMART (Self-Monitoring, Analysis and Reporting Technology) is a self-monitoring system built into modern SSDs. Over the NVMe protocol the drive reports metrics such as &lt;strong&gt;wear&lt;/strong&gt; (&lt;code&gt;percentage_used&lt;/code&gt;), the &lt;strong&gt;data already written&lt;/strong&gt; (TBW), the available &lt;strong&gt;spare&lt;/strong&gt;, the &lt;strong&gt;temperature&lt;/strong&gt; and error counters. Unlike a microSD card, which offers practically no readable health data, on an NVMe you can &lt;em&gt;see the wear coming&lt;/em&gt; and react in time.&lt;/p&gt;

&lt;h2&gt;
  
  
  The key points
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SD cards fail without warning&lt;/strong&gt;, NVMe SSDs don't: via SMART you see wear, spare and TBW - and can swap in time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Our Home Assistant add-on&lt;/strong&gt; reads the SMART values and creates the &lt;strong&gt;sensors automatically&lt;/strong&gt; via MQTT discovery - no YAML fiddling.&lt;/li&gt;
&lt;li&gt;You get a device with ~10 sensors (wear, temperature, TBW, spare, errors ...) plus a &lt;strong&gt;problem sensor&lt;/strong&gt; for automations.&lt;/li&gt;
&lt;li&gt;Requirements: &lt;strong&gt;Home Assistant OS&lt;/strong&gt; with an NVMe SSD and the &lt;strong&gt;Mosquitto broker&lt;/strong&gt; add-on.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Requirements
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Home Assistant OS (HAOS)&lt;/strong&gt; on a Raspberry Pi 5 with an &lt;strong&gt;NVMe SSD&lt;/strong&gt; (the common case). Our guide &lt;a href="https://raspberry.tips/en/raspberrypi-tutorials/raspberry-pi-5-without-sd-card-nvme-usb-c" rel="noopener noreferrer"&gt;Set up the Raspberry Pi 5 without an SD card&lt;/a&gt; shows how to get HAOS onto the NVMe. The add-on also runs on x86 HA servers with an NVMe.&lt;/li&gt;
&lt;li&gt;The official &lt;strong&gt;"Mosquitto broker"&lt;/strong&gt; add-on - the sensor data travels over it (MQTT).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;💡 No NVMe on your Pi yet?&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;Then the switch from the SD card pays off twice - more speed &lt;em&gt;and&lt;/em&gt; the health monitoring shown here. Which &lt;a href="https://raspberry.tips/en/raspberrypi-tutorials/nvme-ssd-raspberry-pi-5-buying-guide" rel="noopener noreferrer"&gt;NVMe SSD and which M.2 HAT&lt;/a&gt; suit your Pi 5 is covered in our buying guide. And how to &lt;a href="https://raspberry.tips/en/raspberrypi-tutorials/raspberry-pi-5-without-sd-card-nvme-usb-c" rel="noopener noreferrer"&gt;flash HAOS onto the NVMe without any SD card at all&lt;/a&gt; is laid out step by step in our tutorial.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Install the MQTT broker
&lt;/h2&gt;

&lt;p&gt;The add-on reports the SMART values to Home Assistant over MQTT, so you need an MQTT broker. In Home Assistant go to &lt;strong&gt;Settings → Add-ons&lt;/strong&gt; (the add-on store), search for &lt;strong&gt;"Mosquitto broker"&lt;/strong&gt;, install it and &lt;strong&gt;start&lt;/strong&gt; it. Home Assistant then sets up the MQTT integration automatically.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://cdn.raspberry.tips/2026/07/home-assistant-mosquitto-broker-1.jpg" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fphvkoquluw22eiz633gk.jpg" alt="Installing the Mosquitto broker add-on in Home Assistant" width="300" height="167"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Install and start the official Mosquitto broker add-on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Add the raspberry.tips repository
&lt;/h2&gt;

&lt;p&gt;Now we add the add-on repository. In &lt;strong&gt;Settings → Add-ons&lt;/strong&gt; click the &lt;strong&gt;⋮ → Repositories&lt;/strong&gt; menu in the top right and enter this URL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://github.com/raspberry-tips/ha-addon-nvme-smart
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://cdn.raspberry.tips/2026/07/home-assistant-nvme-smart-repository-1.jpg" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8mc5sryjbiqhljm07pff.jpg" alt="Adding the NVMe SMART repository in Home Assistant" width="300" height="167"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Add the raspberry.tips repository by URL.&lt;/p&gt;

&lt;p&gt;After adding it, a new section &lt;strong&gt;"raspberry.tips Home Assistant Add-ons"&lt;/strong&gt; with the &lt;strong&gt;NVMe SMART Monitor&lt;/strong&gt; appears in the store.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://cdn.raspberry.tips/2026/07/home-assistant-nvme-smart-app-store-1.jpg" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpi04fjuhz4mgxzzfe9wy.jpg" alt="NVMe SMART Monitor in the Home Assistant add-on store" width="300" height="167"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The "NVMe SMART Monitor" shows up in the raspberry.tips section of the store.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Install and start the add-on
&lt;/h2&gt;

&lt;p&gt;Open the &lt;strong&gt;NVMe SMART Monitor&lt;/strong&gt; and click &lt;strong&gt;Install&lt;/strong&gt;. The container is built locally (takes 2-4 minutes).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://cdn.raspberry.tips/2026/07/home-assistant-nvme-smart-installieren-1.jpg" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fotenkixnprg6kh5k7vfu.jpg" alt="Installing the NVMe SMART Monitor add-on" width="300" height="165"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Install the add-on - the container is built locally (2-4 min).&lt;/p&gt;

&lt;p&gt;Then &lt;strong&gt;start&lt;/strong&gt; the add-on. I recommend enabling "Start on boot" and "Watchdog" so the monitoring always runs. The default options (device &lt;code&gt;/dev/nvme0&lt;/code&gt;, interval 300 s, warning thresholds) work for most people - you'll find them on the &lt;strong&gt;Configuration&lt;/strong&gt; tab.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://cdn.raspberry.tips/2026/07/home-assistant-nvme-smart-starten-1.jpg" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe3w4nolfbcw0xwx7v7ya.jpg" alt="Starting the NVMe SMART Monitor add-on" width="300" height="166"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Start the add-on - I recommend enabling "Start on boot" and "Watchdog".&lt;/p&gt;

&lt;p&gt;To check that everything runs, look at the &lt;strong&gt;Log&lt;/strong&gt; tab: you should see lines like &lt;code&gt;MQTT broker found&lt;/code&gt;, &lt;code&gt;Device detected: ...&lt;/code&gt; and &lt;code&gt;State published: ...&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://cdn.raspberry.tips/2026/07/home-assistant-nvme-smart-protokoll-1.jpg" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpuaonk9bjdatfj6o3nnn.jpg" alt="Log of the NVMe SMART Monitor add-on with MQTT discovery" width="300" height="167"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the log: broker found, device detected, values published.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;💡 How it works behind the scenes:&lt;/strong&gt; The add-on reads your SSD's health values via &lt;a href="https://github.com/linux-nvme/nvme-cli" rel="noopener noreferrer"&gt;&lt;code&gt;nvme smart-log&lt;/code&gt;&lt;/a&gt;, converts them (e.g. temperature to °C, TBW to GB) and publishes them through &lt;a href="https://www.home-assistant.io/integrations/mqtt/#mqtt-discovery" rel="noopener noreferrer"&gt;&lt;strong&gt;MQTT discovery&lt;/strong&gt;&lt;/a&gt;. Home Assistant detects the sensors automatically - you don't have to configure anything by hand.&lt;/p&gt;

&lt;h2&gt;
  
  
  The sensors in Home Assistant
&lt;/h2&gt;

&lt;p&gt;A few seconds after starting, a new device appears under &lt;strong&gt;Settings → Devices &amp;amp; Services&lt;/strong&gt; in the MQTT integration - named after your SSD model (an Intenso in my case). Click it and you'll see all the health sensors at a glance.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://cdn.raspberry.tips/2026/07/home-assistant-nvme-ssd-sensoren-1.jpg" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2ef9d81fn35zwo8hqqn0.jpg" alt="NVMe SSD sensors (wear, temperature, TBW) in Home Assistant" width="300" height="167"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The "NVMe SSD" device with all its health sensors - created automatically.&lt;/p&gt;

&lt;p&gt;These are the most important values and how to read them:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Sensor&lt;/th&gt;
&lt;th&gt;Meaning / warning sign&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;NVMe wear&lt;/strong&gt; (&lt;code&gt;percentage_used&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;The lifespan bar. 0% = as new, 100% = calculated end of life. Rises slowly over years.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;NVMe spare&lt;/strong&gt; (&lt;code&gt;available_spare&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Spare blocks. If it drops toward the threshold (often 10%), a swap is due.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;NVMe data written&lt;/strong&gt; (TBW)&lt;/td&gt;
&lt;td&gt;Total data written - comparable to the manufacturer's endurance (TBW rating).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;NVMe temperature&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Operating temperature. If it stays above 70 °C, add cooling.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;NVMe media errors&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Should always be 0. If it rises, that's a serious warning sign.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;NVMe problem&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Binary sensor: "on" as soon as a critical state occurs or a warning threshold is crossed - ideal for automations.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;🌡️ NVMe too hot? A low-profile heatsink helps&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;If the temperature sensor stays high (rule of thumb: above 70&amp;nbsp;°C), a small M.2 heatsink is worth it. Important inside a Pi 5 case: keep it &lt;strong&gt;as flat as possible&lt;/strong&gt;, otherwise the lid won't close - measure the free height above the SSD first.&lt;/p&gt;

&lt;h3&gt;
  
  
  TBW: how long will my SSD last?
&lt;/h3&gt;

&lt;p&gt;The "NVMe data written" sensor shows the amount of data written so far. Compare it with your SSD's &lt;strong&gt;TBW rating&lt;/strong&gt; (Terabytes Written, listed in the datasheet). My Intenso Premium 250 GB, for example, is rated at &lt;strong&gt;150 TBW&lt;/strong&gt; - and after several weeks of continuous HAOS operation just 56&amp;nbsp;GB written and 0% wear showed on the clock. Extrapolated, an SSD like that lasts, at 20&amp;nbsp;GB of writes per day, a calculated 20+ years. Together with the wear percentage you get two independent views of the remaining life - something an SD card simply can't give you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Dashboard with a wear gauge
&lt;/h2&gt;

&lt;p&gt;Now let's make the values visible. Open your dashboard, go to &lt;strong&gt;Edit → Add card → Manual&lt;/strong&gt; and paste this card. The add-on assigns fixed &lt;code&gt;entity&lt;/code&gt; IDs (e.g. &lt;code&gt;sensor.nvme_percentage_used&lt;/code&gt;), so the YAML works by copy-paste - if you see different IDs, you'll find them on the device page:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;grid&lt;/span&gt;
&lt;span class="na"&gt;columns&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;
&lt;span class="na"&gt;cards&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;gauge&lt;/span&gt;
    &lt;span class="na"&gt;entity&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;sensor.nvme_percentage_used&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Wear&lt;/span&gt;
    &lt;span class="na"&gt;min&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
    &lt;span class="na"&gt;max&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100&lt;/span&gt;
    &lt;span class="na"&gt;needle&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
    &lt;span class="na"&gt;severity&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;green&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;0&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;yellow&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;70&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;red&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;90&lt;/span&gt;&lt;span class="pi"&gt;}&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;gauge&lt;/span&gt;
    &lt;span class="na"&gt;entity&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;sensor.nvme_temperature&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Temperature&lt;/span&gt;
    &lt;span class="na"&gt;min&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;20&lt;/span&gt;
    &lt;span class="na"&gt;max&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;80&lt;/span&gt;
    &lt;span class="na"&gt;needle&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
    &lt;span class="na"&gt;severity&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;green&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;0&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;yellow&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;60&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;red&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;70&lt;/span&gt;&lt;span class="pi"&gt;}&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;gauge&lt;/span&gt;
    &lt;span class="na"&gt;entity&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;sensor.nvme_available_spare&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Spare&lt;/span&gt;
    &lt;span class="na"&gt;min&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
    &lt;span class="na"&gt;max&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;entity&lt;/span&gt;
    &lt;span class="na"&gt;entity&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;sensor.nvme_data_written&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Written (TBW)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://cdn.raspberry.tips/2026/07/home-assistant-nvme-ssd-dashboard-1.jpg" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fndjo2615lwert4zq3g25.jpg" alt="Home Assistant dashboard with an NVMe SSD wear gauge" width="300" height="167"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Dashboard with a wear gauge and all the NVMe sensors.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Automatic alert
&lt;/h2&gt;

&lt;p&gt;Here's the real payoff: get notified automatically the moment something is wrong. For that we use the &lt;strong&gt;problem sensor&lt;/strong&gt;. Go to &lt;strong&gt;Settings → Automations &amp;amp; Scenes → Create automation → Edit in YAML&lt;/strong&gt; and paste:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;alias&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;NVMe SSD warning&lt;/span&gt;
&lt;span class="na"&gt;triggers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;trigger&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;state&lt;/span&gt;
    &lt;span class="na"&gt;entity_id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;binary_sensor.nvme_problem&lt;/span&gt;
    &lt;span class="na"&gt;to&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;on"&lt;/span&gt;
&lt;span class="na"&gt;actions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;action&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;notify.notify&lt;/span&gt;
    &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;⚠️&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;NVMe&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;SSD&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;warning"&lt;/span&gt;
      &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;&amp;gt;-&lt;/span&gt;
        &lt;span class="s"&gt;The NVMe reports a problem - wear {{ states('sensor.nvme_percentage_used') }} %,&lt;/span&gt;
        &lt;span class="s"&gt;temp {{ states('sensor.nvme_temperature') }} °C, spare {{ states('sensor.nvme_available_spare') }} %.&lt;/span&gt;
&lt;span class="na"&gt;mode&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;single&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://cdn.raspberry.tips/2026/07/home-assistant-nvme-automation-erstellen-1.jpg" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcsg3yzymlkrjhn3cspkh.jpg" alt="Creating an automation in Home Assistant for the NVMe warning" width="300" height="166"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Create a new automation from scratch - the alert uses the problem sensor.&lt;/p&gt;

&lt;p&gt;From now on you get a push message on your phone as soon as your SSD turns critical - long before data loss is a risk.&lt;/p&gt;

&lt;h2&gt;
  
  
  Limits &amp;amp; honest notes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SMART is not a crystal ball:&lt;/strong&gt; it mostly sees &lt;em&gt;gradual&lt;/em&gt; wear coming (spare, TBW, percentage_used). Sudden total electronic failures can't always be predicted, even by SMART - a backup stays mandatory.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cheap DRAM-less SSDs&lt;/strong&gt; sometimes don't report every field cleanly (e.g. &lt;code&gt;power_on_hours&lt;/code&gt; stays at 0). That's normal and not a defect.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;microSD cards&lt;/strong&gt; on consumer models offer practically no readable SMART - which is exactly why the NVMe is so superior here.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;With a few clicks you now monitor the health of the SSD your smart home runs on - and get warned before it turns critical. The add-on is open source on &lt;a href="https://github.com/raspberry-tips/ha-addon-nvme-smart" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; and works with any NVMe SSD. If you're coming from an SD card, you now have a safety net that simply didn't exist before. For matching hardware tips, see our &lt;a href="https://raspberry.tips/en/raspberrypi-tutorials/nvme-ssd-raspberry-pi-5-buying-guide" rel="noopener noreferrer"&gt;NVMe buying guide&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Further reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://raspberry.tips/en/raspberrypi-tutorials/raspberry-pi-5-without-sd-card-nvme-usb-c" rel="noopener noreferrer"&gt;Set up the Raspberry Pi 5 without an SD card: flash NVMe over USB-C&lt;/a&gt; - how to get HAOS onto the NVMe without an SD card.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://raspberry.tips/en/raspberrypi-tutorials/raspberry-pi-5-nvme-ssd-boot" rel="noopener noreferrer"&gt;Raspberry Pi 5 NVMe SSD setup - guide, benchmarks and use cases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://raspberry.tips/en/raspberrypi-tutorials/nvme-ssd-raspberry-pi-5-buying-guide" rel="noopener noreferrer"&gt;NVMe SSD and M.2 HATs for the Raspberry Pi 5 - the buying guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://raspberry.tips/en/raspberrypi-tutorials/clone-raspberry-pi-sd-card-to-nvme" rel="noopener noreferrer"&gt;Raspberry Pi: clone the SD card to an NVMe SSD&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Frequently asked questions about NVMe monitoring in Home Assistant
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Can you monitor an SSD's health in Home Assistant?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes. Through the NVMe SSD's SMART values you can read out wear, temperature, data written and errors. With the raspberry.tips "NVMe SMART Monitor" add-on these values appear automatically as sensors in Home Assistant via MQTT discovery.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does this work with an SD card too?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Usually not. Consumer microSD cards offer no readable SMART monitoring - they mostly fail without warning. That's a major advantage of an NVMe SSD on the Raspberry Pi 5.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does the add-on work with any NVMe SSD?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes. The add-on reads the model and the SMART values live from the drive - it isn't tied to a specific brand. Cheap DRAM-less SSDs, however, occasionally don't report individual fields.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do I need an MQTT broker?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes, the add-on publishes the values over MQTT. Just install and start the official "Mosquitto broker" add-on; the NVMe SMART Monitor then picks up the credentials automatically.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This article was originally published on &lt;a href="https://raspberry.tips/en/raspberrypi-tutorials/raspberry-pi-nvme-ssd-health-home-assistant" rel="noopener noreferrer"&gt;raspberry.tips&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>raspberrypi</category>
      <category>homeassistant</category>
      <category>opensource</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Connect Home Assistant to AI: Set Up an MCP Server for Claude, ChatGPT &amp; Gemini</title>
      <dc:creator>Philipp Schweizer</dc:creator>
      <pubDate>Sun, 05 Jul 2026 15:36:58 +0000</pubDate>
      <link>https://dev.to/raspberry_tips/connect-home-assistant-to-ai-set-up-an-mcp-server-for-claude-chatgpt-gemini-3io5</link>
      <guid>https://dev.to/raspberry_tips/connect-home-assistant-to-ai-set-up-an-mcp-server-for-claude-chatgpt-gemini-3io5</guid>
      <description>&lt;p&gt;&lt;strong&gt;What is the Home Assistant MCP server?&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;The MCP server (Model Context Protocol) is an interface that lets AIs like Claude, ChatGPT, or Gemini talk directly to your Home Assistant. Instead of writing YAML yourself, you give the AI access to entities, automations, and dashboards - it handles the code. Runs as a free app/add-on on Home Assistant OS, community project (&lt;a href="https://github.com/homeassistant-ai/ha-mcp" rel="noopener noreferrer"&gt;homeassistant-ai/ha-mcp&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Inhaltsverzeichnis&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What you need&lt;/li&gt;
&lt;li&gt;Official vs. unofficial MCP server&lt;/li&gt;
&lt;li&gt;Step 1: Install the MCP server as an app/add-on&lt;/li&gt;
&lt;li&gt;Step 2: Set up remote access&lt;/li&gt;
&lt;li&gt;Step 3: Connect the MCP server to your AI&lt;/li&gt;
&lt;li&gt;Best-practice guidance for the AI&lt;/li&gt;
&lt;li&gt;Security: MCP access alongside a hardened Cloudflare setup&lt;/li&gt;
&lt;li&gt;Optional and potentially dangerous: letting the AI edit YAML configuration&lt;/li&gt;
&lt;li&gt;What you can actually build with this&lt;/li&gt;
&lt;li&gt;Troubleshooting&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Home Assistant can do almost anything - which is exactly why so many beginners struggle to build their own automations, design dashboards, or debug errors. Until now, you were entirely on your own: learning YAML, understanding templates, digging through forums. Anyone who wants to &lt;strong&gt;set up a Home Assistant MCP server&lt;/strong&gt; instead hands that work off to an AI.&lt;/p&gt;

&lt;p&gt;An MCP server changes that fundamentally. You connect Home Assistant directly to an AI of your choice - Claude, ChatGPT, or Gemini - and simply describe in plain language what you need: "Build me a sensor that shows today's rainfall" or "Fix the automation in the kids' room, the lights aren't dimming correctly anymore." The AI finds the right entities itself, writes the code, and sets it up in Home Assistant.&lt;/p&gt;

&lt;p&gt;In this article I'll show you how to set up the MCP server on your Raspberry Pi, connect it to Claude, ChatGPT, and Gemini - including desktop and smartphone access - and how to secure the whole thing properly, even if your Home Assistant already runs behind Cloudflare Access with a client certificate.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you need
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Home Assistant OS or Supervised on a Raspberry Pi (apps/add-ons require the Supervisor - installation doesn't work on Home Assistant Container/Core)&lt;/li&gt;
&lt;li&gt;Access to the App Store (Settings → Apps - since Home Assistant 2026.2 the former "Add-ons" are called this; on older versions it's still Settings → Add-ons → Add-on Store)&lt;/li&gt;
&lt;li&gt;For access from cloud AIs (Claude, ChatGPT): a way out to the internet - Nabu Casa, an existing reverse proxy, or your own Cloudflare Tunnel&lt;/li&gt;
&lt;li&gt;At least one account with Claude, ChatGPT, or Google Gemini&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you haven't set up remote access yet, I cover that step by step in my article &lt;a href="https://raspberry.tips/en/raspberrypi-einsteiger/raspberry-pi-cloudflare-tunnel-en" rel="noopener noreferrer"&gt;Set Up Cloudflare Tunnel on the Raspberry Pi&lt;/a&gt; - no port forwarding needed, including mTLS hardening.&lt;/p&gt;

&lt;h2&gt;
  
  
  Official vs. unofficial MCP server
&lt;/h2&gt;

&lt;p&gt;Home Assistant has shipped its own official MCP server since version 2025.2. It's quick to set up, but can do far less than the community solution &lt;strong&gt;ha-mcp&lt;/strong&gt;, which this article is about. Before you install anything, you should know the difference:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Official MCP server&lt;/th&gt;
&lt;th&gt;Unofficial (ha-mcp)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Entity access&lt;/td&gt;
&lt;td&gt;Only Assist-exposed entities&lt;/td&gt;
&lt;td&gt;Every entity in the system&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Create/edit automations, scripts, scenes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Build/edit dashboards&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Debug automations from traces, read history/logs&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Manage helpers, areas, zones, labels, groups&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Backups, apps/add-ons, HACS, device/entity registry&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Setup effort&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Just want to use your AI as a somewhat better voice assistant ("turn on the living room light")? The official server is enough. But if you want an AI to build automations, dashboards, or sensors for you, there's no way around the unofficial solution - only that one gives you full access.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Install the MCP server as an app/add-on
&lt;/h2&gt;

&lt;p&gt;The project is called &lt;strong&gt;"Home Assistant MCP Server"&lt;/strong&gt; (repository &lt;a href="https://github.com/homeassistant-ai/ha-mcp" rel="noopener noreferrer"&gt;homeassistant-ai/ha-mcp&lt;/a&gt;, officially "The Unofficial and Awesome Home Assistant MCP Server"):&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;strong&gt;Settings → Apps → App Store&lt;/strong&gt; (or Add-ons → Add-on Store on older HA versions)&lt;/li&gt;
&lt;li&gt;Via the three dots in the top right → &lt;strong&gt;Repositories&lt;/strong&gt;, add the URL &lt;code&gt;https://github.com/homeassistant-ai/ha-mcp&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Reload the page, install "Home Assistant MCP Server", and start it&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://cdn.raspberry.tips/2026/07/MCP-Repository-hinzufuegen-scaled.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjhvobpqq2jgxuobxlz19.png" width="300" height="166"&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cdn.raspberry.tips/2026/07/HomeAssistant-MCP-Server-Installieren-scaled.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frao399a4nx2azaz9e5o1.png" width="300" height="155"&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cdn.raspberry.tips/2026/07/HomeAssistant-MCP-Server-starten-scaled.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fejr3qgw66ojhtwv1c055.png" width="300" height="157"&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then open the app's &lt;strong&gt;Logs&lt;/strong&gt; tab. It shows your ready-to-use MCP server URL, already secured with a 128-bit random path, for example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;🔐 MCP Server URL: http://&amp;lt;ha-ip&amp;gt;:9583/private_zctpwlX7ZkIAr7oqdfLPxw
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://cdn.raspberry.tips/2026/07/HomeAssistant-MCP-Server-private-URL-scaled.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv5jbnh1eje7zwwqd30y6.png" width="300" height="155"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You'll need this URL for step 3. You don't need to create a token or password yourself - the app authenticates automatically via the Home Assistant Supervisor, and the random path in the URL is the actual security measure.&lt;/p&gt;

&lt;p&gt;In the app's settings (config tab, or its own Tool Settings web UI via "Open Web UI"), I recommend:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tool Search (&lt;code&gt;enable_tool_search&lt;/code&gt;)&lt;/strong&gt;: Disabled by default - leave it that way. For Claude in Sonnet or Opus mode, &lt;strong&gt;definitely leave it disabled&lt;/strong&gt;, because its built-in tool search otherwise conflicts with ha-mcp's. Only worth enabling for Claude Haiku or other models without their own tool search, or if your client caps the number of tools (e.g. at 100).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tool Security Policies (&lt;code&gt;enable_tool_security_policies&lt;/code&gt;)&lt;/strong&gt;: Optionally &lt;strong&gt;enable&lt;/strong&gt; this if you want manual approval via the app's web UI for critical actions (locks, alarm systems, writing automations).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Read Only Mode (&lt;code&gt;read_only_mode&lt;/code&gt;)&lt;/strong&gt;: Handy for the first test run or shared installations - switches off every write-capable tool completely.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backup Hint (&lt;code&gt;backup_hint&lt;/code&gt;)&lt;/strong&gt;: Leave it at &lt;code&gt;normal&lt;/code&gt; - the AI will then automatically suggest a backup before irreversible changes.&lt;/li&gt;
&lt;li&gt;You can disable or pin individual tools in the web UI if you don't need them or consider them too dangerous.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Part 1 is done - on your home network you can already talk to the app directly via the local URL (e.g. with VS Code, Cursor, or other HTTP-capable MCP clients).&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Set up remote access
&lt;/h2&gt;

&lt;p&gt;For cloud AIs like Claude or ChatGPT to reach your MCP server, you need a publicly reachable, HTTPS-secured URL. There are two ways to get there:&lt;/p&gt;

&lt;h3&gt;
  
  
  Option A: Webhook Proxy app (easiest if you already use Nabu Casa or a reverse proxy)
&lt;/h3&gt;

&lt;p&gt;The &lt;strong&gt;"Webhook Proxy for HA MCP"&lt;/strong&gt; app (same repository) routes MCP traffic through your &lt;strong&gt;existing&lt;/strong&gt; Home Assistant access - Nabu Casa, Cloudflare Tunnel, DuckDNS, or any other reverse proxy that already points at port 8123. You don't need an additional hostname or a second tunnel for this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The MCP Server app from step 1 must already be running&lt;/li&gt;
&lt;li&gt;Install and start "&lt;strong&gt;Webhook Proxy for HA MCP&lt;/strong&gt;" from the same App Store&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://cdn.raspberry.tips/2026/07/Home-Assistant-MCP-Webhook-Proxy-scaled.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe2lsg33f1rpr1mqq5blm.png" width="300" height="167"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;If you &lt;strong&gt;don't use Nabu Casa&lt;/strong&gt; (e.g. with your own Cloudflare Tunnel), your public Home Assistant URL needs to be entered explicitly in the Webhook Proxy app's settings - with Nabu Casa, the app detects this automatically&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4e5f7qcxzu80d3v85lnn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4e5f7qcxzu80d3v85lnn.png" width="300" height="155"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Restart&lt;/strong&gt; Home Assistant (do a full restart in the settings, top right)&lt;/li&gt;
&lt;li&gt;Copy the finished remote URL from the Webhook Proxy app's Logs tab, e.g.:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;MCP Server URL (remote): https://&amp;lt;your-external-url&amp;gt;/api/webhook/mcp_7eacf143b0f5d31269417ae3304ee534
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://cdn.raspberry.tips/2026/07/MCP-Proxy-URLs-scaled.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fndukigwupg0m3o7sxw7a.png" width="300" height="156"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The app finds your MCP Server app automatically. If you use Nabu Casa, your external URL is also detected automatically; without Nabu Casa, you enter it manually as shown in step 3. Either way, the webhook path (&lt;code&gt;/api/webhook/mcp_...&lt;/code&gt;) stays stable across restarts, because the ID is stored locally.&lt;/p&gt;

&lt;h3&gt;
  
  
  Option B: Your own Cloudflared tunnel (if you don't have remote access yet)
&lt;/h3&gt;

&lt;p&gt;Alternatively, use a dedicated tunnel just for the MCP server, as described in our &lt;a href="https://raspberry.tips/en/raspberrypi-einsteiger/raspberry-pi-cloudflare-tunnel-en" rel="noopener noreferrer"&gt;Cloudflare Tunnel article&lt;/a&gt; (Part A). In the Cloudflared app configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;additional_hosts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;hostname&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ha-mcp.yourdomain.com&lt;/span&gt;
    &lt;span class="na"&gt;service&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;http://localhost:9583&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If &lt;code&gt;localhost&lt;/code&gt; doesn't work from inside the Cloudflared container (its own Docker container), use the MCP Server app's container hostname instead, which you'll find on its Info page (e.g. &lt;code&gt;b37de126-ha-mcp&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;⚠️ Important Cloudflare trap:&lt;/strong&gt; Cloudflare's &lt;strong&gt;"Block AI Training Bots"&lt;/strong&gt; feature blocks AI clients by default - even when browser access to the same URL works fine. Under &lt;strong&gt;Security → Bots&lt;/strong&gt;, set the "Block AI training bots" option to "do not block", or you won't be able to connect with any AI at all.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Did you set up the country restriction (DE/AT/CH) from the Cloudflare Tunnel article?&lt;/strong&gt; That same rule blocks Claude and ChatGPT too - both connect from the US. Either add &lt;a href="https://platform.claude.com/docs/en/api/ip-addresses" rel="noopener noreferrer"&gt;Anthropic's stable IP range&lt;/a&gt; &lt;code&gt;160.79.104.0/21&lt;/code&gt; as an exception to the rule, or scope the country rule to your main hostname only and leave the MCP hostname untouched.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Connect the MCP server to your AI
&lt;/h2&gt;

&lt;p&gt;Now for the actual connection. How easy this is - and how far you'll get - differs quite a bit between Claude, ChatGPT, and Gemini:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;AI&lt;/th&gt;
&lt;th&gt;Minimum plan&lt;/th&gt;
&lt;th&gt;Setup location&lt;/th&gt;
&lt;th&gt;Desktop/Mobile&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Claude&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Free (1 connector), otherwise Pro/Max&lt;/td&gt;
&lt;td&gt;claude.ai (web), Custom Connector&lt;/td&gt;
&lt;td&gt;Syncs automatically to the desktop app and iOS/Android&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ChatGPT&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Plus&lt;/td&gt;
&lt;td&gt;Settings → Connectors → Developer Mode&lt;/td&gt;
&lt;td&gt;Manual, no known auto-sync&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Gemini&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Free (CLI)&lt;/td&gt;
&lt;td&gt;Gemini CLI only, settings.json&lt;/td&gt;
&lt;td&gt;No path via the regular Gemini app&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Connecting Claude Desktop
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Route 1 - Web Connector (recommended, web + desktop + smartphone in one step):&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Log in at &lt;strong&gt;claude.ai&lt;/strong&gt;, go to &lt;strong&gt;Customize → Connectors&lt;/strong&gt; (&lt;a href="https://claude.ai/customize/connectors" rel="noopener noreferrer"&gt;Customize - Claude&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Add a custom connector using the &lt;strong&gt;plus icon (+)&lt;/strong&gt;, and name it, e.g., "Home Assistant"&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://cdn.raspberry.tips/2026/07/Claude-Connector-hinzufuegen-scaled.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7l8fj9u5sn6ib49qaonr.png" width="300" height="157"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Enter your remote URL from step 2 and save&lt;/li&gt;
&lt;li&gt;For read-only tools you can set "always allow"; for write/delete tools I'd leave confirmation prompts on&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The convenient part: once the connector is set up on claude.ai, it's automatically available in the &lt;strong&gt;Claude Desktop app&lt;/strong&gt; and the &lt;strong&gt;Claude apps for iOS and Android&lt;/strong&gt; too - no extra configuration needed.&lt;/p&gt;

&lt;p&gt;Watch out: if you've set up block rules in Cloudflare (I've blocked a lot of countries, for example), you naturally need to allow Claude's IP addresses. I've put a skip rule for Claude at position 1, which causes all other block rules to be skipped:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;((ip.src in {160.79.104.0/21}) or (ip.src in {2607:6bc0::/48})) and http.host eq "homeassistant.your-domain.com"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://cdn.raspberry.tips/2026/07/Cloudflare-Allow-Claude-1-scaled.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdl3raa541ybjsvobjmqf.png" width="300" height="176"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That's it: once the MCP connection via the Claude connector is up, you can interact with your Home Assistant through Claude from anywhere in the world:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://cdn.raspberry.tips/2026/07/Claude-Web-mit-aktivem-MCP-scaled.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6n82i1kfqe8e399sdow3.png" width="300" height="165"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Route 2 - Claude Desktop only, purely local (no remote access needed):&lt;/strong&gt; Claude Desktop only talks to local MCP servers over stdio, not via a URL. Using the small helper program &lt;code&gt;mcp-proxy&lt;/code&gt; (via &lt;code&gt;uvx&lt;/code&gt;, which only needs the &lt;code&gt;uv&lt;/code&gt; tool), you build the bridge yourself.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;uv&lt;/code&gt;/&lt;code&gt;uvx&lt;/code&gt; needs to be installed on the machine running Claude Desktop. Do that in a terminal with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;winget &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;astral-sh.uv &lt;span class="nt"&gt;-e&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://cdn.raspberry.tips/2026/07/UV-Installation-scaled.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fc2766jadjicf55fih1uq.png" width="300" height="116"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Your Claude Desktop config needs to be extended with the following. Depending on what's already in your config, the JSON needs to be merged in accordingly - feel free to ask your AI assistant for help if you're unsure. As the &lt;code&gt;streamablehttp&lt;/code&gt; target, enter the &lt;strong&gt;URL from step 1&lt;/strong&gt;. Important: Claude should be fully quit first (also close its icon in the system tray):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"home-assistant"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"uvx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"mcp-proxy"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"--transport"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"streamablehttp"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http://homeassistant.local:9583/private_Odhrwersdgh234"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This goes into &lt;code&gt;claude_desktop_config.json&lt;/code&gt;. Advantage: works entirely on your home network, no remote access from step 2 needed - but only on that one computer, without mobile sync. You'll find the file under "%APPDATA%\Claude" (Windows). Claude Desktop needs to be fully restarted once.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://cdn.raspberry.tips/2026/07/image-20.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpd2ee529woimxgnfjboo.png" width="300" height="258"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then the connection is ready to go in Claude Desktop too:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://cdn.raspberry.tips/2026/07/Claude-Desktop-HomeAssistant-Dev-Connector-scaled.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnz6nionpvbkfjdtl5are.png" width="300" height="176"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Connecting Claude Code to Home Assistant
&lt;/h3&gt;

&lt;p&gt;For &lt;strong&gt;Claude Code&lt;/strong&gt;, one command within a session is enough. Insert the URL from step 1:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude mcp add-json home-assistant &lt;span class="s1"&gt;'{
  "url": "your-mcp-server-url",
  "type": "http"
}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Claude Code needs to be restarted once.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://cdn.raspberry.tips/2026/07/Claude-Code-HomeAssistant-scaled.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3lzn7nwposcwlve0cmlm.png" width="300" height="167"&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cdn.raspberry.tips/2026/07/Claude-Code-HomeAssistant-2-scaled.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F92m9lc9wcbqxdtgbwut0.png" width="300" height="165"&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Connecting ChatGPT
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;In ChatGPT, go to &lt;strong&gt;Settings → Connectors → Advanced&lt;/strong&gt; and enable &lt;strong&gt;Developer Mode&lt;/strong&gt; (available from the Plus plan)&lt;/li&gt;
&lt;li&gt;Under Connectors, click &lt;strong&gt;Create&lt;/strong&gt; and enter your remote URL from step 2&lt;/li&gt;
&lt;li&gt;ChatGPT then walks you through an OAuth authorization flow&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The difference to Claude: ChatGPT requires a genuine OAuth 2.1 flow for authorization - it doesn't accept simple bearer tokens or API keys for connectors. That makes setup a bit more involved, but it's also the more robust security model overall.&lt;/p&gt;

&lt;h3&gt;
  
  
  Connecting Gemini (CLI only)
&lt;/h3&gt;

&lt;p&gt;Here's the honest limitation: there's currently no way to connect an MCP server through the regular Gemini app or web interface. It only works via the &lt;strong&gt;Gemini CLI&lt;/strong&gt;, a command-line tool for developers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"home-assistant"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"your-mcp-server-url"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This configuration goes into the Gemini CLI's &lt;code&gt;settings.json&lt;/code&gt;. You don't need to add a bearer token separately here - the random path in the URL itself is the authentication. For the mass market, this is currently the least practical of the three routes - but if you already work with the CLI, you get the same full tool access.&lt;/p&gt;

&lt;h2&gt;
  
  
  Best-practice guidance for the AI
&lt;/h2&gt;

&lt;p&gt;Earlier versions of ha-mcp required a separate download of an "Agent Skills" package that you had to upload manually as a ZIP into Claude. Current versions ship this best-practice guidance directly through a built-in, always-active tool called &lt;code&gt;ha_get_skill_guide&lt;/code&gt; - the AI calls it itself whenever needed to learn how to correctly set up helpers, utility meters, or template sensors, for example. A manual skills import is generally no longer necessary; still, check the project's current documentation if your client shows different instructions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Security: MCP access alongside a hardened Cloudflare setup
&lt;/h2&gt;

&lt;p&gt;Many of you already protect Home Assistant with Cloudflare Access and a client certificate (mTLS) - rightly so, it's one of the most secure ways to make a smart home reachable on the internet. There's a catch here, though, that none of the existing guides on this topic address:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cloud AI connectors cannot present client certificates.&lt;/strong&gt; Both Claude and ChatGPT call your server not from your device, but from the provider's own cloud infrastructure. A client certificate is tied to a private key that only your device holds - the AI providers logically can't send it along. &lt;a href="https://developers.openai.com/apps-sdk/build/auth" rel="noopener noreferrer"&gt;OpenAI confirms this for ChatGPT explicitly in its own documentation&lt;/a&gt;: custom connectors can present neither their own API keys nor customer-provided mTLS certificates.&lt;/p&gt;

&lt;h3&gt;
  
  
  The simple fix if you use the Webhook Proxy app (Option A)
&lt;/h3&gt;

&lt;p&gt;If you use the Webhook Proxy app from step 2 (Option A) for remote access, MCP traffic runs over &lt;code&gt;/api/webhook/...&lt;/code&gt; on the same hostname as your Home Assistant interface - so you don't need a second hostname at all. Instead, it's enough to exempt this one path from the mTLS requirement. If you copied the WAF rule from our &lt;a href="https://raspberry.tips/en/raspberrypi-einsteiger/raspberry-pi-cloudflare-tunnel-en" rel="noopener noreferrer"&gt;Cloudflare Tunnel article&lt;/a&gt;, just extend it with this exception:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;(http.host eq "homeassistant.your-domain.com" and not cf.tls_client_auth.cert_verified and not starts_with(http.request.uri.path, "/api/webhook/"))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;/api/webhook/&lt;/code&gt; path itself stays secure regardless, because the webhook carries its own random ID in the path - that ID &lt;em&gt;is&lt;/em&gt; the authentication for this one endpoint, with no certificate needed. Your Home Assistant interface stays fully mTLS-protected, while the AI still gets in through the same hostname. No second hostname, no extra IP allowlisting required.&lt;/p&gt;

&lt;h3&gt;
  
  
  Alternative if you use a dedicated MCP hostname (Option B)
&lt;/h3&gt;

&lt;p&gt;If you instead run a separate Cloudflared tunnel just for the MCP server (step 2, Option B) with its own hostname like &lt;code&gt;ha-mcp.yourdomain.com&lt;/code&gt;, there's no shared hostname you could relieve via a path exception. Here, the separate security layers still make sense - the random path in the URL (see step 1) is the first line of defense, and you can additionally restrict via a Cloudflare firewall rule to Anthropic's stable outbound IP range, as shown in the "Connecting Claude Desktop" section above. IP allowlisting is less worthwhile for ChatGPT, since OpenAI changes its egress ranges more frequently - but ChatGPT requires that mandatory OAuth 2.1 flow mentioned earlier anyway, which inherently offers stronger security than a plain URL with a secret.&lt;/p&gt;

&lt;h3&gt;
  
  
  Outlook: official tunnel solutions with no public exposure at all
&lt;/h3&gt;

&lt;p&gt;Both Anthropic ("MCP Tunnels", currently a research preview with a waitlist) and OpenAI ("Secure MCP Tunnel", an open &lt;code&gt;tunnel-client&lt;/code&gt; on GitHub) are working on a mechanism where a small agent at your home establishes an outbound connection to the AI cloud - your MCP server would then no longer need any public port at all. For security-conscious users, that's the cleanest solution in the medium term, though it's currently either still gated (Claude) or geared more toward business use (OpenAI).&lt;/p&gt;

&lt;h2&gt;
  
  
  Optional and potentially dangerous: letting the AI edit YAML configuration
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;This step is completely optional.&lt;/strong&gt; Some Home Assistant features - REST template sensors, for instance - can only be set up via &lt;code&gt;configuration.yaml&lt;/code&gt;, not through the UI. The tools for this (&lt;code&gt;ha_config_set_yaml&lt;/code&gt;, file read/write access) are marked as beta features and require an additional companion component. Enable it via the "Advanced settings" of the Tool Settings web UI (a beta master toggle plus individual sub-toggles) - check the project's current documentation for details, since these beta features can still change.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Before you enable this:&lt;/strong&gt; make a backup. Then make another one. An AI that edits your &lt;code&gt;configuration.yaml&lt;/code&gt; and accidentally discards half its content can take down your entire system. Only enable this feature if you understand what you're granting access to, and if you already run regular backups anyway.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you can actually build with this
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;New sensors:&lt;/strong&gt; "Create a sensor that shows today's rainfall from my weather station" - the AI finds the right source entity, sets up a utility meter helper, and configures it correctly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dashboard elements:&lt;/strong&gt; new badges, cards, or entire dashboard sections on request, without writing a single line of card YAML yourself.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fixing/adjusting automations:&lt;/strong&gt; "The automation in the kids' room stops dimming correctly after 9pm" - the AI finds the right automation, analyzes traces, explains the proposed fix, and applies it once you confirm. If you'd rather understand the basics of triggers, conditions, and actions yourself first, our &lt;a href="https://raspberry.tips/en/smart-home/home-assistant-automations-guide" rel="noopener noreferrer"&gt;Home Assistant automations beginner's guide&lt;/a&gt; covers that.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Keep in mind: the AI can also suggest broken or nonsensical code. Especially for automations with real-world consequences (heating, safety functions), review the suggested code before letting it run permanently.&lt;/p&gt;

&lt;h2&gt;
  
  
  Troubleshooting
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Problem&lt;/th&gt;
&lt;th&gt;Solution&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AI client can't connect via Cloudflare, but browser access works fine&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Check this &lt;strong&gt;first&lt;/strong&gt;, before you lose yourself in WAF rules: it's almost always "Block AI Training Bots" in Cloudflare (Security → Bots). Set it to "do not block". Also check whether a country WAF rule is blocking US traffic.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"Apps" or "Add-ons" missing from the menu&lt;/td&gt;
&lt;td&gt;Only available with Home Assistant OS (not on Core/Container without the Supervisor). Since 2026.2 the menu item is called "Apps" instead of "Add-ons".&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tool is known, but the call fails with "Unknown tool"&lt;/td&gt;
&lt;td&gt;After changing tool settings (Tool Search, Read Only Mode, enabled/disabled tools), your AI client keeps caching the old tool list. Restarting the app/Home Assistant isn't enough - disconnect and reconnect the connector in the client (e.g. re-add the connector in ChatGPT, fully close and reopen Claude Desktop).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Connector can't find the MCP server&lt;/td&gt;
&lt;td&gt;With the Webhook Proxy app: did you restart Home Assistant after installing it? Without a restart, the connection stays inactive.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Can't create the ChatGPT connector&lt;/td&gt;
&lt;td&gt;Check whether Developer Mode is enabled and your plan (Plus or higher) supports it.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MCP connection over the mTLS hostname fails&lt;/td&gt;
&lt;td&gt;Expected behavior with client certificate enforcement. Use the Webhook Proxy app with the &lt;code&gt;/api/webhook/&lt;/code&gt; exception in the WAF rule (see the security section) or a separate hostname without mTLS.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Do I need HACS for the Home Assistant MCP server?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No, you install the base app/add-on directly through the App Store via the repository URL (github.com/homeassistant-ai/ha-mcp). An additional companion component is only needed if you want to use the optional, beta-labeled YAML/file-access tools.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does the MCP server also work entirely locally, without a cloud AI?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes. With a local AI like Ollama or LM Studio, or with Claude Desktop via the local stdio bridge (mcp-proxy), all processing stays on your own network - with no remote access from step 2 needed at all.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is it safe to give an AI full access to Home Assistant?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;With some precautions, yes. Disable dangerous individual tools via the Tool Settings web UI, use Read Only Mode or Tool Security Policies for approvals where needed, and never share your MCP server URL with anyone - the random path inside it acts like a password.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which AI works best for Home Assistant MCP?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Claude currently offers the simplest setup, since a connector configured once syncs automatically to the desktop and smartphone apps. ChatGPT works well too, but requires a manual OAuth flow and at least the Plus plan. Gemini is currently only usable via the CLI.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Dieser Artikel erschien zuerst auf &lt;a href="https://raspberry.tips/en/smart-home/home-assistant-mcp-server-ai-setup" rel="noopener noreferrer"&gt;raspberry.tips&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>homeassistant</category>
      <category>ai</category>
      <category>mcp</category>
      <category>raspberrypi</category>
    </item>
    <item>
      <title>[Beta Testers Wanted] Help me launch this Raspberry Pi IP Scanner for Android</title>
      <dc:creator>Philipp Schweizer</dc:creator>
      <pubDate>Tue, 28 Apr 2026 14:43:24 +0000</pubDate>
      <link>https://dev.to/raspberry_tips/beta-testers-wanted-help-me-launch-this-raspberry-pi-ip-scanner-for-android-12g5</link>
      <guid>https://dev.to/raspberry_tips/beta-testers-wanted-help-me-launch-this-raspberry-pi-ip-scanner-for-android-12g5</guid>
      <description>&lt;h1&gt;
  
  
  🚀 Beta Testers Wanted: Raspberry Pi IP Scanner for Android
&lt;/h1&gt;

&lt;p&gt;Hi everyone! I’m currently in the final stages of launching a dedicated &lt;strong&gt;Raspberry Pi IP Scanner App&lt;/strong&gt; for Android. To officially release it on the Google Play Store, I need to complete a closed beta with &lt;strong&gt;at least 20 testers&lt;/strong&gt; for 14 days.&lt;/p&gt;

&lt;p&gt;If you have an Android device and use Raspberry Pis, I would love your help!&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;Join the Beta here:&lt;/strong&gt; &lt;a href="https://play.google.com/apps/testing/tips.raspberry.rpi_app" rel="noopener noreferrer"&gt;https://play.google.com/apps/testing/tips.raspberry.rpi_app&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why this app?
&lt;/h2&gt;

&lt;p&gt;Anyone running a Raspberry Pi in their home network knows the problem: What is the Pi's IP address right now? The DHCP server assigns a different one at every restart, and searching the router interface is tedious. &lt;/p&gt;

&lt;p&gt;That's exactly why I built this app - a tool specifically developed for the Pi ecosystem.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;IP Scanner&lt;/strong&gt;: Scans your network and automatically identifies Raspberry Pis using MAC address prefixes and mDNS.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One-Tap Access&lt;/strong&gt;: Open your Pi's web interface or start an SSH session (integrates with Termius/JuiceSSH) directly from the scan results.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Built-in Tools&lt;/strong&gt;: Includes the GPIO Pinout, WPA Supplicant Generator, and Electronics Calculators from raspberry.tips.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How you can help
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Join the beta via the link above.&lt;/li&gt;
&lt;li&gt;Install the app and run a quick scan.&lt;/li&gt;
&lt;li&gt;(Optional) Let me know if it correctly identified your Pi models!&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The source code is open source: &lt;a href="https://github.com/raspberry-tips/rpi-app" rel="noopener noreferrer"&gt;github.com/raspberry-tips/rpi-app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks for helping me get this tool into the hands of the community!&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Original article and more details:&lt;/em&gt; &lt;a href="https://raspberry.tips/en/raspberrypi-tutorials/raspberry-pi-ip-scanner-app-raspberry-tips-for-android" rel="noopener noreferrer"&gt;raspberry.tips&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Dieser Artikel erschien zuerst auf &lt;a href="https://raspberry.tips/en/raspberrypi-tutorials/raspberry-pi-ip-scanner-app-raspberry-tips-for-android" rel="noopener noreferrer"&gt;raspberry.tips&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>raspberrypi</category>
      <category>android</category>
      <category>opensource</category>
      <category>testing</category>
    </item>
    <item>
      <title>Raspberry Pi IP Scanner App – Find Your Pi on the Network Instantly</title>
      <dc:creator>Philipp Schweizer</dc:creator>
      <pubDate>Sat, 25 Apr 2026 14:03:45 +0000</pubDate>
      <link>https://dev.to/raspberry_tips/raspberry-pi-ip-scanner-app-find-your-pi-on-the-network-instantly-2162</link>
      <guid>https://dev.to/raspberry_tips/raspberry-pi-ip-scanner-app-find-your-pi-on-the-network-instantly-2162</guid>
      <description>&lt;p&gt;Anyone running a Raspberry Pi in their home network knows the problem: &lt;strong&gt;What is the Pi's IP address right now?&lt;/strong&gt; DHCP assigns a new one after every restart, and digging through the router interface gets old fast.&lt;/p&gt;

&lt;p&gt;That's exactly why we built the &lt;strong&gt;raspberry.tips App for Android&lt;/strong&gt; — an IP scanner built specifically for Raspberry Pi, combined with all the tools from the website, right on your phone.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the App Does
&lt;/h2&gt;

&lt;p&gt;The app has three main sections:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;IP Scanner&lt;/strong&gt; — scans your local Wi-Fi and automatically detects all Raspberry Pis&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;My Devices&lt;/strong&gt; — saved devices at a glance, with one-tap browser and SSH access&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tools&lt;/strong&gt; — all raspberry.tips web tools (GPIO Pinout, WPA Supplicant Generator, Electronics Calculator, and more) directly in the app&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How the IP Scanner Works
&lt;/h2&gt;

&lt;p&gt;The scanner combines multiple techniques to reliably find Pis even in busy networks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;mDNS Discovery&lt;/strong&gt; — detects devices via Bonjour/Avahi instantly; if your Pi is reachable as &lt;code&gt;raspberrypi.local&lt;/code&gt; or &lt;code&gt;pi.local&lt;/code&gt;, it shows up within seconds&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MAC Address Recognition&lt;/strong&gt; — the app knows all Raspberry Pi Foundation and Raspberry Pi Trading Ltd MAC prefixes and automatically marks matching devices as confirmed Pis&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Port Scan&lt;/strong&gt; — all 254 hosts in the subnet are scanned in parallel for SSH (22), HTTP (80, 8080), and HTTPS (443)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reverse DNS&lt;/strong&gt; — hostnames are resolved via PTR lookup so you see what your Pi calls itself&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Results are split into three categories:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Raspberry Pis&lt;/td&gt;
&lt;td&gt;Confirmed via MAC address or hostname&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Possible Pis&lt;/td&gt;
&lt;td&gt;Characteristics match (e.g. SSH open, MAC unresolved)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Other Devices&lt;/td&gt;
&lt;td&gt;All other network participants with open ports&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;From the results, you can open the device in the browser or launch an SSH session directly. For SSH, the app hands off to a compatible app like Termius or JuiceSSH.&lt;/p&gt;

&lt;h2&gt;
  
  
  Save and Manage Devices
&lt;/h2&gt;

&lt;p&gt;Found Pis can be saved with a tap on the bookmark icon. In the &lt;strong&gt;My Devices&lt;/strong&gt; tab you'll see IP address, hostname, and last scan date — and you can rename devices, so &lt;code&gt;192.168.1.42&lt;/code&gt; becomes &lt;code&gt;Media Center Pi&lt;/code&gt; or &lt;code&gt;Pi-hole&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Integrated Tools
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;Tools&lt;/strong&gt; tab puts all raspberry.tips web tools in one place without opening a browser:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GPIO Pinout – pin assignments for all Raspberry Pi models&lt;/li&gt;
&lt;li&gt;WPA Supplicant Generator – create Wi-Fi configs for headless setup&lt;/li&gt;
&lt;li&gt;Docker Compose Generator – build Docker Compose configurations&lt;/li&gt;
&lt;li&gt;Electronics Calculator – LED resistors, voltage dividers, color codes&lt;/li&gt;
&lt;li&gt;SD Card Calculator – estimate SD card lifespan&lt;/li&gt;
&lt;li&gt;Power Supply Calculator – determine wattage requirements&lt;/li&gt;
&lt;li&gt;Subnet Calculator – calculate IP addresses and networks&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Download
&lt;/h2&gt;

&lt;p&gt;The app is currently available as a direct APK download. You'll need to allow installation from unknown sources once in your Android settings (&lt;strong&gt;Apps &amp;gt; Unknown Sources&lt;/strong&gt; or &lt;strong&gt;Security &amp;gt; Install unknown apps&lt;/strong&gt;).&lt;/p&gt;

&lt;p&gt;➡️ &lt;a href="https://raspberry.tips/en/raspberrypi-tutorials/raspberry-pi-ip-scanner-app-raspberry-tips-for-android" rel="noopener noreferrer"&gt;Download APK&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;Google Play Store&lt;/strong&gt; release is coming soon.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: The Raspberry Pi must be on the same Wi-Fi network as your Android device for the scanner to work. An iOS version is not yet available but is planned.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The source code is open on GitHub: &lt;a href="https://github.com/raspberry-tips/rpi-app" rel="noopener noreferrer"&gt;github.com/raspberry-tips/rpi-app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Feedback, bug reports, and feature requests are welcome in the comments!&lt;/p&gt;

</description>
      <category>raspberrypi</category>
      <category>android</category>
      <category>networking</category>
      <category>iot</category>
    </item>
  </channel>
</rss>
