All Insights
#MCP
September 2026

Sunday Coffee & Code: The Bulb That Said No (and some OpenSpec)

I'm building an agent that acts in the physical world - simple one out of the gate, turns the porch light on when I'm nearly home taking into account the time of day, how light it is and the weather. Before anything can decide when, something has to be able to turn the light on at all. So this weekend was the smallest piece: giving a future agent a way to talk to one WiZ bulb.

By Steve Harris

๐—ฆ๐˜‚๐—ป๐—ฑ๐—ฎ๐˜† ๐—–๐—ผ๐—ณ๐—ณ๐—ฒ๐—ฒ & ๐—–๐—ผ๐—ฑ๐—ฒ: ๐—ง๐—ต๐—ฒ ๐—•๐˜‚๐—น๐—ฏ ๐—ง๐—ต๐—ฎ๐˜ ๐—ฆ๐—ฎ๐—ถ๐—ฑ ๐—ก๐—ผ (๐—ฎ๐—ป๐—ฑ ๐˜€๐—ผ๐—บ๐—ฒ ๐—ข๐—ฝ๐—ฒ๐—ป๐—ฆ๐—ฝ๐—ฒ๐—ฐ)

Iโ€™m building an agent that acts in the physical world - simple one out of the gate, turns the porch light on when Iโ€™m nearly home taking into account the time of day, how light it is and the weather. Before anything can decide when, something has to be able to turn the light on at all. So this weekend was the smallest piece: giving a future agent a way to talk to one WiZ bulb.

To get that done Claude and I added an MCP interface to the bulb. The bulb speaks over UDP, mostly useless to an agent, because thereโ€™s nothing to call. I didnโ€™t need to write that part: Stephan Traub pywizlight) already speaks it, so the job was an MCP server on top - eight named tools with typed arguments. Whatever speaks to the bulb underneath, that surface doesnโ€™t change.

I also swapped GitHubโ€™s spec-kit for OpenSpec to see how it felt on a small real project. It bought me what the SDD approaches are good at - arguing with myself before writing code - the contract for โ€œread the lightโ€™s stateโ€ is what surfaced the question of what happens when the bulb is off, which produced the polling design. Overall experience was that OpenSpec to completed code plus harness consumed 49% of my session capacity (Opus 5 on medium) and 6% of my weekly model capacity.

Then I pointed it at the real bulb. Reads worked immediately. Every write failed: error -32602, Invalid params - not โ€œmethod not found.โ€ The bulb knew exactly what I was asking. It wanted the command signed, and the library sends no signature at all. I nearly wrote the weekend up as a well-specified read-only lightbulb. The actual ๐—ณ๐—ถ๐˜… ๐˜„๐—ฎ๐˜€ ๐—ณ๐—ผ๐˜‚๐—ฟ ๐˜๐—ฎ๐—ฝ๐˜€: ๐—ช๐—ถ๐—ญ ๐—ฎ๐—ฝ๐—ฝ โ†’ ๐—ฆ๐—ฒ๐˜๐˜๐—ถ๐—ป๐—ด๐˜€ โ†’ ๐—ฆ๐—ฒ๐—ฐ๐˜‚๐—ฟ๐—ถ๐˜๐˜† โ†’ โ€๐—”๐—น๐—น๐—ผ๐˜„ ๐—ฎ๐—น๐—น ๐—ฐ๐—ผ๐—ป๐˜๐—ฟ๐—ผ๐—น๐˜€.โ€ Thirty checks out of thirty against real hardware, without changing a line of code. (๐˜”๐˜ฆ๐˜ด๐˜ด๐˜ข๐˜จ๐˜ฆ ๐˜ด๐˜ฆ๐˜ค๐˜ถ๐˜ณ๐˜ช๐˜ต๐˜บ ๐˜ฐ๐˜ฏ ๐˜ข ๐˜ญ๐˜ช๐˜จ๐˜ฉ๐˜ต๐˜ฃ๐˜ถ๐˜ญ๐˜ฃ - ๐˜ข๐˜ฎ๐˜ข๐˜ป๐˜ช๐˜ฏ๐˜จ ๐˜ต๐˜ฆ๐˜ค๐˜ฉ ๐˜ต๐˜ฐ ๐˜ด๐˜ฆ๐˜ฆ.)

Next week will be the agent build, monitoring my location and managing the bulb.

Remember: Think, Model, Act (back to tea this weekend).

Want to Discuss This Topic?

Steve is always happy to have a direct conversation.