GitShow/kentcdodds/kody-home-connector
kentcdodds

kody-home-connector

MCP Server for my home

by kentcdodds
Star on GitHubForknpm

TypeScript

4 stars0 forks4 contributorsActive · 5d agoSince 2026

Meet the team

See all 4 on GitHub →
kentcdodds
kentcdodds75 contributions
cursoragent
cursoragent8 contributions
kody-bot
kody-bot4 contributions
devin-ai-integration[bot]Bot
devin-ai-integration[bot]3 contributions

Languages

View on GitHub →
TypeScript99.1%
JavaScript0.5%
Shell0.4%
Dockerfile0%

Commit activity

Last 12 weeks · 52 commits

Full graph →

Community health

1 of 6 standards met

Community profile →
28
✓README○License○Contributing○Code of Conduct○Issue Template○PR Template

Recent fixes

View closed PRs →
kentcdodds
Stop rotating home MCP refresh tokensMergedPR

Intent Investigate Kent’s MCP disconnect (, phase token exchange) and make this authorization server a reliable refresh issuer so Kody can renew without another consent pass. Findings (connector vs platform) This AS was already issuing and persisting refresh tokens. It is not a “no RT unless ” server, and tokens are not in-memory. The 2026-09-14 park hit home and mediarss at the same timestamp, which still points at a Kody-platform token-persistence / callback bug (#2328), not a home-only “forgot to issue RT” bug. After that fix, this connector could still orphan a client by rotating the RT before the new one is durably stored. Root cause split Must-fix-on-Kody-platform: losing an RT that this AS already returned (saveTokens replace, double callback remint). #2328 is that class of bug. Connector fix in this PR: stop rotating refresh tokens so a dropped refresh or a non-merging client cannot lose the only durable credential. Document that restart does not invalidate tokens when the NAS data volume is kept. Change Authorization-code exchange still always returns . Refresh grant mints a new access token and reuses the same refresh token (RFC 6749 rotation is optional). Each successful refresh slides that token's 30-day (Devin review) so an active client does not fall off the original grant date. Tests: always-issue RT without , refresh reuse, concurrent refresh, file-backed SQLite reopen, sliding expiry. Docs: durable OAuth store, no signing keys, volume-must-survive-recreate. Deploy Merge to publishes the image ( + ). The OAuth refresh-reuse fix is not live on until the NAS pulls that image and recreates the container with the existing volume. Do not omit the volume or existing tokens are wiped. Testing and    Summary by CodeRabbit Improvements Refresh tokens are now reused during renewal instead of being replaced, providing more consistent long-term authorization. Access tokens remain valid for 1 hour, while refresh tokens remain valid for 30 days. OAuth credentials persist across restarts and container image recreation when the data volume is retained. Added guidance on storage requirements, reauthentication scenarios, token revocation, and public MCP URL changes. Tests** Expanded coverage for token formats, expiration, reuse, concurrent refreshes, and persistence.

kentcdodds · 5d ago
kentcdodds
Fix court POWR ERR3 hard-fail and persist Roku adoptionMergedPR

Summary Two court AV reliability fixes. Does not change — that package keeps calling tools; transport and persistence live here. Bug 1 — POWR UNAVAILABLE hard-fail Optoma rejects while already on/warming ( / unavailable time). Court treated any non-unreachable error as fatal, so aborted even when already showed on. Fix: On power-command / unavailable-time, query . If observed state matches the request (/ for on, / for standby), continue HDMI → Sport Court Sonos TV → Roku without IR ( + ). IR only when power is still off or PJLink is unreachable. Hard-fail only when that IR path also fails. Bug 2 — Court Roku adoption lost on restart Roku adoption was in-memory only; PJLink/Sonos already persist. After restart, was null. could also show and because discovery flags leaked into connector adoption. Fix: Persist in SQLite, hydrate on startup, keep in sync with connector (discovery is not connector adoption). Verify on the court 1. Adopt Court Projector Roku if needed, restart the home-connector process, then — should still be set. 2. With the Optoma already on or warming, run — it should continue HDMI 1 / Sport Court Sonos TV / Roku (no projector-on IR hard-fail on ERR3). 3. Optional: after a fresh scan before adopt — both and false until . Risk Medium — court power path and Roku persistence/startup hydrate. Leave merge for Cole/Kent after court smoke. Test plan [x] green locally [ ] Court restart: survives [ ] while lamp already on/warming continues AV sequence    Summary by CodeRabbit New Features Roku devices are now persisted across restarts, including discovery, adoption, ignore status, and control settings. Roku devices remain available even when temporarily absent from discovery. PJLink projector controls now handle unavailable-time responses more reliably, avoiding unnecessary commands and using IR fallback when needed. Documentation Updated Roku persistence and deployment guidance. Tests Added coverage for Roku persistence and PJLink unavailable-time behavior.

kentcdodds · 1w ago
kentcdodds
Fix UBP/BDP Blu-ray IRCC power-off (BD1 toggle, not Bravia)MergedPR

UBP-X700 (and BDP-CE) accept Bravia TV PowerOff over IRCC with HTTP 200 but do not turn off. Patch confirmed the exact mapping (2026-09-13): / also use the BD1 toggle (there is no discrete player PowerOn). Nav / eject / home are unchanged. On / off behavior / : send twice (500ms gap) as belt-and-suspenders for the UBP/BDP confirm dialog. : WOL + one toggle so does not confirm power-off on a live unit. : single toggle. Image / NAS (Cole → Patch) Prod is ( at ). PRs now run Test Home Connector (this was main-only before, so nothing was merge-publishable from a PR check). Merge to publishes + . Run workflow on this branch publishes only — does not move prod . Please leave this open for Cole/Kent. Cole can ping Patch to re-smoke on UBP-X700 @ after a image is on the NAS.    Summary by CodeRabbit Bug Fixes Updated Sony Blu-ray power controls to use the BD1 toggle supported by UBP/BDP-CE players. Power-off now sends the toggle twice with a 500 ms interval; power-on sends it once, with wake-on-LAN where applicable. Prevented unsupported Bravia TV power codes from being used for Blu-ray players. Documentation Updated Blu-ray and theater tool descriptions to clarify power behavior, command codes, and player limitations. Clarified that TV-specific codes remain available only through TV command selection.

kentcdodds · 1w ago
Structured data for AI agents

Repository: kentcdodds/kody-home-connector. Description: MCP Server for my home Stars: 4, Forks: 0. Primary language: TypeScript. Languages: TypeScript (99.1%), JavaScript (0.5%), Shell (0.4%), Dockerfile (0%). Open PRs: 0, open issues: 0. Last activity: 5d ago. Community health: 28%. Top contributors: kentcdodds, cursoragent, kody-bot, devin-ai-integration[bot].

·@ofershap

Replace github.com with gitshow.dev